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. JavaScript
  5. getState(obj.id).val vs obj.state.val

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

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
16 Beiträge 4 Kommentatoren 1.6k 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.
  • paul53P paul53

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

    AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #7

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

    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

    1 Antwort Letzte Antwort
    0
    • hanssH Offline
      hanssH Offline
      hanss
      schrieb am zuletzt editiert von
      #8

      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.

      paul53P 1 Antwort Letzte Antwort
      0
      • hanssH hanss

        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.

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

        @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");
        });
        

        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

        hanssH 1 Antwort Letzte Antwort
        0
        • paul53P 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");
          });
          
          hanssH Offline
          hanssH Offline
          hanss
          schrieb am zuletzt editiert von
          #10

          @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=   
          
          
          paul53P 1 Antwort Letzte Antwort
          0
          • hanssH hanss

            @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=   
            
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #11

            @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);
            

            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

            hanssH 1 Antwort Letzte Antwort
            0
            • paul53P 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);
              
              hanssH Offline
              hanssH Offline
              hanss
              schrieb am zuletzt editiert von
              #12

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

              hanssH 1 Antwort Letzte Antwort
              0
              • hanssH hanss

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

                hanssH Offline
                hanssH Offline
                hanss
                schrieb am zuletzt editiert von
                #13

                @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 Antwort Letzte Antwort
                0
                • T Nicht stören
                  T Nicht stören
                  ticaki
                  schrieb am zuletzt editiert von ticaki
                  #14

                  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

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • hanssH Offline
                    hanssH Offline
                    hanss
                    schrieb am zuletzt editiert von
                    #15

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

                    log(JSON.stringify(obj));

                    Ja genau. Super.
                    Vielen Dank

                    1 Antwort Letzte Antwort
                    0
                    • T 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

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

                      @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
                      });
                      

                      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
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      958

                      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