Подскажите, как сохранить состояние 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.
Вот есть такое предостережение в описании движка правил:
“Не следует использовать объект dev вне кода правил. Не следует присваивать значения параметрам через dev вне then-функций правил и функций обработки таймеров (коллбэки setInterval / setTimeout). В обоих случаях последствия не определены”
Весьма вероятно, что когда после перезагрузки создается виртуальное устройство, движок правил ничего еще не знает о wb-mio-gpio_191:2, так как не успел прочесть нужный топик.
Попробуйте инициализировать контрол switch вашего виртуального устройства через таймер, по прошествии нескольких секунд, когда движок правил будет знать об устройстве. Поскольку в текущей версии движка нет persistent-значений, можно при изменении сохранять их в файловую систему, а при инициализации считывать оттуда (не годится для часто меняющихся значений, но для выключателей – вполне).
Здравствуйте!
Есть ли способ в скрипте определить - создано ли, имеется ли вирт устройство или нет?
Мой скрипт создает вирт устройство и использует в работе его параметры. При создании я инициализирую некоторые из них. Если оно уже создано ранее, и пареметры уже выставлены, то нужно пользоваться теми, что стоят, не переопределять их.
Как мне узнать, что вирт. девайс уже есть?
так и делаю, это вроде работает. Но приходится думать о канале. чтобы там не оказалось 0. Т.к. на undefined и null несуществующий канал не реагирует. Он воспринимается, как false или 0. Получается, что у несуществующего канала вполне существующее значение.
дополнение:
еще пытаюсь обратиться к св-ву title - не получается. Не знаете как?
dev.device80.title не работает
Нужно ли переопределять вирт устройство, если оно уже создано и я, например, рестартую правила?
Опытным путем вижу, что если вирт девайс уже был, то его контролы читаются. Но не те, которые можно с вэбморды менять. Наверное, если его не создавать каждый раз, москито его не обрабатывает и не подписывается? Значит, нужно каждый раз создавать и не обращать внимание на морду?
Возможно ли создавать в скрипте виртуальное устройство с произвольным числом и именем полей? То есть я хочу, чтобы скрипт, в зависимости от введенных значений создавал вирт. устройство с указанным именем и полями.
Например, задаем массив нескольких объектов полей, а скрипт создает вирт. девайс с этими полями. Возможно ли такое сделать?