В итоге не получилось, т.к. невозможно понять какая именно кнопка была нажата…
Не получается отловить даже первое нажатие вЫкл (команда DALI: GO TO SCENE 0). Хотя в шлюзе она проходит чётко (дали монитор показывает команду сразу).
Так кнопка отправляет команду. Несколько кнопок вполне могут отправлять одну и ту же. Если команды настроенные в кнопках одинаковые - то и разделить их не получится.
Ну в мониторе дали я же вижу, что устройству a1 направлена команда go to scene 0. В монитор этот мониторит шину через шлюз, который через modbus tcp заведен в WB. То есть всё как будто бы рядом…
То есть каждый 15 мс в регистры записываете значения? А как обрабатывается изменение значения регистра? Я совсем не уверен что это хороший способ. Я бы записывал значение только и исключительно в том случае если там ненулевое, в обработчике.
Не думаю что опрос с помощью modbus_client - это хороший выбор для работы с быстро изменяющимися значениями.
Пока крутиться скрипт обнуления 57-го регистратора, отправляю команду GO TO SCENE 0 и сразу в консоли modbus_client смотрю что в 58-м
В любом случае, когда осознал, что невозможно определить, в каком помещении был нажат выключатель, то вся эта затея потеряла смысл…
Как я вижу, остаётся два варианта:
Писать хитрый скрипт правил, который будет ТОЛЬКО по изменению яркости светильника определять, что его хотят выключить. Но тут тоже будет затык, например с выключением из минимальной яркости. Невозможно понять, то ли светильник светит на минимальной яркости (например 144), то ли из минимальной яркости запущен GO. TO SCENE 0 и через fade time (144->0) светильник погаснет (именно этот сценарий я и пытаюсь отловить).
Другой вариант каким-то образом из-под линукса ВБ пробраться в дали монитор и парсить поток команд. Там-то как раз чётко видно какому устройству (светильнику) какую команду шлют
Не лучший подход. Как по мне “обнулять” надо только после появления значение, скрипт просто занимает шину командами, при этом шину целесообразно занять чтением.
Для того чтобы определять какой выключатель - они должны отправлять разные команды.
Ну как разные. Это стандартные команды протокола Dali. Просто шлётся пара устройство + команда. А тут получается команда проходит, а для какого устройства непонятно
Рекомендую добавить в шаблон и вызывать сброс счетчика только после того как значения будет прочитаны.
Но поведение этих регистров не слишком понятно (для меня) описано все ж. То есть оптимально - подписаться на все регистры и отследить что в них публикуется, после приема команды.
Получилось питоновским скриптом подцепить и распарсить стрим дали монитора! Как теперь наиболее грамотно завести это в ВБ? Думаем в сторону публикации из питона топиков в брокер, а в ВБ читать их через trackMqtt. Верно?