EcoDim не проходит в WB команда dali GO TO SCENE 0

В итоге не получилось, т.к. невозможно понять какая именно кнопка была нажата…

Не получается отловить даже первое нажатие вЫкл (команда DALI: GO TO SCENE 0). Хотя в шлюзе она проходит чётко (дали монитор показывает команду сразу).

В общем пока решения нет😕

Так кнопка отправляет команду. Несколько кнопок вполне могут отправлять одну и ту же. Если команды настроенные в кнопках одинаковые - то и разделить их не получится.

Ну в мониторе дали я же вижу, что устройству a1 направлена команда go to scene 0. В монитор этот мониторит шину через шлюз, который через modbus tcp заведен в WB. То есть всё как будто бы рядом…

А что при этом в регистрах?

Data: 0x0000 - записали 0 в регистр 57
Data: 0x4000 - команда GO TO SCENE 14 (всем)
Data: 0x4001 - команда GO TO SCENE 0 (всем)

Но отрабатывают именно групповые команды. Индивидуальные вообще не отрабатывают.

После чтения ненулевого значения - в регистр записываете 0?

А регистры 60-63? Что в них при “индивидуальных командах”?

В правилах запускал такой цикл

intID = setInterval(function() {
   dev["ecodim_dali_gw2_2/comandCounter"] = 0;
   }, 15);

ecodim_dali_gw2_2/comandCounter — это как я понимаю и есть 57-й регистр.

В 60-63похоже ничего не меняется (отправлял go to scene 0 и go to scene 14)


root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r60 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3C][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><30><00>
SUCCESS: read 1 of elements:
        Data: 0x3000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r60 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3C][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><30><00>
SUCCESS: read 1 of elements:
        Data: 0x3000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r60 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3C][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><30><00>
SUCCESS: read 1 of elements:
        Data: 0x3000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r60 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3C][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><30><00>
SUCCESS: read 1 of elements:
        Data: 0x3000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r61 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3D][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><00>
SUCCESS: read 1 of elements:
        Data: 0x0000
root@wirenboard-A3LF34EU:~# 
modbus_client --debug -mtcp -a2 -c1 -r61 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3D][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><00>
SUCCESS: read 1 of elements:
        Data: 0x0000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r61 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3D][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><00>
SUCCESS: read 1 of elements:
        Data: 0x0000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r62 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3E][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><00>
SUCCESS: read 1 of elements:
        Data: 0x0000
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r63 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3F][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><06>
SUCCESS: read 1 of elements:
        Data: 0x0006
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r63 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3F][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><06>
SUCCESS: read 1 of elements:
        Data: 0x0006
root@wirenboard-A3LF34EU:~# modbus_client --debug -mtcp -a2 -c1 -r63 -t0x03 -o300 -p502 192.168.0.108
Connecting to 192.168.0.108:502
[00][01][00][00][00][06][02][03][00][3F][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><02><03><02><00><06>
SUCCESS: read 1 of elements:
        Data: 0x0006

То есть каждый 15 мс в регистры записываете значения? А как обрабатывается изменение значения регистра? Я совсем не уверен что это хороший способ. Я бы записывал значение только и исключительно в том случае если там ненулевое, в обработчике.

Не думаю что опрос с помощью modbus_client - это хороший выбор для работы с быстро изменяющимися значениями.

В 57 пишу. 58-й читаю. Но это всё не помогает, потому что невозможно определить какая кнопка нажата

Я вижу что в comandCounter просто пишется значение, вез какой-либо привязки к появлению данных.

“Кнопки” выдаю разные команды в шину?

Вот тут ведь описано:

Пока крутиться скрипт обнуления 57-го регистратора, отправляю команду GO TO SCENE 0 и сразу в консоли modbus_client смотрю что в 58-м

В любом случае, когда осознал, что невозможно определить, в каком помещении был нажат выключатель, то вся эта затея потеряла смысл…

Как я вижу, остаётся два варианта:

Писать хитрый скрипт правил, который будет ТОЛЬКО по изменению яркости светильника определять, что его хотят выключить. Но тут тоже будет затык, например с выключением из минимальной яркости. Невозможно понять, то ли светильник светит на минимальной яркости (например 144), то ли из минимальной яркости запущен GO. TO SCENE 0 и через fade time (144->0) светильник погаснет (именно этот сценарий я и пытаюсь отловить).

Другой вариант каким-то образом из-под линукса ВБ пробраться в дали монитор и парсить поток команд. Там-то как раз чётко видно какому устройству (светильнику) какую команду шлют

Не лучший подход. Как по мне “обнулять” надо только после появления значение, скрипт просто занимает шину командами, при этом шину целесообразно занять чтением.

Для того чтобы определять какой выключатель - они должны отправлять разные команды.

Ну как разные. Это стандартные команды протокола Dali. Просто шлётся пара устройство + команда. А тут получается команда проходит, а для какого устройства непонятно

Команда - в 58, устройство в 60-64 регистрах, разве нет?
Подпишитесь на топики да проверьте.

В шаблон DALI Bus Monitor, который выкладывали выше, добавить типа такие блоки?


{
                "name": "nomerUstroystva",
                "reg_type": "holding",
                "format": "u16",
                "address": 60,
                "read_period_ms": 15,
                "type": "value",
                "readonly": true
            }

Попробовал все 4 регистра с 60 по 64. В 60 статичное значение 12288, в остальных 0

Рекомендую добавить в шаблон и вызывать сброс счетчика только после того как значения будет прочитаны.
Но поведение этих регистров не слишком понятно (для меня) описано все ж. То есть оптимально - подписаться на все регистры и отследить что в них публикуется, после приема команды.

Получилось питоновским скриптом подцепить и распарсить стрим дали монитора! Как теперь наиболее грамотно завести это в ВБ? Думаем в сторону публикации из питона топиков в брокер, а в ВБ читать их через trackMqtt. Верно?

Да, это оптимальный способ, обычно.

Так? — Как передать или записать данные в базу данных или передать на мобильное приложения - #10 от пользователя Vyac