switch.set, switch.toggle führen zu Skript Abbruch

  • Hallo,

    Ich entwickle eine Anwendung für Shellies der zweiten Generation mit per Scheduling ausgelöstem Schalten.

    device: shelly plus 1

    firmware: 0.14.1, alternativ getestet mit 0.13.0

    Mein schedule job:

    Code
    {"id":1,"enable":true,"timespec":"0 * * * * *","calls":[{"method":"Script.Eval","params":{"id":1,"code":"clockTrigger(5000)"}}]}

    Dieser bewirkt zu jeder vollen Minute den Aufruf der Funktion clockTrigger mit 5000 (ms) als Parameter, welche das unten stehenden Skript enthält.

    Und hier mein bisheriges Skript:

    Der Abbruch des Skript ereignet sich in der Funktion pulseOut, wenn geschaltet wird - Zeilen 31 und Zeilen 37.

    Das Skript arbeitet einwandfrei, wenn die Schaltmethodenaufrufe auskommentiert sind.

    Die Methoden http.get habe ich nur zwecks Fehlersuche eingesetzt. Sie sind also nur alternativ zu switch.set bzw. switch.toggle zu verstehen.

    Wenn ich die Schaltmethoden einbaue, bspw. per switch.set, gibt es den Skriptabbruch mit der Fehlermeldung:

    "onEvent callback error: type error"

    Ich kann keinen Typfehler finden. Dieser müsste sich in den Shelly.call Aufrufen zum schalten befinden, da ohne diese Aufrufe das Skript fehlerfrei abgearbeitet wird.

    Manchmal erscheint diese Meldung beim Einschalten, spätestens nach dem Ausschalten - verlässlich reproduzierbar.

    Mir fällt nichts mehr ein, was ich noch tun kann, um diesen Fehler zu beseitigen oder mich der Ursache zu nähern.

    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.

  • Code
    Shelly.call("Switch.set", {'id': 0, 'on': true});

    Also das S groß schreiben. Aber keine Ahnung ob es daran liegt. Müsste ich erst testen

    Auszug aus der Doku

    To interact with the local device, JS code can invoke RPC methods using a "local" RPC channel. This method doesn't return a value. If invoked with invalid arguments the script is aborted. The signature of the method is:

    Einmal editiert, zuletzt von Devil (14. März 2023 um 20:38)

  • das hier geht definitv nicht so, weil das Protokoll (http) in der URL fehlt,

     //Shelly.call("http.get", {url: "http://127.0.0.1/rpc/switch.toggle?id=0"});

    sinvollerweise machst du das aber über

    Shelly.call("Switch.toggle", {'id': 0});

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

  • Danke für die Reaktionen.

    Devil

    Das große S hat leider keine Besserung gebracht.

    Seven of Nine

    Oh ja, klar - mit http:// - ich war zu diesem Zeitpunkt schon etwas abgearbeitet.

    Nun, mit Switch.toggle hatte ich bereits gearbeitet - leider das selbe Problem wie mit Switch.set.

    Merkwürdig ist auch, dass beide Schaltaufrufe in einem anderen Projekt keinerlei Probleme bereiten. So etwas gehört ja auch zu den absoluten basics.

    Ich versuchte es soeben mit http.get und komplettem URL. Leider genau dasselbe Problem, Skriptabbruch mit obiger Fehlermeldung.

    Es sieht so aus, als ob der RPC-Methodenaufruf ein Problem darstellt, unabhängig vom Weg dorthin.

    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.

  • Ist aber ja auch fast 1 zu 1 so im snippet

    Code
    function timerCode() {
      Shelly.call("Switch.Toggle", {"id": 0});
    };
    
    Timer.set(
      /* number of miliseconds */ 5000,
      /* repeat? */ true,
      /* callback */ timerCode
    );
  • Dieses Thema enthält 50 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.