Zigbee 8-канальное реле: нет обратной связи в интерфейсе WB

Здравствуйте!

Через Zigbee2MQTT подключили 8-канальное реле. Управление с Wiren Board работает отлично — включаем/выключаем через UI, всё уходит в MQTT. Но столкнулись с проблемой: обратной связи в интерфейсе нет.

Когда нажимаем кнопку (физическую Zigbee-кнопку), реле действительно срабатывает — мы видим это в mosquitto_sub, в топике:

zigbee2mqtt/zb_8ch_kitchen_relay

…и там меняются поля state_l1, state_l2 и т.п.

Но в интерфейсе WB виртуальный switch (например, К1) не обновляется. То есть он “зависает” в старом состоянии.

Спойлер

/********************************************************************

  • Виртуальное устройство: Кухня — 8-канальное Zigbee-реле
    ********************************************************************/
    defineVirtualDevice(“vdev_zb_kitchen_8ch”, {
    title: “Кухня: 8-канальное реле”,
    cells: {
    K1: { type: “switch”, value: false, title: “Кухня. Верхний свет” },
    K2: { type: “switch”, value: false, title: “Столовая. Верхний свет” },
    K3: { type: “switch”, value: false },
    K4: { type: “switch”, value: false },
    K5: { type: “switch”, value: false, title: “Ванная. Верхний свет” },
    K6: { type: “switch”, value: false, title: “Бойлерная” },
    K7: { type: “switch”, value: false, title: “Ванная. Зеркало” },
    K8: { type: “switch”, value: false, title: “Вытяжка из кухни и бойлерной” }
    }
    });

// Управление кухонным реле
function controlKitchenRelay(channel, newValue) {
var payload = {};
payload[channel] = newValue ? “ON” : “OFF”;

publish(“zigbee2mqtt/zb_8ch_kitchen_relay/set”, JSON.stringify(payload), 2, false);
log(":plate_with_cutlery: Кухня → " + channel + ": " + (newValue ? “ON” : “OFF”));
}

// Правила управления каждым реле кухни
defineRule(“kitchen_relay_k1”, {
whenChanged: “vdev_zb_kitchen_8ch/K1”,
then: function(newValue) {
controlKitchenRelay(“state_l1”, newValue);
}
});
defineRule(“kitchen_relay_k2”, {
whenChanged: “vdev_zb_kitchen_8ch/K2”,
then: function(newValue) {
controlKitchenRelay(“state_l2”, newValue);
}
});
defineRule(“kitchen_relay_k3”, {
whenChanged: “vdev_zb_kitchen_8ch/K3”,
then: function(newValue) {
controlKitchenRelay(“state_l3”, newValue);
}
});
defineRule(“kitchen_relay_k4”, {
whenChanged: “vdev_zb_kitchen_8ch/K4”,
then: function(newValue) {
controlKitchenRelay(“state_l4”, newValue);
}
});
defineRule(“kitchen_relay_k5”, {
whenChanged: “vdev_zb_kitchen_8ch/K5”,
then: function(newValue) {
controlKitchenRelay(“state_l5”, newValue);
}
});
defineRule(“kitchen_relay_k6”, {
whenChanged: “vdev_zb_kitchen_8ch/K6”,
then: function(newValue) {
controlKitchenRelay(“state_l6”, newValue);
}
});
defineRule(“kitchen_relay_k7”, {
whenChanged: “vdev_zb_kitchen_8ch/K7”,
then: function(newValue) {
controlKitchenRelay(“state_l7”, newValue);
}
});
defineRule(“kitchen_relay_k8”, {
whenChanged: “vdev_zb_kitchen_8ch/K8”,
then: function(newValue) {
controlKitchenRelay(“state_l8”, newValue);
}
});

:question:Вопрос:

Как правильно реализовать обратную синхронизацию с Zigbee,
чтобы виртуальные переключатели K1...K8 в WB обновлялись
при срабатывании по кнопке / Home Assistant / MQTT?

Заранее спасибо!

Добрый день.

А что (какая часть скрипта) отслеживает публикации в в этот топик и переключает состояния виртуальных свичей?

Так вот я и спрашиваю, как сделать, у меня ника не получается, односторонка работает, как в скрипте, а как зеркалировать не могу придумать

Добрый день!

Насколько я вижу, у вас отсутствует обработка состояния, так как нет обработки MQTT-топика zigbee2mqtt/zb_8ch_kitchen_relay и соответствующего правила в wb-rules , которое обновляло бы виртуальные переключатели в интерфейсе Wiren Board.

Необходимо добавить правило с whenChanged , которое будет реагировать на изменение значения топика и устанавливать состояние (включено/выключено).

Подробнее о создании таких правил описано в данной статье.

1 лайк

Добрый день удалось ли решить вопрос?