Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Raumlüftung einzeln loggen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Raumlüftung einzeln loggen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      martinschm @paul53 last edited by

      @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 ?

      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @martinschm last edited by

        @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 1 Reply Last reply Reply Quote 0
        • M
          martinschm @paul53 last edited by

          @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]);
          });
          }
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @martinschm last edited by 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 1 Reply Last reply Reply Quote 0
            • M
              martinschm @paul53 last edited by

              @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]);
                  }   
              }
              
              paul53 2 Replies Last reply Reply Quote 0
              • paul53
                paul53 @martinschm last edited by paul53

                @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));
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @martinschm last edited by

                  @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
                  
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @martinschm last edited by paul53

                    @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);
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • Chris 1
                      Chris 1 @martinschm last edited by

                      @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 😆

                      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 1 Reply Last reply Reply Quote 0
                      • M
                        martinschm @Chris 1 last edited by

                        @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 😆

                        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 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.0k
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        3
                        14
                        465
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo