HDB++ TANGO Archiving System

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
main

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


Это система архивирования TANGO, позволяет сохранять данные полученные с устройств в системе TANGO.
Здесь будет описана работа с Linux (TangoBox 9.3 на основе Ubuntu 18.04), это уже готовая система где все настроено.


О чем статья?


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

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


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


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


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

Где взять?


  • deb && sql
  • исходники
  • документация
  • образ TangoBox на базе Ubuntu

Архитектура


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


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


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


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 получаем архив данных интересующего нас атрибута.


Python


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


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


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


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


sudo python3.7 setup.py install

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


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

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


from hdbpp import HDBPP

if __name__ == '__main__':
    hdbpp = HDBPP()

    # Подключиться к серверу архивации и к БД с архивами.
    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.7 hdbpp.HDBPP

Ссылки


  • Исходные коды
  • Статья про Tango Controls

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


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

Источник: https://habr.com/ru/post/533040/


Интересные статьи

Интересные статьи

Мне было необходимо делать 2 раза в сутки бэкап сайта на «1С-Битрикс: Управление сайтом» (файлов и базы mysql) и хранить историю изменений за 90 дней. Сайт расположен на VDS под уп...
Привет, Хабр! Представляю вашему вниманию перевод статьи «5 Reasons You Should Stop Using System.Drawing from ASP.NET». Ну что ж, они таки сделали это. Команда corefx в конце концов соглас...
Возможность интеграции с «1С» — это ключевое преимущество «1С-Битрикс» для всех, кто профессионально занимается продажами в интернете, особенно для масштабных интернет-магазинов.
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...