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.
    • nik82
      nik82 Most Active last edited by

      Hallo,
      ich glaube ich stehe auf dem Schlauch, ich will eigentlich nur eine Variable schreiben sobald der Netzbezug meiner PV auf über 1 KW ist.

      Da der Wert aber alle Minuten kommt, wird das Script auch 5 mal ausgeführt und ich bekomme 5 Meldungen hintereinander:

      9b586456-f4c9-4cfb-9bc6-deea8031dace-image.png

      Jetzt habe ich noch zusätzlich einen Timeout nach dem ausführen des eigentlichen Timeouts rein und hoffe das hier alle Timeouts dann wirklich gestoppt werden:

      93353e2f-6641-427c-adde-f5e9e13208da-image.png

      Bin ich da auf dem richtigen Weg oder mache ich das viel zu kompliziert?🤦‍♂️

      paul53 1 Reply Last reply Reply Quote 0
      • 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

                                        873
                                        Online

                                        32.0k
                                        Users

                                        80.5k
                                        Topics

                                        1.3m
                                        Posts

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