Как стать автором
Обновить

HDB++ TANGO Archiving System

Время на прочтение4 мин
Количество просмотров1.3K
main

Что такое HDB++?


Это система архивирования TANGO, позволяет сохранять данные полученные с устройств в системе TANGO.


Здесь будет описана работа с Linux (TangoBox 9.3 на основе Ubuntu 18.04), это уже готовая система где все настроено.


О чем статья?


  • Архитектура системы.
  • Как настроить архивирование.

У меня ушло ~ 2 недели чтобы разобраться в архитектуре и написать свои скрипты для python под это дело.


Для чего это нужно?


Позволяет хранить историю показаний Вашего оборудования.


  • Вам не нужно думать о том как хранить данные в БД.
  • Нужно только указать какие атрибуты с какого оборудования архивировать.

Где взять?



Архитектура


image


Здесь две самые важные вещи — это Archiver и Archiving DB. HDB++ Configuration графическая утилита для управления Archiver. HDB++ Viewer утилита просмотра Archiving DB.


Archiver опрашивает наши Device Server-а и записывает историю в Archiving DB.
Archiver это такой же Device Server:


image


Archiving DB в нашей системе базируется на MySQL, она находится в докере tangobox-hdbpp.


image


Archiver


За архивацию отвечает archiving/hdbpp/eventsubscriber.1


image


Посмотрим список команд этого сервера.


image


На картинке список команд управления этим Device Server-ом


Здесь нас интересуют:


  • AttibuteAdd — добавить атрибут.
  • AttibutePause — поставить архивацию на паузу.
  • AttibuteRemove — удалить атрибут.
  • AttibuteStart — начать архивацию.
  • AttibuteStatus — состояние атрибута.
  • AttibuteStop — остановить архивацию.

Посмотрим через Jive список атрибутов за которыми следит Archiver:


jive

image


Дважды щелкаем на устройство.


image


Управнее этим Device Server-ом осуществляется через утилиту HDB++ Configuration, это графическая утилита которая отправляет выше показанные команды в archiving/hdbpp/eventsubscriber.1. Дальше будет показано как делать это программно.


HDB++ Configuration


hdbpp-configurator -configure

image


С помощью нее запускается/останавливается архивация и задаются параметры архивирования. Дважды щелкаем по атрибуту:


image


  • TTL — сколько дней будет длиться архивация истории.
  • absolute change — изменение атрибута в единицах.
  • relative change — изменение атрибута в процентах.
  • event period — если значения изменились, то записывать каждые мс.
  • Attibute polling period — записывать каждые мс.

Archiving DB


В ней нас будет интересовать БД hdbpp:


image


Также потребуется настроить доступ к БД, с какой машины и кому разрешено подключаться (Потому что изучать как система была уже настроена мне было лень, легче задать своего пользователя.):


docker exec -i -t 04e048 bash
mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'172.18.0.1' IDENTIFIED BY 'tango';
FLUSH PRIVILEGES;

Наша основная система имеет адрес 172.18.0.1, docker с БД находится на 172.18.0.7.


Теперь перейдем к структуре БД, здесь основная таблица att_conf. В ней прописаны атрибуты которые попали в систему архивации:


image


Здесь важные поля att_conf_id и att_conf_data_type_id. По att_conf_data_type_id из таблицы att_conf_data_type получим тип данных атрибута. Например scalar_devushort_ro, получив тип данных узнаем таблицу в которой хранится история. Имя таблицы будет att_scalar_devushort_ro, из этой таблицы по att_conf_id получаем архив данных интересующего нас атрибута.


Команда AttibuteAdd archiving/hdbpp/eventsubscriber.1 не добавляет запись о необходимом атрибуте в att_conf в отличие от команды добавления hdbpp-configurator. Поэтому пришлось делать это самому. Основная проблема найти тип атрибута (который хотим архивировать) в таблице att_conf_data_type, взять его id и записать его в att_conf/att_conf_data_type_id.


Ошибки


Так же случается что по каким-то причинам атрибуты не архивируются. Такие атрибуты попадают в AttributeNokList:


image


Посмотреть причину этого можно через hdbpp-configurator:





Здесь мы видим что наш Devise Server не запущен.


Python


Механизмы python для работы с HDB++.


Есть официальная библиотека для python2.7 для работы с HDB++ PyTangoArchiving. Разобраться с ней удалось только когда написал свою библиотеку. По ней не хватает документации, что передается в методы, какие типы данных, что передавать в аргументах (Это мое мнение).


Модуль создан для версии >= 3.6. Здесь все стандартные настройки для работы на TangoBox 9.3 заданы по умолчанию.


Установка модуля


sudo pip3 install -r requirements.txt
sudo python3 setup.py install

Зависимости:


  • mysql-connector>=2.2.9
  • pytango>=9.3.2

Как использовать


from hdbpp import HDBPP

if __name__ == '__main__':
    hdbpp = HDBPP()
    # семантика:
    # __init__(self, host="172.18.0.7", user="root", password="tango", database="hdbpp", 
    #    archive_server_name="archiving/hdbpp/eventsubscriber.1",
    #    server_default = "tango://tangobox:10000")

    # Подключиться к серверу архивации и к БД с архивами.
    if hdbpp.connect() == False :
        exit(0)

    # Получить историю атрибута за все время.
    archive = hdbpp.get_archive('tango://tangobox:10000/ECG/ecg/1/Lead')
    for a in archive:
        print(a)

    # Текущий статус архивации атрибута
    ret = hdbpp.archiving_status('tango://tangobox:10000/ECG/ecg/1/Lead')
    print(ret)

    # Добавить атрибут на сервер архивации
    hdbpp.archiving_add(['tango://tangobox:10000/ECG/ecg/1/Lead'])

    # Начать архивацию атрибута
    hdbpp.archiving_start('tango://tangobox:10000/ECG/ecg/1/Lead', 10 * 60 * 1000, 5 * 60 * 1000, 2, 1)
    # где:
    # 10 * 60 * 1000 - опрашивать и архивировать атрибут каждые мс
    # 5 * 60 * 1000 - архивировать атрибут каждые мс, если значение вышло за порог
    # 2 - порог изменения атрибута в единицах
    # 1 - порог изменения атрибута в процентах

    # Остановить архивацию атрибута
    hdbpp.archiving_stop('tango://tangobox:10000/ECG/ecg/1/Lead')

    # Закрыть соединение
    hdbpp.close()

Более подробная документация в коде.
Ее можно посмотреть например так:


pydoc3 hdbpp.HDBPP

Ссылки



Статью писал для себя, потому что спустя некоторое время начинаю забывать как и что делать.


Спасибо за внимание.

Теги:
Хабы:
+3
Комментарии2

Публикации

Истории

Работа

Python разработчик
141 вакансия
Data Scientist
63 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн