Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Автоматизация света и вытяжки в ванной по датчику движения и влажности (с использованием данных из sql)

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    711

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Автоматизация света и вытяжки в ванной по датчику движения и влажности (с использованием данных из sql)

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
12 Beiträge 6 Kommentatoren 6.2k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H Offline
    H Offline
    hawkeye
    schrieb am zuletzt editiert von
    #1

    Прошу помочь с написанием скрипта.

    Идея такая - анализировать изменение показаний датчика влажности и пока значение повышается держать включенными освещение и вытяжной вентилятор, как только значения начнут уменьшаться через 2 минуты всё выключить.

    Т.е. в моём понимании нужно взять два последних измерения, усреднить, сравнить с текущим значением, если текущее больше среднего за последние два раза - включить..

    Ну и видимо придётся по крону раз в минуту проверять и если началось снижение - выключить.

    Может быть уже такое написано - тогда очень прошу ткнуть куда смотреть.

    Сейчас я взять из доков функцию

    `var end = new Date().getTime();
    sendTo('sql.0', 'getHistory', {
      id: 'megadd.0.p31_P31_humidity',
      options: {
        start: end - 600000,
        end: end,
        аggregate: 'm4' // or 'none' to get raw values
      }
    }, function (result) {
      for (var i = 0; i < result.result.length; i++) {
        //console.log(result.result[i].id + ' Л ' + new Date(result.result[i].ts).toISOString());
        console.log('Rows: ' + JSON.stringify(result.result));
      }
    });`
    Но, поскольку я js дел не имел - сразу споткнулся с тем как взять из result цифровые значения....[/i][/i]
    
    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #2

      @hawkeye:

      Прошу помочь с написанием скрипта.

      Идея такая - анализировать изменение показаний датчика влажности и пока значение повышается держать включенными освещение и вытяжной вентилятор, как только значения начнут уменьшаться через 2 минуты всё выключить.

      Т.е. в моём понимании нужно взять два последних измерения, усреднить, сравнить с текущим значением, если текущее больше среднего за последние два раза - включить..

      Ну и видимо придётся по крону раз в минуту проверять и если началось снижение - выключить.

      Может быть уже такое написано - тогда очень прошу ткнуть куда смотреть.

      Сейчас я взять из доков функцию

      `var end = new Date().getTime();
      sendTo('sql.0', 'getHistory', {
        id: 'megadd.0.p31_P31_humidity',
        options: {
          start: end - 600000,
          end: end,
          аggregate: 'm4' // or 'none' to get raw values
        }
      }, function (result) {
        for (var i = 0; i < result.result.length; i++) {
          //console.log(result.result[i].id + ' Л ' + new Date(result.result[i].ts).toISOString());
          console.log('Rows: ' + JSON.stringify(result.result));
        }
      });`
      Но, поскольку я js дел не имел - сразу споткнулся с тем как взять из result цифровые значения....
      
      >! ~~[spoiler]~~`~~[code]~~/////////////Вентилятор в ванной/////////////////////////////
      var flag_ventilator;
      var timer_ventilator;
      setState('mqtt.0.myhome.Bathroom.Ventilator', false);
      on('mqtt.0.myhome.controller.DHT_humidity', function (obj) { //Влажность в ванной
          if (obj.newState.val > 58 && obj.oldState.val <= 58){
              setState('mqtt.0.myhome.Bathroom.Ventilator', true);
              flag_ventilator = true;
              log('Включаем вентилятор по влажности on');
          }
          else if (obj.newState.val < 54 && obj.oldState.val >= 54 && flag_ventilator){
              setState('mqtt.0.myhome.Bathroom.Ventilator', false);
              flag_ventilator = false;
              log('Выключаем вентилятор по влажности off');
          }
      });
      on('mqtt.0.myhome.Bathroom.Ventilator', function (obj) {
          if (!flag_ventilator  && (obj.newState.val === true || obj.newState.val === 'true')){
              log('Включаем вентилятор вручную');
              timer_ventilator = setTimeout(function() {setState('mqtt.0.myhome.Bathroom.Ventilator', false);log('Выключаем вентилятор по времени');}, 900000);
          }
          else if (obj.newState.val === false || obj.newState.val === 'false'){
              clearTimeout(timer_ventilator);
          }
      });[/code]`[/spoiler][/i][/i]
      ``` ` 

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • H Offline
        H Offline
        hawkeye
        schrieb am zuletzt editiert von
        #3

        Спасибо, но немного не то.

        В моём случае я хочу чтобы включение происходило по росту влажности, а не по абсолютному значению.

        Абсолютное значение по моим наблюдениям сейчас гуляет от 10 до 30%, летом думаю разбег будет ещё больше, но когда кто-то идёт в душ влажность по показаниям датчика в течении минуты повышается резко на 20-30%. По этому росту я хочу определять, что кто-то там ещё есть, несмотря на то, что от датчика движения нет сообщений, поскольку как только заходишь в душевую кабинку её стекла экранируют тепло от тела и датчик движения не работает.

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          instalator
          schrieb am zuletzt editiert von
          #4

          @hawkeye:

          Спасибо, но немного не то.

          В моём случае я хочу чтобы включение происходило по росту влажности, а не по абсолютному значению.

          Абсолютное значение по моим наблюдениям сейчас гуляет от 10 до 30%, летом думаю разбег будет ещё больше, но когда кто-то идёт в душ влажность по показаниям датчика в течении минуты повышается резко на 20-30%. По этому росту я хочу определять, что кто-то там ещё есть, несмотря на то, что от датчика движения нет сообщений, поскольку как только заходишь в душевую кабинку её стекла экранируют тепло от тела и датчик движения не работает. `
          а с чего ты решил что влажность все время будет увеличиваться по 20% до 1000? Влажность поднимется практичски сразу и будет по немногу падать после включения вентилятора.

          Высокий уровень Децибел вреден для здоровья!

          http://blog.instalator.ru/

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            hawkeye
            schrieb am zuletzt editiert von
            #5

            @instalator:

            а с чего ты решил что влажность все время будет увеличиваться по 20% до 1000? Влажность поднимется практичски сразу и будет по немногу падать после включения вентилятора. `
            Какие ещё 1000? См. график во вложении. (График слишком сглаженный, т.к. показания снимались каждые 5 минут).

            В целом собираюсь реализовать такай сценарий:

            1. чел входит в помещение душевой - срабатывает датчик движения, включает свет

            2. пока чел в душевой кабине датчик движение не работает - но влажность увеличивается, значит кто-то есть, соответсвенно свет гасить не нужно

            3. как только чел выходит из кабины - уже срабатывает датчик движения, а влажность постепенно начинает падать. За влажностью уже можно не следить - управлять светом по датчику движения.

            4. вентилятор планирую включать уже после выхода чела из душевой кабины, скажем через 5 минут на 5 минут или при превышении некоего порога. Нужны дополнительные испытания.

            Все эти телодвижения с влажностью нужны для учёта того, что кто-то есть в помещении.

            Соответсвенно по п.2 я задумался как проанализировать скорость роста значения. Использовать значения истории видится наиболее логичным. Просто следить за скоростью роста показания влажности. Судя по анализу тех графиков что имею - если скорость роста более 2% за минуту - явно кто-то решил "подушиться".

            Вобщем-то вроде процесс сдвинулся, если что - ещё спрошу.
            5570_2018-02-25-br-hum.png

            1 Antwort Letzte Antwort
            0
            • H Offline
              H Offline
              hawkeye
              schrieb am zuletzt editiert von
              #6

              Вот что получилось.

              megadd.0.p31_P31 - датчик влажности

              megadd.0.p32_P32 - датчик движения

              megadd.1.p25_P25 - реле света

              megadd.0.p8_P8 - реле вытяжки

              `var timer_vanna;
              var timer_vanna_vent;
              var flag_motion_vanna = false;
              var flag_hum = false;
              
              on({id: 'megadd.0.p32_P32', change: 'any'}, function (obj) { 
                      if (obj.newState.val === false){
                          flag_motion_vanna = true;
                          flag_hum = false;
                          clearTimeout(timer_vanna);
                          if (getState('megadd.1.p25_P25').val === false) {
                              setState('megadd.1.p25_P25', true);
                          }
                      }else if (obj.newState.val === true)
                      {
                          timer_vanna = setTimeout(function() {
                              flag_motion_vanna = false;
                              if (getState('megadd.0.p32_P32').val === true && flag_hum === false) {
                                  setState('megadd.1.p25_P25', false); 
                              } 
                          }, 40000);
                      }
              });
              
              schedule({second: [0, 20, 40]}, function () {
                  var end = new Date().getTime();
                  var DT1;
                  var DT = 0;
                  sendTo('sql.0', 'getHistory', {
                      id: 'megadd.0.p31_P31_humidity',
                      options: {
                      end: new Date().getTime(),
                      count: 10,
                      aggregate: 'onchange'
                      //аggregate: 'm4' // or 'none' to get raw values
                      }
                  }, function (result) {
                  DT1=0;
                  for (var i = 0; i < result.result.length; i++) {
                      //console.log(result.result[i].id + ' D= ' + new Date(result.result[i].ts).toISOString()+' V=' +result.result[i].val);
                      Hprev = result.result[i].val;
                      DT1=DT1+result.result[i].val;
                      //console.log('Rows: ' + JSON.stringify(result.result));
                  }
                  DT1=DT1/10;
                  Htek=getState('megadd.0.p31_P31_humidity').val;
                  DT=Htek-DT1;
                  //console.log('DT='+DT+'('+ Htek+'-'+DT1+')');
                  if (DT>=2 && flag_hum === false){
                          flag_hum = true;
                          console.log('flag_hum=true DT='+DT+'>2');
                          if (getState('megadd.1.p25_P25').val === false) {
                              setState('megadd.1.p25_P25', true);
                              console.log('Был выключен - включаю');
                          }
                  }
                  else if (DT<-1 && flag_hum === true) { 
                      flag_hum = false; 
                      console.log('flag_hum=false DT='+DT+'<-1');
                      if (flag_motion_vanna === false) {
                          console.log('Запуск таймера на отключение света');
                          timer_vanna = setTimeout(function() {
                              if (getState('megadd.0.p32_P32').val === true && flag_hum === false) {
                                  setState('megadd.1.p25_P25', false); 
                              }
                          }, 40000);
                      }
                  }
                  if (DT<-2) { 
                      console.log('DT='+DT+' Запуск таймера на выключение вытяжки');
                      setState('megadd.0.p8_P8', true); 
                      clearTimeout(timer_vanna_vent);
                      timer_vanna_vent = setTimeout(function() {
                          setState('megadd.0.p8_P8', false); 
                      }, 185000);
                  }
                  });
              });` [/i][/i][/i][/i][/i]
              
              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                Palko
                schrieb am zuletzt editiert von
                #7

                Добрый день.

                Кроме всего прочего, посмотрите в сторону микроволновых датчиков движения.

                Для них стеклянная перегородка не препятствие.

                iobroker+Beckhoff_BC9000+…

                1 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  algar
                  schrieb am zuletzt editiert von
                  #8

                  Подниму старую тему. Актуально для тех кто пользует InfluxDB.

                  Для себя проблему идентификации повышения\понижения температуры (ну или других показателей) и скорости таких изменений решил следующим скриптом

                  function getRate(id) {
                      var rate = 0;
                  
                      sendTo('influxdb.0', 'query', 'SELECT DERIVATIVE(mean(value), 1h) FROM \"'+id +'\" WHERE time > now() - 2h GROUP BY time(1h) fill(linear)', function (result) {
                      if (result.error) {
                          console.error(result.error);
                          rate=0;
                      } else {
                           var res=JSON.parse(JSON.stringify(result.result[0]));
                           if (typeof res[0]=="undefined") {rate=0} else {rate = Math.round(res[res.length-1].derivative*100)/100;} 
                           setState(id+'.tempDir1h', rate, true);
                      }
                  });
                  
                  }
                  
                  

                  данный скрипт использует стандартную функцую influxDB DERIVATIVE, которая возвращает скорость изменения показателя за указанный в параметре промежуток времени.

                  Скрипт берет данные из базы за последние 2 часа, усредняет их по часовым интервалам и возвращает скорость изменения за последний час. Отричательные значения говорят о снижении показателя, положительные об увеличении.

                  1 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    andrey99986
                    schrieb am zuletzt editiert von
                    #9

                    Тем кто ставит вентилятор в квартире в отверстие естественной вентиляции (ЕВ) имейте ввиду что выключенный вентилятор уменьшает тягу ЕВ в ~10 раз. Если у вас всего 2 таких отверстия одно на кухне, другое в ванной и в одно их них поставить вентилятор то можно сказать что вы в среднем ухудшили вентиляцию (за счёт вытяжки) в 2 раза для квартиры в целом. Для ванной вентиляция при выключенном ухудшится в ~10 раз.

                    Это легко проверяется датчиками CO2. Чтобы проветрить квартиру придётся не просто приоткрывать окно на маленькую щель, а делать сквозное проветривание.Так как тяги 1 лишь кухонной вытяжки не хватает. А если и в кухонной вытяжке поставили только периодически работающий вентилятор - то вообще всё плохо будет.

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      Pooh
                      schrieb am zuletzt editiert von
                      #10

                      У меня выключенный вентилятор крутиться от естественного потока (некоторые вентиляторы имеют клапан, да…)

                      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                      https://www.timestope.com/freepooh - witness code: freepooh

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        andrey99986
                        schrieb am zuletzt editiert von
                        #11

                        @Pooh:

                        У меня выключенный вентилятор крутиться от естественного потока (некоторые вентиляторы имеют клапан, да…) `

                        То что он крутится это не значит что пропускная способность канала не снизилась. А клапаны от ЕВ откроются только на сильном перепаде высот и в определённое время года. Если до крыши этажей меньше 4, а в доме теплей чем на улице менее 5 градусов - уверен что клапан даже не откроется.

                        Рассчитать это очень сложно, но замерив по факту производительность высокочувствительным датчиком потока или косвенно по уровню CO2 (при щелевом приоткрытом окне) - выводы делаются однозначные.

                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          Pooh
                          schrieb am zuletzt editiert von
                          #12

                          я имел в виду такой клапан:
                          2689_klapan.jpg
                          бывают и другие, жесткие на пружинках

                          совершенно бесполезная вещь, сразу снял

                          а так да, не спорю, естественная вентиляция через выключенную вытяжку хуже

                          тоже баловался с заданием разных условий, по факту остановился на таком режиме: горит свет - работает вытяжка

                          https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                          https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                          https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                          https://www.timestope.com/freepooh - witness code: freepooh

                          1 Antwort Letzte Antwort
                          0

                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                          Registrieren Anmelden
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          552

                          Online

                          32.7k

                          Benutzer

                          82.6k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe