parse error at line 27: [], at line 43: [], line 87, 90, 23, 41....GhostError

  • 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

    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?

    4 Mal editiert, zuletzt von _[Deleted]_ (15. Februar 2023 um 14:29)

  • hast du mehrere von den Scripts auf einem Shelly laufen? ist das ganz sicher das script_8.js? hier im Log wird ein [] (vermutlich ein leeres Array) angemeckert, das gibt es aber in Zeile 27 nicht.

    shelly_user_script.:423 Running 'script_8.js'...

    MJS error: parse error at line 27: []

    >100 Shellies, darunter so gut wie alles was der Hersteller produziert hat. ;)
    :!: ich beantworte grundsätzlich keine Fragen per persönlicher Nachricht:!:

  • Nop nur das eine Skript, der Fehler tritt übrigens bei verschiedenen Skripts bei verschiedenen Geräten auf. Es ist nicht immer Zeile 27 (jedoch tauch auffällig oft die Zeile 27 auf) , manchmal auch 40, 43, 25, 48, 56, 57 oder 67, auch wenn das Skript nicht so viele Zeilen hat und an den Stellen und darüber kein Fehler zu finden ist. ;(

    shelly_user_script.:423 Running 'script_8.js'...
    00:27:07

    MJS error: parse error at line 43: []
    00:27:07

    shelly_notification:161 Status change of script:8: {"id":8,"running":true}
    00:27:07

    shelly_notification:161 Status change of script:8: {"id":8,"errors":["syntax_error"],"running":false}

    Das leere Array ist wohl das Shelly Error Array, in dem die möglichen Fehler für die Ausgabe aufgelistet werden, ich interpretiere das als "kein Fehler" Fehler in Zeile 27.

    Ich vermute, dass solche Fehler entstehen, wenn das Skript mitten in der Ausführung abgebrochen wird, je nachdem welche Zeile im Code gerade abgebrochen wurde, kommt es dann zum "kein Fehler" Fehler in Zeile X.

    Wenn ich aber mein Skript fast leer lasse oder etwas sehr einfaches nehme, kann ich den Fehler nicht mehr reproduzieren, daher bin ich mir mit meiner Vermutung nicht ganz sicher. Testweise hatte ich Block für Block entfernt, um herauszufinden, ob eine bestimmte Stelle den Fehler verursacht, aber der Editor mochte das, Anpassen, Speichern, 10x schnell (Start, Stop) Wiederholen....... so gar nicht, denn er fing kurzerhand an, den Code einfach zu verdoppeln oder zu zerstückeln. Das ging eine Weile hin und her, bis ich keine Lust mehr hatte, mich mit dem Editor herumzuschlagen.

    Chat GPT hab ich auch schon gefragt :D der meinte er sieht keinen Fehler es könnte jedoch an den Klammern der If Anweisung liegen und das ich doch bitte alles 5 fach einklammern soll. Ich kann mir jedoch nicht vorstellen das es an den Klammern liegt und hab das erst gar nicht versucht..... die KI hatte wahrscheinlich einfach mehr Klammern vorgeschlagen, weil die Fehlermeldung [ ] als Grund hat und das die einzige einfache Änderung ist, die dazu passte, nach dem Motto, ein Vorschlag ist besser wie kein Vorschlag.^^

    Vielleicht hab ich auch nur in all meinen Skripts nen kleinen Fehler den ich nicht erkennne und der nicht richtig Ausgegeben wird.

    12 Mal editiert, zuletzt von _[Deleted]_ (16. Februar 2023 um 00:57)

  • ich hab mir das Script heute morgen mal eine halbe Stunde lang angeschaut, ich finde es extrem schwierig zu lesen und verstehe die gewünschte Logik dahinter nicht ganz.

    vermuten würde ich, dass du irgendetwas verzögert an oder ausschalten willst?

    let cID = 0; wenn du darauf ein let cID = '0';  machst dann hast du direkt einen String und kannst dir die ganzen JSON.stringify sparen..

    >100 Shellies, darunter so gut wie alles was der Hersteller produziert hat. ;)
    :!: ich beantworte grundsätzlich keine Fragen per persönlicher Nachricht:!:

  • - Das Skript ist im Grunde ein Cycle Switch, sobald Schaltvorgänge erkannt werden schaltet es durch verschiedene Schalt Modi. Eingesetzt wird das Skript bei Shellys im Schalter Betrieb und es erlaubt mir 2 Ausschalt Timer auf einem Schalter zu nutzen.

    (Naja Eigentlich 3 Ausschalt Timer da man für die Steuerung über die App oder über die Cloud einen extra Ausschalt Timer einstellen muss.)

    1 mal Drücken = kurze Ausschalt Zeit.

    schnell 2 mal Drücken = lange Ausschalt Zeit.

    Cloud/App(virtuell) Drücken = cloud Ausschalt Zeit.

    - cID kann ich nicht als String setzen, da in einer "Idioten sicheren" Version des Skript die cID als Number benötigt wird um die passenden Einstellungen auf dem Shelly zu setzen. Dank der cID reicht es wenn man das Skript einfach doppelt oder mehrfach anlegt und die cID kurz anpasst um das Skript auf einem Shelly mit mehreren Relays zu nutzen.

    (Zumindest ist das der Plan, da ich aber noch keine Plus Shellys mit doppel oder vierfach Relays/Channels besitzen kann ich nicht bestätigen ob das in der Praxis wirklich so einfach klappen wird.)

    Was genau ist daran schwer zu lesen, ich würde die Lesbarkeit gerne verbessern.

    Hier ist übrigens die "Idioten sichere" Version des Skript, diese Version ist jedoch Teilweise Komprimiert und dadurch wirklich sehr schwer zu lesen an manchen Stellen:

    - 1 Schalter 3 Ausschaltzeiten/Timer

    4 Mal editiert, zuletzt von _[Deleted]_ (16. Februar 2023 um 17:56)

  • Dieses Thema enthält 12 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.