Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. obj.common.name undefiniert - durch Timingproblem?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    obj.common.name undefiniert - durch Timingproblem?

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

      Habe hier ein Blockly, das mir "Reminder" überwachen, bzw. deren neue Erstellung abfangen und auf den "Betreff" reagieren soll.

      Sieht so aus:

      timing.PNG

      Der erzeugte Code:
      on({id: new RegExp("(alexa2.0.Echo-Devices.*.Reminder.*.time)"), change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if ((obj.common ? obj.common.name : "").indexOf('Starte Aufnahme') + 1 == 1) {
        }
      });
      

      Nun kommt es ab und an vor, dass das Skript abschmiert.
      Der Grund wohl, dass "Name" zum Zeitpunkt der Prüfung undefiniert ist.
      Im Log steht dann:

      Error in callback: TypeError: Cannot read property 'indexOf' of undefined
      

      Nun Frage ich mich, (wie) kann das sein?
      Ich vermute ein Timing Problem.
      Aber ist es überhaupt möglich, dass "Name" (noch) nicht definiert ist, wenn doch die Einträge für ".enabled", ".time" und ".triggered" alle schon da sind?
      Frage an den Alexa2 Meister @apollon77, wird erst ganz am Ende die Struktur "benannt"?
      Im Webinterface kann ich dazu leider keine Schlüsse ziehen, da das viel zu träge dafür ist. 😌
      Sollte ein Timeout von 500ms vor dem "Falls" das Skript sicher machen?

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

        @padrino sagte:

        Error in callback: TypeError: Cannot read property 'indexOf' of undefined

        Die Fehlermeldung kann man verhindern.

        Blockly_temp.JPG

        padrino 1 Reply Last reply Reply Quote 1
        • padrino
          padrino Most Active @paul53 last edited by

          @paul53
          Guter Tipp, danke.
          Aber dann wird ja nicht nur der Fehler unterdrückt, sondern auch das Skript evtl. gar nicht ausgeführt - obwohl "name" noch true sein wird.
          Vielleicht sollte ich es so machen 🤔
          intervall.PNG

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

            @padrino sagte:

            Vielleicht sollte ich es so machen

            Ich kann mir nicht vorstellen, dass common.name gesetzt wird, nachdem der Zustand des Datenpunktes geändert wurde. Wenn es aber wirklich ein Timing-Problem sein sollte, dann sollte timeout genügen.

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

              Mir ist auch neu das bei einem State-Change Subscribe Objektdaten enthalten sind! Du musst eher getObject mit der ID des getriggerten Statechanges machen um an den Name zu kommen

              paul53 padrino 2 Replies Last reply Reply Quote 0
              • paul53
                paul53 @apollon77 last edited by

                @apollon77 sagte:

                Mir ist auch neu das bei einem State-Change Subscribe Objektdaten enthalten sind!

                Wirklich ?

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

                  Ok, habt recht ... das gibts wirklich ... wieder was gelernt, aber da Objekte getrennt von States gepublished werden kann es zu solchen Timing-Dingen kommen.

                  Vor allem bei neuen Objekten wird der initiale State als Default wert gesetzt. An sich code tech isch läuft das nach dem Anlegen des Objekts, aber state und objects sind zwei getrennte Netzwerk-Verbindungen über die die Daten zu neuen Daten reinkommen. Damit ist die Reihenfolge wieder offen.

                  Ich würde ja ein delay von 500ms einbauen und dann getbject nehmen für die Objektdaten. Ist immer nch nicht 100% aber besser

                  1 Reply Last reply Reply Quote 0
                  • padrino
                    padrino Most Active @apollon77 last edited by padrino

                    @apollon77
                    Also, eigentlich klappt das hier so. 😉
                    a77_mail.PNG
                    War auch erstaunt, als auf einmal der Fehler auftrat, weil es ja sonst rund lief...

                    Dann pack' ich wohl ein timeout rein. Ich hab'/kann ja nur Blockly, damit kommt man leider nicht an jedes Detail ran...

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

                      @padrino Ist halt ein Timing Thema ,... 99% vs 1% und so 🙂

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      754
                      Online

                      31.9k
                      Users

                      80.3k
                      Topics

                      1.3m
                      Posts

                      blockly
                      3
                      9
                      318
                      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