Daten als HTTP-Client verarbeiten

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.

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.