Есть какие ни будь подвижки в этом направлении? Стоит задача управлять светом по протоколу DALI.
Может есть проверенные контроллеры modbus - Dali, которые точно будет работать (кто-то из ваших клиентов-исталяторов использовал)? Можете порекомендовать?
Здравствуйте! Есть вполне рабочий шлюз EcoDim Modbus-Dali: Использование шлюза ECODim DALI GW2 с контроллером Wiren Board — Wiren Board.
В ближайшее время планируем сделать его поддержку “из коробки”.
Протокол DALI значит…записали в блокнот…
Да, только есть у этого шлюза одна особенность, здесь обсуждали:
https://support.wirenboard.com/t/privedenie-znachenij-v-shablonah-k-nuzhnomu-diapazonu/8320
Но в целом все работает прекрасно
Сейчас разрабатывается новая возможность в драйвере wb-mqtt-serial создавать канал с разными адресами для записи и чтения. Это должно позволить работать с регистрами типа “только запись” данного шлюза корректно.
Подскажите, когда наступит этот долгожданный момент? Сейчас на тесте есть этот шлюз. Хочу использовать его в текущем проекте. Но реализация из темы Приведение значений в шаблонах к нужному диапазону - #9 от пользователя Explorerol явно “хромает”. Может можно поучаствовать в тестировании, дал бы обратную связь.
Думаю, что недели через две можно будет что-нибудь потестировать. Сейчас собираем оборудование для тестового стенда.
Тогда может подскажете, как “выровнять” значения получаемые от шлюза?
в шаблоне так прописанно:
{
"name" : "A0_valRead",
"reg_type" : "holding",
"address" : 3004,
"type": "dimmer",
"scale" : 0.583,
"offset" : -48,
"format": "u16"
},
Вот это, думаю, не правильно. Варианты type
описаны здесь:
Попробовал так:
{
"name" : "A0_valRead",
"reg_type" : "holding",
"address" : 3004,
"type": "range",
"max": 100,
"min": 0,
"scale" : 0.583,
"offset" : -48,
"format": "u16"
},
Стало только хуже:
Секундочку, так вы же его и использовали в теме Приведение значений в шаблонах к нужному диапазону - #9 от пользователя Explorerol
Там я приводил пример, как задать параметр poll_interval через шаблон. Остальная часть была взята из шаблона пользователя: да, не доглядел.
Так в итоге, как можно сделать, что бы значения целые приходили?
Целые значения с коэффициентом 0.583? Немного непонятно, как с ним могут быть целые.
Ну может округление какое ни будь. Яндексу и Сири все равно на эти коэффициенты, они хотят целые числа от 0 до 100.
Округлить - можно и скриптом, ну и отдать внешнему сервису значения из виртуального устройства.
Но и в самом шаблоне тоже предусмотрен механизм, отлично описано тут:
Спасибо, в таком виде отрабатывает хорошо, за исключением выключение
"name" : "Channel 00",
"reg_type" : "holding",
"address" : 3004,
"type": "value",
"max": 100,
"min": 0,
"round_to": 1,
"scale" : 0.583,
"offset" : -48,
"readonly" : true,
"format": "u16"
Не подскажете, как лучше реализовать передачу нуля в устройство?
Попробуйте использовать:
"off_value": 0,
Попробовал, при 0 свет все равно горит (хоть и на минимальной яркости).
Еще обнаружил проблему в виде “прилета” значений из соседних регистров:
Данные в регистрах 3004 и 3009 (Запрос текущего уровня яркости индивидуального устройства) - “пляшут”. Мне кажется, они подтягиваются из “соседнего” регистра, т.е. если у меня нулевой светильник (адрес 3004) установлен на 23, а первый (адрес 3009) на 5, То в нулевой иногда прилетает 5, а держится 23. То же самое и с первым, только у него установлено 5, но иногда прилетает 23. Не сталкивались с таким поведением?
а если читаю этот объект через
modbus_client --debug -mrtu -b19200 -pnone -s1 /dev/ttyRS485-2 -a21 -t0x03 -r3004
то в ответ всегда приходит 0x00a0 (160 в десятичном), что верно. Тогда мне не понятно, почему wb-mqtt-serial получает другие, соседние значения??