Добрый день, установили заказчику wb 7, с несколькими реле wbmr6c для управления светом. настроили мастер выключатель на входе через простейшее правило (пока что стройка продолжается). Теперь как только у него пропадает электричество - правило перестает работать, и соответственно свет в доме не включить. Периодичность раз в 2-3 недели, остальное время все работает без замечаний. Подскажите в чем проблема?
defineVirtualDevice(“power_off”, {
title: “Мастер-выключатель”,
cells: {
power_off: {
type: “pushbutton”
},
}
});
var ps = new PersistentStorage(“power-storage”, { global: true });
var lights = [“wb-mr6c_205/K1”, “wb-mr6c_205/K3”, “wb-mr6c_205/K4”, “wb-mr6c_205/K5”, “wb-mr6c_205/K6”,
“wb-mr6c_207/K1”, “wb-mr6c_207/K2”, “wb-mr6c_207/K3”, “wb-mr6c_207/K4”, “wb-mr6c_207/K5”,
“wb-mr6c_244/K2”, “wb-mr6c_244/K4”,
“wb-mr6c_41/K3”
];
var isPowerOff = true;
defineRule({
whenChanged: [“wb-mr6c_207/Input 3 Single Press Counter”, “power_off/power_off”],
then: function (newValue, devName, cellName) {
if (isPowerOff) {
lights.forEach(function (light) {
ps[light] = dev[light];
dev[light] = false;
});
} else {
lights.forEach(function (light) {
dev[light] = ps[light];
});
}
isPowerOff = !isPowerOff;
}
});
Здравствуйте.
После перезагрузки контроллера проблема может быть связана с использованием объекта PersistentStorage
, который сохраняет данные, но не гарантирует их доступность в том виде, как ожидается, особенно если они не инициализированы правильно. Также важно убедиться, что правило корректно перезапускается вместе с контроллером.
- Инициализация
PersistentStorage
После перезагрузки данные, сохранённые в PersistentStorage
, могут быть недоступны. В таком случае перед первым использованием ps
необходимо проверить наличие данных.
Добавьте проверку и инициализацию:
lights.forEach(function (light) {
if (ps[light] === undefined) {
ps[light] = false; // Установить начальное значение
}
});
- Обработка события
Проверьте, чтобы событие whenChanged
ссылалось на существующие устройства и переменные. Например, убедитесь, что топик "wb-mr6c_207/Input 3 Single Press Counter"
существует и публикует значения.
- Очистка
PersistentStorage
Если требуется сброс PersistentStorage
при загрузке, добавьте код для очистки данных:
if (typeof ps.isInitialized === "undefined") {
ps.clear(); // Очистить данные
ps.isInitialized = true; // Установить флаг инициализации
}
- Логирование
Добавьте логи для проверки выполнения правил:
log("Power off rule triggered. Current state: " + (isPowerOff ? "Off" : "On"));
Прошу поделиться результатами
Здравствуйте.
Данная тема давно не была активной.
Удалось ли решить вопрос?