-
Autor
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:
- 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.
- Verschiedene Callback-Varianten wurden getestet:
- Normale anonyme Funktion (function(response){…})
- Benannte Funktion
- Arrow Function
- Verwendung von new Function zur Callback-Erzeugung
- Ü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:
// Minimaler Test für Relay.SetState mit unterschiedlichen Callback-Varianten
// Variante 1: Normale anonyme Funktion als Callback
print("Test 1: Normale Funktion als Callback (State: on)");
Shelly.call("Relay.SetState", { id: 0, state: "on" }, function(response) {
print("Callback (normale Funktion): " + JSON.stringify(response));
});
// Variante 2: Arrow Function als Callback
print("Test 2: Arrow Function als Callback (State: off)");
Shelly.call("Relay.SetState", { id: 0, state: "off" }, (response) => {
print("Callback (Arrow Function): " + JSON.stringify(response));
});
// Variante 3: Callback über new Function
print("Test 3: Callback mit new Function (State: on)");
var cb = new Function("response", "print('Callback (new Function): ' + JSON.stringify(response));");
Shelly.call("Relay.SetState", { id: 0, state: "on" }, cb, 0);
Alles anzeigen
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