Скрипт включения подсветки по датчику движения

выкладываю свой скрипт для включения освещения по датчику движения, с учётом восхода и захода солнца, а также условностями, типа если уже работает какое-то освещение
вдруг кому-то пригодится

var m = require("suncalc");
var suncalc = m.SunCalc;

//на сколько зажигать освещение
var timerSeconds = 20; 

//имя датчика
var motionDevName = "wb-msw-v3_194"; 

//чувствительность датчика
var motionThreshold = 50; 

//смещение относительно UTC, в часах
var timezoneOffset = +3; 

//имя девайса, который надо зажигать
var targetDevName = "virtual-koridor/pol"; 

//имена девайсов, при работе которых не надо зажигать
var conditionDevNames = ["virtual-koridor/kartina", "virtual-koridor/spot"]; 

/* координаты объекта */
var longitude = 37.319473;
var latitude = 55.871977;

var motion_timer_1_timeout_ms = timerSeconds * 1000;

defineRule(motionDevName + "/Current Motion", {
    whenChanged: motionDevName + "/Current Motion",
    then: function (newValue, devName, cellName) {
        if (newValue>motionThreshold) {
            var nowDate = new Date();
            var nowHours = nowDate.getHours() + timezoneOffset;
            var sunriseHours = suncalc.getTimes(new Date(), latitude, longitude).sunrise.getHours()+timezoneOffset;
            var sunsetHours = suncalc.getTimes(new Date(), latitude, longitude).sunset.getHours()+timezoneOffset;          
            var alreadyLight = false;
            var motion_timer_1_id = null;
            conditionDevNames.forEach(function(name){
              if (dev[name] === true) {
                alreadyLight = true;
              }
            })
        	if ((nowHours >= sunsetHours || nowHours <= sunriseHours) && alreadyLight === false) {
            	dev[targetDevName] = true;
              	if (motion_timer_1_id) {
                	clearTimeout(motion_timer_1_id);
              	}
              	motion_timer_1_id = setTimeout(function () {
                	dev[targetDevName] = false;
                	motion_timer_1_id = null;
              	}, motion_timer_1_timeout_ms);
        	}
        }
    },
});

чтобы это заработало, нужно в /etc/wb-rules-modules положить этот файлик (взят 26.05.2023 отсюда GitHub - mourner/suncalc: A tiny JavaScript library for calculating sun/moon positions and phases.)

suncalc.js (8,6 КБ)

там в начале правила идут переменные, которые позволят настроить поведение “под себя”

4 лайка