Виртуальные устройства


#1

Подскажите, как сохранить состояние switch триггеров после перезагрузки контроллера?
У меня они все переходят в положение ON, а хотелось бы их оставить в том положении, при котором они были до перезагрузки.
Вот пример:

defineVirtualDevice(“Air_Valve_Stroke_1_1”, {
title: “Air valve (Living room)”,
cells: {
‘open’ : {
type : “switch”,
value : dev[“wb-mio-gpio_191:2”][“DIR1”]
},
‘opening degree’ : {
type : “range”,
value : 0,
min : 0,
max : 90,
readonly: false
}
}
});

У реле dev[“wb-mio-gpio_191:2”][“DIR1”] положение вроде не меняется после перезагрузки, но
Air_Valve_Stroke_1_1/open становится всегда true.


назначил(а) ответственного Kilpio #2

#3

Добрый день, Stark!

Вот есть такое предостережение в описании движка правил:
“Не следует использовать объект dev вне кода правил. Не следует присваивать значения параметрам через dev вне then-функций правил и функций обработки таймеров (коллбэки setInterval / setTimeout). В обоих случаях последствия не определены”

Весьма вероятно, что когда после перезагрузки создается виртуальное устройство, движок правил ничего еще не знает о wb-mio-gpio_191:2, так как не успел прочесть нужный топик.

Попробуйте инициализировать контрол switch вашего виртуального устройства через таймер, по прошествии нескольких секунд, когда движок правил будет знать об устройстве. Поскольку в текущей версии движка нет persistent-значений, можно при изменении сохранять их в файловую систему, а при инициализации считывать оттуда (не годится для часто меняющихся значений, но для выключателей – вполне).