- Могу ли я вызвать функцию внутри объявленного правила и изменить значение контрола (виртуального и/или реального) прямо в самой функции?
Например, есть такой код и он схожий для разных зон:
defineAlias('stairs1_relay', "wb-mr6c_16/K1");
var light_stairs1_timer_id = null;
//Управнение светом на площадке 1 по датчику движения
defineRule({
whenChanged: ['stairs1_detector'],
then: function (newValue, devName, cellName) {
// если сработал датчик движения и освещение сумеречное и не период с 0 до 7
if ( !newValue ) {
if (!stairs1_relay) {
log("[Площадка 1эт]: Сработал датчик движения!");
stairs1_relay = true; // включаем свет на площадке 1эт
}
if (light_stairs1_timer_id) light_stairs1_timer_id = clearTimeout(light_stairs1_timer_id);
light_stairs1_timer_id = setTimeout(function() {
stairs1_relay = false;
light_stairs1_timer_id = null;
}, light_short_timer * 60000);
}
}
});
//Можно его оптимизировать так, вынеся колбэк в отдельную функцию?
defineRule({
whenChanged: ['stairs1_detector'],
then: function (newValue, devName, cellName) {
// если сработал датчик движения и освещение сумеречное и не период с 0 до 7
if ( !newValue ) {
if (!stairs1_relay) {
log("[Площадка 1эт]: Сработал датчик движения!");
stairs1_relay = true; // включаем свет на площадке 1эт
}
light_stairs1_timer_id = setTimer(stairs1_relay, light_stairs1_timer_id);
}
}
});
var setTimer = function(relay, timerId) {
if (timerId) timerId = clearTimeout(timerId);
timerId = setTimeout(function() {
dev[relayName] = false; // меняем контрол
timerId = null;
}, 3000, relayName);
return timerId;
- Как можно присвоить значения контролам устройств, которые после перезагрузки не сохраняют свои положения и требуется им присвоить значения виртуальных аналогов вне правил? Как это реализовать правильно?