Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Möglicher Bug im javascript Adapter bei createState()

    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

    Möglicher Bug im javascript Adapter bei createState()

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

      Wenn ich es richtig verstanden habe sollte sich createState() so verhalten, dass ein State nicht neu angelegt wird, wenn dieser schon existiert. Eine Außnahme ist wenn forceCreate=true verwendet wird.

      Bei mir habe ich festgestellt, dass in jedem Fall der ein State neu angelegt wird.
      Kann das jemand bestätigen?

      Hierzu ein kleines Testscript:

      createState(
          '0_userdata.0.test.state1', 
          {name: 'test state1'}, 
          function() { log('created'); });
      
      createState(
          '0_userdata.0.test.state2', 
          0,
          false,  // force
          {name: 'test state2'}, 
          function() { log('created (force:false)'); });
      

      Beide createState() Aufrufe sollten m.E. den State nicht neu anlegen - tun sie aber.

      @apollon77 Was meinst du dazu?

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

        @BoehserWolf
        Das sind zwei unterschiedliche Datenpunkte '0_userdata.0.test.state1' und '0_userdata.0.test.state2'. Man kann mit createState() beliebig viele unterschiedliche Datenpunkte erzeugen.
        createState() verhindert nur das Überschreiben eines bereits existierenden Datenpunktes. Wenn innerhalb eines Scripts createState() mit der gleichen ID unmittelbar hintereinander aufgerufen wird, werden wohl die Eigenschaften des zweiten Aufrufs erzeugt, da die Prüfung auf "existiert bereits" negativ ist, denn der erste Aufruf ist noch nicht abgeschlossen (asynchrone Ausführung).

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

          @paul53 said in Möglicher Bug im javascript Adapter bei createState():

          @BoehserWolf
          Das sind zwei unterschiedliche Datenpunkte '0_userdata.0.test.state1' und '0_userdata.0.test.state2'. Man kann mit createState() beliebig viele unterschiedliche Datenpunkte erzeugen.

          Ja das ist soweit klar.

          createState() verhindert nur das Überschreiben eines bereits existierenden Datenpunktes. Wenn innerhalb eines Scripts createState() mit der gleichen ID unmittelbar hintereinander aufgerufen wird, werden wohl die Eigenschaften des zweiten Aufrufs erzeugt, da die Prüfung auf "existiert bereits" negativ ist, denn der erste Aufruf ist noch nicht abgeschlossen (asynchrone Ausführung).

          Ok auch klar.

          Denke ich habe mich wohl nicht eindeutig ausgedrückt.

          Also, ich habe ein selbst erstelltes Script, das beim Start ohne jegliche Abfrage createState() Aufrufe ohne forceCreate enthält. Nachfolgend reagiere ich in dem Script auf HM States mit on(...) und setze vorher erzeugte States entsprechend. Soweit so gut und funktioniert.
          Beim Neustart des Scripts bzw. der JS Instanz bzw. des iobrokers ist mir aufgefallen, dass die von mir erzeugten States nicht korrekt gesetzt werden obwohl alle HM states passen und die vorher korrekt gesetzten eigenen States richtig standen.
          Dann habe ich angefangen zu suchen und festgestellt, dass die createState() Aufrufe beim Neustart des Scripts die vorhandenen States überschreiben obwohl sie das nicht sollten.

          Daher habe ich obiges Beispiel zusammen gezimmert um das vermeintliche Problem zu reproduzieren. Das heißt, wird obiges Script 1x ausgeführt, werden beide States erzeugt. Der 1. State ist implizit ohne forceCreate, der 2. State ist explizit ohne forceCreate. Von beiden States erwarte ich, dass die States beim 2. Script NICHT neu gesetzt werden. Das passiert jedoch und sollte nach meinem Verständnis so nicht sein - oder doch?

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

            @BoehserWolf sagte:

            dass die createState() Aufrufe beim Neustart des Scripts die vorhandenen States überschreiben

            Das kann ich nicht nachvollziehen, denn bei mir (JS 4.6.17) verändert createState() an einem existierenden Datenpunkt nichts (gerade getestet).

            EDIT: Nochmal mit einem Datenpunkt unter "0_userdata.0" getestet: createState() überschreibt den existierenden Datenpunkt.
            Erstelle bitte Issue auf Github.

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

              @paul53 Vielen Dank fürs Bestätigen.
              Issue: https://github.com/ioBroker/ioBroker.javascript/issues/597#issue-632406070

              Bei mir läuft übrigens derzeit noch JS 2.2.9

              BoehserWolf created this issue in ioBroker/ioBroker.javascript

              closed createState() in "0_userdata.0" overwrites existing state #597

              1 Reply Last reply Reply Quote 1
              • apollon77
                apollon77 last edited by

                So, wir haben mal ein bissl an den socket.io ping/pong timeouts rumgespielt ... Dazu checkt bitte mal Admin 4.1.6 ... Also: Admin installieren, Javascript am besten so lassen wie es probleme machte. Dann Auf jeden Fall mal im browser reloaden (hart) ode rbrwoser zu und auf und so ... ... Besser?

                Die 4.1.6 NICHT auf GitHub installieren, das geht nicht so simpel ... also kurz warten bis es im Latest Repo auftaucht bitte! Repo Update ist angestossen ... kann aber 1-2h dauern

                sigi234 paul53 2 Replies Last reply Reply Quote 0
                • sigi234
                  sigi234 Forum Testing Most Active @apollon77 last edited by

                  @apollon77 sagte in Möglicher Bug im javascript Adapter bei createState():

                  Die 4.1.6 NICHT auf GitHub installieren, das geht nicht so simpel ... also kurz warten bis es im Latest Repo auftaucht bitte! Repo Update ist angestossen ... kann aber 1-2h dauern

                  Schon da.

                  Screenshot (292).png

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

                    @apollon77 sagte:

                    wir haben mal ein bissl an den socket.io ping/pong timeouts rumgespielt

                    Was hat das damit zu tun, dass createState('0_userdata.0.xyz', init, common) einen bestehenden Datenpunkt überschreibt ?

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

                      @paul53 Hab mich im thread vertan 😞 Sorry

                      Aber dazu bitte nochmal mit Javascript 4.6.19 versuchen 🙂

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

                        Ok, nächster Versuoch 4.6.20 ...

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

                          @apollon77
                          4.6.20: createState('0_userdata.0.xyz', init, common) überschreibt bestehenden Datenpunkt nicht mehr.

                          1 Reply Last reply Reply Quote 1
                          • maeb3
                            maeb3 last edited by

                            hatte den Fehler auch. ist bei mir mit Version 4.6.20 jetzt auch behoben.

                            Danke,
                            Matthias

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate
                            FAQ Cloud / IOT
                            HowTo: Node.js-Update
                            HowTo: Backup/Restore
                            Downloads
                            BLOG

                            735
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            javascript bug
                            5
                            12
                            831
                            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