Recently we had a power outage, when the power came back you could not turn on the lights in half of the rooms, in all my rooms I use a Shelly script for input evaluation and light control, some scripts had turned off themselves. Here is an excerpt from the debug log:
shelly_user_script.:423 Running 'script_8.js'...
18:03:00
MJS error: parse error at line 27: []
18:03:00
shelly_notification:161 Status change of script:8: {"id":8,"running":true}
18:03:00
shelly_notification:161 Status change of script:8: {"id":8,"errors":["syntax_error"],"running":false}
I can't find an error in any of the affected scripts, but since I've gotten such errors before, I know how to reproduce such errors.
1. start an error-free script and stop it immediately.
2. repeat this until you get an error message in the console.
The Shelly developers probably already know about this bug, as it's one of the few bugs where you don't have to change the code before you can start the script.
(However, sometimes an additional click on Save is required to restart the script).
This exception also doesn't seem to apply to a hard restart/failure, which causes perfectly good scripts to disable themselves after a power failure.
Well, maybe it's just me or my Shellys, could someone please try to reproduce the bug?
:
- The code I use to reproduce it. / Der Code, bei dem ich das Problem reproduziert hatte.
Spoiler anzeigen
let kurzeZeit = 900; //Verzögerung in Sekunden
let langeZeit = 43200; //Verzögerung in Sekunden
let cloudZeit = 43200; //Verzögerung in Sekunden
let erfassungZeit = 1; //Zeit in Sekunde die das Skript auf Schaltvorgänge wartet
let cID = 0; //Shelly Channel ID/Relay/Input
let status = Shelly.getComponentStatus("switch:" + JSON.stringify(cID)).output, t1 = null, tsAkt = 0, tsOld = 0, tsDiff = 0, schaltVorgang = 0;
//Skript Timer Logik
function Timer1() {
Shelly.call("Switch.Set", { id: cID, on: false });
}
//Skript Main Logik
function Check(event) {
if ((event.delta.output === true && event.delta.id === cID && event.component === "switch:" + JSON.stringify(cID)) || (event.delta.output === false && event.delta.id === cID && event.component === "switch:" + JSON.stringify(cID))) {
status = event.delta.output;
if (event.delta.source === "SHC" || event.delta.source === "WS_in" || event.delta.source === "HTTP"){
Timer.clear(t1);
tsOld = 0;
schaltVorgang = 0;
if (status === true) {
t1 = Timer.set(1000 * cloudZeit, false, Timer1);
print("Starte Timer cloud");
}
}
}
if ((event.delta.state === true && event.delta.id === cID && event.component === "input:" + JSON.stringify(cID)) || (event.delta.state === false && event.delta.id === cID && event.component === "input:" + JSON.stringify(cID))) {
tsAkt = Shelly.getComponentStatus("sys").unixtime;
tsDiff = tsAkt - tsOld;
if (tsDiff > erfassungZeit) {
schaltVorgang = 0;
}
if (schaltVorgang === 0 && status === false) {
Shelly.call("Switch.Set", { id: cID, on: true });
Timer.clear(t1);
schaltVorgang++;
t1 = Timer.set(1000 * kurzeZeit, false, Timer1);
print("Starte Timer kurz");
}
if ((tsDiff >= 0) && (tsDiff < (erfassungZeit + 1)) && (schaltVorgang >= 1)) {
schaltVorgang = schaltVorgang + 1;
}
if (schaltVorgang > 1) {
Timer.clear(t1);
t1 = Timer.set(1000 * langeZeit, false, Timer1);
print("Starte Timer long");
}
tsOld = tsAkt;
if (status === true && schaltVorgang === 0 || status === true && schaltVorgang > 2) {
Shelly.call("Switch.Set", { id: cID, on: false });
Timer.clear(t1);
tsOld = 0;
schaltVorgang = 0;
print("Triggerd off");
}
}
return true;
}
//Skript Trigger
Shelly.addStatusHandler(Check);
Alles anzeigen
German Version:
Spoiler anzeigen
Vor kurzem hatten wir einen Stromausfall, als der Strom wieder da war, konnte man in der Hälfte der Zimmer das Licht nicht mehr einschalten, in allen Zimmern benutze ich ein Shelly Skript zur Eingabeauswertung und Lichtsteuerung, einige Skripts hatten sich selbständig abgeschaltet. Hier ein Auszug aus dem Debug-Log:
shelly_user_script.:423 Running 'script_8.js'...
18:03:00
MJS error: parse error at line 27: []
18:03:00
shelly_notification:161 Status change of script:8: {"id":8,"running":true}
18:03:00
shelly_notification:161 Status change of script:8: {"id":8,"errors":["syntax_error"],"running":false}
Ich kann in keinem der betroffen Skripts einen Fehler finden aber da ich solche Fehler schon öfter erhalten hatte weiß ich wie man derartige Fehler reproduzieren kann.
1. Man startet ein fehlerfreies Skript und stoppt es sofort wieder.
2. Wiederhole das Ganze bis eine Fehlermeldung in der Konsole erscheint.
Die Shelly-Entwickler werden den Bug wahrscheinlich schon kennen, da es einer der wenigen Bugs ist, bei dem man den Code nicht ändern muss, bevor man das Skript wieder starten kann/darf. (Manchmal ist jedoch ein zusätzlicher Klick auf Speichern erforderlich, um das Skript neu zu starten).
Allerdings scheint diese Ausnahme auch nicht bei einem harten Neustarts bzw. Ausfall zu gelten, was dazu führt, dass sich völlig fehlerfreie Skripte nach einem Stromausfall selbst deaktivieren.
Nun, vielleicht liegt es ja auch nur an mir oder an meinen Shellys, könnte jemand bitte versuchen den Fehler zu reproduzieren?