Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. SetState / getState Verzögerung ?

    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

    SetState / getState Verzögerung ?

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

      Hallo 🙂

      Wenn ich setState und direkt getState auf den gleichen Datenpunkt ausführe bekomme ich den gesetzten Wert nicht sofort zurück. Ich habe gelesen das der seState asyncron abgearbeitet wird doch nicht verstanden wie ich das umsetzen kann.

      Ich reagiere auf einen Datenpunkt und schreibe einen Wert den ich dann in einer Funktion wieder auslesen will. Leider bekomme ich das nicht sauber hin. Irgendwie verstehe ich die Logik da noch nicht so richtig. Wenn ich die Funktion danach ausführe kann sie den Wert lesen.

      Malc

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        Setze einen delay ein das Script arbeitet in Millisekunden die nächste Regel ab ein Set statt braucht schon ein paar Millisekunden befohr der Wert geschrieben ist.

        Wozu brauchst du den getstate sofort nach dem setzen ?

        –-----------------------

        Send from mobile device

        Das schöne ios hat Auto Korrektur zum k****

        Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

        1 Reply Last reply Reply Quote 0
        • M
          malc last edited by

          Ich habe in einige

          On() setState… und dann eine Funktion die dann mehre getState nutzt um einen gesamten Status zu ermitteln. Also sowas wie einen kombinierten Gesamtstatus.

          Du meinst einfach ein:

          setState(StateID, Val);

          setTimeout(function() { MeineFunction(); }, 10)

          Welche Wert wäre angemessen?

          1 Reply Last reply Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            währe es in deinem fall dan nicht sinnvoller den wert als eine variable in die function mit zu geben anstatt einen gestatte aus zu führen ?

            abhängig von der Belastung des systems kann es mal 50 oder 1000 oder 3000 Millisekunden dauern.

            Ich würde darauf verzichten das object zu lesen und direct die variable weitergeben

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Hallo,

              ich würde auch auf Variablen zurückgreifen.

              Weiterhin gibt es ja noch setStateDelayed(), das auch einen Callback hat. Also sehr kleines Delay und dann in den Callback getState().

              Aber selbst als nicht muttersprachlich JavaScriptender klingt das sehr holperig. Nimm die Variablen.

              Pix

              1 Reply Last reply Reply Quote 0
              • M
                malc last edited by

                So holprig finde ich das eigentlich nicht, ich versuche das mal genauer zu beschreiben:

                Ereignis meldet Wert weiter an einem Sammelzweig:

                Beispiel:

                -Radar Gerät 1 erreichbar -> Setstate -> Status.Anwesend_Device1 = Wahr

                • Funktionsaufruf Routine Ermittelt ob midenstens ein Gerät Erreichbar ist und setzt Status.Anwesend = Wahr

                -Radar Gerät 2 erreichbar -> Setstate -> Status.Anwesend_Device2 = Wahr

                • Funktionsaufruf Routine Ermittelt ob midenstens ein Gerät Erreichbar ist und setzt Status.Anwesend = Wahr

                So habe ich in VIS / Script den einfachen Zugriff ob überhaupt wer da ist und muss nicht alle Devices einzeln prüfen. Die Funktion ermittelt per "Status.Anwesend_*" den Gesamtzustand und schreibt "Status.Anwesend".

                Denke ich zu sehr um die Ecke ?

                Malc

                1 Reply Last reply Reply Quote 0
                • T
                  tempestas last edited by

                  Ähm,

                  der Radar Adapter hat doch "countHere" als State.

                  radar.0.countHere

                  Wenn der also > 0, dann ist wohl jemand da

                  1 Reply Last reply Reply Quote 0
                  • M
                    malc last edited by

                    Ja, den Status kenne ich.

                    Ich habe das nur als Beispiel genommen 🙂

                    Da ich vor gaaanz langer Zeit mal beruflich in der Prozesstechnik war bilde ich mir Routinen die Sammelstörungen und Quittierungen nach.

                    Malc

                    1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer last edited by

                      Abwarten bis der State tatsächlich gesetzt wurde, geht folgendermaßen:

                      setState("id.des.states", wert, ack, function(err, id) {
                          // [1] hier Code hin, der nach Setzten des States ausgeführt werden soll
                      });
                      // [2] weiterer Code - Achtung, wird VOR dem obigen Code [1] ausgeführt!
                      
                      

                      ack ist entweder true (Wert bestätigt) oder false (Aufforderung an Adapter, ein Gerät zu steuern)

                      1 Reply Last reply Reply Quote 0
                      • M
                        malc last edited by

                        Ah!

                        ALCalzone, die Lösung ist für mich perfekt!

                        Vielen Dank!

                        Das warten mit einem konstanten Wert ist eher schlecht, so gefällt es mir gut!

                        Malc

                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          Hallo,

                          du kannst dir natürlich ein Sammelibjekt anlegen. Dieses lässt Sicht in Vis besser darstellen.

                          Ich würde das Objekt aber mit einer Funktion befüllen, die alle Zweige mit Regex überwacht. Wenn eines der Objekte den Status ändert, werden alle anderen kurz abgefragt.

                          Für meine Fenster offen Überwachung nutze ich Selector. Die Fensterzustand Objekte sind einem Gewerk zugeordnet. Du könntest es Anwesenheit nennen. Dann werden alle Objekte im Gewerk überwacht. Ändert eines des Zustand, wird ein Objekt Fensterstatus gesetzt.

                          Das nutze ich für Räume mit mehreren Fenstern. Ist mindestens ein Fenster geöffnet, ist der Gesamtstatus offen. Aber auch, wenn alle offen sind. Nur wenn alle zu sind, ist der Status geschlossen.

                          Bin unterwegs, hab gerad keinen Code zur Hand.

                          Pix

                          eumats 1 Reply Last reply Reply Quote 0
                          • eumats
                            eumats @pix last edited by

                            @pix Mir ist bewusst das der Thread schon ziemlich alt ist, aber könntest Du Deinen Code bitte noch posten. Ich würde nämlich auch gerne eine Überwachung realisieren.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            632
                            Online

                            31.8k
                            Users

                            79.9k
                            Topics

                            1.3m
                            Posts

                            6
                            12
                            1714
                            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