Помогите пожалуйста написать правило.
Задача включать леты когда в зоне действия датчика появляется движение. Ленты должны выключается если движения нет 3-5 мин. Цвет лент хочется брать из самих модулей. потому что если прописать жестко то цвет будет всегда один и тот же. И если человек изменит цвет либо с телефона или с кнопки то правило берет цвет из модуля и включает именно тот цвет который там был.
Вот что сейчас.
// place your rules here or add more .js files in this directory
log(“add your rules to /etc/wb-rules/”);
defineRule(“msw3_Motion”, {
whenChanged: “wb-msw-v3_162/Max Motion”,
then: function(newValue, devName, cellName) {
if (newValue > 50) {
if (dev[“wb-msw-v3_162”][“Illuminance”] < 50) {
dev[“wb-mrgbw-d_201”][“RGB”] = “58;25;247”;
}
} else {
dev[“wb-mrgbw-d_201”][“RGB”] = “0;0;0”;
}
}
});
defineRule(“msw3_Motion1”, {
whenChanged: “wb-msw-v3_62/Max Motion”,
then: function(newValue, devName, cellName) {
if (newValue > 50) {
if (dev[“wb-msw-v3_62”][“Illuminance”] < 50) {
dev[“wb-mrgbw-d_93”][“RGB”] = “58;25;247”;
dev[“wb-mrgbw-d_93”][“White”] = 255;
}
} else {
dev[“wb-mrgbw-d_93”][“RGB”] = “0;0;0”;
dev[“wb-mrgbw-d_93”][“White”] = 0;
}
}
});
Сейчас вижу правило, которое устанавливает фиксированный цвет RGB на время пока MaxMotion больше 50.
Собственно задача делится на три части:
//01_19_test_04.js
var DimmersValues = new PersistentStorage("dimmers-values", { global: true }); //Объявить где-то в начале
function makeRuleForStoreDimmerValue(devDimmerName){ //создаем правила на изменения значения. Вызвать по разу для каждого диммера.
defineRule( "onChange"+devDimmerName, {
whenChanged: devDimmerName +"/RGB",
then: function (newValue, devName, cellName){
log.info("change NEW settings: ",newValue , "for", devName)
if (newValue !="0;0;0") { //если текущее не "нули" (диммер включен)
DimmersValues[devName] = newValue; //Сохраняем НОВОЕ значение в хранилище.
log.info("Save NEW settings: ",newValue , "for", devName)
log.info("read settings from storage: ",DimmersValues[devName])
}
}
});
}
function dimmerControl(devDimmerName, state){ //Программное включение и выключение диммера
if (state){
log.info(devDimmerName+"/RGB", DimmersValues.devDimmerName)
dev[devDimmerName+"/RGB"] = DimmersValues[devDimmerName]; //Включаем с сохраненным значением.
}
else{
dev[devDimmerName]["RGB"] = "0;0;0"; //ВЫключаем
}
}
makeRuleForStoreDimmerValue("wb-mrgbw-d_189"); //вызов для создания правила
log.info("start 01_19_test_04")
dimmerControl("wb-mrgbw-d_189", true); //Пример включения
dimmerControl("wb-mrgbw-d_189", false); //Пример вЫключения
Собственно используем в качестве каллбэка таймера именно функцию dimmerControl - и все. Любые изменения цвера элементом управления или кнопками - сохранятся в хранилище. Пи использовании функции для включения или включением кнопкой - восстановится прежний.