Hilfe: Script mit syntax Fehler

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Hi Community

    Ich wollte aus 2 Scripts 1 machen und habe mir die Teile zusammen geklickt.

    Das Script soll um 0 Uhr ein anderes Script mit ID: 1 stoppen, und die KVS Daten löschen.

    Leider bekomme ich schon in der 1. Zeile einen Syntax Error:

    Uncaught SyntaxError: Got ':' expected EOF 22:27:55

    at "jobs": [


    Da das andere Script mit einem Schedule-Job von eiche jede Minute überprüft wird, ob es noch läuft, braucht man es nicht extra wieder starten.

    Könnte einer der Profi sich mal das anschauen?

    Vielen Dank

    Gruß Marius

  • Hallo Marius alias Pit38

    Da gibt es einiges zu klären.

    1. Das Auflisten eines Schedule Jobs (Zeilen 4 bis 15) hat nichts mit einem Skript zu tun.
      Das ist ein solcher Job im JSON Format dargestellt. Ein Schedule Job, oder mehrere davon, lassen sich nicht in ein Skript einbauen, bzw. der JavaScript Interpreter kann dies nicht "verdauen".
      Der timespec ist übrigens unvollständig. Er braucht immer 6 Teile.
    2. Eine Fallunterscheidung (scwitch, case, case, ..., default) ist nur dann zweckdienlich, wenn sich die Fälle (case Ausdruck: ...), also die Werte der Ausdrücke hinter den case unterscheiden. Vermutlich würde trotzdem diese Fallunterscheidung so abgearbeitet, wie du es erwartest.

    Alles folgende ist ungetestet, sollte aber funktionieren.

    Wenn ich dich richtig verstehe, genügt hierfür ein etwas komplexerer Schedule Job oder ein einfacher Schedule Job in Kombination mit einem Skript. Ich frage an dieser Stelle nicht nach dem Zweck deines Vorhabens.

    Ein vermutlich für dein Vorhaben geeignetes Skript:

    Code
    Shelly.call("script.stop", {id:1});
    Shelly.call("kvs.delete", {key:"EnergyConsumed"});
    Shelly.call("kvs.delete", {key:"EnergyReturned"});
    Timer.set(5000, false, function() {Shelly.call("script.stop", {id:Shelly.getCurrentScriptId()});});

    Dieses Skript stoppt Skript 1, entfernt die beiden Einträge mit den Keys "EnergyConsumed", "EnergyReturned" und stoppt sich selbst nach 5 Sekunden.

    Ich habe die Wartezeit von 5 Sekunden eingebaut, um sicherzustellen, dass die ersten drei Anweisungen komplett ausgeführt werden. Man mag testen, ob dies immer auch ohne diese Wartezeit sichergestellt ist.

    Angenommen, dieses obige Skript hat die Id 2. Dann kannst du den passenden Schedule Job wie folgt anlegen und die Zeitangabe später bspw. per Web UI ändern.

    Code
    http://<IP Adresse>/rpc/schedule.create?timespec="0 0 0 * * *"&calls=[{"method":"script.start","params":{"id":2}}]

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

    Einmal editiert, zuletzt von eiche (24. März 2024 um 00:40)

  • Es bleiben folgende Fragen.

    1. Warum sollen die beiden KVS Einträge entfernt werden? Es sollte genügen, sie zu überschreiben, bspw. mit den Werten 0.
    2. Warum soll Skript 1 gestoppt werden?

    Zu 1. Das kann auch per Schedule Job erfolgen. Ich versuche es mal.

    Code
    http://<IP Adresse>/rpc/schedule.create?timespec="0 0 0 * * *"&calls=[{"method":"kvs.set","params":{"key":"EnergyConsumed","value":0}},{"method":"kvs.set","params":{"key":"EnergyReturned","value":0}}]

    Die Methode "schedule.list" zeigt folgendes:

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

    Einmal editiert, zuletzt von eiche (23. März 2024 um 23:58)

  • Hi eiche

    Bist wie immer mein Retter Danke

    Leider gibt es bei dem Schedule Job einen Fehler:

    SyntaxError: JSON.parse: expected property name or '}' at line 1 column 203 of the JSON data

    Code
    {"jobs":[{"id":1,"enable":true,"timespec":"0 * * * * *","calls":[{"method":"script.start","params":{"id":1}}]},{"id":2,"enable":true,"timespec":"0 0 0 * * *","calls":[{"method":"script.start","params":{id:2}}]}], "rev":65}

    Ich habe es wieder löschen müssen, da ich auf dem 3Pro EM nicht mehr zugreifen konnte.

    Nur zu Info: der 3Pro EM hat keine Web Ui, mit ihm kann man keine Schedule Job editieren.

  • Nur zu Info: der 3Pro EM hat keine Web Ui, mit ihm kann man keine Schedule Job editieren.

    Tatsache? Das ist dann aber schwach.

    SyntaxError: JSON.parse: expected property name or '}' at line 1 column 203 of the JSON data

    Du sollst den Schedule Job ja auch nicht in ein Skript packen!

    Außerdem wird dein Job 1 per timespec jede volle Minute gestartet. Ok, zum testen halt ...

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

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