Man kann eine Methode vor der Verwendung in einem Skript auf Funktion und Syntax testen. Nach erfolgreichem Test ist es relativ leicht, den Methodenaufruf in ein Skript einzubetten.

Zunächst vorbereitend ein Funktionstest per Web Browser. Der Uniform Resource Locator (URL) besitzt die folgende Form:

http://<IP Adresse des Shelly>/rpc/<zusammengesetzter Methodenname>?Schlüssel1=Wert1&Schlüssel2=Wert2&...
(Es gibt Methoden ohne Schlüssel-Wert Paare oder mit nur einem Schlüssel-Wert Paar.)

Der zusammengesetzte Methodenname ist case insensitiv, d.h. es wird nicht zwischen Groß- und Kleinschreibung unterschieden. Switch.Set ist also gleichbedeutend mit switch.set oder Switch.set oder switch.Set oder sWiTcH.sEt.

Werte können Zahlen, Wahrheitswerte (beide ohne Anführungszeichen) oder Zeichenketten (Strings, in Anführungszeichen) sein.

Bei Erfolg des Funktionstests kann dies in ein Skript überführt werden.

  1. Aktor, Sensor ist lokal, also auf dem Gerät, auf welchem das Skript arbeitet.
    Für RPC Aufrufe steht die Funktion Shelly.call(...) zur Verfügung, welche die Methode auf demselben Shelly aufruft.
    Shelly.call(<zusammengesetzter Methodenname>, {Schlüssel1:Wert1, Schlüssel2:Wert2, ...}, callback Funktion);
    Am einfachsten ist es, die callback Funktion vorher zu schreiben (zu definieren) und den Namen im Shelly.call() Aufruf einzutragen.
    Der zweite Parameter {Schlüssel1:Wert1, ...} ist ein Objekt im sog. JSON Format (JSON = JacaScript Object Notation). JSON Kenntnisse sind hier sehr wichtig, sie werden auch außerhalb von JavaScript in verschiedensten Applikationen eingesetzt.

  2. Aktor, Sensor ist remote, also auf einem anderen Gerät als das Skript.
    Bei Erfolg kann der getestete URL in das Skript kopiert werden.
    Auch hier ist Shelly.call(...) zu nutzen, aber mit der Methode HTTP.Get und dem Schlüssel "url".
    Shelly.call("HTTP.Get", {url: 'http://<IP Adresse des Shelly>/rpc/<zusammengesetzter Methodenname>?Schlüssel1=Wert1&Schlüssel2=Wert2&...', callback Funktion);
    Ich setze den url Wert in Hochkomma (single quote), Zeichenketten (Strings) im url Wert dann in Anführungszeichen (double quote).

Eine callback Funktion ist nicht mit jeder Methode zwingend erforderlich, sie ist aber optional immer möglich und kann für Fehlerfälle bzw. Antworten des (remote) Systems genutzt werden.

Angenommen, man will einen Verbraucher an Ausgang 0 einschalten, hier mal ohne callback Funktion.

  1. lokal
    Shelly.call("Switch.Set", {id:0, on:true});
  2. remote
    Shelly.call("HTTP.Get", {url: 'http://<IP Adresse des remote Shelly>/rpc/Switch.Set?id=0&on=true'});

Falls MQTT zur Kommunikation eingesetzt wird, gelingt dies völlig anders. Hierfür gibt es die Skript Funktionen MQTT.publish() und MQTT.subscribe().

(in Arbeit)

2024-02-28