Knx на testing

простенькое правило
defineRule(“temp_switch”, {
whenChanged: “wb-w1/28-03189779184e”,
then: function(newValue, devName, cellName) {
if ( newValue > 0) {
dev[“knx_interface/light1”] = true;
} if ( newValue < 0 ) {
dev[“knx_interface/light1”] = false;
}
}
});
телеграмма в линию уходит, актуатор исполняет, статус группового адреса меняется в UI, а кнопка группового адреса нет. почему?

Так, воспроизведу-ка.

Итак, устройство - светодиод на US.2
Имеет групповой адрес 1/1/65

В веб-интерфейсе отображается как “LED lamp” и имеет топик “/devices/USC/controls/LED”

Переключение “вручную” (включение-выключение) из веб-интерфейса:

mosquitto_sub -v -t /devices/USC/controls/LED/#
/devices/USC/controls/LED/meta {"max":1.0,"min":0.0,"order":1,"readonly":false,"title":{"en":"LED lamp"},"type":"switch"}
/devices/USC/controls/LED/meta/max 1
/devices/USC/controls/LED/meta/min 0
/devices/USC/controls/LED/meta/order 1
/devices/USC/controls/LED/meta/readonly 0
/devices/USC/controls/LED/meta/type switch
/devices/USC/controls/LED 0
/devices/USC/controls/LED/on 1
/devices/USC/controls/LED/on 0

При этом в топике KNX:

mosquitto_sub -v -t /devices/knx/#
/devices/knx/meta {"driver":"wb-mqtt-knx"}
/devices/knx/meta/name wb-knx
/devices/knx/meta/driver wb-mqtt-knx
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00
/devices/knx/controls/data/meta {"order":0,"readonly":false,"type":"text"}
/devices/knx/controls/data/meta/order 0
/devices/knx/controls/data/meta/readonly 0
/devices/knx/controls/data/meta/type text
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x01
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00

Пишем правило:

//12_29_test_03.js

defineVirtualDevice("testknx", {
    title: "testknx",
    cells: {
	LEDswitch: {
	    type: "switch",
	    value: false
	},
    }
});

defineRule("ChangeLEDswitch", {
  whenChanged: ["testknx/LEDswitch"], //при изменении
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    log.info("ChangeLEDswitch", newValue)
    dev["USC"]["LED"] = newValue;
  }
});

И да, телеграмма отправляется:

mosquitto_sub -v -t /devices/knx/#
/devices/knx/meta {"driver":"wb-mqtt-knx"}
/devices/knx/meta/name wb-knx
/devices/knx/meta/driver wb-mqtt-knx
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00
/devices/knx/controls/data/meta {"order":0,"readonly":false,"type":"text"}
/devices/knx/controls/data/meta/order 0
/devices/knx/controls/data/meta/readonly 0
/devices/knx/controls/data/meta/type text



/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x01
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x01
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x01
/devices/knx/controls/data i:5/1/2 g:1/1/68 GroupValueWrite 0x00

Но состояние самого элемента управления не меняется:

mosquitto_sub -v -t /devices/USC/controls/LED/#
/devices/USC/controls/LED/meta {"max":1.0,"min":0.0,"order":1,"readonly":false,"title":{"en":"LED lamp"},"type":"switch"}
/devices/USC/controls/LED/meta/max 1
/devices/USC/controls/LED/meta/min 0
/devices/USC/controls/LED/meta/order 1
/devices/USC/controls/LED/meta/readonly 0
/devices/USC/controls/LED/meta/type switch
/devices/USC/controls/LED 0
/devices/USC/controls/LED/on 1
/devices/USC/controls/LED/on 0
/devices/USC/controls/LED/on 1
/devices/USC/controls/LED/on 0

А ожидается его изменение.
То есть телеграмма с локальным исходящим не переключает элемент управления.

а дальше везде адрес 1/1/68 используется.
и фраза
" Но состояние самого элемента управления не меняется
А ожидается его изменение.
То есть телеграмма с локальным исходящим не переключает элемент управления"
означает что все правильно и положение контрола не должно меняться?

Да, 1/1/68 у меня используется как “статус” для этого актуатора. Просто подтвеждение что оно переключилось.
Архитектурно, вообще сам “переключатель” должен меняться при получении ответа от устройства. Но в knx ответ не предусмотрен, кроме "статуса. То есть - мы отправляем телеграмму и по умолчанию не знаем - приняло ли устройство ее (а вдруг шина оборвана?)
Вот сейчас обсуждаем как раз, устанавливать ли контрол в значение пришедшее в /on.

отображение кнопки и статуса в UI должно происходить как есть - телеграмма отправлена на вкл кнопки, кнопка изменила положение. если статус предусмотрен от исп устройства - он, получив телеграмму, меняет положение согласно значению телеграммы. если нет кнопки статуса, но контроллер отправляет телеграмму - кнопка должна менять положение, а что происходит на стороне knx можно шину смотреть и искать причину.
это в UI. а вот как это потом в визуализации будут обрабатывать - it depends. часто нажатие кнопки - один гр. адрес, состояние кнопки - другой.

Да, после 16 посовещаемся и, возможно, добавим адрс статуса для устройства. Ну и изменение при отправке, если статус не указан.
Огромная благодарность за конструктивный диалог, приятно когда мало того что указывают на ошибки - но и помогают их исправить!

Да, добавим опрос устройства сразу же после записи (а у вас включен-поддерживается, кстати?)


И если опрос выключен - запись сразу же в основной топик записанного в /on. Работа уже начата, завтра уже, скорей всего будет новая версия в testing, успеем до его заморозки.

Да, добавим реакцию на телеграммы “статус”.

Спасибо! с knx сейчас стало ГОРАЗДО удобнее работать!

всю команду WIRENBOARD с наступающим Новым годом!!!

1 лайк

для появления новой функции перейти с стайбл и обратно или apt update?

Да, обновлен пакет
wb-mqtt-knx/testing 1.4.0
Команды

apt update && apt upgrade -y

достаточно для обновления, не надо “переключаться”.

Спасибо!

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.