Добрый день.
Не могу понять почему не срабатывает publish для управления zigbee розеткой.
Причём если отправлять команду через MQTT Explorer, то всё нормально работает.
Использую вот такой вот универсальный скрипт, который создаёт массив розеток из конфига:
log.info("Executing {}", module.filename);
var moduleName = module.filename;
defineVirtualDevice('Sockets', {
title: 'Розетки' ,
cells: createCells(ioMap.sockets)
});
function createCells(sockets){
var cells = {}
for(var propertyName in sockets) {
var definition = sockets[propertyName];
log.info("Creating socket {}[{}]".format(definition.title, definition.id));
cells[propertyName] = createSwitch(propertyName, definition);
}
return cells;
}
function createSwitch(propertyName, socketDefenition){
defineRule("socket_{}_rule".format(propertyName), {
whenChanged: "Sockets/" + propertyName,
then: function (newValue, devName, cellName) {
var topic = "zigbee2mqtt/" + socketDefenition.id + "/set";
var value = JSON.stringify({ state: newValue ? "ON" : "OFF"});
log.info("[{}] publish {} into {} [devName={}, cellName={}]", moduleName, value, topic, devName, cellName);
publish(topic, value);
}
});
return {
title: socketDefenition.title,
type: "switch",
value: false
};
}
Сам конфиг розеток выглядит вот так:
global.__proto__.ioMap = {
sockets: {
socket1: {
id : '0x70b3d52b6005e79d',
title: 'I-Гостинная-Гирлянда'
},
socket2: {
id: '0xa4c13887c0f4713e',
title: 'I-Кухня-Фартук'
},
socket3: {
id: '0x70b3d52b600b0bc1',
title: '0x70b3d52b600b0bc1'
},
socket4: {
id: '0xa4c1386bfd05e7b4',
title: '0xa4c1386bfd05e7b4'
},
socket5: {
id: '0xa4c138eed2e9ca2c',
title: '0xa4c138eed2e9ca2c'
},
socket6: {
id: ' 0xa4c13895eaf428cd',
title: ' 0xa4c13895eaf428cd'
},
socket7: {
id: '0xa4c138e0d65d9c53',
title: '0xa4c138e0d65d9c53'
},
socket8: {
id: '0xa4c1386387648c4f',
title: 'II-Спальня-Юг-Левая'
},
socket9: {
id: ' 0xa4c1383acf2eaa24',
title: 'II-Спальня-Юг-Правая'
}
}
....
В логе при нажатии на переключатель виртуального контрола всё нормально
12-09-2025 13:21:58.215 [wb-rules] INFO: [rule info] [/etc/wb-rules/sockets.js] publish {"state":"ON"} into zigbee2mqtt/0x70b3d52b6005e79d/set [devName=Sockets, cellName=socket1]
Но вот дальше до устройства команда не доходит. Если строчки из логов сунуть в MQTT Explorer, то оно нормально включается/выключается.
Из странного в логах контроллера много ошибок вида:
12-09-2025 13:21:54.894 [wb-rules] ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.PublishToken (&{{{{0 0} 0 0 {{} 0} {{} 0}} 0xf2a140 <nil>} 11488})
Повторяются примерно раз в 10 минут.

