Добрый день, расскажите, пожалуйста, почему не срабатывает событие whenChanged, когда я меняю в UI значение переключателя, например. Вот здесь написано, что правило будет срабатывать на приход телеграм, но ничего про ручное изменение контрола - Быстрый старт работы с KNX на контроллере Wiren Board — Wiren Board
Здравствуйте.
Покажите пожалуйста:
- Свое правило
- Что в логах wb-rules? режим отладки не забудьте включить, на вкладке с устройствами.
- Какое устройство управляющее и какое управляемое? Какие контролы у них?
Понял. Соберу информацию ближе к выходным. С картинками. А пока вот еще дополнительная информация.
Когда приходит информация из KNX шины - контрол меняет состояние и правило whenChanged срабатывает - вижу по логам - вставил отладочные сообщения.
Видимо, вы меняете разные контролы - из KNX и из интерфейса.
Я рекомендую сравнить что публикуется в mqtt в обоих случаях. Ну и: если контрол readOnly - в него публиковать может только и исключительно сервис описанный в meta/driver контрола.
Точно нет. Всего один контрол.
В итоге я поступил следующим образом - добавил виртуальное устройство. Это решило проблему.
И все же - решил переоткрыть тему - мне не дает покоя этот вопрос ))
Вот больше деталей.
Есть KNX-контрол, настроил на нем групповой адрес, к которому привязал свойство блокировки клавиши на физической панельке.
Прописал в настройках групповой адрес (1/1/52)
вот, что вижу в панели “Устройства” WB
Когда переключаю temp_increase_lock
- телеграмы нормально уходят в шину - на физическом устройстве - меняется статус все ок.
В логах это выглядит так
|03-08-2025 13:11:37.042|DEBUG: Sent to knxd: to:1/1/52 tpdu(2):00 80|
|03-08-2025 13:11:34.076|DEBUG: Sent to knxd: to:1/1/52 tpdu(2):00 81|
Далее, для простоты объяснения - в правилах по определенному событию пытаюсь менять значение temp_increase_lock
- вот так
defineRule({
whenChanged: "my-virtual-TOSHIBA/xlock_increase_knx",
then: function (newValue, devName, cellName) {
getControl("temp_by_wall/temp_increase_lock").setValue(newValue);
}
});
или вот так
defineRule({
whenChanged: "my-virtual-TOSHIBA/xlock_increase_knx",
then: function (newValue, devName, cellName) {
dev["temp_by_wall/temp_increase_lock"] = newValue;
}
});
В итоге - телеграммы отсылаются в шину - физическое устройство реагирует. В логах все есть
|03-08-2025 13:37:06.944|DEBUG: Sent to knxd: to:1/1/52 tpdu(2):00 81|
|03-08-2025 13:37:06.331|DEBUG: Sent to knxd: to:1/1/52 tpdu(2):00 80|
но “ползунок” - в устройстве не меняется
Это создает неудобство, т.к. по сути происходит рассинхрон между значениями на физическом устройстве и в устройстве в WB. Можно, конечно, синхронизовать эти значения через вот эту настройку
но кажется, это не тот вариант
Да, вот еще - в каналах MQTT значение не меняется
Никто не подскажет?