Итак, сегодня в рубрике “сову на глобус” представляю свой таймер. Вдруг кому пригодится. Как минимум зажигать свет по движению и продлевать горение, если кто-то все еще бродит, упрощает.
var TmrCnt = 0;
function makeVirtualTimer(deviceName, seconds) {
defineVirtualDevice(deviceName, {
title: {en: "Virtuall Timer " + deviceName + " " + seconds + " sec", ru: "Виртуальный таймер " + deviceName + " " + seconds + " сек" } ,
cells: {
enabled: {
title: {'en': 'Enabled', 'ru': 'Запущен'},
type: "switch",
value: false,
},
reset: {
title: {'en': 'Reset', 'ru': 'Сброс'},
type: "switch",
value: false,
},
state: {
title: {'en': 'Current count', 'ru': 'Текущее значение'},
type: "value",
value: seconds,
},
tmrValue: {
title: {'en': 'Timer Value', 'ru': 'Размер таймера'},
type: "value",
value: seconds,
},
},
});
defineRule(deviceName + "_timer_rule",
{
when: cron('@every 1s'),
then: function ()
{
if(dev[deviceName + "/enabled"] == true)
{
dev[deviceName + "/state"] -= 1;
if(dev[deviceName + "/reset"] == true)
{
dev[deviceName + "/reset"] = false;
dev[deviceName + "/state"] = dev[deviceName + "/tmrValue"];
}
if(dev[deviceName + "/state"] < 0)
{
dev[deviceName + "/enabled"] = false;
dev[deviceName + "/state"] = dev[deviceName + "/tmrValue"];
}
}
}
}
);
}
makeVirtualTimer("timer1", 10);
makeVirtualTimer("timerGoodByeAmerica", 30);
makeVirtualTimer("timerKladovka", 30);
Практическое применение c MSW:
//имя датчика
var motionDevName = "klad-msw";
//чувствительность датчика
var motionThreshold = 60;
//имя девайса, который надо зажигать
var LampVirtDevName1 = "bedroom_kladovka_light";
defineRule("motion_detector_kladovka_on", {
whenChanged: motionDevName + "/Current Motion",
then: function (newValue, devName, cellName) {
if (newValue > motionThreshold) {
dev["timerKladovka/enabled"] = true;
dev["timerKladovka/reset"] = true;
}
},
});
defineRule("motion_detector_kladovka_light_ctl", {
whenChanged: "timerKladovka/enabled",
then: function (newValue, devName, cellName) {
dev[LampVirtDevName1+"/state"] = dev["timerKladovka/enabled"];
},
});