Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Hintergrund Timeouts stoppen bei mehrfach Ausführung?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Hintergrund Timeouts stoppen bei mehrfach Ausführung?

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

      @nik82 sagte: ich bekomme 5 Meldungen hintereinander:

      Man muss verhindern, dass die Timeouts mehrmals gestartet werden. Prinzip:

      Bild_2022-06-02_204017260.png

      nik82 2 Replies Last reply Reply Quote 1
      • nik82
        nik82 Most Active @paul53 last edited by

        @paul53

        Ah jetzt, also einfach eine Variable erstellen mit dem Namen des Timeouts und damit kann man man dann quasi den timeout Zustand abfragen.
        Cool, vielen Dank, wieder was gelernt👍

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

          @nik82 sagte: also einfach eine Variable erstellen mit dem Namen des Timeouts und damit kann man man dann quasi den timeout Zustand abfragen.

          Nein, keine Variable erstellen, sondern die Timervariable verwenden, die jeder Timer mitbringt!

          Werte besser "vorheriger Wert" aus (unter "Trigger").

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

            @paul53
            Ich war zu schnell beim antworten, du hast glaub ich deinen Post nochmal editiert oder?
            Vorher hast im "falls" ein "nicht" rein und danach eine dummy variable mit dem Namen des Timers rein. Oder hab ich mich da verschaut 🙂

            Aber "vorheriger Wert" unter Trigger ist auch super, den kannte ich auch noch nicht.

            Danke

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

              @nik82 sagte: du hast glaub ich deinen Post nochmal editiert oder?

              Ja, hab ich, da der Umgang mit den Timer-Variablen etwas trickreich ist:

              Die Timer-Variablen werden nicht angeboten:

              Bild_2022-06-02_223535526.png

              Also erstellt man eine dummy-Variable, die man in das Skript zieht:

              Bild_2022-06-02_223737549.png

              Anschließend selektiert man die richtige Timer-Variable:

              Bild_2022-06-02_223907518.png

              nik82 Schmakus 3 Replies Last reply Reply Quote 2
              • nik82
                nik82 Most Active @paul53 last edited by

                @paul53
                Perfekt, vielen Dank für die Info👍

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

                  @paul53
                  Jetzt muss ich leider nochmal nerven, ich habe das jetzt angelegt:

                  2b6f7c01-1661-469d-903a-a874b6d73653-image.png

                  Leider macht er aber nichts, wahrscheinlich weil er keinen vorherigen wert hat, jetzt muss ich quasi warten bis sich der wert wirklich ändert oder?

                  Momentan ist der Wert -8000, dass heißt ich muss warten bis der wert jetzt einmal über 200 geht und dann geht das wahrscheinlich.

                  Könnte man das noch verbessern, weil immer wenn ich das Script neustarte, müsste ich immer warten und das kann ja bis zum Abend dauern?

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

                    @nik82
                    Es werden die falschen Timer gestoppt!

                    @nik82 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:

                    wenn ich das Script neustarte, müsste ich immer warten und das kann ja bis zum Abend dauern?

                    Außerhalb des Triggers:

                    Bild_2022-06-03_110833608.png

                    nik82 2 Replies Last reply Reply Quote 0
                    • nik82
                      nik82 Most Active @paul53 last edited by

                      @paul53
                      Ok, danke. Oh da hat sich ein falscher Timeout eingeschlichen weil ich das Script für 1000 habe und einfach kopiert habe für den 200er Wert.

                      @paul53 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:

                      Außerhalb des Triggers:

                      Bild_2022-06-03_110833608.png

                      Was soll ich bei Object ID auswählen, wenn ich das so lasse, dann kommt eine Fehlermeldung im Log "State "Object ID" not found "

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

                        @paul53
                        Hat sich erledigt, ich mache es jetzt so:

                        55cc2742-63e2-4fe4-a41b-77d3e15c8825-image.png

                        Der Tip mit der dummy Variable und damit auf die timeouts zu gehen war super!
                        Das klappt einwandfrei.

                        Nochmal vielen Dank für deine super und schnelle Hilfe👍

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

                          Hallo zusammen,
                          habe das Script jetzt noch etwas erweitert und wollte das keinem vorenthalten, falls jemand genau das gleiche Thema hat.

                          Wir hatten ja als Beispiel dieses Script:

                          32469bb3-eeac-4df7-b649-8c9ac29187d7-image.png

                          Das klappt ja soweit ganz gut, nur bekomme ich hier IMMER eine Meldung wenn sich der Wert ändert, also auch wenn sich der Wert innerhalb der 5 Minuten ändert.
                          Ich möchte aber nur eine Meldung wenn ein Timeout wirklich durchgelaufen ist, also nur wenn der Wert auch für 5 Minuten bleibt.

                          Beispiel:
                          09:25 Uhr: Objekt geht auf false
                          09:26 Uhr: Objekt geht wieder auf true
                          --> jetzt würde nach 5 Minuten die Meldung "Variable ist wahr" kommen, da es sich aber nur innerhalb der einen Minute geändert hat möchte ich keine Meldung bekommen.

                          Beispiel2:
                          09:25 Uhr: Objekt geht auf false
                          09:30 Uhr: Meldung kommt "Variable ist falsch"
                          09:45 Uhr: Objekt geht auf true
                          09:50 Uhr: Meldung kommt "Variable ist wahr"
                          --> das ist in Ordnung weil die Variable mehr als 5 Minuten den Zustand false oder true hatte

                          Deswegen habe ich hier noch eine Variable dazugeschrieben:

                          f358c7dc-c88e-4a00-96be-b13d07cfea62-image.png

                          @paul53
                          Denke das ist von der Logik ok oder? 🙂

                          1 Reply Last reply Reply Quote 0
                          • nik82
                            nik82 Most Active last edited by nik82

                            @paul53

                            Hallo Paul, ich bräuchte wieder Hilfe von einem Profi 🙂

                            Ich habe dieses Script hier:

                            d69e2ac9-6744-4957-81bb-965a0a82bb37-image.png

                            Ich will quasi nur eine Fehler-Nachricht haben, wenn CarrierSense länger als 15 Minuten über 10 ist.
                            Und dann will ich nur eine Ok-Nachricht haben, wenn diese Bedingung vorher erfüllt war.

                            Wenn ich jetzt testweise den Wert auf 20 stelle, dann kommt nach 15 Minuten eine Error-Meldung --> soweit ok.
                            Stelle ich dann auf 0, dann kommt eine Ok-Meldung --> auch ok.

                            Stelle ich aber den Wert auf 20, dann nach ein paar Sekunden gleich wieder auf 0 --> dann kommt nichts --> auch ok.

                            Und stelle ich aber den Wert auf 20, dann nach ein paar Sekunden auf 30 und dann ein paar Sekunden später wieder auf 0 --> dann kommt nach 15min eine Fehler-Meldung und sofort darauf eine Ok-Meldung.
                            Aber eigentlich sollte da auch gar nichts kommen.

                            Kannst du mir da helfen, ich komm da nämlich einfach nicht weiter 😞
                            P.S. Er müsste ja eigentlich den Timeout "timeout_CarrierSense_falsch" stoppen, sobald der Wert wieder unter 10 geht, aber das macht er nicht (wenn sich der Wert mehrmals innerhalb des Timeouts ändert) und ich weis nicht warum

                            Danke im Voraus.

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

                              Habs gefunden!
                              Der Timeout "CarrierSense_falsch" wird ja mehrmals gestartet und dann "stop" "timeout" wird anscheinend nur der letzte gestoppt, aber nicht alle.
                              Deswegen einfach zusätzlich den eigenen Timeout noch stoppen, damit dieser nicht mehrfach ausgeführt wird:

                              c1b84a41-358a-40b4-8a92-a7ce085e3cf8-image.png

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

                                @paul53 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:

                                @nik82 sagte: du hast glaub ich deinen Post nochmal editiert oder?

                                Ja, hab ich, da der Umgang mit den Timer-Variablen etwas trickreich ist:

                                Die Timer-Variablen werden nicht angeboten:

                                Bild_2022-06-02_223535526.png

                                Also erstellt man eine dummy-Variable, die man in das Skript zieht:

                                Bild_2022-06-02_223737549.png

                                Anschließend selektiert man die richtige Timer-Variable:

                                Bild_2022-06-02_223907518.png

                                Tipp: Man benötigt nicht die Variaben! Bei den Timeouts findet man den Block "Verzögerung"

                                nik82 1 Reply Last reply Reply Quote 0
                                • nik82
                                  nik82 Most Active @Schmakus last edited by

                                  @schmakus
                                  Danke für den Tip, habe den Block "Verzögerung" gerade gefunden, aber was genau macht dieser Block?
                                  Ich verstehs leider noch nicht ganz, verzögert der die Timeout Ausführung?

                                  Schmakus 1 Reply Last reply Reply Quote 0
                                  • Schmakus
                                    Schmakus Developer @nik82 last edited by Schmakus

                                    @nik82 nein, dieser beinhaltet quasi die Variable des jewiligen Timeouts oder Intervall.
                                    Diesen kann man einsetzen, um zu prüfen, ob ein Tiemout schon läuft.

                                    => nicht Verzögerung timeout

                                    Bedenke aber, dass wenn ein timeout mal gestartet wurde, es jedoch nie gestoppt wurde, die Abfrage on "nicht timeout" immer wahr ergibt. Erst ein "stop timeout" löscht die Variable (setzt auf NULL). Ein timeout setzt sich nämlich nach erfolgreichem Ablauf nicht selbst zurück. Die timeout-ID bleibt weiterhin in der Variablen.

                                    nik82 1 Reply Last reply Reply Quote 1
                                    • nik82
                                      nik82 Most Active @Schmakus last edited by

                                      @schmakus
                                      Ah jetzt hab ich das verstanden, ich nehme quasi den Block statt der Variable.
                                      Vielen Dank für die Info.

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      464
                                      Online

                                      32.0k
                                      Users

                                      80.5k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      18
                                      924
                                      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