Добрый день,
Сделал правило для включения/выключения света при открытии ворот гаража и откатных ворот во двор с применением логики восход\закат через внешнее виртуальное устройство.
Управление светом у меня реализовано на HDL с которым WB общается через Iridium Server (тут крутиться вся визуализация) посредством MQTT.
Простое управление по WhenChanged с передачей топика по MQTT работает отлично. Я попробовал реализовать слежение за виртуальным устройством для переключения света и в зависимости от состояния (0 или 100 для HDL) записывать промежуточную переменную, а на основании её состояния позже выключать или нет свет во дворе.
По неизвестной причине скрипт wb-rules прекрасно читает положение виртуального переключателя день/ночь, но не читает значение из виртуального устройства с топиком типа value.
Подскажите куда копать?
Объявляю виртуальные устройства:
Спойлер
defineVirtualDevice(“sun_state”, {
title: “Sun status”,
cells: {
state: {
type: “switch”,
value: false,
},
}
});
defineVirtualDevice(“light”, {
title: “Light status”,
cells: {
garage: {
type: “value”,
value: 0,
},
parking: {
type: “value”,
value: 0,
},
}
});
Правило для управления:
Спойлер
defineRule(“Outside_light”,
{
whenChanged: [“wb-mrm2-mini_107/Button 2”,“wb-mrm2-mini_176/Button 1”,“wb-mrm2-mini_176/Button 2”],
then: function(newValue, devName, cellName)
{
var light_state = new PersistentStorage(“states”, {global: true});
log("Initial value "+light_state[“garage”]);
if (dev [“sun_state”][“state”] == false)
{
if ((dev[“wb-mrm2-mini_107”][“Button 2”] == false) || (dev[“wb-mrm2-mini_176”][“Button 1”] == false) || (dev[“wb-mrm2-mini_176”][“Button 2”] == false))
{
log("Intermidiate value Light Parking "+ dev[“light”][“parking”]);
if ((dev[“light”][“parking”] == 0) && (light_state[“garage”] == 0))
{
dev[“light”][“parking”] = 100;
light_state[“garage”] = 100;
log("Intermidiate value "+light_state[“garage”]);
}
}
if ((dev[“wb-mrm2-mini_107”][“Button 2”] == true) && (dev[“wb-mrm2-mini_176”][“Button 1”] == true) && (dev[“wb-mrm2-mini_176”][“Button 2”] == true) && (light_state[“garage”] == 100) )
{
dev[“light”][“parking”] = 0;
light_state[“garage”] = 0;
log("Switch off value "+light_state[“garage”]);
}
}
}
});