Hilfe: Script mit syntax Fehler

  • 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.