Плагины



  • intraHouse позволяет наращивать функционал системы за счет использования плагинов, которые могут быть созданы сторонними разработчиками без интеграции с ядром системы.

    Подробнее о плагинах можно почитать в документации
    Информация для разработчиков по концепции плагинов опубликована на github



  • Добрый день!
    Подскажите пожалуйста синтаксис для строки "формула расчета значения" в плагинах (сейчас конкретно о snmp, но используется во всех плагинах).
    Сейчас нужно сделать так: при получении любого значения (integer) присвоить каналу значение 1, иначе 0. Использую такую формулу: "(value > 0)?1:0", но она не обрабатывает ошибки. Как сбрасывать датчик в 0, если значение не найдено?
    Заранее спасибо!



  • Участник @homa написал в Плагины:

    Добрый день!
    Подскажите пожалуйста синтаксис для строки "формула расчета значения" в плагинах (сейчас конкретно о snmp, но используется во всех плагинах).
    Сейчас нужно сделать так: при получении любого значения (integer) присвоить каналу значение 1, иначе 0. Использую такую формулу: "(value > 0)?1:0", но она не обрабатывает ошибки. Как сбрасывать датчик в 0, если значение не найдено?
    Заранее спасибо!

    Добрый день!
    Можно использовать любое выражение, включая функции Javascript, в котором value - это полученное значение. Если нужно проверить, что пришло именно число, причем отличное от нуля, то:

    !isNaN(value) && value ? 1: 0
    

    isNaN - is Not a Number - возвращает true, если аргумент НЕ число

    Выражение проверяет, что поступившее значение число (не(!) не число) AND число отличное от нуля
    Если же "значение не найдено" имеется в виду не приходит совсем, то формула не поможет, нужно использовать механизм таймаута на устройстве, который взведет ошибку



  • @intrapro Спасибо!



  • Приветствую !
    Плагин WAGO. Наблюдается странное поведение. Плагин может "заснуть". Перестает реагировать на изменения переменных. Ошибки нет. Статус "запущен". Лечится через команду "обновить значения переменных" или "получить каналы с контроллера".
    Вопрос. Можно ли из сценария делать перезапуск плагина, или обновлять каналы ? Вопрос не только по плагину WAGO, по другим также актуально.
    Спасибо.



  • @fanagor, добрый день!

    Можно ли из сценария делать перезапуск плагина, или обновлять каналы ?

    Сейчас можно отправлять плагину из сценария любые команды, кроме перезапуска.
    Команды плагина прописаны в манифесте плагина в разделе "commands".
    Например:

    // Обновить значения переменных для плагина Wago IP
    this.plugincommand({ unit: 'wip1', command: 'getdata' });
    
    // Получить каналы с контроллера:
    this.plugincommand({ unit: 'wip1', command: 'channels' });
    

    По поводу перезапуска плагина, пока такой возможности нет.
    Рассматривается два варианта:

    1. Команды stop-start-restart из сценария
    2. Введение тайм-аута плагина, за которым следит сервер и перезагружает плагин, если от него не поступает сообщений в течение заданного тайм-аута.


  • @intrapro
    понятно, в 5-ой версии будет ?



  • @fanagor, в пятой будет точно. Возможно, что и в текущей добавим в следующем релизе



  • Добрый день.

    1. Написал на стороне контроллера wago аварийную программу. Если включен определённый выключатель, то переменные от плагина ih не принимаются, а состояния устройств изменяются по логике программы на стороне ПЛК. Но это ручной режим. Вопрос, можно ли на стороне wago отловить не поступление данных от плагина и сервера IH ? Не пингуется, отвалился, и тп.
    2. Modbus. Есть необходимость отделить часть устройств и завести их на отдельный преобразователь интерфейсов. Пробовал загрузить второй плагин modbus. Идея была на одном плагине один шлюз, на втором другой. На одном одни устройства, на другом другие. Настройки, скорость опроса, все разное. Не даёт. Точнее загрузился но не появился как новый. Есть такая возможность ?
    3. После перезагрузки сервера нужно руками перезапускать MySQL. Затем делать перезагрузку проекта. Сама база не стартует.
      Подскажете скрипт ? В сценарий запихать и запускать при перезагрузке.
      Спс.


  • Пользователь @fanagor написал в Плагины:

    Добрый день.

    1. Modbus. Есть необходимость отделить часть устройств и завести их на отдельный преобразователь интерфейсов. Пробовал загрузить второй плагин modbus. Идея была на одном плагине один шлюз, на втором другой. На одном одни устройства, на другом другие. Настройки, скорость опроса, все разное. Не даёт. Точнее загрузился но не появился как новый. Есть такая возможность ?

    Модбас однозадачный. К одному модбас устройству можно открыть одновременно один канал. Один клиент подключается к одному устройству и считывает/записывает все регистры.
    Одному клиенту дать один перечень регистров, второму - другой не получится.



  • По Modbus - можно запускать несколько экземпляров плагина. В терминологии modbus плагин IH является мастером, и их может быть сколько угодно. Подключение нескольких мастеров к одному клиенту определяется клиентом - сколько одновременно открытых соединений он разрешает. Многие контроллеры разрешают только одно подключение, но это не обязательно.
    Вопрос, так понимаю, о подключении к отдельному шлюзу - здесь не должно быть проблем. Новый экземпляр плагина добавляется кнопкой '+' - он заново не ставится, просто запускается новый процесс с другими настройками
    lotofplugins.png



  • @intrapro отлично, попробуем



  • Пользователь @fanagor написал в Плагины:

    Добрый день.

    1. Написал на стороне контроллера wago аварийную программу. Если включен определённый выключатель, то переменные от плагина ih не принимаются, а состояния устройств изменяются по логике программы на стороне ПЛК. Но это ручной режим. Вопрос, можно ли на стороне wago отловить не поступление данных от плагина и сервера IH ? Не пингуется, отвалился, и тп.

    Добрый день, потеря связи отслеживается библиотекой на контроллере и выполняется переподключение. Можно попробовать уменьшить таймаут TCP соединения на стороне сервера, так как по умолчанию с учетом проб keep-alive этот таймаут стандартно порядка 10 минут

    sudo sysctl -w net.ipv4.tcp_keepalive_intvl=15  // интервал между пробами=15 сек, по дефолту 75
    sudo sysctl -w net.ipv4.tcp_keepalive_probes=3  // количество проб=3, по дефолту 9
    

    Эти настройки влияют на все TCP соединения на сервере и сохранятся до перезагрузки. Если это поможет, можно будет прописать в конфиге sysctl

    Насколько часто происходит это зависание? Сервер и контроллер в одной сети?
    Можно попробовать установить Период синхронизации времени в параметрах плагина каждую минуту - две, тогда сервер будет постоянно слать время, и потерю связи можно будет увидеть.
    Но в целом ситуация странная, у себя мы пока ее воспроизвести не смогли.

    Modbus. Есть необходимость отделить часть устройств и завести их на отдельный преобразователь интерфейсов. Есть такая возможность ?

    Да, это абсолютно нормальный вариант использования. Ответ выше

    1. После перезагрузки сервера нужно руками перезапускать MySQL. Затем делать перезагрузку проекта. Сама база не стартует.
      Подскажете скрипт ? В сценарий запихать и запускать при перезагрузке.

    Нет, сценарий тут не нужен. База должна стартовать сама, это обеспечивается скриптами, которые ставятся при установке MySQL
    Какая у Вас ОС?
    Для начала проверьте в файле /etc/systemd/system/intrahouse-c.service последний блок, он должен быть таким (IH стартует после mysql)

    [Install]
    WantedBy=multi-user.target mysql.service
    


  • Пользователь @intrapro написал в Плагины:

    Нет, сценарий тут не нужен. База должна стартовать сама, это обеспечивается скриптами, которые ставятся при установке MySQL
    Какая у Вас ОС?
    Для начала проверьте в файле /etc/systemd/system/intrahouse-c.service последний блок, он должен быть таким (IH стартует после mysql)

    OC Ubuntu 18.04
    В файле все гуд ( WantedBy=multi-user.target mysql.service )
    Еще раз проверил, после отключения питания IH запускается а база нет.
    Делаешь sudo systemctl restart mysql, затем рестарт IH. База доступна.
    Изначально база криво могла встать ?



  • @fanagor, возможно, при запуске сервера что-то мешает MySQL запуститься.

    Сразу после перезагрузки, не запуская вручную, посмотрите статус службы:

     sudo systemctl status mysql -l
    

    Еще можно глянуть лог ошибок: /var/log/mysql/error.log



  • Пользователь @intrapro написал в Плагины:

    @fanagor, добрый день!

    Можно ли из сценария делать перезапуск плагина, или обновлять каналы ?

    Сейчас можно отправлять плагину из сценария любые команды, кроме перезапуска.
    Команды плагина прописаны в манифесте плагина в разделе "commands".
    Например:

    // Обновить значения переменных для плагина Wago IP
    this.plugincommand({ unit: 'wip1', command: 'getdata' });
    
    // Получить каналы с контроллера:
    this.plugincommand({ unit: 'wip1', command: 'channels' });
    

    По поводу перезапуска плагина, пока такой возможности нет.
    Рассматривается два варианта:

    1. Команды stop-start-restart из сценария
    2. Введение тайм-аута плагина, за которым следит сервер и перезагружает плагин, если от него не поступает сообщений в течение заданного тайм-аута.

    в сценарий добавил команду this.plugincommand({ unit: 'wip1', command: 'getdata' });
    лог плагина WAGO
    ошибка IH.png
    но ничего не происходит, переменные не обновляются. Из самого плагина кнопка обновить переменные стабильно работает. Что не так ? Вернее где ?



  • Пользователь @fanagor написал в Плагины:

    в сценарий добавил команду this.plugincommand({ unit: 'wip1', command: 'getdata' });
    лог плагина WAGO
    ошибка IH.png
    но ничего не происходит, переменные не обновляются. Из самого плагина кнопка обновить переменные стабильно работает. Что не так ? Вернее где ?

    Да, извините за неточность. В команде нужен еще любой канал контроллера. Так как плагин поддерживает подключение нескольких контроллеров, ему нужен любой канал, из него плагин извлекает идентификатор конкретного контроллера (часть после подчеркивания). Интерактивно вам тоже нужно выбрать строку в каналах, иначе команды нет в меню.

    // Обновить значения переменных для плагина Wago IP
    this.plugincommand({ unit: 'wip1', command: 'getdata', id:'STATUS_21C102'});
    


  • @intrapro, спасибо, теперь все работает.



  • Пользователь @intrapro написал в Плагины:

    Насколько часто происходит это зависание? Сервер и контроллер в одной сети?
    Можно попробовать установить Период синхронизации времени в параметрах плагина каждую минуту - две, тогда сервер будет постоянно слать время, и потерю связи можно будет увидеть.
    Но в целом ситуация странная, у себя мы пока ее воспроизвести не смогли.

    когда зависает вот что пишет отладчик плагина wago

    Завис wago.png

    Да, в одной сети, раз в сутки-двое виснет. Нет четкого времени.
    Лечится командой обновить значения с каналов или получить команды. Уже добавил в расписание сценарий. который раз в час обновляет.
    Но это костыль. Проблема то есть.



  • можно создать плагин для устройств бренда Miele? https://www.miele.com/developer/swagger-ui/index.html
    И конешно lg телевизоры https://youtu.be/f0i2R1cMWBg


Log in to reply