Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @invidianer last edited by

      @invidianer sagte in Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern:

      hatte ich schon gemacht

      mit welcher Auflösung?

      @invidianer sagte in Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern:

      daraus kam ja der Wert 3 zustande.

      und nie 2.9?

      I 1 Reply Last reply Reply Quote 1
      • I
        invidianer @paul53 last edited by

        @paul53
        Hatte ich neulich nach einem Update schon gemacht, also alles komplett neugestartet (den ganz RaspberryPi).
        War vorher und eben auch heute so.

        paul53 1 Reply Last reply Reply Quote 0
        • I
          invidianer @Homoran last edited by

          @homoran
          Das weiß ich nicht mehr genau, war jedenfalls eine Riesenfummelei und will ich mir nicht nochmal antun ehrlich gesagt.
          Kann man nicht einfach nach der ersten Meldung einen "break" einbauen?

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

            @invidianer sagte: War vorher und eben auch heute so.

            Überprüfe mal die Selektion der Timer-Variablen bei "stop timeout" und bei "nicht Verzögerung timeout". Eigentlich ist es nicht möglich, dass die Meldung ein zweites Mal kommt, bevor der Timer gestoppt wurde.
            Schau mal in den erzeugten Javascript-Code, ob sich irgendwo ein Block versteckt hat.

            I 1 Reply Last reply Reply Quote 1
            • I
              invidianer @paul53 last edited by

              @paul53
              Ah! Ich weiß, was Du meinst!
              Bei "timeout_fertig" ist rechts daneben ein Pfeil nach unten, wo man es sozusagen auswählen kann. Aber an einer Stelle ist es nicht da, nämlich bei "Ausführen"! Da habe ich es wohl "per Hand" eingetippt, nicht ausgewählt.
              Muß ich das korrigieren? Wie erreiche ich, daß da so ein "Auswahlmenü" kommt?

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

                @invidianer sagte: an einer Stelle ist es nicht da, nämlich bei "Ausführen"!

                Dort definiert man den Variablenbezeichner für den Timer.

                I 1 Reply Last reply Reply Quote 1
                • I
                  invidianer @paul53 last edited by

                  @paul53
                  Achso. Schade, dann ist es so ja wohl richtig 😞
                  Wie meintest Du das mit dem eventuell versteckten Block, den man über Java-Skript sehen kann? Wie mache ich das?

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

                    @invidianer sagte: versteckten Block, den man über Java-Skript sehen kann?

                    Ich habe mal importiert: In Zeile 20 Javascript-Code steht

                          timeout_fertig = null;
                    

                    Der ist falsch und für dieses Verhalten verantwortlich.

                    I 1 Reply Last reply Reply Quote 1
                    • I
                      invidianer @paul53 last edited by

                      @paul53
                      Hm, okay, danke, aber wie bekomme ich den aus dem Blockly raus? Da sehe ich nirgends eine solche Zuweisung 😞

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

                        @invidianer sagte: wie bekomme ich den aus dem Blockly raus?

                        Es ist offenbar eine fehlerhafte Implementation des Timeout-Blocks in neueren Javascript-Adapter-Versionen (ab 29.5.2023).
                        Workaraound:

                        Blockly_temp.JPG

                        I 1 Reply Last reply Reply Quote 1
                        • I
                          invidianer @paul53 last edited by

                          @paul53
                          Okay, danke, ich habe den "setze timeout_fertig auf wahr" ergänzt.
                          Krass, dann habe ich quasi einen Fehler aufgedeckt? Dann hatte es ja vielleicht was Gutes 😉

                          paul53 haus-automatisierung 2 Replies Last reply Reply Quote 0
                          • paul53
                            paul53 @invidianer last edited by

                            @invidianer sagte: Fehler aufgedeckt? Dann hatte es ja vielleicht was Gutes

                            Habe Issue auf Github erstellt.

                            I 1 Reply Last reply Reply Quote 2
                            • I
                              invidianer @paul53 last edited by

                              @paul53
                              Dankeschön!

                              1 Reply Last reply Reply Quote 0
                              • haus-automatisierung
                                haus-automatisierung Developer Most Active @invidianer last edited by

                                @invidianer sagte in Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern:

                                Krass, dann habe ich quasi einen Fehler aufgedeckt?

                                Definitionssache. setTimeout liefert eine timeout ID zurück. Also eine Referenz auf einen Timeout, mit welcher dieser abgebrochen werden kann (siehe stop (verwendet clearTimeout()). Wenn der Timeout nun durchgelaufen ist, ist diese Timeout ID ja nicht mehr gültig und der Timeout existiert ja nicht mehr. Daher ist es aus meiner Sicht sinnvoll (mache ich überall in der JavaScript-Programmierung mit Timeouts so - und viele andere auch), diesen Wert wieder zurückzusetzen.

                                Heiß: In der Timeout-Variablen steht nur etwas, wenn ein aktiver (= noch nicht ausgeführter Timeout) existiert, welcher ggf. abgebrochen werden soll. Damit kann man vermeiden, einen Timeout ein zweites Mal zu starten (= nicht <timeout>).

                                Aus meiner Sicht also alles korrekt.

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @haus-automatisierung last edited by

                                  @haus-automatisierung sagte: Wenn der Timeout nun durchgelaufen ist, ist diese Timeout ID ja nicht mehr gültig

                                  Sie blockiert aber den Neustart des Timers, solange die Leistung unterhalb des Grenzwertes schwankt.

                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @paul53 last edited by haus-automatisierung

                                    @paul53 sagte in Fälschlicherweise mehrfache Ausgabe einer Meldung verhindern:

                                    Sie blockiert aber den Neustart des Timers, solange die Leistung unterhalb des Grenzwertes schwankt.

                                    Dann muss man das in diesem Fall mit einer weiteren Variable sperren. Also z.B. waschvorgangAktiv = true wenn einmal die Leistung über 3 Watt war. Und das dann in dem "sonst falls` mit aufnehmen.

                                    EDIT: Gibts ja schon (Waschmaschine aktiv). Einfach mit UND in den sonst falls aufnehmen

                                    falls nicht <timeout> UND Waschmaschine aktiv

                                    paul53 I 2 Replies Last reply Reply Quote 1
                                    • paul53
                                      paul53 @haus-automatisierung last edited by

                                      @haus-automatisierung sagte: Dann muss man das in diesem Fall mit einer weiteren Variable sperren.

                                      Aber erst durch die Änderung in Blockly vom 29.05.2023. Damit ist Blockly nicht mehr abwärtskompatibel.

                                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                                      • haus-automatisierung
                                        haus-automatisierung Developer Most Active @paul53 last edited by haus-automatisierung

                                        @paul53 Ja, und vorher war es ein Bug, dass die Timeouts nicht zurückgesetzt wurden, wenn sie gelaufen sind. Warum nicht abwärtskompatibel? Es gab vor 7.x gar keinen Block dafür, um überhaupt auf einen existierenden Timeout zu prüfen. Ja, man konnte eine Variable anlegen die genauso wie der Timeout hieß - das war aber nie so vorgesehen und ein unschöner Workaround.

                                        Aktuell gibt es keinen Block, um einen Timeout zurück auf null zu setzen. Nur mit "stop" - und das ist vom Wording ja etwas komisch, weil der ja gar nicht mehr läuft, wenn man das innerhalb der Callback-Funktion nutzt.

                                        Das ist aufgefallen, als ich den "Variablen-Block" für Timeouts implementiert habe. Also bei genau so einem Fall wie oben. Ich wollte damit prüfen, ob es schon einen laufenden Timeout gibt. Falls nicht -> starten. Das gewünschte Verhalten à la "wurde jemals ein Timeout gestartet?" finde ich nur schwer verständlich.

                                        Ich hatte vorher auch geschaut, ob das "Variable mit dem gleichen Namen wie der Name des Timeouts anlegen"-Workaround irgendwo in der Dokumentation auftaucht. War nicht der Fall.

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @haus-automatisierung last edited by paul53

                                          @haus-automatisierung sagte: Es gab vor 7.x gar keinen Block dafür, um überhaupt auf einen existierenden Timeout zu prüfen.

                                          Das war schon immer möglich - nicht mit einer selbst erstellten Variablen. Es gab nur keinen gesonderten (grünen) Block dafür. Außerdem musste man, wenn man den Timeout gerade erst erstellt hatte, erst in die Javascript-Ansicht und wieder zurück schalten.
                                          Es funktioniert noch genau so, außer dass in der Javascript-Ansicht eine zweite Variable timeout auftaucht.

                                          haus-automatisierung 2 Replies Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @paul53 last edited by

                                            @paul53 Und das findest Du wirklich logischer als das aktuelle Verhalten?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            40
                                            1397
                                            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