WB-MGE таймауты

Пытаюсь настроить работу home assistant с WB-MGE.
Схема подключения
home assitant -ethernet-> WB-MGE -rs485->WB-MR6C
конфигурация WB-MGE дефолтная (сменил только ip)

настройка home assitant
modbus:
name: hub1
type: rtuovertcp
host: 192.168.4.150
port: 20108
timeout: 5

switch:
platform: modbus
scan_interval: 5
coils:
- name: Switch1
hub: hub1
slave: 105
coil: 0

Напрямую по rs485 все работает нормально. Через WB-MGE - очень нестабильно: после отправки команды проходит несколько секунд прежде чем срабатывает реле. В логах home assitant полно сообщений о том, что не получен ответ от устройства при опросе и о том что не удалась запись за 5с. Таймауты не проичходят только при части попыток работы с устройством т.к. реле иногда срабатывает и состояние с него получается но гораздо реже чем настроенный период опроса.

Пооже home assitant генерит слишком мноо запросов. Кроме реле стои счетчик wb-map6s у которого опрашивается 12 значений. Пока идет опрос значений команды на реле не проходят.

knst, gопробуйте увеличить скорость MGE->RS-495 с 9600 до 115200 (не забудьте переконфигурировать устройства).

Спасибо. Попробую.
А есть понимание с чем связано это поведение?
Я очень сомневаюсь что home assistant одновремнно пытается общаться с несколькими устройствами через modbus - их модуль довольно старый и такое уже давно бы выловили и выстроили запросы в очередь (тем более что при работе напрямую через usb-rs485 адаптер проблема не возникает). Выглядит так что wb-mge отработав запрос , “подвисает” на какое-то время и не отвечает на следующие.
Может надо обновить прошивку (хотя я не нашел как это сделать ни в документации ни в интерфейсе) ?

wb-mge у меня 2 штуки, ведут себя одинаково. Т.е. проблема не в конкретной железке.

Скорее всего проблемы с драйвером wb-mqtt-serial, с его особенностью взаимодействия с WB-MGE. Прошивки для WB-MGE для обновления нет. В логах (/var/log/messages) у вас таймауты должны появляться при чтении случайных регистров. Я решал эту проблему, изменяя количество одновременно опрашиваемых регистров, уменьшением таймаутов, задержкой перед чтением, но периодически все равно ошибки возникают.

wb-mqtt-serial нет. С WB-MGE работает виртуалка под убунтой с установленным home assistnat.
wb-mqtt-serial могло бы быть решением, но как его собрать и поставить на убунту я не нашел…

Кажестся нашел проблему - wb-mge после обработки запроса какое-то время не может принять следующий. Влез в код home assistant и добавил 50мс задержки перед отправкой запроса, все заработло.

В документации нигде не сказано, что есть минимальное время между запросами. Т.е. либо это бага в прошивке wb-mge либо ограничение его аппаратной части. В любом случае неплохо бы о таких вещах писать в докмуентации.

1 Симпатия

knst, спасибо, что потратили время и, главное, успешно решили проблему!
К сожалению, это не какая-то известная “особенность”, поэтому это скорее повод для наших исследований, чем для исправления документации сейчас. Передам разработчикам.

Разработчики что-нибудь ответили? Практика показала, что задержка просто уменьшает вероятность напороться на проблему. У меня к wb-mge подключено 3 WB-MR6C и WB-MAP6S.
Все это опрашивается раз в 5секунд. За день 40-50 ошибок

Что-нибудь сажете? Год прошел, ни исправления ни комментариев…

Судя по всему ответа не предвидется и проблма MGE решаться не будт…

Нашел обходной путь - общаться с MGE не напрямую, а через socat (у него похоже своя очередь и переполнения очереди MGE не происходит)

может кому-то пригодится.
С MGE общается home assistant .
На виртуалке с ним (Ubuntu 16.04 ) поднимаю socat как сервис.

[Unit]
Description=Socat MGE-151
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/usr/bin/socat -d -d PTY,raw,ispeed=9600,ospeed=9600,parenb=0,cstopb=1,cs8,link=/home/homeassistant/serial/mge-151 tcp:192.168.4.151:20108
Restart=always
RestartSec=10


[Install]
WantedBy=multi-user.target

Дальше прописываю в home assistant

modbus:
  - name: WB-MGE151
    type: serial
    method: rtu
    port: /home/homeassistant/serial/mge-151
    baudrate: 9600
    stopbits: 2
    bytesize: 8
    parity: N