Здравствуйте!
Через 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(" Кухня → " + 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);
}
});
Вопрос:
Как правильно реализовать обратную синхронизацию с Zigbee,
чтобы виртуальные переключатели K1...K8
в WB обновлялись
при срабатывании по кнопке / Home Assistant / MQTT?
Заранее спасибо!