Daten als HTTP-Client verarbeiten

Viele Geräte besitzen eine HTTP oder auch REST-Service-Schnittstelle, um Informationen abzufragen. In diesem Beitrag zeigen wir, wie man das connect-Gateway konfiguriert, um Daten als HTTP-Client zu verarbeiten.
Für unser Besipiel verwenden wir das WISE-4050/LAN I/O Modul von Advantech. Neben Modbus können wir auch über eine HTTP-Schnittstelle die I/O Zustände direkt abfragen.
Inhaltsverzeichnis
Aufbau der Konfiguration
Wir möchten den Zustand eines digitalen Ausgangs erfassen, sprich ob dieser HIGH oder LOW ist. Zuerst legen wir dazu in der Konfigurationsdatei einen Datapoint
fest, in den wir den Zustand als 1 (HIGH) oder 0 (LOW) speichern werden.
Als initialen Wert setzen wir den Datenpunkt auf 0 (LOW). Solche Vorgabewerte sind hilfreich, damit kein undefinierter Zustand anliegt, so lange noch keine Daten abgefragt wurden.
<datapoints> <datapoint> <path>/di0</path> <type>integer</type> <initialValue>0</initialValue> </datapoint> <datapoint>
Endpoint
Als Nächstes konfigurieren wir den Endpoint
und verwenden hierfür das HTTP_CLIENT
Plugin. Für dieses Beispiel ist es nicht notwendig weitere Parameters
zu spezifizieren, so dass dieses Element leer bleibt.
<endpoint> <name>HTTP</name> <protocol plugin="HTTP_CLIENT"> <name>Client</name> <parameters/>
Trigger
Wir möchten den aktuellen Zustand regelmäßig im connect-Gateway aktualisieren. Hierfür konfigurieren wir einen zyklischen Trigger
. Mit jedem Trigger-Event feuert der HTTP-Client im connect-Gateway eine Anfrage an das I/O Modul. Die Zeit legen wir mit einmal pro Sekunde fest.
<trigger> <cyclicTrigger> <period>1</period> <unit>seconds</unit> </cyclicTrigger> </trigger>
Producer
Nun folgt die Definition des eigentlichen Daten-Produzenten, den wir über den passend vergebenen Namen rest_call_di0
leicht wiederfinden können.
Der wichtigste Parameter ist die Endpoint-URL
. Diese URL legt fest, welchen HTTP-Aufruf der HTTP-Client tätigen wird. Da die Verbindung über Benutzername und Passwort via Basic-Auth
geschützt ist, geben wir zusätzlich noch die Authentifizierungsparameter an.
<producer> <name>rest_call_di0</name> <parameters> <param key="endpoint_url"> http://192.168.100.196/di_value/slot_0/ch_0 </param> <param key="basic_auth">root:00000000</param> <param key="preemptive_basic_auth">true</param> </parameters>
Decoder
Das I/O-Modul liefert die Werte für unsere Anfrage im JSON-Format zurück. Daher verwenden wir einen JSON_DECODER
, um aus dem JSON-Dokument den entsprechenden Wert zu extrahieren.
<decoder plugin="JSON_DECODER"> <parameters/>
Im letzten Schritt geben wir innerhalb des Decoders
ein Mapping an. Dies legt fest, dass wir den Wert im Datapoint
/di0
speichern wollen. Der entsprechende Path im JSON-Dokument ist /Val
, den wir als Parameter angeben. So landet der gewünschte Wert in unserem Datenpunkt.
<mapping> <datapoint>/di0</datapoint> <parameters> <param key="path">/Val</param> </parameters> </mapping>
Zusammenfassung
In diesem Beitrag haben wir gezeigt, wie man das connect-Gateway als HTTP-Client einsetzen kann. So können wir über einfache REST-Anfrage Daten von HTTP-fähigen Geräten abfragen. Auch verschlüsselte Verbindungen und Authentifizierung werden vom Client unterstützt.
Die Antwort des Gerätes können wir mit dem JSON-Decoder für unsere Zwecke aufbereiten. Auch andere Decoder, zum Beispiel für XML, sind als Plugin verfügbar.
Das HTTP-Protokoll ist die Sprache des Internets. Neben Geräten können wir so auch Daten von Web-Services abfragen. Hierzu mehr in einem anderen Beitrag.