Über den HTTPGateway lassen sich auch Serviceaufrufe auf einen REST-Service oder auch ein Webservice sogar mit einem Inhalt als Parameter des Services aufrufen. Wir zeigen das anhand eines einfachen REST-Service (MyStrom Switch) auf.

Request

Der Aufruf ist relativ simpel.

Das Beispiel zeigt einen simplen Aufruf des REST-Services ohne Parameter. Dafür wird ein Type GET verwendet. Als URL (http://) geben wir nun den Server + Pfad an, welcher die Funktion auslöst.

Bei den andern Typen (z.B. POST) können zusätzlich noch Parameter mitgegeben werden. Da würde in diesem Fall die JSON Konstrukt für den Aufruf reinkommen.

Response

Die Auswertung der Response gestaltet sich schon etwas schwieriger.

Im Beispiel vom MyStrom Switch haben wir die Statusabfrage ([Server]/report), welche als Rückgabe ein JSON Konstrukt liefert. Das sieht dann in etwa so aus:

{"power": 0, "relay": false}

Power gibt den aktuellen Strombedarf an, Relay ob der Switch ein- oder ausgeschaltet ist.

Für das versenden eines Events, wenn der Switch eingeschaltet ist, erfassen wir folgenden Response Event:

Dieser löst beim Ausführung des Commands nun einen Event aus, sofern der Switch eingeschaltet ist. Die Regular Expression „(.|\n)*\“relay\“:.true(.|\n)*“ prüft (Match) dabei, ob nach der Zeichenfolge „relay“ ein true folgt.

Im Event Handler eines Controls können wir diesen Event dann empfangen und Attribute des Control ändern, womit der Zustand des Switches visualisiert wird.

Als Sender wird die ID des HTTP Devices angegeben, Property und Value sind fix gemäss dem Response Event.

Für die Auswertung des Stromverbrauchs ist das Vorgehen leicht anders

Die Regular Expression „(?<=“power“:.)(.*)(?=(\r|,))“ macht hier keine Prüfung mehr sondern ein Suchen (Regular Expression Search). Der gefundene Wert wird dann an den Event übergeben. Dieses andere Verhalten erhält das System durch die Definition #value als Value-Parameter. Wir wollen an dieser Stelle auch keinen fixen Wert definieren, sondern eben die Wert aus der Response dem Event mitgeben.

Nun können wir das wie in diesem Beispiel auf einem Text Control ausgeben. Die oberen Felder des Event Handler arbeiten eigentlich wie ein Filter (das heisst nur diejenigen Events, welche den Kriterien entsprechen führen die definierten Änderungen auf den Attributen durch).

Da wir als Value vom Event einen variablen Wert haben darf Value kein auf dem Event Handler kein Parameter sein. Deshalb wird #null eingegeben. Als Sender definieren wir wiederum die ID des HTTP Devices, das Property ist gemäss der Definition im Response Event gesetzt. Damit der Text nun im Text Control gesetzt wird, muss das „text“ Property des Controls auf den Wert #value gesetzt werden.