Wer weiß wie: Relay.SetState - Dauerfehler.

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.

  • Moinsen liebe Community,

    mein Coder und ich stoßen gerade auf ein Problem mit meinem Shelly Plus Uni, das uns ziemlich ratlos macht.

    Aufgabe: Wir wollen den Zustand des OUT(1) steuern. Dazu gibt es laut API die Methode Relay.SetState. Aber dabei entsteht stets der Fehler:

      "Uncaught TypeError: 'callback' argument must be function"

    In der Script-Übersicht wird zudem

      „Accessing unexistent property or property with wrong type“ angezeigt.

    Folgendes haben wir bereits versucht:

    1. Zunächst haben wir den (alten) Shelly-Befehl "Switch.Set" mit diversen Callback-Varianten versucht. Da die aktuelle API (siehe https://shelly-api-docs.shelly.cloud/gen2/) jedoch „Relay.SetState“ vorsieht, haben wir den Aufruf umgestellt und als Parameter { id: 0, state: "on" } bzw. { id: 0, state: "off" } übergeben.
    2. Verschiedene Callback-Varianten wurden getestet:  
      1. Normale anonyme Funktion (function(response){…})  
      2. Benannte Funktion  
      3. Arrow Function  
      4. Verwendung von new Function zur Callback-Erzeugung  
      5. Übergabe eines Timeout-Parameters (0)

    Trotz aller Varianten erscheint stets der gleiche Fehler – sowohl im ausführlichen Script als auch in Minimalbeispielen. Auch die Umstellung auf Firmware 1.7.0-beta2 hat nichts bewirkt, obwohl laut Release-Notes solche Fehler eigentlich behoben sein sollten. Der Fehler besteht aber weiterhin.

    Um das Problem systematisch einzugrenzen, haben wir einen Minimaltestcode erstellt, der verschiedene Callback-Methoden ausprobiert. Hier der Code:


    Trotz dieser verschiedenen Ansätze tritt der Fehler immer noch auf.

    • Hat jemand ähnliche Erfahrungen mit Relay.SetState und Callback-Übergabe gemacht?
    • Könnte es sich dabei um einen grundlegenden API- bzw. Firmware-Fehler handeln?
    • Wisst ihr, ob noch andere Konfigurationen oder Workarounds notwendig sind?

    Ich freue mich über jeden Hinweis

  • Welche Firmware Version ist installiert?

    Dieser Code (1. Fassung bei dir) ist korrekt und sollte funktionieren:

    Code
    Shelly.call("Relay.SetState", { id: 0, state: "on" }, function(response) {
      print("Callback (normale Funktion): " + JSON.stringify(response));
    });

    Variante 3 sollte gleichwertig sein.

    Arrow Function (Variante 2) gibt es in ShellyScript nicht.

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Zunächst haben wir den (alten) Shelly-Befehl "Switch.Set" mit diversen Callback-Varianten versucht. Da die aktuelle API (siehe https://shelly-api-docs.shelly.cloud/gen2/) jedoch „Relay.SetState“ vorsieht, haben wir den Aufruf umgestellt und als Parameter { id: 0, state: "on" } bzw. { id: 0, state: "off" } übergeben.

    Das verwirrt mich hochgradig - wo hast du die Information her, dass Switch.Set veraltet sein soll? Und wo kommt Relay.SetState her? Laut der (auch von dir verlinkten) Shelly-Doku gibt es keine Relay Komponente und konsequenterweise auch keine RPCs dafür.

    Laut Dokumentation hat der Shelly Plus Uni zwei Instanzen der Komponente Switch, und die müssen natürlich auch über Switch.Set mit ID 0 bzw. 1 ansprechbar sein.

    Wenn du dir die verfügbaren RPCs mit http://<ip>/rpc/Shelly.ListMethods anzeigen lässt, findest du dann tatsächlich einen Relay.SetState, aber keinen Switch.Set vor?

  • Ich habe inzwischen 2 unterschiedliche Coder als Mitarbeiter. Problem: wir laufen immer wieder in einen Bug mit Relay.SetState, der eigentlich mit 1.7.0-beta2 ausgemerzt sein sollte - aber immer noch existiert. Also zurück aus 1.6.2 und mit SwitchSet gemacht - Fehler bleibt. Wir haben das jetzt mit einem HTTP-Request umgangen. Sprich der Shelly schickt sich selbst per HTTP den Einschaltbefehl. Das hat geklappt. Wenn ich fertig bin lade ich mal einen Workaround hoch.

  • wir laufen immer wieder in einen Bug mit Relay.SetState, der eigentlich mit 1.7.0-beta2 ausgemerzt sein sollte - aber immer noch existiert.

    Verlinkst du bitte mal die Quelle zu dieser Info. towiat hat recht, es gibt keine Relay Komponente.

    Ich habe mich in #2 nur auf die Shelly.call Aufrufe konzentriert und deinen seltsamen Fehler bzgl. Callback-Funktion ohne auf den konkreten Call zu schauen :saint:

    Ich habe inzwischen 2 unterschiedliche Coder als Mitarbeiter.

    Was soll uns das sagen?

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

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