выкладываю свой скрипт для включения освещения по датчику движения, с учётом восхода и захода солнца, а также условностями, типа если уже работает какое-то освещение
вдруг кому-то пригодится
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 КБ)
там в начале правила идут переменные, которые позволят настроить поведение “под себя”