Свет по датчикам открытия двери

Свет по двум датчикам открытия с учетом дискретного датчика освещенности.

Задача

Событие:
— Сработка любого датчика открытия двери

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

Дополнительные условия:
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();
    }
});