NEWS
Script funktioniert auf ein mal nicht mehr
-
Hi Leute,
habe heute folgendes Problem mit ein Script "bekommen" welches seit 4 Jahre tadellos funktioniert hat: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?
-
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
-
@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.
-
@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.
-
@paul53
Event_Counter wird jeweils um 1 erhöht bei jedem betätigen des Schalters (Short, oder Longpush) -
@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.
-
@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}
-
@dark-angel Versuche doch mal auf
shelly.0.SHSW-25#40F520006202#1.Relay0.Input
zu triggern. Da bekommst du gleichtrue
bzw.false
(also ein / aus) geliefert und musst nur noch denlongpush
auswerten.In deinem Log hast du den TP
EventCount
nicht mitgelogt. Vielleicht zählt der aus irgendeinem Grund jetzt doppelt. -
@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
-
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.
-
@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 undSwitch
ist das Relais.Es könnte auch am Taster liegen. Möglicherweise prellt der?
-
@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 -
@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.Dies ist der Datenpunkt, welcher Triggert:
shelly.0.SHSW-1#E098068CDD69#1.Relay0.InputDas Shelly ist wie folgt konfiguriert (Shelly 1, 1. Generation):
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? -
@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.
-
@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.