Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Wann ist ein nach der Erzeugung dp verfügbar?

    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

    Wann ist ein nach der Erzeugung dp verfügbar?

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

      Hallo, ich habe folgende Logik:

      on(TrigerId,async(dp)=>{
          await extendObject(DestinationId, {type:'state', common:{name:'Gerät ist zu Hause', type:'boolean', def: false}});
          // Aktuellen Zustand auslesen
          const actState= getState(DestinationId).val;
      }
      

      nun verursacht dies aber ein actState = null

      Erzeuge ich den state mit extendObject beim Scriptstart (nur zum Testen), so funktioniert es.
      Ich dachte, dass das await dafür sorgt, dass entsprechend lange gewartet wird.

      T Asgothian OliverIO 3 Replies Last reply Reply Quote 0
      • T
        ticaki Developer @Ben1983 last edited by

        @ben1983
        Ist mir auch aufgefallen bei extendObject(). Ich nutze ein await sleep(10) bevor ich was damit mache.

        Ben1983 1 Reply Last reply Reply Quote 1
        • Ben1983
          Ben1983 @ticaki last edited by

          @ticaki OK, gibts dazu schon ein issue?

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

            @ben1983
            Hab nicht nachgesehen.

            1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Ben1983 last edited by Asgothian

              @ben1983 sagte in Wann ist ein nach der Erzeugung dp verfügbar?:

              Hallo, ich habe folgende Logik:

              on(TrigerId,async(dp)=>{
                  await extendObject(DestinationId, {type:'state', common:{name:'Gerät ist zu Hause', type:'boolean', def: false}});
                  // Aktuellen Zustand auslesen
                  const actState= getState(DestinationId).val;
              }
              

              nun verursacht dies aber ein actState = null

              Erzeuge ich den state mit extendObject beim Scriptstart (nur zum Testen), so funktioniert es.
              Ich dachte, dass das await dafür sorgt, dass entsprechend lange gewartet wird.

              Natürlich tut es das. Du hast zwar den State angelegt, aber der Wert des State wurde nicht gesetzt. Den holst Du dir aber. Zusätzlich rufst du die 'callback' Variante der Funktion extendObject auf, ohne eine callback Funktion beizulegen. Die dafür vorgesehene Funktion ist (meines Wissens nach) aber extendObjectAsync.

              Prüfe mal bitte den folgenden Code:

              on(TrigerId,async(dp)=>{
                   await extendObjectAsync(DestinationId, {type:'state', common:{name:'Gerät ist zu Hause', type:'boolean', def: false}});
                   // Aktuellen Zustand auslesen
                   const actState= getState(DestinationId);
               }
              
              T 1 Reply Last reply Reply Quote 0
              • T
                ticaki Developer @Asgothian last edited by

                @asgothian sagte in Wann ist ein nach der Erzeugung dp verfügbar?:

                await extendObjectAsync(DestinationId, {type:'state', common:{name:'Gerät ist zu Hause', type:'boolean', def: false}});
                // Aktuellen Zustand auslesen
                const actState= getState(DestinationId);

                Ändert nix, der state existiert noch nicht im Javascript-Adapter, wenn getState() ausgeführt wird. Aber das async fehlt natürlich trotzdem.

                Mit const actState= await getStateAsync(DestinationId);geht auch die abfrage auf den State.

                Asgothian Ben1983 2 Replies Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @ticaki last edited by

                  @ticaki sagte in Wann ist ein nach der Erzeugung dp verfügbar?:

                  @asgothian sagte in Wann ist ein nach der Erzeugung dp verfügbar?:

                  await extendObjectAsync(DestinationId, {type:'state', common:{name:'Gerät ist zu Hause', type:'boolean', def: false}});
                  // Aktuellen Zustand auslesen
                  const actState= getState(DestinationId);

                  Ändert nix, der state existiert noch nicht im Javascript-Adapter, wenn getState() ausgeführt wird. Aber das async fehlt natürlich trotzdem.

                  Mit const actState= await getStateAsync(DestinationId);geht auch die abfrage auf den State.

                  Interessant. Mein System scheint da schneller zu sein - der Code den ich gepostet hab geht bei mir direkt durch - ohne Probleme 🙂

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

                    @asgothian
                    Eh ich habe gerade geupgraded.. also nix da 😄

                    Kann halt nur schreiben was passiert ist. Aber ein sleep hinter einem extend macht das ganze eh viel entspannter.

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

                      @ticaki bei mir geht es auch damit nicht (Hatte ich schon vor erstellen dieses Threads gecheckt.)
                      Und extendObjectAsync sollte soweit mit bekannt in extendObject drin sein, wenn dies nicht als Callback benutzt wird.

                      mcm1957 1 Reply Last reply Reply Quote 0
                      • mcm1957
                        mcm1957 @Ben1983 last edited by

                        @ben1983 said in Wann ist ein nach der Erzeugung dp verfügbar?:

                        @ticaki bei mir geht es auch damit nicht (Hatte ich schon vor erstellen dieses Threads gecheckt.)
                        Und extendObjectAsync sollte soweit mit bekannt in extendObject drin sein, wenn dies nicht als Callback benutzt wird.

                        Nur wenn du aktuellen js-controlelr einsetzt.
                        https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md#704-2024-12-04---lucy
                        Kann gut sein, dass setObject zu extendObject durchschlägt

                        Ben1983 1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @Ben1983 last edited by

                          @ben1983
                          Und wo wird der State geschrieben oder der default Wert des Objekts gesetzt?
                          Welcher Wert würde erwartet werden?

                          Bin mir zwar nicht sicher, aber ein Objekt muss nicht zwangsläufig auch gleich einen State haben

                          1 Reply Last reply Reply Quote 0
                          • Ben1983
                            Ben1983 @mcm1957 last edited by

                            @mcm1957 setze 7.0.6 ein 😉

                            mcm1957 T 2 Replies Last reply Reply Quote 0
                            • mcm1957
                              mcm1957 @Ben1983 last edited by

                              @ben1983
                              Hoffe deine User auch 🙂
                              Ansonsten solltest du ggF die dependencies des js-controllers checken / anpassen.

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

                                @ben1983
                                @mcm1957

                                Ich glaube das ist leichter zu begründen, will jetzt aber nicht den Eindruck erwecken als wenn ich den Javascript-Adapter-Code durchschaut hätte. 🙂

                                create/set/extendWasauchimmerAsyncerzeugt im js-controller einen State/Object und wartet bis er angelegt ist. Jedoch hat der Javascript-Adapter einen Cache. Ein darauf folgenden getState() wird aus dem Cache gezogen und wenn der subscriber noch nicht durch ist, gibts ihn halt noch nicht.

                                Dazu kommt dann noch das die ...Async sich anders verhält als im Adapter - ohne Async wird nicht gewartet. https://github.com/ioBroker/ioBroker.javascript/blob/7778007eb9304658aed10f4a975de91864ad26bc/lib/sandbox.js#L4403

                                1 Reply Last reply Reply Quote 0
                                • Ben1983
                                  Ben1983 @mcm1957 last edited by

                                  @mcm1957 Das hier ist ein eigenes Skript im Javascript Adapter, kein Eigener Adapter

                                  mcm1957 1 Reply Last reply Reply Quote 0
                                  • mcm1957
                                    mcm1957 @Ben1983 last edited by mcm1957

                                    @ben1983

                                    OK - Für Javascript im Javascript Adapter gelten tw. andere Regeln.

                                    Wenn Unetrscheide allerdings eher verwirrend sind und aufwärtskompatibel anpassbar scheinen dann macht es ev. durchaus Sinn ein Issue zu erstellen. Bluefox migriert den Javascritp adapter meines Wissens nach z,Z zu Typescript. Da kann man ggF kompatible (!) Anpassungen durchaus vornehmen.

                                    Aber das müssen die Maintainer entscheiden.

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    850
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    5
                                    16
                                    472
                                    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