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

                          925
                          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