Это делается намного проще:
defineRule("ZB_BUTTON_rule", {
whenChanged: "ZB_BUTTON/action",
then: function (newValue, devName, cellName) {
if (dev["ZB_BUTTON/action"] == "hold") {
dev["night_mode/night"] = !dev["night_mode/night"];
}
if (dev["ZB_BUTTON/action"] == "single") {
publish("zigbee2mqtt/ZB_SWITCH_ZAL/set", JSON.stringify({state: "TOGGLE" }));
}
dev["ZB_BUTTON/action"] = "none";
}
});
Можете и через switch/case сделать. Тут дело удобства.
Как только обработали action, пишем в него что угодно, кроме того, что обрабатываем.
И всё…