Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Script funktioniert auf ein mal nicht mehr

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Script funktioniert auf ein mal nicht mehr

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

      Hi Leute,
      habe heute folgendes Problem mit ein Script "bekommen" welches seit 4 Jahre tadellos funktioniert hat:

      b0e180e1-4494-47a7-a38c-9d66ec57f007-grafik.png

      var timeout_ht;
      
      
      // Kurz
      on({ id: 'shelly.0.SHSW-25#40F520006202#1.Relay0.EventCount' /* Event Counter */, change: 'gt' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        // Wenn Licht aus
        if (getState('shelly.0.SHSW-25#40F520006202#1.Relay0.Switch').val == false) {
          // Schalte für 5 Minuten ein
          if (getState('shelly.0.SHSW-25#40F520006202#1.Relay0.longpush').val == false) {
            setState('shelly.0.SHSW-25#40F520006202#1.Relay0.Switch' /* Switch */, true);
            timeout_ht = setTimeout(async () => {
              timeout_ht = null;
              setState('shelly.0.SHSW-25#40F520006202#1.Relay0.Switch' /* Switch */, false);
            }, 300000);
          } else {
            setState('shelly.0.SHSW-25#40F520006202#1.Relay0.Switch' /* Switch */, true);
            setState('shelly.0.SHSW-25#40F520006202#1.Relay0.longpush' /* Longpush */, false, true);
          }
        } else {
          // Schalte aus
          setState('shelly.0.SHSW-25#40F520006202#1.Relay0.Switch' /* Switch */, false);
          (() => { if (timeout_ht) { clearTimeout(timeout_ht); timeout_ht = null; }})();
        }
      });
      
      

      Beim betätigen des Schalters geht das Licht für den Bruchteil einer Sekunde an und wieder aus.
      Umgekehrt, wenn das Licht an ist und ich es ausschalten möchte, geht es für einen Bruchteil einer Sekunde aus und dann wieder an.

      4.1.2025, 21:59:52.603	[info ]: javascript.0 (365) Stopping script script.js.1.Work.Hoflicht_Haustuer
      4.1.2025, 21:59:54.539	[info ]: javascript.0 (365) Start JavaScript script.js.1.Work.Hoflicht_Haustuer (Blockly)
      4.1.2025, 21:59:54.548	[info ]: javascript.0 (365) script.js.1.Work.Hoflicht_Haustuer: subscribe: {"pattern":{"id":"shelly.0.SHSW-25#40F520006202#1.Relay0.EventCount","change":"gt","q":0},"name":"script.js.1.Work.Hoflicht_Haustuer"}
      4.1.2025, 21:59:54.549	[info ]: javascript.0 (365) script.js.1.Work.Hoflicht_Haustuer: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      4.1.2025, 22:00:58.843	[info ]: javascript.0 (365) script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":false,"ack":true,"ts":1736024435576,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736024075492}
      4.1.2025, 22:00:58.843	[info ]: javascript.0 (365) script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, state={"val":false,"ack":false,"ts":1736024458843,"q":0,"from":"system.adapter.javascript.0","lc":1736024458843,"c":"script.js.1.Work.Hoflicht_Haustuer"})
      

      Gestern habe ich 2-3 Adapter geupdatet. DasWetter, Zigbee und vielleicht noch JavaScript? Es kann aber auch sein, dass ich mir das das mit dem JS Adapter nur einbilde. Bin mir einfach nicht mehr sicher.
      Aufgefallen ist es mir erst Heute, bin mir aber zu 99% sicher, dass es gestern noch ging...

      Hat irgendeiner eine Idee, was da schief gelaufen ist?

      haselchen paul53 Dr. Bakterius 3 Replies Last reply Reply Quote 0
      • haselchen
        haselchen Most Active @Dark Angel last edited by haselchen

        @dark-angel

        Naja, wenn Du nur kurz drauf drückst, ist es kein Longpush, wie es in Deinem Blockly steht.

        Edit: vielleicht ist es auch bisschen spät und ich bin mit Deinen switch und longpush Bausteinen durcheinander gekommen...

        Bin mir sicher , dass @paul53 schon ne Lösung parat hat 🙂

        Dark Angel 1 Reply Last reply Reply Quote 0
        • Dark Angel
          Dark Angel @haselchen last edited by

          @haselchen
          Im Script wird zuerst geprüft, ob das Licht aus ist:
          Wenn JA: ob ein Longpush statt gefunden hat, welcher das Licht einfach nur Dauerhaft einschaltet.
          Wenn kein Longpush, dann Licht einschalten mit einen Timer von 5 Minuten.
          Wenn Nein: Licht ausschalten.

          Wie schon geschrieben, hat das Script bis jetzt über 4 Jahre lang genau so funktioniert, wie es sein sollte.

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

            @dark-angel sagte: geht das Licht für den Bruchteil einer Sekunde an und wieder aus.

            Hat sich das Verhalten von "Event Counter" geändert? Logge mal den Wert des Trigger-DP.

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

              @paul53
              Event_Counter wird jeweils um 1 erhöht bei jedem betätigen des Schalters (Short, oder Longpush)

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

                @dark-angel sagte: Event_Counter wird jeweils um 1 erhöht bei jedem betätigen des Schalters (Short, oder Longpush)

                Dann kann das Skript dieses Verhalten nicht verursachen, denn ohne zusätzlichen Trigger steuert es nichts.

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

                  @paul53
                  Wenn ich das Script deaktiviere, kann ich ganz normal das Licht ein und ausschalten.

                  Habe vor jeden Schritt einen Debug Block hinzugefügt und bekomme folgende Meldungen in Protokol:
                  Wenn ich das Licht einschalten möchte:

                  javascript.0
                  	2025-01-04 23:20:02.537	info	script.js.1.Work.Hoflicht_Haustuer: Timeout zurück setzen
                  javascript.0
                  	2025-01-04 23:20:02.537	info	script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, state={"val":false,"ack":false,"ts":1736029202537,"q":0,"from":"system.adapter.javascript.0","lc":1736029202537,"c":"script.js.1.Work.Hoflicht_Haustuer"})
                  javascript.0
                  	2025-01-04 23:20:02.537	info	script.js.1.Work.Hoflicht_Haustuer: Licht Ausschalten
                  javascript.0
                  	2025-01-04 23:20:02.536	info	script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":false,"ack":true,"ts":1736029183426,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736029153237}
                  

                  Und folg. wenn, das Licht an ist und ausgeschaltet werden soll (gefolgt von einen Longpush, was ich wohl hätte weglassen sollen):

                  javascript.0
                  	2025-01-04 23:27:36.987	info	script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.longpush, state={"val":false,"ack":true,"ts":1736029656987,"q":0,"from":"system.adapter.javascript.0","lc":1736029656987,"c":"script.js.1.Work.Hoflicht_Haustuer"})
                  javascript.0
                  	2025-01-04 23:27:36.987	info	script.js.1.Work.Hoflicht_Haustuer: Longpush auf Falsch setzen
                  javascript.0
                  	2025-01-04 23:27:36.986	info	script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, state={"val":true,"ack":false,"ts":1736029656986,"q":0,"from":"system.adapter.javascript.0","lc":1736029656986,"c":"script.js.1.Work.Hoflicht_Haustuer"})
                  javascript.0
                  	2025-01-04 23:27:36.986	info	script.js.1.Work.Hoflicht_Haustuer: Licht dauerhaft Einschalten
                  javascript.0
                  	2025-01-04 23:27:36.986	info	script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.longpush, timerId=undefined) => {"val":true,"ack":true,"ts":1736029656985,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736029656985}
                  javascript.0
                  	2025-01-04 23:27:36.986	info	script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":true,"ack":true,"ts":1736029654823,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736029654823}
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: setTimeout(ms=300000)
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: timeout 5 Min. starten
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, state={"val":true,"ack":false,"ts":1736029654698,"q":0,"from":"system.adapter.javascript.0","lc":1736029654698,"c":"script.js.1.Work.Hoflicht_Haustuer"})
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: Longpush Falsch
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.longpush, timerId=undefined) => {"val":false,"ack":true,"ts":1736029654691,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736021775717}
                  javascript.0
                  	2025-01-04 23:27:34.698	info	script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":true,"ack":true,"ts":1736029645021,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736029614830}
                  
                  1 Reply Last reply Reply Quote 0
                  • Dr. Bakterius
                    Dr. Bakterius Most Active @Dark Angel last edited by Dr. Bakterius

                    @dark-angel Versuche doch mal auf shelly.0.SHSW-25#40F520006202#1.Relay0.Input zu triggern. Da bekommst du gleich true bzw. false (also ein / aus) geliefert und musst nur noch den longpush auswerten.

                    In deinem Log hast du den TP EventCount nicht mitgelogt. Vielleicht zählt der aus irgendeinem Grund jetzt doppelt.

                    Dark Angel 1 Reply Last reply Reply Quote 0
                    • Dark Angel
                      Dark Angel @Dr. Bakterius last edited by Dark Angel

                      @dr-bakterius
                      Input quitiert so wie es aussieht nur, ob Relais ausgelöst wurde.
                      Springt kurz auf true und dann gleich wieder auf false.

                      Ich habe irgendwie das Gefühl, bis das Script so weit ist herauszufinden wie der Wert von Switch ist, wird dieser schon auf true gesetzt...

                      Hab jetzt einen Debug direkt am Anfang des Scriptes (gleich nach der Auswertung, ob der Zähler verändert wurde) hinzugefügt und bekomme folgende Meldung, die mich zu der o.g. Annahme führt:

                      2025-01-05 11:18:09.672 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":false,"ack":true,"ts":1736072271300,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736071597275}
                      2025-01-05 11:18:09.673 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: true
                      2025-01-05 11:18:09.673 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: getState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, timerId=undefined) => {"val":false,"ack":true,"ts":1736072271300,"q":0,"from":"system.adapter.shelly.0","user":"system.user.admin","lc":1736071597275}
                      2025-01-05 11:18:09.673 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: Licht Ausschalten
                      2025-01-05 11:18:09.673 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: setForeignState(id=shelly.0.SHSW-25#40F520006202#1.Relay0.Switch, state={"val":false,"ack":false,"ts":1736072289673,"q":0,"from":"system.adapter.javascript.0","lc":1736072289673,"c":"script.js.1.Work.Hoflicht_Haustuer"})
                      2025-01-05 11:18:09.673 - info: javascript.0 (90982) script.js.1.Work.Hoflicht_Haustuer: Timeout zurück setzen
                      
                      Dr. Bakterius 1 Reply Last reply Reply Quote 0
                      • Dark Angel
                        Dark Angel last edited by

                        Also, langsam habe ich die Vermutung, dass der Shelly selbst ein Problem hat.
                        Wenn ich den Button Type auf "momentary" setze, funktioniert das Script fast richtig.
                        Setze ich ihn auf "momentary_on _release", dann spinnt alles.

                        "Fast richtig" bedeutet: Bei Longpush und beim Ausschalten gibt es eine kurze Wiederholung des Zustandes.
                        Bei Longpush geht das Licht an, kurz aus und dann wieder an und bleibt dann dauerhaft an.
                        Beim Ausschalten gehts kutz aus, dann wieder kurz an und dann wieder aus und bleibt auch aus.

                        Ich vermute, der "Zusatz" on_release funktioniert bei dem Shelly nicht mehr und der sendet den Switch-Status schon beim drücken des Tasters und nicht erst beim loslassen.

                        1 Reply Last reply Reply Quote 0
                        • Dr. Bakterius
                          Dr. Bakterius Most Active @Dark Angel last edited by

                          @dark-angel sagte in Script funktioniert auf ein mal nicht mehr:

                          Input quitiert so wie es aussieht nur, ob Relais ausgelöst wurde.

                          Nein, Input ist der Taster / Schalter Eingang und Switch ist das Relais.

                          Es könnte auch am Taster liegen. Möglicherweise prellt der?

                          Dark Angel 1 Reply Last reply Reply Quote 0
                          • Dark Angel
                            Dark Angel @Dr. Bakterius last edited by

                            @dr-bakterius :
                            Also, am Taster lag es auch nicht. Hab den getauscht, hat aber nichts gebracht.
                            Nun habe ich einen Shelly Plus 2PM und sehe jetzt was Du gemeint hast ("Input ist der Taster / Schalter Eingang und Switch ist das Relais.")
                            Das ist tatsächlich so, aber erst in der Gen.2 der Shellys. In der ersten Generation, zu der auch der Shelly 2.5 gehört ist es so wie ich es schon weiter oben beschrieben habe.
                            Der 2PM wird höchstwahrscheinlich aber auch nicht zum Einsatz kommen, da ich noch keine Möglichkeit finde, mein Vorhaben so umzusetzen, wie es bei dem 2.5 war.
                            Ich habe keinen Counter, den ich triggern kann, Die Input Meldungen sind so was von unübersichtlich...
                            Da muss ich wahrscheinlich erstmal drüber schlafen und mir was neues überlegen.
                            Die Logic bei der Gen.2 ist irgendwie ganz anders 😠

                            K Dr. Bakterius 2 Replies Last reply Reply Quote 0
                            • K
                              Kusi @Dark Angel last edited by Kusi

                              @dark-angel Ich nutze hierfür folgendes Blockly...
                              Bei mir sind es 4 Taster, welche vom Shelly beim Drücken erfasst werden. Das Relays bleibt bei mir immer eingeschaltet.

                              e7d829df-5e84-4c8b-9a9e-98cfd868cc2e-image.png

                              Dies ist der Datenpunkt, welcher Triggert:
                              shelly.0.SHSW-1#E098068CDD69#1.Relay0.Input

                              Das Shelly ist wie folgt konfiguriert (Shelly 1, 1. Generation):
                              c0be88aa-e21b-47de-9e1e-e987a0997b93-image.png

                              Verstehe ich richtig, dass du mit deinem Shelly nur den Taster/Schalter auswertest, analog bei mir?
                              Wenn ja, handelt es sich um einen Taster oder Schalter?

                              1 Reply Last reply Reply Quote 0
                              • Dr. Bakterius
                                Dr. Bakterius Most Active @Dark Angel last edited by Dr. Bakterius

                                @dark-angel sagte in Script funktioniert auf ein mal nicht mehr:

                                Das ist tatsächlich so, aber erst in der Gen.2 der Shellys.

                                Da ich nur Shelly 1 habe, weiß ich nicht wie das bei den anderen ist. Allerdings sind die 1er doch die ältesten. Daher wundert es mich, dass das bei den Shelly 2.5 anders sein soll.

                                Dark Angel 1 Reply Last reply Reply Quote 0
                                • Dark Angel
                                  Dark Angel @Dr. Bakterius last edited by

                                  @dr-bakterius
                                  Ich habe "detached" mit Absicht nicht gewählt, denn das Licht sollte auch dann Ein-/Ausgeschaltet werden können, wenn keine Verbindung zu ioBroker bestehen sollte. Das "Problem" habe ich mit dem NS Panel von Sonoff im Wohnzimmer.
                                  Solange keine Verbindung zu ioBroker besteht sitze ich völlig im dunkeln, wenn ich nicht vorher das Licht eingeschaltet hatte.
                                  Als ich das damals eingerichtet hatte, war "momentary" praktisch DIE Einstellung, wenn man einen Taster verwendet.
                                  momentary_on_release verhindert, dass ein toggle ausgelöst wird, bevor man den Taster loslässt. Bei mir unbedingt erforderlich um den Longpush auswerten zu können.

                                  Bei dem Gen.2 Shellys (habe einen Shelly 1 Gen.2 und jetzt noch den Shelly 2PM Gen.2) gibt es keinen EventCount und kein Longpush, womit mein Script praktisch unbrauchbar geworden ist, solange man kein Gen.1 Gerät damit steuert/auswertet.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  981
                                  Online

                                  31.7k
                                  Users

                                  79.7k
                                  Topics

                                  1.3m
                                  Posts

                                  5
                                  15
                                  497
                                  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