Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] - GetState in Schleife liefert zuerst false

    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

    [Gelöst] - GetState in Schleife liefert zuerst false

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

      @codierknecht
      HI also das Problem ist nicht das erstellen der Datenpunkte das funktioniert sondern das auslesen in der Schleife.

      Selbst wenn die erstellt sind, kann ich die States nicht abrufen es geht immer der erste nicht.
      Macht auch keinen Unterschied ob Async oder nicht.

      Sobald bei devices[i].deviceName das i den Wert 0 hat funktioniert es nicht.

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Peoples last edited by Codierknecht

        @peoples
        Also zunächst mal finde ich persönlich es extrem schwierig zu lesen, wenn innerhalb der Objektdefinition Kommentare eingefügt sind. Ich würde das außerhalb der Deklaration dokumentieren (wenn überhaupt - was da gemacht wird ist eigentlich auch ohne Kommentare klar).

        Auch warum die beiden Variablen instanz und pfad0 nicht direkt als Stringliterale besetzt sondern zusammengebaut werden, erschließt sich nicht. Macht es nur schwerer zu lesen.

        Was sagt denn das hier:

        async function scheduleDeviceStates() { 
          try {
            for(var i = 0; i < devices.length; i++) { 
              log(devices[i].deviceName + ' --->' + i);
            }
          } catch (error) {
              log(`Unexpected error - ${error}`, 'error');
          }
        }
        

        Wird das array zumindest sauber gelesen?
        Bei mir schon - ich vermute immer noch, dass beim ersten Durchlauf noch nicht alle DP existieren bzw. mit ihren Defaultwerten besetzt sind.

        Warum überhaupt createStateAsync? Nur um die parallel zu erzeugen?
        Wenn die sauber nacheinander erzeugt werden, dauert das doch nur wenige Millisekunden.
        Da wäre mir der ganze Verwaltungskram für die Parallelität zu aufwändig.
        Ich würde das zunächst mal ganz klassisch synchron machen. Wenn's zu viel Performance frisst, kann man das später immer noch optimieren.
        KISS ... keep it simple stupid

        Rules of Optimization:
        Rule 1: Don’t do it.
        Rule 2 (for experts only): Don’t do it yet.

        Oder um es mit den Worten von Donald Knuth zu sagen:

        premature optimization is the root of all evil

        Codierknecht Peoples 2 Replies Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @Codierknecht last edited by

          @codierknecht
          Gerade genau Dein Script mal in 2 Stufen laufen lassen:
          1.) Den zweiten Funktionsaufruf auskommentiert. Es werden wie erwartet alle DP erzeugt.
          2.) Den ersten Funktionsaufruf auskommentiert. Ergebnis:

          29.11.2022, 19:50:30.280	[info ]: javascript.1 (23493) Start javascript script.js.test.Test_JS
          29.11.2022, 19:50:30.296	[info ]: javascript.1 (23493) script.js.test.Test_JS: 8:00 --->0
          29.11.2022, 19:50:30.297	[info ]: javascript.1 (23493) script.js.test.Test_JS: 8:00 --->1
          29.11.2022, 19:50:30.297	[info ]: javascript.1 (23493) script.js.test.Test_JS: 8:00 --->2
          29.11.2022, 19:50:30.297	[info ]: javascript.1 (23493) script.js.test.Test_JS: 8:00 --->3
          
          1 Reply Last reply Reply Quote 0
          • Peoples
            Peoples @Codierknecht last edited by Peoples

            @codierknecht

            Danke ich habe jetzt meinen Fehler gefunden

            Codierknecht 2 Replies Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Peoples last edited by

              @peoples sagte in [Gelöst] - GetState in Schleife liefert zuerst false:

              Nicht jeder ist ein "ausgebildeter / studierter" Programmierer, ergo man macht vieles wie man denkt.
              Auch Zitate helfen oft wenig weiter und fördern nur einen Eindruck den man wahrscheinlich seinem Gegenüber nicht vermitteln will.

              Akzeptiert ... war aber tatsächlich nur gut gemeint 😉
              Ich beschäftige mich mittlerweile seit Jahren viel mit dem Thema "CleanCode".
              Meine Quintesenz: Gut lesbarer Code funktioniert meist - weil sich Bugs nicht so leicht verstecken können.
              Ausgebildet/studiert übrigens nicht - ich hatte lediglich das große Glück, mein Hobby zum Beruf machen zu können.

              Ich bin gerade dabei, mich in die Grundzüge von await und async einzulesen.
              Ich hoffe, in ein paar Minuten eine Lösung für Dein Problem anbieten zu können.
              Mein erster Ansatz funktioniert nämlich im Übrigen nicht. createState scheint grundsätzlich asynchron zu sein. Man weiß ohne besondere Vorkehrungen also nicht, wann alle DP tatsächlich existieren.

              F 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @Peoples last edited by

                @peoples sagte in [Gelöst] - GetState in Schleife liefert zuerst false:

                @codierknecht

                Danke ich habe jetzt meinen Fehler gefunden

                Und der wäre? Interessiert mich auch.

                Peoples 1 Reply Last reply Reply Quote 0
                • Peoples
                  Peoples @Codierknecht last edited by

                  @codierknecht
                  Ich bin ein Idiot 🙂

                  Ich hatte in dem ersten Datenpunkt keine Zeit '8:00' drin stehen sondern tatsächlich ein 'false'.
                  Deswegen hat er auch immer das false ausgegeben

                  Codierknecht 2 Replies Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @Peoples last edited by

                    @peoples
                    😁

                    Ich habe mittlerweile folgende Lösung gefunden:

                    async function scheduleDeviceStates(){ 
                       try {
                            await createDeviceStates();
                            for(var i = 0; i < Object.keys(devices).length; i++) { 
                    
                    

                    Die erste Funktion wird nicht bei Scriptstart aufgerufen, sondern bevor in der zweiten Funktion die DP verarbeitet werden.
                    Mit diesem Konstrukt wird auf die Beendigung gewartet und erst dann die Schleifenverarbeitung gestartet.

                    Wieder was dazugelernt - Danke!

                    Da wirste alt wie 'ne Kuh und lernst immer noch dazu

                    1 Reply Last reply Reply Quote 1
                    • F
                      fastfoot @Codierknecht last edited by

                      @codierknecht sagte in GetState in Schleife liefert zuerst false:

                      Ich bin gerade dabei, mich in die Grundzüge von await und async einzulesen.

                      dann interessiert dich möglicherweise das hier. Ist aber nichts was man unbedingt sofort versteht 🙂

                      Codierknecht 1 Reply Last reply Reply Quote 1
                      • Codierknecht
                        Codierknecht Developer Most Active @Peoples last edited by

                        @peoples
                        Nur der Vollständigkeit halber und weil wir am Ende des Tages dann beim Smalltalk angekommen sind:
                        Die Krux ist tatsächlich dieser Async-Kram. Den muss man an der Ecke halt irgendwie in den Griff kriegen.
                        Wirkliche "Fehler" waren in Deinem Code ja nicht vorhanden 😉

                        Falls es interessiert: https://clean-code-developer.de/
                        Ist jetzt nicht die allerbeste Adresse, weil da kommerzielle Gedanken dahinterstehen. Aber das ist ja durchaus legitim und die Seite fasst Dinge gut zusammen, die man sich sonst aus allen möglichen Quellen zusammensuchen muss.

                        1 Reply Last reply Reply Quote 1
                        • Codierknecht
                          Codierknecht Developer Most Active @fastfoot last edited by

                          @fastfoot
                          Danke! 👍

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          941
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          javascript
                          3
                          13
                          391
                          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