Управление вытяжным вентилятором

Вентилятор включается при сработке дискретного датчика (1 — сработка) и отключается через заданное время

Задача

Событие:
— Сработка любого дискретного датчика (движение, открытие двери …)

Выполнить:
— Включить вентилятор
— Выключить вентилятор через заданное время

Дополнительные условия:
1. Задавать время отключения в пользовательском интерфейсе в параметрах вентилятора.
2. Дать возможность отключить/включить автоматическое управление в пользовательском интерфейсе.

Скрипт

/** 
* @name Вентиляция по дискретному датчику 
* @desc Вентилятор включается при сработке дискретного датчика (1 - сработка) и отключается через заданное время
* Сценарий работает, если для устройства включен флаг АВТО
* @version 4
*/

const actor = Device("ActorD", "Вентилятор", [
  {"name":"timeOff", "note":"Отключить после сброса датчика через, сек", "type":"number", "val":5}
  ]); 
const sensor = Device("SensorD", "Датчик");  

startOnChange([sensor,actor], actor.auto && (actor.isOff() && sensor.isOn() || actor.isOn() && sensor.isOff()));  

script ({
    start() {
      this.addTimer("T1");  
         
      if (actor.isOff()) {
          actor.turnOnSaveAuto();
      } else {
        // взводим таймер, чтобы отключить 
        this.startTimer("T1", actor.getParam("timeOff"), "turnOff");       
      }
        // В любом случае следим за датчиком и вентилятором
        this.addListener(sensor, "onSensor");
        this.addListener(actor , "onActor");
    },
    
    onSensor() {
      if (sensor.isOff() && this.timer.T1 == "off")  {
        this.startTimer("T1", actor.getParam("timeOff"), "turnOff");
      }  
    
      if (sensor.isOn())  {
        this.stopTimer("T1");
      }  
    },
 
    onActor() {
      // выключили другим способом или сбросили авто - просто выходим
       if (actor.isOff() || !actor.auto) this.exit();
    },
  
    turnOff() {
      actor.turnOffSaveAuto();
      this.exit();
    }
});
Закрыть меню