Управление светильниками по датчикам движения и датчикам открытия двери с учетом или без учета освещенности.
Свет по датчику движения
Событие:
— Сработка датчика движения
Выполнить:
— Включить свет
— Выключить свет через 3 минуты
/** * @name Свет по датчику движения (простой) * @desc Включает светильник по датчику движения, отключает через 3 мин * @version 4 */ const lamp = Device("ActorD", "Светильник"); const motion = Device("SensorD", "Датчик движения"); // Запустим сценарий при сработке датчика движения, если светильник не горит startOnChange([motion], motion.isOn() && lamp.isOff()); script ({ start() { lamp.on(); // взводим таймер, чтобы отключить this.startTimer("T1", 180, "turnOff"); }, // Функция, которая сработает, когда таймер досчитает - отключаем и выходим turnOff() { lamp.off(); // this.exit(); Эту команду можно не ставить, сценарий и сам завершится } });
Комментарий
Это простой сценарий. Время отключения светильника задано в тексте скрипта. И, соответственно, нет возможности менять это время конечным пользователем системы в процессе эксплуатации.
Свет по датчику движения с настройкой времени отключения
Событие:
— Сработка датчика движения
Выполнить:
— Включить свет
— Выключить свет через время
Дополнительные условия:
1. Дать возможность задавать время отключения в пользовательском интерфейсе в параметрах светильника.
/** * @name Свет по датчику движения * @desc Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени * Время задается параметром timeOff и доступно в UserInterface * @version 4 */ const lamp = Device("ActorD", "Светильник", [ {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5} ]); const motion = Device("SensorD", "Датчик движения"); // Запустим сценарий если сработал датчик движения, а светильник не горит // ИЛИ если движение прекратилось, а светильник горит startOnChange([motion], motion.isOn() && lamp.isOff() || motion.isOff() && lamp.isOn()); script ({ start() { this.addTimer("T1"); // Таймер нужно объявить, т.к. он участвует в функции onMotion if (motion.isOn()) { lamp.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()) this.exit(); }, // Функция, которая сработает, когда таймер досчитает (нет движения в течение // заданного времени) - отключаем и выходим turnOff() { lamp.off(); this.exit(); // Здесь команда exit нужна, так как сценарий имеет активных слушателей // и сам не завершится } });
Свет по датчику движения с учетом аналогового датчика освещенности
Включает светильник по датчику движения с учетом освещенности, отключает при отсутствии движения в течение заданного времени
Событие:
— Сработка датчика движения
Выполнить:
— Включить свет
— Выключить свет через время, заданное в параметрах светильника
Дополнительные условия:
1. Учитывать освещенность
2. Задавать время отключения в пользовательском интерфейсе в параметрах светильника.
3. Задавать порог освещенности в пользовательском интерфейсе в параметрах светильника.
/** * @name Свет по датчику движения с учетом аналогового датчика освещенности * @desc Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени. * Время задается параметром timeOff и доступно в UserInterface * Включение происходит при значении освещенности ниже или равной пороговой * Порог освещенности задается параметром light_threshold * @version 4 */ const lamp = Device("ActorD", "Светильник", [ {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5}, {"name":"light_threshold", "note":"Порог освещенности для включения", "type":"number", "val":20} ]); const motion = Device("SensorD", "Датчик движения"); const lightSensor = Device("SensorA", "Датчик освещенности (аналоговый)"); // Запустим сценарий при сработке датчика движения, если светильник не горит и освещенность ниже порога // ИЛИ если движение прекратилось, а светильник горит startOnChange([motion], motion.isOn() && lamp.isOff() && lightSensor.value <= lamp.getParam("light_threshold") || motion.isOff() && lamp.isOn()); script ({ start() { this.addTimer("T1"); if (motion.isOn()) { lamp.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()) this.exit(); }, // Функция, которая сработает, когда таймер досчитает (нет движения в течение заданного // времени) - отключаем и выходим turnOff() { lamp.off(); this.exit(); } });
Свет по датчикам открытия двери
Свет по двум датчикам открытия с учетом дискретного датчика освещенности.
Событие:
— Сработка любого датчика открытия двери
Выполнить:
— Включить свет
— Выключить свет через заданное время
Дополнительные условия:
1. Учитывать освещенность
2. Задавать время отключения в пользовательском интерфейсе в параметрах светильника.
3. Задавать порог освещенности в пользовательском интерфейсе в параметрах светильника.
/** * @name Свет по двум датчикам открытия с учетом дискретного датчика освещенности * @desc Лампа включается при сработке любого датчика открытия с учетом освещенности: 1 - темно, 0 - светло * Выключается через заданное время после закрытия или если стало светло * @version 4 */ const lamp = Device("ActorD", "Светильник", [ {"name":"timeOffgerkon", "note":"Светильник горит без движения, сек", "type":"number", "val":5} ]); const sensor1 = Device("SensorD", "Датчик открытия 1"); const sensor2 = Device("SensorD", "Датчик открытия 2"); const darkness = Device("SensorD", "Датчик освещенности (дискретный)"); // Запустим сценарий при сработке любого датчика открытия, если светильник не горит и темно // ИЛИ если стало светло, а светильник горит startOnChange([sensor1,sensor2,darkness], lamp.isOff() && darkness.isOn() && (sensor1.isOn() || sensor2.isOn()) || lamp.isOn() && darkness.isOff()); script ({ start() { this.addTimer("T1"); if (sensor1.isOn() || sensor2.isOn()) { lamp.on(); } else { // взводим таймер, чтобы отключить this.startTimer("T1", lamp.getParam("timeOffgerkon"), "turnOff"); } // В любом случае следим за датчиками и светильником this.addListener(sensor1, "onGerkon"); this.addListener(sensor2, "onGerkon"); this.addListener(darkness, "onDarkness"); this.addListener(lamp, "onLamp"); }, onGerkon() { // Если оба закрыты - взводим таймер if (sensor1.isOff() && sensor2.isOff() && this.timer.T1 == "off") { this.startTimer("T1", lamp.getParam("timeOffgerkon"), "turnOff"); } // Если опять открыли- сбрасываем таймер if (sensor1.isOn() || sensor2.isOn()) { this.stopTimer("T1"); } }, onLamp() { // Светильник выключили другим способом - просто выходим if (lamp.isOff()) this.exit(); }, onDarkness() { // Стало светло if (darkness.isOff()) this.turnOff(); }, turnOff() { // Сюда попадаем если все закрыто в течение заданного времени или стало светло - отключаем и выходим lamp.off(); this.exit(); } });
Свет по датчику движения с учетом автоматического режима (Авто)
Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени
Событие:
— Сработка датчика движения
Выполнить:
— Включить свет
— Выключить свет через время, заданное в параметрах светильника
Дополнительные условия:
1. Дать возможность пользователю самостоятельно включать/выключать автоматический режим работы светильника по датчику движения.
/** * @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(); } });
Комментарий
Все актуаторы (в том числе светильники) могут иметь «Автоматический режим»:
Этот режим (Авто) отображается в пользовательском интерфейсе специальным индикатором в левом нижнем углу.
Для включения/выключения автоматического режима необходимо долгим нажатием мышкой на устройстве вызвать окно свойств и на вкладке «Параметры» включить/выключить автоматический режим:
Такая возможность позволяет пользователю системы в любое время управлять автоматическим режимом.
Можно убрать галку «Автоматический режим» и сценарий по датчику движения (который показан выше) не будет включать светильник по сработке датчика движения.
Свет по датчику движения с учетом освещенности и с учетом автоматического режима (Авто)
Включает светильник по датчику движения с учетом дискретного датчика освещенности, отключает при отсутствии движения в течение заданного времени
Событие:
— Сработка датчика движения
Выполнить:
— Включить свет
— Выключить свет через время, заданное в параметрах светильника
Дополнительные условия:
1. Учитывать освещенность по дискретному датчику (темно/светло)
2. Дать возможность пользователю самостоятельно включать/выключать автоматический режим работы светильника по датчику движения.
3. После ручного включения/выключения светильника временно блокировать автоматический режим работы светильника по датчику движения.
4. Дать возможность пользователю самостоятельно настраивать параметры времени блокировки автоматического режима.
/** * @name Свет по датчику движения АВТО с учетом дискретной освещенности * @desc Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени * Учитывает дискретный датчик освещенности при включении - 1 - темно * если пользователем установлен флаг Учитывать освещенность * Сценарий работает, если для устройства включен флаг АВТО * @version 4 */ const lamp = Device("ActorD", "Светильник", [ {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5}, {"name":"takeDarkness", "note":"Учитывать освещенность", "type":"cb", "val":0} ]); const motion = Device("SensorD", "Датчик движения"); const darkness = Device("SensorD", "Датчик темноты"); startOnChange([motion,lamp], lamp.auto && (motion.isOn() && lamp.isOff() && (darkness.isOn() || !lamp.getParam("takeDarkness")) || 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(); } });