Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Raumlüftung einzeln loggen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Raumlüftung einzeln loggen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 3 Kommentatoren 811 Aufrufe 2 Watching
  • Ä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.
  • M Offline
    M Offline
    martinschm
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

    Idealerweise mit einem Skript, das alle Fenstersensoren überwacht und das bei Änderungen dynamisch schaut, wie der Zustand der anderen Sensoren des gleichen Zimmer sind um zu ermitteln ob alle Sensoren zu sind (also das Lüften beendet wurde) oder ob mind. ein Sensor offen ist, das Lüften also beginnt.

    Wie kann ich mir zu einem Sensor den Raum holen, den er zu gewiesen ist und dann dazu alle Fenstersensoren dieses Raums ermitteln um dann da durch zu itterieren. Leider ist mein Verständnis der Selektoren und javascript da sehr begrenzt.

    Vielleicht kann mir da jemand mit ein paar Codesnipseln weiterhelfen.

    Falls sich jemand findet, vielen dank schonmal

    paul53P Chris 1C 2 Antworten Letzte Antwort
    0
    • M martinschm

      Hi,

      ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

      Idealerweise mit einem Skript, das alle Fenstersensoren überwacht und das bei Änderungen dynamisch schaut, wie der Zustand der anderen Sensoren des gleichen Zimmer sind um zu ermitteln ob alle Sensoren zu sind (also das Lüften beendet wurde) oder ob mind. ein Sensor offen ist, das Lüften also beginnt.

      Wie kann ich mir zu einem Sensor den Raum holen, den er zu gewiesen ist und dann dazu alle Fenstersensoren dieses Raums ermitteln um dann da durch zu itterieren. Leider ist mein Verständnis der Selektoren und javascript da sehr begrenzt.

      Vielleicht kann mir da jemand mit ein paar Codesnipseln weiterhelfen.

      Falls sich jemand findet, vielen dank schonmal

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @martinschm sagte: zu einem Sensor den Raum holen, den er zu gewiesen ist

      Wie ist der Raum zugewiesen? Dem Kanal oder nur dem Datenpunkt für den Fensterkontakt? Bitte Beispiel-Datenpunkt mit Baum zeigen!

      @martinschm sagte in Raumlüftung einzeln loggen:

      ein paar Codesnipseln

      Javascript oder Blockly?

      Beispiel Javascript für HM-Kontakte:

      const idsFenster = $('channel[state.id=*.STATE](rooms=wohnen)(functions=fenster)');
      const idDauer = '0_userdata.0.Wohnen.Fenster.Offendauer';
      const idLueften = '0_userdata.0.Wohnen.Fenster.Lueftung'; 
      
      var merker = false;
      var start = Date.now();
      
      idsFenster.on(function() {
          let offen = false;
          idsFenster.each(function(id) {
              if(getState(id).val) offen = true;
          });
          if(offen) {
              if(!merker) start = Date.now();
          } else {
              let dauer = Date.now() - start;
              setState(idDauer, formatDate(dauer, 'hh:mm:ss'), true);
          };
          merker = offen;
          setState(idLueften, offen, true);
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @martinschm sagte: zu einem Sensor den Raum holen, den er zu gewiesen ist

        Wie ist der Raum zugewiesen? Dem Kanal oder nur dem Datenpunkt für den Fensterkontakt? Bitte Beispiel-Datenpunkt mit Baum zeigen!

        @martinschm sagte in Raumlüftung einzeln loggen:

        ein paar Codesnipseln

        Javascript oder Blockly?

        Beispiel Javascript für HM-Kontakte:

        const idsFenster = $('channel[state.id=*.STATE](rooms=wohnen)(functions=fenster)');
        const idDauer = '0_userdata.0.Wohnen.Fenster.Offendauer';
        const idLueften = '0_userdata.0.Wohnen.Fenster.Lueftung'; 
        
        var merker = false;
        var start = Date.now();
        
        idsFenster.on(function() {
            let offen = false;
            idsFenster.each(function(id) {
                if(getState(id).val) offen = true;
            });
            if(offen) {
                if(!merker) start = Date.now();
            } else {
                let dauer = Date.now() - start;
                setState(idDauer, formatDate(dauer, 'hh:mm:ss'), true);
            };
            merker = offen;
            setState(idLueften, offen, true);
        });
        
        M Offline
        M Offline
        martinschm
        schrieb am zuletzt editiert von
        #3

        Hi @paul53 ,

        danke für dein Skript. Wenn ich das richtig interpretiere, werden alle Fenster (functions=fenster) in allen Räumen die (wohnen) zugeordnet sind selektiert.

        Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren und die durch itterieren.

        ebff2e78-2e2d-431a-a057-894516730624-image.png

        Ich hab den ganzen Kanal einem Zimmer zu geordnet und dazu bei Funktion eine mal Fenster dem ganzen Kanal (von früher noch) und spezifisch dem State für Offen noch die Funktion windowStatus, weil ich dies in einem anderen Skript speziell auswerte, das mir die offenen Fenster zählt.

        Javascript oder Blockly?

        Blockly ist einfacher, aber ich fuchs mich auch durch das javascript durch.

        paul53P 1 Antwort Letzte Antwort
        0
        • M martinschm

          Hi @paul53 ,

          danke für dein Skript. Wenn ich das richtig interpretiere, werden alle Fenster (functions=fenster) in allen Räumen die (wohnen) zugeordnet sind selektiert.

          Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren und die durch itterieren.

          ebff2e78-2e2d-431a-a057-894516730624-image.png

          Ich hab den ganzen Kanal einem Zimmer zu geordnet und dazu bei Funktion eine mal Fenster dem ganzen Kanal (von früher noch) und spezifisch dem State für Offen noch die Funktion windowStatus, weil ich dies in einem anderen Skript speziell auswerte, das mir die offenen Fenster zählt.

          Javascript oder Blockly?

          Blockly ist einfacher, aber ich fuchs mich auch durch das javascript durch.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren

          Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.

          Blockly_temp.JPG

          Funktion formatDiff(ms, format):

          return formatDate(ms, format);
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          M 1 Antwort Letzte Antwort
          1
          • paul53P paul53

            @martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren

            Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.

            Blockly_temp.JPG

            Funktion formatDiff(ms, format):

            return formatDate(ms, format);
            
            M Offline
            M Offline
            martinschm
            schrieb am zuletzt editiert von
            #5

            @paul53 said in Raumlüftung einzeln loggen:

            @martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren

            Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.

            Blockly_temp.JPG

            Funktion formatDiff(ms, format):

            return formatDate(ms, format);
            

            Ist es auch möglich, den Selector dynamisch zu erstellen ?

            Hatte überlegt, bei Änderung des windowstatus, den Raum des Sensors zu ermitteln und dann den Selector dynamisch mit dem Raumnamen zu versehen.

            function listWindows(room) {
            
                const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                log("Aktion in Raum " + room);
            
                idsFenster.each(function(id) {
                    //if(getState(id).val) offen = true;
                    log("Fenster im Raum " + id + " " + idsFenster[id]);
                });  
            }
            
            function registerSubscription()
            {
            $('state(functions=windowstatus)').on(function(obj) {
            //RaumErmitteln(obj);
                log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames);
                listWindows (getObject(obj.channelId,"rooms").enumNames);
            });
            }
            

            Die Ermittlung des Raums klappt und wird auch korrekt übergeben. Ich bekomme dann aber keine Auflistung der Fenster ausgegeben. Ist bei meinem Selektor etwas falsch ?

            paul53P 2 Antworten Letzte Antwort
            0
            • M martinschm

              @paul53 said in Raumlüftung einzeln loggen:

              @martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren

              Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.

              Blockly_temp.JPG

              Funktion formatDiff(ms, format):

              return formatDate(ms, format);
              

              Ist es auch möglich, den Selector dynamisch zu erstellen ?

              Hatte überlegt, bei Änderung des windowstatus, den Raum des Sensors zu ermitteln und dann den Selector dynamisch mit dem Raumnamen zu versehen.

              function listWindows(room) {
              
                  const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                  log("Aktion in Raum " + room);
              
                  idsFenster.each(function(id) {
                      //if(getState(id).val) offen = true;
                      log("Fenster im Raum " + id + " " + idsFenster[id]);
                  });  
              }
              
              function registerSubscription()
              {
              $('state(functions=windowstatus)').on(function(obj) {
              //RaumErmitteln(obj);
                  log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames);
                  listWindows (getObject(obj.channelId,"rooms").enumNames);
              });
              }
              

              Die Ermittlung des Raums klappt und wird auch korrekt übergeben. Ich bekomme dann aber keine Auflistung der Fenster ausgegeben. Ist bei meinem Selektor etwas falsch ?

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @martinschm
              .enumNames liefert ein Array. Deshalb

                  listWindows (getObject(obj.channelId,"rooms").enumNames[0]);
              

              Außerdem muss der Name exakt so geschrieben wie in der ID der Aufzählung (Groß- / Kleinschreibung). Beispiel ID: enum.rooms.Arbeitszimmer

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              M 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @martinschm
                .enumNames liefert ein Array. Deshalb

                    listWindows (getObject(obj.channelId,"rooms").enumNames[0]);
                

                Außerdem muss der Name exakt so geschrieben wie in der ID der Aufzählung (Groß- / Kleinschreibung). Beispiel ID: enum.rooms.Arbeitszimmer

                M Offline
                M Offline
                martinschm
                schrieb am zuletzt editiert von
                #7

                @paul53 said in Raumlüftung einzeln loggen:

                listWindows (getObject(obj.channelId,"rooms").enumNames[0]);

                Hi,

                das mit dem [0] habe ich angepasst. Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese und dann als Parameter weiter gebe, da kann ja also kein Tippfehler oder so passieren.

                Allerdings scheint der Selektor nicht zu funktionieren. idsFenster.lenght ist immer 0, habe beide Varianten probiert.

                function listWindows(room) {
                
                    const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                    //const idsFenster = $('alias.0.Fenster.*(rooms='+ room);
                    
                    log("Aktion in Raum " + room + " " + idsFenster.length);
                
                    for(let i = 0; i < idsFenster.length; i++) 
                    { 
                        log("Fenster im Raum " + i + " " + idsFenster[i]);
                    }   
                }
                
                function registerSubscription()
                {
                $('state(functions=windowstatus)').on(function(obj) {
                
                    //log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames[0]);
                    listWindows (getObject(obj.channelId,"rooms").enumNames[0]);
                });
                }
                
                paul53P 1 Antwort Letzte Antwort
                0
                • M martinschm

                  @paul53 said in Raumlüftung einzeln loggen:

                  listWindows (getObject(obj.channelId,"rooms").enumNames[0]);

                  Hi,

                  das mit dem [0] habe ich angepasst. Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese und dann als Parameter weiter gebe, da kann ja also kein Tippfehler oder so passieren.

                  Allerdings scheint der Selektor nicht zu funktionieren. idsFenster.lenght ist immer 0, habe beide Varianten probiert.

                  function listWindows(room) {
                  
                      const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                      //const idsFenster = $('alias.0.Fenster.*(rooms='+ room);
                      
                      log("Aktion in Raum " + room + " " + idsFenster.length);
                  
                      for(let i = 0; i < idsFenster.length; i++) 
                      { 
                          log("Fenster im Raum " + i + " " + idsFenster[i]);
                      }   
                  }
                  
                  function registerSubscription()
                  {
                  $('state(functions=windowstatus)').on(function(obj) {
                  
                      //log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames[0]);
                      listWindows (getObject(obj.channelId,"rooms").enumNames[0]);
                  });
                  }
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #8

                  @martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese

                  Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):

                  enum_kitchen.JPG

                  Der Selektor braucht rooms=kitchen.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  M 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese

                    Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):

                    enum_kitchen.JPG

                    Der Selektor braucht rooms=kitchen.

                    M Offline
                    M Offline
                    martinschm
                    schrieb am zuletzt editiert von
                    #9

                    @paul53 said in Raumlüftung einzeln loggen:

                    @martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese

                    Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):

                    enum_kitchen.JPG

                    Der Selektor braucht rooms=kitchen.

                    Ja ok, ich glaub ich versteh das "Problem". Kann ich mir denn statt dem "Klarnamen" auch die ID des Raums geben lassen, damit es besser funktioniert?

                    So hat es jetzt erstmal geklappt, das ich beide Fenster des einen Raums bekomme.

                    function listWindows(room) {
                    
                        //const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                        //const idsFenster = $('channel[state.id=*.ACTUAL](rooms=Arbeitszimmer)(functions=windowstatus)');
                        //const idsFenster = $('alias.0.Fenster.*(rooms='+ room);
                        const idsFenster = $('alias.0.Fenster.*(rooms='+room+')(functions=windowstatus)');
                    
                        
                        log("Aktion in Raum " + room + " " + idsFenster.length);
                    
                        for(let i = 0; i < idsFenster.length; i++) 
                        { 
                            log("Fenster im Raum " + i + " " + idsFenster[i]);
                        }   
                    }
                    
                    paul53P 2 Antworten Letzte Antwort
                    0
                    • M martinschm

                      @paul53 said in Raumlüftung einzeln loggen:

                      @martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese

                      Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):

                      enum_kitchen.JPG

                      Der Selektor braucht rooms=kitchen.

                      Ja ok, ich glaub ich versteh das "Problem". Kann ich mir denn statt dem "Klarnamen" auch die ID des Raums geben lassen, damit es besser funktioniert?

                      So hat es jetzt erstmal geklappt, das ich beide Fenster des einen Raums bekomme.

                      function listWindows(room) {
                      
                          //const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                          //const idsFenster = $('channel[state.id=*.ACTUAL](rooms=Arbeitszimmer)(functions=windowstatus)');
                          //const idsFenster = $('alias.0.Fenster.*(rooms='+ room);
                          const idsFenster = $('alias.0.Fenster.*(rooms='+room+')(functions=windowstatus)');
                      
                          
                          log("Aktion in Raum " + room + " " + idsFenster.length);
                      
                          for(let i = 0; i < idsFenster.length; i++) 
                          { 
                              log("Fenster im Raum " + i + " " + idsFenster[i]);
                          }   
                      }
                      
                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #10

                      @martinschm sagte: statt dem "Klarnamen" auch die ID des Raums geben lassen

                      Versuche mal:

                          listWindows(getObject(obj.channelId,"rooms").enumIds[0].split('.')[2]);
                      

                      oder

                          listWindows(getObject(obj.channelId,"rooms").enumIds[0].substring(11));
                      

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      • M martinschm

                        @paul53 said in Raumlüftung einzeln loggen:

                        @martinschm sagte: Die Exakte Schreibweise sollte ja sicher gestellt sein, da ich den Namen per Befehl auslese

                        Du verwendest den Namen, aber der Selektor braucht den letzten Teil der ID, der sich in Groß- / Kleinschreibung oder sogar in der Sprache vom Namen unterscheiden kann. Beispiel (Name: "Küche"):

                        enum_kitchen.JPG

                        Der Selektor braucht rooms=kitchen.

                        Ja ok, ich glaub ich versteh das "Problem". Kann ich mir denn statt dem "Klarnamen" auch die ID des Raums geben lassen, damit es besser funktioniert?

                        So hat es jetzt erstmal geklappt, das ich beide Fenster des einen Raums bekomme.

                        function listWindows(room) {
                        
                            //const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                            //const idsFenster = $('channel[state.id=*.ACTUAL](rooms=Arbeitszimmer)(functions=windowstatus)');
                            //const idsFenster = $('alias.0.Fenster.*(rooms='+ room);
                            const idsFenster = $('alias.0.Fenster.*(rooms='+room+')(functions=windowstatus)');
                        
                            
                            log("Aktion in Raum " + room + " " + idsFenster.length);
                        
                            for(let i = 0; i < idsFenster.length; i++) 
                            { 
                                log("Fenster im Raum " + i + " " + idsFenster[i]);
                            }   
                        }
                        
                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @martinschm sagte: "Klarnamen"

                        Den Namen kann man innerhalb der Funktion wieder ermitteln, nachdem der Selektor gebildet wurde.

                        function listWindows(room) {
                            const idsFenster = $('alias.0.Fenster.*.ACTUAL(rooms=' + room + ')');
                            room = getObject('enum.rooms.' + room).common.name; // Raumname
                        

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • M martinschm

                          @paul53 said in Raumlüftung einzeln loggen:

                          @martinschm sagte: Ähnlich könnte ich mir vermutlich auch alle Fenster eines speziellen Raums selektieren

                          Wenn alle Fenster(kontakte) unter "alias.0.Fenster" zu finden sind, kann man es auch anders eingrenzen.

                          Blockly_temp.JPG

                          Funktion formatDiff(ms, format):

                          return formatDate(ms, format);
                          

                          Ist es auch möglich, den Selector dynamisch zu erstellen ?

                          Hatte überlegt, bei Änderung des windowstatus, den Raum des Sensors zu ermitteln und dann den Selector dynamisch mit dem Raumnamen zu versehen.

                          function listWindows(room) {
                          
                              const idsFenster = $('channel[state.id=*.ACTUAL](rooms='+ room +')(functions=windowstatus)');
                              log("Aktion in Raum " + room);
                          
                              idsFenster.each(function(id) {
                                  //if(getState(id).val) offen = true;
                                  log("Fenster im Raum " + id + " " + idsFenster[id]);
                              });  
                          }
                          
                          function registerSubscription()
                          {
                          $('state(functions=windowstatus)').on(function(obj) {
                          //RaumErmitteln(obj);
                              log(obj.channelId + " " + getObject(obj.channelId,"rooms").enumNames);
                              listWindows (getObject(obj.channelId,"rooms").enumNames);
                          });
                          }
                          

                          Die Ermittlung des Raums klappt und wird auch korrekt übergeben. Ich bekomme dann aber keine Auflistung der Fenster ausgegeben. Ist bei meinem Selektor etwas falsch ?

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @martinschm sagte: möglich, den Selector dynamisch zu erstellen ?

                          Vorschlag:

                          $('alias.0.Fenster.*.ACTUAL').on(function(dp) {
                              let room = getObject(dp.channelId,"rooms").enumIds[0];
                              const ids = $('alias.0.Fenster.*.ACTUAL(rooms=' + room.substring(11) + ')');
                              room = getObject(room).common.name; // Raumname
                              const path = '0_userdata.0.Fenster.' + room;
                              const idLueften = path + '.Lueftung'; 
                          
                              let offen = false;
                              ids.each(function(id) {
                                  if(getState(id).val) offen = true;
                              });
                              if(!offen) { // letztes Fenster im Raum geschlossen 
                                  let dauer = Date.now() - getState(idLueften).lc;
                                  setState(path + '.Offendauer', formatDate(dauer, 'hh:mm:ss'), true);
                              };
                              setState(idLueften, offen, true);
                          });
                          

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          • M martinschm

                            Hi,

                            ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

                            Idealerweise mit einem Skript, das alle Fenstersensoren überwacht und das bei Änderungen dynamisch schaut, wie der Zustand der anderen Sensoren des gleichen Zimmer sind um zu ermitteln ob alle Sensoren zu sind (also das Lüften beendet wurde) oder ob mind. ein Sensor offen ist, das Lüften also beginnt.

                            Wie kann ich mir zu einem Sensor den Raum holen, den er zu gewiesen ist und dann dazu alle Fenstersensoren dieses Raums ermitteln um dann da durch zu itterieren. Leider ist mein Verständnis der Selektoren und javascript da sehr begrenzt.

                            Vielleicht kann mir da jemand mit ein paar Codesnipseln weiterhelfen.

                            Falls sich jemand findet, vielen dank schonmal

                            Chris 1C Offline
                            Chris 1C Offline
                            Chris 1
                            schrieb am zuletzt editiert von
                            #13

                            @martinschm said in Raumlüftung einzeln loggen:

                            ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

                            Ich hab oft Ideen, welche andere etwas merkwürdig finden.
                            Schön, dass es mir auch mal so geht, dann kann ich die Leute bei mir besser verstehen :laughing:

                            Da "Lüften" ja ein weder objektiv, noch subjektiv fassbares Ergebnisse (Daten) liefert, wenn man die Anzahl der Fenster und die Dauer nimmt (zumal - bisher - kein Durchzug erfasst wird), möchte ich mir die Freiheit erlauben und Dir einen Gedankenanstoß? Vorschlag? machen.

                            Was hälst Du von der Idee die allgemeine/gefühlte Luftqualität durch Messung von Luftfeuchte plus ggf Gas-/Partikel-Messung zu ermitteln? Da bräuchtest Du pro Zimmer nur 1 Sensoren-Set (Temp/Hum vermutlich eh schon je Zimmer vorhanden) und würdest im Mittel schnell sehen, welcher Raum der Übeltäter ist, so dass Dir kaskadiert vermittelt werden könnte, wo Lüften angesagt ist.

                            Gruss von der Ostsee
                            Chris

                            bpi-m5 (ioBroker), rock3a (postgreSQL), lamobo R1 (OpenWRT), Tasmota-ZB, Tasmota-IR

                            M 1 Antwort Letzte Antwort
                            0
                            • Chris 1C Chris 1

                              @martinschm said in Raumlüftung einzeln loggen:

                              ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

                              Ich hab oft Ideen, welche andere etwas merkwürdig finden.
                              Schön, dass es mir auch mal so geht, dann kann ich die Leute bei mir besser verstehen :laughing:

                              Da "Lüften" ja ein weder objektiv, noch subjektiv fassbares Ergebnisse (Daten) liefert, wenn man die Anzahl der Fenster und die Dauer nimmt (zumal - bisher - kein Durchzug erfasst wird), möchte ich mir die Freiheit erlauben und Dir einen Gedankenanstoß? Vorschlag? machen.

                              Was hälst Du von der Idee die allgemeine/gefühlte Luftqualität durch Messung von Luftfeuchte plus ggf Gas-/Partikel-Messung zu ermitteln? Da bräuchtest Du pro Zimmer nur 1 Sensoren-Set (Temp/Hum vermutlich eh schon je Zimmer vorhanden) und würdest im Mittel schnell sehen, welcher Raum der Übeltäter ist, so dass Dir kaskadiert vermittelt werden könnte, wo Lüften angesagt ist.

                              Gruss von der Ostsee
                              Chris

                              M Offline
                              M Offline
                              martinschm
                              schrieb am zuletzt editiert von
                              #14

                              @chris-1 said in Raumlüftung einzeln loggen:

                              @martinschm said in Raumlüftung einzeln loggen:

                              ich habe in jedem Raum Fenster mit mindestens zwei Flügeln. An jedem habe ich einen eigenen Fensterkontakt angebracht. Ich würde gerne erfassen, wann das letzte mal gelüftet wurde und wie lange.

                              Ich hab oft Ideen, welche andere etwas merkwürdig finden.
                              Schön, dass es mir auch mal so geht, dann kann ich die Leute bei mir besser verstehen :laughing:

                              Da "Lüften" ja ein weder objektiv, noch subjektiv fassbares Ergebnisse (Daten) liefert, wenn man die Anzahl der Fenster und die Dauer nimmt (zumal - bisher - kein Durchzug erfasst wird), möchte ich mir die Freiheit erlauben und Dir einen Gedankenanstoß? Vorschlag? machen.

                              Was hälst Du von der Idee die allgemeine/gefühlte Luftqualität durch Messung von Luftfeuchte plus ggf Gas-/Partikel-Messung zu ermitteln? Da bräuchtest Du pro Zimmer nur 1 Sensoren-Set (Temp/Hum vermutlich eh schon je Zimmer vorhanden) und würdest im Mittel schnell sehen, welcher Raum der Übeltäter ist, so dass Dir kaskadiert vermittelt werden könnte, wo Lüften angesagt ist.

                              Gruss von der Ostsee
                              Chris

                              Hi Chris,

                              danke für den Impuls. Temp Sensoren hab ich in fast jedem Raum. Mir geht es allerdings auch so darum zu wissen wann in welchem Raum das letzte mal "frische" Luft rein gekommen ist. Außerdem soll in einem zweiten Schritt, darauf hingewiesen werden, wenn das Fenster vielleicht -bei Außentemperaturen unter 8 Grad - zu lange gelüftet wird und alles auskühlt.

                              Viele Grüße
                              Martin

                              1 Antwort Letzte Antwort
                              1
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              823

                              Online

                              32.4k

                              Benutzer

                              81.5k

                              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