Свет по датчику движения и уровню освещенности.



  • Помогите добавить к имеющемуся мультисценарию аналоговый датчик освещенности.

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

    const lamp = Device("ActorD", "Светильник", [
      {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5}
      ]); 
      
    const motion = Device("SensorD", "Датчик движения");  
    
    const script = {
      
        // Запустим сценарий, ЕСЛИ
        // флаг светильника Авто установлен 
        // и светильник не горит и есть движение - тогда включим лампу 
        // или светильник горит (чтобы выключить, так как режим Авто)
      
        check() {
            return ((lamp.auto == 1) && ((lamp.dval == 0) && (motion.dval == 1) || (lamp.dval > 0)));  
        },
        
        start() {
             this.addTimer("T1"); // Таймер нужно объявить, т к он участвует в функции onMotion
             
            if ((lamp.dval == 0) && (motion.dval == 1)) {
              // Cветильник не горит, движение есть  
              this.do(lamp, "aon");
            } else {
              // движения нет - взводим таймер, чтобы отключить 
              this.startTimer("T1", lamp.timeOff, "turnOff");       
            }
            // В любом случае следим за датчиком движения и светильником
            this.addListener(motion, "onMotion");
            this.addListener(lamp, "onLamp");
        },
        
        onMotion() {
           // Если движение прекратилось - взводим таймер
          if ((motion.dval==0) && (this.timer.T1 == "off"))  {
            this.startTimer("T1", lamp.timeOff, "turnOff");
          }  
            
           // Если движение возобновилось - сбрасываем таймер
          if ((motion.dval>0) && (this.timer.T1 == 'on'))  {
            this.stopTimer('T1');
          }  
        },
        
         onLamp() {
          // Светильник выключили другим способом или сбросили флаг Авто - выходим
           if ((lamp.dval==0) || (lamp.auto==0)) this.exit();
         },
         
        // Функция, которая сработает, когда таймер досчитает (нет движения в течение заданного времени) - отключаем и выходим
        turnOff() {
          this.do(lamp, "aoff");
          this.exit();
        }
    };


  • Вопрос пока снят переделал другой сценарий пока вроде работает
    /**

    • @name Свет по датчику движения АВТО с учетом аналоговой освещенности
    • @desc Включает светильник по датчику движения, отключает при отсутствии движения в течение заданного времени
    • @version
      */

    const lamp = Device("ActorD", "Светильник", [
    {"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":300},
    {"name":"takeDarkness", "note":"Учитывать освещенность", "type":"cb", "val":0},
    {"name":"levelDarkness", "note":"Порог освещенности", "type":"number", "val":5}
    ]);

    const motion1 = Device("SensorD", "Датчик движения");
    const lightSensor = Device("SensorA", "Датчик аналоговой освещенности");

    const script = {

    // Запустим сценарий, ЕСЛИ
    // флаг светильника Авто установлен 
    // и светильник не горит 
    // и есть движение - тогда включим лампу 
    // или светильник горит (чтобы выключить, так как режим Авто)
    //
    
    check() {
      return ((lamp.auto == 1) && ((lamp.dval == 0) && ((motion1.dval == 1))  && (!lamp.takeDarkness || (lightSensor.aval > lamp.levelDarkness)) || (lamp.dval == 1)));  
    },
    
    start() {
         this.addTimer("T1"); // Таймер нужно объявить, т к он участвует в функции onMotion
        
        if ((lamp.dval==0) && ((motion1.dval==1))) {
          // Cветильник не горит, движение есть  
          this.do(lamp, "aon");
        } else {
          // движения нет - взводим таймер, чтобы отключить 
          this.startTimer("T1", lamp.timeOff, "turnOff");       
        }
        // В любом случае следим за датчиком движения и светильником
        this.addListener(motion1, "onMotion");
        this.addListener(lamp, "onLamp");
    },
    
    
    onMotion() {
       // Если движение прекратилось - взводим таймер
      if (motion1.dval==0 && this.timer.T1 == "off")  {
        this.startTimer("T1", lamp.timeOff, "turnOff");
      }  
        
       // Если движение возобновилось - сбрасываем таймер
      if (motion1.dval==1 && this.timer.T1 == 'on')  {
        this.stopTimer('T1');
      }  
    },
    
     onLamp() {
      // Светильник выключили другим способом или сбросили флаг Авто - выходим
       if (lamp.dval==0 || lamp.auto==0) this.exit();
     },
     
    // Функция, которая сработает, когда таймер досчитает (нет движения в течение заданного времени) - отключаем и выходим
    turnOff() {
      this.do(lamp, "aoff");
      this.exit();
    }
    

    };


Авторизуйтесь, чтобы ответить