//light1_1.js //'use strict'; var grow_box = "test1_1"; // CHANGE_ME! имя устройства. Выводится в заголовок окна и служит для разделения устройств log.info("light_"+grow_box+"START######################"); //Это лог. var dimmer_light = "wb-mao4_17/Channel 1"; // CHANGE_ME! устройство-диммер То есть строка, которая определяет куда писать изменения мощности. var dimmer_zeroValue = 0; //"0" диммера var dimmer_maxValue = 10000; //100% диммера var ps = new PersistentStorage("storage_"+grow_box, {global: true});// Определим объект-хранилище. var sunraiseStartTime; //Время начала "рассвета" var sunraiseStopTime; //Время конца "рассвета" var sunsetStartTime;//Время начала "заката" var sunsetStopTime; //Длительность "заката" var light_increment = 0; //Глобальная для хранения приращения освещенности var setPointLight = (((ps["light_setpoint"])-1)*100).toString(); // уставка освещенности //var dimmer_increment = (dimmer_maxValue-dimmer_zeroValue)/400; //увеличение освещения в цикл расчетное на 0.25% var dimmer_increment = 100; //увеличение освещения в цикл 1% setTimeVariable(); //Элементы виртуального устройства //управления var deviceCells = { "Lamp power set" : { type : "range", value : dimmer_zeroValue, min : 0, max : 100 }, //Начало рассвета hh:mm "Sunraise (start) time": { type: "text", readonly: false, value: ps["sun_start_time"], }, //Длительность рассвета "Sunraise duration": { type: "text", readonly: false, value: ps["sun_start_duration"], }, //Начало заката hh:mm "Sunset (stop) time": { type: "text", readonly: false, value: ps["sun_stop_time"], }, //Длительность заката "Sunset duration": { type: "text", readonly: false, value: ps["sun_stop_duration"], }, "Light SetPoint": { type: "value", readonly: false, value: ps["light_setpoint"] }, sunraiseProcess : { type : "switch", value : false, }, sunsetProcess : { type : "switch", value : false, }, dayProcess : { type : "switch", value : false, }, }; //Создадим виртуальное устройство и добавим в него элементы defineVirtualDevice("light_"+grow_box, { title:"Light of "+grow_box, cells: deviceCells }); defineRule("Sunraise start time change", { //название правила whenChanged: "light_"+grow_box+"/Sunraise (start) time", //при изменении поля времени начала рассвета запишем его в хранилище then: function (newValue, devName, cellName) { //выполняй следующие действия log.info("light_"+grow_box+"/Sunraise start time ", newValue); //Это лог. Он попадает в /var/log/messages ps["sun_start_time"] = newValue; setTimeVariable(); } }); defineRule("Sunraise duration change", { //название правила whenChanged: "light_"+grow_box+"/Sunraise duration", //при изменении поля времени рассвета запишем его в хранилище then: function (newValue, devName, cellName) { //выполняй следующие действия log.info("light_"+grow_box+"/Sunraise duration", newValue); //Это лог. Он попадает в /var/log/messages ps["sun_start_duration"] = newValue; setTimeVariable(); } }); defineRule("Sunset start time change", { //название правила whenChanged: "light_"+grow_box+"/Sunset (stop) time", //при изменении поля времени начала ЗАКАТА запишем его в хранилище then: function (newValue, devName, cellName) { //выполняй следующие действия log.info("light_"+grow_box+"/Sunset (stop) time ", newValue); //Это лог. Он попадает в /var/log/messages ps["sun_stop_time"] = newValue; setTimeVariable(); } }); defineRule("Sunset duration change", { //название правила whenChanged: "light_"+grow_box+"/Sunset duration", //при изменении поля времени заката запишем его в хранилище then: function (newValue, devName, cellName) { //выполняй следующие действия log.info("light_"+grow_box+"/Sunset duration", newValue); //Это лог. Он попадает в /var/log/messages ps["sun_stop_duration"] = newValue; setTimeVariable(); } }); defineRule("Light SetPoint change", { //название правила whenChanged: "light_"+grow_box+"/Light SetPoint", //при уставки желаемой освещенности -запишем в хранилище then: function (newValue, devName, cellName) { //выполняй следующие действия log.info("light_"+grow_box+"/light_setpoint ", newValue); //Это лог. Он попадает в /var/log/messages ps["light_setpoint"] = ((newValue-1)*100).toString(); setPointLight = ((newValue-1)*100).toString(); } }); defineRule("dayProcess change", { //название правила whenChanged: "light_"+grow_box+"/dayProcess", // Для режима "День" then: function (newValue, devName, cellName) { //выполняй следующие действия if (newValue){ //Включаем "день" //log.info("light_"+grow_box+"/light_setpoint ", newValue); //Это лог. Он попадает в /var/log/messages dev["light_"+grow_box+"/sunraiseProcess"] = false; //Выключаем "рассвет" Таймер остановит правило "SunRaise_starter" //dev["light_"+grow_box+"/sunsetProcess"] = false; //Выключаем "закат" Таймер остановит правило "SunSet_starter" setPointLight = Number(ps["light_setpoint"]); // уставка освещенности }else{ //dev[dimmer_light] = dimmer_zeroValue; } } }); //* Статический сценарий defineRule("dayProcess_start", { //название правила whenChanged: "light_"+grow_box+"/sunraiseProcess", // Для режима "День" then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["sunraiseProcess"]==true)){ //если рассвет выключается dev[dimmer_light] += dimmer_increment; // то "день" включается } } }); defineRule("dayProcess_stop", { //название правила whenChanged: "light_"+grow_box+"/sunsetProcess", // Для режима "День" then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["sunsetProcess"]==true)){ //если рассвет выключается dev[dimmer_light] -= dimmer_increment; // то "день" включается } } }); defineRule("dayProcess change on", { //название правила whenChanged: "light_"+grow_box+"/sunraiseProcess", // Для режима "День" then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["sunraiseProcess"]==false)){ //если рассвет выключается dev["light_"+grow_box+"/dayProcess"] = true; // то "день" включается } } }); defineRule("start_day change", { //название правила whenChanged: "light_"+grow_box+"/Light SetPoint", //При изменении флага "день" - установим значения виртуального устройства. then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["dayProcess"]==true)&&(dev["light_"+grow_box]["sunraiseProcess"]==false)&&(dev["light_"+grow_box]["sunsetProcess"]==false)){// если сейчас нужен свет newValue = Number(newValue); //Приведем к числу dev["light_"+grow_box+"/Lamp power set"] = newValue; dev[dimmer_light] = newValue*100; }} }); defineRule("1start_day change", { //название правила whenChanged: "light_"+grow_box+"/Lamp power set", //При изменении флага "день" - установим значения виртуального устройства. then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["dayProcess"]==true)&&(dev["light_"+grow_box]["sunraiseProcess"]==false)&&(dev["light_"+grow_box]["sunsetProcess"]==false)){// если сейчас нужен свет newValue = Number(newValue); //Приведем к числу dev[dimmer_light] = newValue*100; }} }); defineRule("dayProces_day_change", { //название правила whenChanged: "light_"+grow_box+"/dayProcess", //При изменении флага "день" - установим значения виртуального устройства. then: function (newValue, devName, cellName) { //выполняй следующие действия if ((dev["light_"+grow_box]["dayProcess"]==true)){// если сейчас нужен свет newValue = Number(newValue); //Приведем к числу dev["light_"+grow_box+"/Lamp power set"] = dev["light_"+grow_box+"/Light SetPoint"]; dev[dimmer_light] = dev["light_"+grow_box+"/Light SetPoint"]*100; }} }); defineRule("start_sunset_change", { //название правила whenChanged: "light_"+grow_box+"/sunsetProcess", //При изменении флага "закат" - установим значения виртуального устройства. then: function (newValue, devName, cellName) { //выполняй следующие действия dev["light_"+grow_box]["dimmer_light"] = newValue; if ((dev["light_"+grow_box]["sunraiseProcess"]==true)||(dev["light_"+grow_box]["sunsetProcess"]==true)){// если сейчас нужен свет newValue = Number(newValue); //Приведем к числу if (newValue>setPointLight) { // Если текущая освещенность больше уставки //log.info("light_"+grow_box+"Light_measured BIG",newValue); if (dev[dimmer_light]>dimmer_zeroValue){ dev[dimmer_light] -= dimmer_increment; } } else{ // если меньше //log.info("light_"+grow_box+"Light_measured LOW",newValue); if (dev[dimmer_light]setPointLight) { // Если текущая освещенность больше уставки //log.info("light_"+grow_box+"Light_measured BIG",newValue); if (dev[dimmer_light]>dimmer_zeroValue){ dev[dimmer_light] -= dimmer_increment; } } else{ // если меньше //log.info("light_"+grow_box+"Light_measured LOW",newValue); if (dev[dimmer_light] sunraiseStartTime) && (d sunsetStartTime) && (d sunraiseStopTime) && (dNumber(ps["light_setpoint"])){ log.info("light_"+grow_box+"raiseTicker STOP ON setPointLight"); dev["light_"+grow_box+"/sunraiseProcess"] = false; //Выключаем "рассвет" Таймер остановит правило "SunRaise_starter" } if (setPointLight<0){ log.info("light_"+grow_box+"setTicker STOP ON setPointLight"); dev["light_"+grow_box+"/sunsetProcess"] = false; //Выключаем "закат" Таймер остановит правило "SunSet_starter" } if ((dev["light_"+grow_box+"/Lamp power set"]>dimmer_maxValue)||(dev["light_"+grow_box+"/Lamp power set"]