Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Problem mit getStateAsync

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Problem mit getStateAsync

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

      Hallo,

      Ich habe ein Problem mit getStateAsync.

      Der Script sieht so aus:

      // DP ezeugen und Initialisierung
      createState("0_userdata.0.Debug.Therme_-Heizkreis_1_Vorlaufemperatur(R)old", 0);
      setState("0_userdata.0.Debug.Therme
      -Heizkreis_1_Vorlaufemperatur(R)_old", 12);

      // Vorlauftemperatur Heizkreis geändert
      on({id: "knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-TH-Therme-Heizkreis_1_Vorlaufemperatur(R)", change: "any"}, async function (obj) {
      var value = obj.state.val;

      var MyoldValue = (await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-TH-Therme-Heizkreis_1_Vorlaufemperatur(R)_old")).val;
      sendTo("pushover", "send", {message: "---Lesen OLD", sound: "" });
      sendTo("pushover", "send", {message: "--- Callback Heizkreis Vorlauftemp Old: " + MyoldValue + "-", sound: "" });
      sendTo("pushover", "send", {message: "---Gelesen OLD", sound: "" });
      sendTo("pushover", "send", {message: "--- Callback Heizkreis Vorlauftemp Aktuell: " + value, sound: "" });
      sendTo("pushover", "send", {message: "---333333", sound: "" });

      // old_value setzen
      await setStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-TH-Therme-Heizkreis_1_Vorlaufemperatur(R)_old", value);
      })

      Es kommt die folgende fehlermeldungwenn das Script aufgerufen wird:
      script.js._Automation: TypeError: Cannot read property 'val' of null

      Frage 1:
      Was mache ich falsch?
      Frage 2:
      Gibt es irgendwo eine Beispielsammlung oder eine Einführung für Dummys wie man die Async Functions richtig anwendet?
      Frage 3:
      Die Reihenfolge der angezeigten Pushover Nachrichtenam Handy ist durcheinandergewürfelt.
      Wenn ich schreibe:
      async sendTo("pushover", "send", {message: "---Lesen OLD", sound: "" });
      dann mag der Compiler das nicht
      Wie mache ich das richtig ?

      ? haus-automatisierung 2 Replies Last reply Reply Quote 0
      • ?
        A Former User @Automatisierer 0 last edited by

        @automatisierer-0
        Pack Bitte Code Schnipsel nächstes mal in Code Tags. So ist es fast unmöglich den Code zu lesen. Aber ich glaube du hattest eine Klammer Zuviel. Probiere es mal so:

        var MyoldValue = await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-TH-Therme-Heizkreis_1_Vorlaufemperatur(R)_old").val;
        
        A 1 Reply Last reply Reply Quote 0
        • A
          Automatisierer 0 @Guest last edited by

          @ciddi89
          Nein, so wie du schreibst gehts nicht --> Compilerfehler
          Was soll ich machen für die von dir gewünschten Code Tags?? Wie geht das?

          ? 1 Reply Last reply Reply Quote 0
          • ?
            A Former User @Automatisierer 0 last edited by

            @automatisierer-0 dann pack das mal in Code Tags damit man das lesen kann…

            B6794C66-858A-4C75-9E91-90CC4E6C4824.jpeg

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

              @automatisierer-0 sagte: Was mache ich falsch?

              Ich finde getStateAsync() nicht in der Funktionsdokumentation.

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

                @paul53
                Ich auch nicht, daher meine Frage 2
                74f1ef3f-fc57-4ac2-896a-7bb1e28c9f39-grafik.png

                // DP ezeugen und Initialisierung
                createState("0_userdata.0.Debug.Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old", 0);
                setState("0_userdata.0.Debug.Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old", 12); 
                
                // Vorlauftemperatur Heizkreis geändert
                on({id: "knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)", change: "any"}, async function (obj) {
                  var value = obj.state.val
                 
                  var MyoldValue = (await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old")).val; 
                  sendTo("pushover", "send", {message: "---Lesen OLD", sound: "" }); 
                  sendTo("pushover", "send", {message: "--- Callback Heizkreis Vorlauftemp Old: " + MyoldValue + "-", sound: "" });
                  sendTo("pushover", "send", {message: "---Gelesen OLD", sound: "" }); 
                  sendTo("pushover", "send", {message: "--- Callback Heizkreis Vorlauftemp Aktuell: " + value, sound: "" });     
                  sendTo("pushover", "send", {message: "---333333", sound: "" }); 
                
                  // old_value setzen
                  await setStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old", value);   
                
                })
                
                ? paul53 2 Replies Last reply Reply Quote 0
                • ?
                  A Former User @Automatisierer 0 last edited by

                  @automatisierer-0 getStateAsync gibt es. Nutze es auch in einem Script. Versuche es mal so: So ist es in meinem script auch.

                  const MyoldObj = await getStateAsync(`knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old`);
                  let MyoldValue = MyoldObj.val;
                  
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Automatisierer 0 last edited by paul53

                    @automatisierer-0
                    Im Javascript-Adapter ist die Funktion allerdings implementiert.
                    Weshalb möchtest Du getStateAsync() verwenden? Hast Du den Puffer in der Javascript-Instanz deaktiviert?

                    var MyoldValue = (await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old")).val;
                    

                    Die Klammern sind falsch.

                    A 2 Replies Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @Automatisierer 0 last edited by haus-automatisierung

                      Das Script stimmt ja erstmal, aber ist der State auch wirklich gesetzt / enthält einen Wert? Wenn man ein neues Objekt vom Typ state anlegt, dann ist dort erstmal kein State gespeichert und man bekommt null.

                      @automatisierer-0 sagte in Problem mit getStateAsync:

                      script.js._Automation: TypeError: Cannot read property 'val' of null

                      Denn: Da kam ja null zurück. Also darauf prüfen:

                      const state = await getStateAsync(`knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old`);
                      
                      if (state) {
                          const value = state.val;
                      }
                      

                      @automatisierer-0 sagte in Problem mit getStateAsync:

                      Die Reihenfolge der angezeigten Pushover Nachrichtenam Handy ist durcheinandergewürfelt.

                      Dann musst du mit await sendToAsync() arbeiten und auf das Ergebnis warten.

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

                        @paul53
                        Wie ist es richtig?

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

                          @automatisierer-0 sagte: Wie ist es richtig?

                          var MyoldValue = await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old").val;
                          

                          Vielleicht kann man mit .val auch erst nachträglich auf das Objekt zugreifen? Wie @ciddi89 gezeigt hat:

                          const MyoldObj = await getStateAsync('knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old');
                          let MyoldValue = MyoldObj.val;
                          
                          A 2 Replies Last reply Reply Quote 0
                          • A
                            Automatisierer 0 @paul53 last edited by

                            @paul53 said in Problem mit getStateAsync:

                            var MyoldValue = await getStateAsync("knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-TH-Therme-Heizkreis_1_Vorlaufemperatur(R)_old").val;

                            NEIN: bringt Compilerfehler

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

                              @paul53 said in Problem mit getStateAsync:

                              const MyoldObj = await getStateAsync(knx.0.Heizung_und_Temp_(HZ).Alles_(Zentral).HZ_-_TH_-_Therme_-_Heizkreis_1_Vorlaufemperatur_(R)_old);

                              NEIN: Gleicher Fehler, funktioniert nicht

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

                                @automatisierer-0 sagte: funktioniert nicht

                                Tausche die ` gegen Hochkommata aus.

                                1 Reply Last reply Reply Quote 0
                                • A
                                  Automatisierer 0 @haus-automatisierung last edited by

                                  @haus-automatisierung said in Problem mit getStateAsync:

                                  Dann musst du mit await sendToAsync() arbeiten und auf das Ergebnis warten.

                                  Kannst du mir bitte die Codezeile schreiben wie es richtg sein soll?
                                  Die Alte ist:

                                  sendTo("pushover", "send", {message: "---Lesen OLD", sound: "" }); 
                                  
                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • A
                                    Automatisierer 0 @paul53 last edited by

                                    @paul53 said in Problem mit getStateAsync:

                                    Hast Du den Puffer in der Javascript-Instanz deaktiviert?

                                    Nein. Bitte wie mache ich das ?

                                    ? 1 Reply Last reply Reply Quote 0
                                    • haus-automatisierung
                                      haus-automatisierung Developer Most Active @Automatisierer 0 last edited by

                                      @automatisierer-0 sagte in Problem mit getStateAsync:

                                      Kannst du mir bitte die Codezeile schreiben wie es richtg sein soll?

                                      Na

                                      await sendToAsync("pushover", "send", { message: "---Lesen OLD", sound: "" });
                                      
                                      A 1 Reply Last reply Reply Quote 0
                                      • ?
                                        A Former User @Automatisierer 0 last edited by

                                        @automatisierer-0 das mit den Puffer lass mal sein.
                                        Frage: Warum muss es unbedingt async sein? Hier reicht der ganz normale getState aus. Finde merkwürdig das du ein Compiler Fehler bekommst. Was sagt der genau? Hab es in mehreren scripts genau so und da kommt kein Fehler. Steht da wirklich schon was im Datenpunkt drin den du abfragen möchtest? Finde keine Antwort auf die Frage die Hausautomatisierung dir gestellt hat.

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          Automatisierer 0 @haus-automatisierung last edited by

                                          @haus-automatisierung said in Problem mit getStateAsync:

                                          await sendToAsync("pushover", "send", { message: "---Lesen OLD", sound: "" });

                                          Image 029.jpg

                                          haus-automatisierung 1 Reply Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @Automatisierer 0 last edited by haus-automatisierung

                                            @automatisierer-0 Naja, die Doku und Type Definition ist scheinbar nicht ganz vollständig (hatten wir ja oben schon). Soll ich auf die Stelle im GitHub Repo verlinken, dass es die Funktion gibt? 🙂

                                            A 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            628
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            27
                                            1292
                                            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