Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. getState(obj.id).val vs obj.state.val

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    getState(obj.id).val vs obj.state.val

    This topic has been deleted. Only users with topic management privileges can see it.
    • hanss
      hanss last edited by

      Hallo,
      kann mir bitte jemand den Unterschied erklären bzw. wann verwendet man was:

      idsFenster.on(function(obj) { 
      var x = getState(obj.id).val 
      // oder
      var x = obj.state.val
      }
      

      Wird in jedem Fall das Objekt neu gelesen?

      vielen Dank schon mal

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @hanss last edited by

        @hanss sagte:

        Wird in jedem Fall das Objekt neu gelesen?

        Nein, die Variable obj wurde bereits an die Callback-Funktion übergeben.

        hanss 1 Reply Last reply Reply Quote 0
        • hanss
          hanss @paul53 last edited by hanss

          @paul53 sagte in getState(obj.id).val vs obj.state.val:

          @hanss sagte:

          Wird in jedem Fall das Objekt neu gelesen?

          Nein, die Variable obj wurde bereits an die Callback-Funktion übergeben.

          Ich habe auch nicht obj gemeint, sondern ob der val in der Callback neu gelesen wird.
          Kannst Du etwas zu dem geschilderten Unterschied sagen?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @hanss last edited by

            @hanss sagte:

            ob der val in der Callback neu gelesen wird.

            obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

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

              @paul53 sagte in getState(obj.id).val vs obj.state.val:

              @hanss sagte:

              ob der val in der Callback neu gelesen wird.

              obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

              Hallo paul53,
              das ist genau die Info, die ich gesucht habe.
              Ich habe schon vermutet, dass es einen grundsätzlichen Unterschied gibt.
              Kennst Du eine Quelle, wo man solche Infos nachlesen kann?
              Vielen Dank für die Info.

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @hanss last edited by

                @hanss sagte:

                Quelle, wo man solche Infos nachlesen kann?

                Funktionen des JS-Adapters

                1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer @paul53 last edited by

                  @paul53 sagte in getState(obj.id).val vs obj.state.val:

                  Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

                  Ganz wichtig: getState kann innerhalb von Triggern teilweise alte Werte liefern. obj.state.val ist immer der Wert, der den Trigger ausgelöst hat.

                  1 Reply Last reply Reply Quote 0
                  • hanss
                    hanss last edited by

                    Hallo paul53,

                    ich habe hier die Abfrage:

                    $('state(functions=fensterkontakt)').on(function(obj) {
                         log("Immer, wenn ein fensterkontakt = true")
                    }
                    

                    Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.
                    Ich benötige aber nur einen Aufruf, wenn fensterkotakt sich geändert hat, d.h. "ne":,
                    bringe aber das 'change: "ne"' nirgens unter.

                    Hoffentlich kennst Du die Syntax, im Tutorial wurde ich nirgens fündig.

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @hanss last edited by paul53

                      @hanss sagte:

                      Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.

                      Nein, getriggert wird bei Wertänderung. Will man true auswerten, muss man eine Abfrage einbauen:

                      $('state(functions=fensterkontakt)').on(function(obj) {
                           if(obj.state.val) log("Immer, wenn ein fensterkontakt = true");
                           else log("Immer, wenn ein fensterkontakt = false");
                      });
                      
                      hanss 1 Reply Last reply Reply Quote 0
                      • hanss
                        hanss @paul53 last edited by

                        @paul53

                        Dann muß ich leider den ganzen Block einfügen:
                        Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                        in Zeile 11 nicht geändert hat (habe in dem Objekt die letzte Änderung kontrolliert)

                        Ist zwar eine Zumutung, die Bitte einen Fehler zu suchen, aber vielleicht hast Du einige Minuten
                        Zeit:

                        const idsFenster = $('state(functions=fensterkontakt)');    // alle Objekte mit Funktion Tür Fenster Kontakt
                        var AnzFensterOffen = 0;
                        
                        idsFenster.each(function(id, i) {                           // Bei Programmstart alle Kontakte einlesen
                              if (getState(id).val){
                                 AnzFensterOffen++;       
                              }
                        });
                        setState("javascript.0.zigbee.0.Fensterkontakt", AnzFensterOffen)
                        
                        idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                            var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                                                                                    // obj.state.val = Bestandteil der Objekt-Variablen obj
                            var raum = getObject(obj.id, "rooms");
                            var raumname = String(raum.enumNames);                          // Raumname(Aufzählungen) der Änderung
                            var obj_root_id = "javascript.0." + obj.id.substr(0, 25)      // Root Objekt = die ersten 25 Zeichen von "zigbee.0.00158d0003eefd9f.opened"
                            InsertObj(obj_root_id,raumname);                              // evtl. fehlende Alarm Obj. erzeugen
                            var alarm_id = obj_root_id+".AlarmStatus";                    // Objekt ID für Alarm      man. Eintrag
                            var alarmzeit_id = obj_root_id+".AlarmZeit";                  // Individuelle Alarm Zeit  man. Eintrag
                            var alarmzeit = getState(alarmzeit_id).val;
                            if (alarmzeit < 1) alarmzeit = DefaultAlarmZeit;
                            var radiator_id = "";                                         // Welcher Heizkörper ist betroffen
                            var timeout_1
                            var WZ_Temp_alt = TempHigh
                            // Suche Heizungs-Objekt
                            $('state[id=*](functions=solltemperatur)(rooms='+raumname+')').each(function(id) { // suche Radiator für diesen Raum
                                    radiator_id = id;
                            });
                         // log ("Kontrolle: "+raumname+" - " + Kontakt+" - "+radiator_id) 
                         // log ("Alarm: "+alarm_id+" Alarmzeit: "+alarmzeit) 
                         
                                if (Kontakt) {                              // Fenster/Türe offen       
                                    setState(alarm_id,1);                           // 1 = Fenster offen
                                    AnzFensterOffen++;
                                    timeout_1 = setTimeout(function (obj,alarm_id,radiator_id,raumname) {      
                                        if (getState(obj.id).val) {                 // Kontakt neu einlesen. Nach Alarmzeit immer noch offen?   
                                            if (raumname=="Wohnzimmer"){            // Sonderfall Wohnzimmer
                                                   setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","false");       // Lüftung aus
                                                   WZ_Temp_alt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                            } else {
                                                 // kein Alarm im Sommer wenn Heizung aus
                                                 if (parseFloat(getState("javascript.0.haus.Summenwerte.7_Tage.keller.Heizung.Gasverbrauch.proTag").val) > 5){
                                                   const text = "Achtung !! Im "+raumname + " ist ein Fenster länger als "+ alarmzeit/60 + " Min. offen"
                                                   loginfo(text);
                                                   Email(text,'OG Fenster offen');
                                                 }
                                            }
                                            setState(alarm_id,2);                   // 2 = Fenster Offen Alarm
                                            if(radiator_id != "") setState(radiator_id,TempLow);   // Wenn EvoHome TV: RT-Soll bei offenem Fenster 
                                        }                            
                                    },alarmzeit * 1000,obj,alarm_id,radiator_id,raumname);  // Alarm nach OffenAlarmZeit Sek.
                                } else {
                                    clearTimeout(timeout_1)                      // Alarm Timer löschen, wenn Fenster/Türe = zu
                                    setState(alarm_id,0);                        // Fenster geschlossen
                                    AnzFensterOffen--;
                                    if (raumname=="Wohnzimmer"){         // Sonderfall Wohnzimmer
                                        setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","true");       // Lüftung ein
                                        var WZ_Temp_akt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                        var WZ_Zemp_man = parseFloat(getState(radiator_id).val);
                                        
                                        if (WZ_Temp_akt != TempLow) {
                                            if (WZ_Zemp_man == TempLow) setState(radiator_id,-WZ_Temp_akt);
                                        } else {
                                            setState(radiator_id,-TempHigh);
                                        }
                                    }
                                } 
                                setState("javascript.0.zigbee.0.Fensterkontakt",AnzFensterOffen)
                        });  // state(functions=   
                        
                        
                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @hanss last edited by paul53

                          @hanss sagte:

                          Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                          in Zeile 11 nicht geändert hat

                          Sicher ? Die Callback-Funktion wird nur bei einem Trigger ausgeführt. Checke es per Log:

                          idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                              var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                              log('Trigger ' + obj.id + ': ' + Kontakt);
                          
                          hanss 1 Reply Last reply Reply Quote 0
                          • hanss
                            hanss @paul53 last edited by

                            @paul53
                            Da war mal wieder Geisterstunde.
                            Seit dem Vorfall kann ich die wiederkehrenden E-mails nicht mehr reproduzieren.
                            Vielen Dank!

                            hanss 1 Reply Last reply Reply Quote 0
                            • hanss
                              hanss @hanss last edited by

                              @hanss
                              Hallo paul53:

                              Ich finde das einfach nicht:
                              Könntest Du mir bitte einen Link angeben, wo ich sehen kann, wie das
                              obj bei " idsBW1.on(function(obj) " aufgebaut ist?
                              Bis jetzt kenne ich nur obj.state.val und obj.id.

                              Wie kann ich mit log("Objekt: "+obj.liste) alle möglichen werte einsehen?
                              Vielen Dank!

                              1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer last edited by ticaki

                                Meinst du

                                log(JSON.stringify(obj));
                                

                                ?

                                und hier ist es aufgelistet. https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

                                paul53 1 Reply Last reply Reply Quote 0
                                • hanss
                                  hanss last edited by

                                  @ticaki sagte in getState(obj.id).val vs obj.state.val:

                                  log(JSON.stringify(obj));

                                  Ja genau. Super.
                                  Vielen Dank

                                  1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @ticaki last edited by paul53

                                    @ticaki sagte:

                                    log(JSON.stringify(obj));

                                    In neueren Versionen des Javascript-Adapters ist JSON.stringify() nicht erforderlich.

                                    on(id, function(dp) {
                                        log(dp); // zeigt id, state, oldState
                                        log(dp.common); // zeigt common-Attribute
                                    });
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    721
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

                                    javascript
                                    4
                                    16
                                    1414
                                    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