Свет по датчику движения
-
Мультисценарий
Управление светом по датчику движения с учетом режима Avto
/** * @name Свет по датчику движения АВТО * @desc Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени * Сценарий работает, если для устройства включен флаг АВТО * Если светильник переключили вручную, система сбрасывает АВТО (не зависимо от сценария) * Флаг АВТО будет восстановлен через заданное время, если это задано в параметрах устройства * Сам сценарий должен использовать команды переключения, которые сохраняют АВТО (turnOnSaveAuto) * @version 4 */ const lamp = Device("ActorD", "Светильник", [ {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5} ]); const motion = Device("SensorD", "Датчик движения"); // Запустим сценарий при сработке датчика движения, если светильник не горит // ИЛИ если движение прекратилось, а светильник горит // При этом флаг АВТО должен быть установлен! Если флаг сброшен - сценарий не работает // Чтобы при переключении флага auto сценарий сразу начинал работать, включим лампу в триггеры startOnChange([motion,lamp], lamp.auto && (motion.isOn() && lamp.isOff() || motion.isOff() && lamp.isOn())); script({ start() { this.addTimer("T1"); // Таймер нужно объявить, т.к. он участвует в функции onMotion if (motion.isOn()) { lamp.turnOnSaveAuto(); // Если просто дать команду on - АВТО будет сброшен. // Сейчас мы хотим сохранить АВТО } else { // движения нет - взводим таймер, чтобы отключить this.startTimer("T1", lamp.getParam("timeOff"), "turnOff"); } // В любом случае следим за датчиком движения и светильником this.addListener(motion, "onMotion"); this.addListener(lamp, "onLamp"); }, onMotion() { // Если движение прекратилось - взводим таймер if (motion.isOff() && this.timer.T1 == "off") { this.startTimer("T1", lamp.getParam("timeOff"), "turnOff"); } // Если движение возобновилось - сбрасываем таймер if (motion.isOn() ) { this.stopTimer("T1"); } }, onLamp() { // Светильник выключили другим способом или сбросили флаг Авто - выходим if (lamp.isOff() || !lamp.auto) this.exit(); }, // Функция, которая сработает, когда таймер досчитает (нет движения в течение // заданного времени) - отключаем и выходим turnOff() { lamp.turnOffSaveAuto(); this.exit(); } });