Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Error/Bug
  4. Javascript - abnormales Verhalten - entgegen jeglicher logik

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Javascript - abnormales Verhalten - entgegen jeglicher logik

Geplant Angeheftet Gesperrt Verschoben Error/Bug
7 Beiträge 5 Kommentatoren 697 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    sleepless
    schrieb am zuletzt editiert von
    #1

    Moin,

    ich hab langsam keine Lust mehr. Entweder verstehe ich die Funktion nicht oder Javascript ist mal richtig buggy.

    Folgendes:

    Wenn ich diese Funktion nutze
    8188_bildschirmfoto_2018-08-24_um_16.26.26.png

    dreht das Ding irgendwann durch.

    z.B.: Zuerst verhält sich alles so wie es soll: Verändert sich einer der beiden, wird der Trigger ausgelöst.

    Nach einiger Zeit rastet der komplett aus. Das äußert sich daran, das ein Intervall 300mal ausgeführt wird. Oder andere Aktionen 10000mal durchgeführt werden - ohne das ich etwas an dem Script verändert hab.

    Hin und wieder ist dieses verhalten auch gleich zu anfang an. Sobald die "falls bedingung" erfüllt ist, wird diese 100mal ausgeführt. Das ist aber nirgends so programmiert.

    Hab ich daran etwas nicht verstanden oder spinnt das Java Modul?

    Edit: Ich kann da egal welches Objekt benutzen - sobald 2 oder mehr an einem Trigger sind mögen die Spiele beginnen :oops:

    1 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Zeig doch mal das vollständige Blockly und ggf auch den generierten JavaScript code bitte

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        sleepless
        schrieb am zuletzt editiert von
        #3

        Ich möchte nur verstehen, ob ich falsch denke oder es sich falsch verhält. Bestes Beispiel das hier:

        8188_bildschirmfoto_2018-08-26_um_12.48.35.png

        Ich erkläre einmal, wie ich es verstehe und ihr sagt, ob das richtig ist:

        Sobald die Variable schlaf_links_temp1 wahr ist, wird alle 5min eine Telegramnachricht gesendet. Gleichzeitig wird alle 300ms geprüft, ob eine Nachricht mit dem Content "Ja" im Telegrambot angekommen ist. Wenn ja, dann setze die Variable schlaf_links_temp1 auf unwahr und beende sowohl den 5 min Intervall als auch die Abfrage. Dadurch, das die Variable schlaf_links_temp1 auf unwahr gesetzt wird, wird auch gleichzeitig der ganze "Check Block" nicht mehr ausgeführt.

        irgendwann jedoch ignoriert ioBroker bzw. Javascript die Anweisung "stop zyklische Ausführung" und ihr könnt euch ja vorstellen, was das bei einem "Ja" bedeutet: Nachrichten im Bot im Abstand von 300ms…. Damit habe ich ein SPAM-Bot, nicht mehr oder weniger. Ich komme dann nur aus der Nummer mit stoppen des ganzen Scriptes.

        Und das verstehe ich nicht. Wie kann das dumme Teil einfach irgendwann die Befehle "stop zyklische Ausführung" ignoieren? Am anfang klappt das ja wunderbar..

        Hier der Javacode dazu:

        var Schlaflinks, Abfrageschlafli;
        
        on({id: "javascript.0.var.temp.schlaf_links_temp1"/*schlaf_links_temp1*/, val: true}, function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          Schlaflinks = setInterval(function () {
            sendTo("telegram", "send", {
                text: 'Schlafzimmer Fenster links ist auf. Ist das korrekt? (Stoppbar durch Anwesenheit oder Frage beantworten)'
            });
          }, 300000);
          Abfrageschlafli = setInterval(function () {
            if (getState("telegram.0.communicate.request").val == '[nojo]Ja' || getState("telegram.0.communicate.request").val == '[nida]Ja' || getState("hm-rpc.0.MEQ0615319.1.STATE").val == false) {
              setState("javascript.0.var.temp.schlaf_links_temp1"/*schlaf_links_temp1*/, false, true);
              sendTo("telegram", "send", {
                  text: 'Danke für die Rückmeldung oder schließung des Fensters Schafen links'
              });
              (function () {if (Schlaflinks) {clearInterval(Schlaflinks); Schlaflinks = null;}})();
              (function () {if (Abfrageschlafli) {clearInterval(Abfrageschlafli); Abfrageschlafli = null;}})();
            }
          }, 300);
        });
        
        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          sleepless
          schrieb am zuletzt editiert von
          #4

          Ist das richtig so?

          Umso mehr ich versuche, unnötige "Extra - Stopp Aktionswürste" in dem Programmierten Teil einzubauen, damit er mich nicht zuspamt, umso mehr frag ich mich, was es an dem Befehl "stoppe" nicht zu verstehen gibt und umso mehr stelle ich die daseins-Berechtigung von Blockly in Frage…

          Kann es sein, das der Trigger falsch Interpretiert wird und die Schleife 3 Mio mal aufgrufen wird oder das der Stop-Befehl dem trigger hinterherrennt?

          Weil es ist unerklärlich, das ein Programm zu Anfang anständig läuft und irgendwann völlig ausrastet...

          Gibt's dazu logs? Kann man da traps einbauen, um das verhalten zu entlarven?

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            RappiRN
            Most Active
            schrieb am zuletzt editiert von
            #5

            Deine Logik ist schon richtig, mit den Schleifen hat sich aber schon so Mancher Probleme eingehandelt. Warum genau kann ich dir leider nicht erklären! :(

            Versuch, eine Funktion einzufügen, die alle 5min bzw alle 300ms läuft, vielleicht geht das. ALso im Hauptteil die Funktion starten und beenden und in der Funktion mit dem Cron-Trigger die Schleifen ersetzen.

            Enrico

            1 Antwort Letzte Antwort
            0
            • BuZZyB Offline
              BuZZyB Offline
              BuZZy
              schrieb am zuletzt editiert von
              #6

              Verstehe ich das richtig?

              Du bekommst mit dem Script eine Nachricht "Schlafzimmer Fenster links ist auf…..."

              Dann antwortest du "Ja" und der Bot schreibt einmalig "Danke für die Rückmeldung....."..

              Und irgendwann (eine Stunde später oder so?) ohne das du was tust kommen plötzlich alle 300 ms Sekunden Nachrichten

              "Danke für die Rückmeldung oder schließung des Fensters Schafen links" ??

              Wie und durch was wird javascript.0.var.temp.schlaf_links_temp1 auf true gesetzt?

              Gibt es noch mehr Blöcke die schlaf_links_temp1 auf irgendwelche Veränderungen prüfen?

              Hast du z.B. Blöcke die reagieren wenn schlaf_links_temp1 auf false geht?

              Eventuell sogar in einem anderen Script irgendwas vorhanden was Änderungen an javascript.0.var.temp.schlaf_links_temp1 vornimmt?

              Gruß

              1 Antwort Letzte Antwort
              0
              • AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                schrieb am zuletzt editiert von
                #7

                Ich vermute eine https://de.wikipedia.org/wiki/Race_Condition:

                Der ursprüngliche Trigger wird mehrfach ausgelöst (z.B. Fenster auf, zu und wieder auf / Wackelkontakt?). Dadurch wird das Intervall mehrfach gestartet, aber nur die letzte Referenz in der Variable gespeichert. Stoppen des Intervalls löscht dann nur das referenzierte, nicht das unreferenzierte.

                Ich sehe zwei Lösungen:

                1. Trigger ändern auf "wurde geändert" plus eine zusätzliche Prüfung ob der Datenpunkt wahr ist. Zu Beginn des Triggers als erstes die Intervalle stoppen.

                2. Die Lösung komplett ohne das 300ms-Intervall abbilden. Dazu das Intervall durch einen weiteren Trigger (außerhalb des anderen) ersetzen, der den Telegram-DP prüft. Wenn diese Prüfung erfolgreich ist, UND Fenster offen, dann Nachricht schreiben.

                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                1 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                829

                Online

                32.4k

                Benutzer

                81.5k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe