HTTP Verbindung

Lesedauer: 5min Veröffentlicht am: Juni 19, 2024. Der Autor des Beitrages ist Maximilian Backenstos.
Wie können webbasierte Datenquellen via HTTP angebunden werden? Wir beschreiben die Konfigurationsmöglichkeiten und zeigen ein Beispiel zum Abruf von XML-Dateien via HTTP.
Inhalte auf dieser Seite
Primary Item (H2)Sub Item 1 (H3)

Parameter für HTTP Datenquellen

Für den Abruf von Daten via HTTP müssen folgende Parameter definiert werden:

  • url: Abzurufende URL
  • monitoring: Art der Überwachung

Optional können diese Parameter definiert werden:

  • interval: Abrufintervall in Sekunden
  • transformation: Plugin in Python, das die abgerufenen Daten transformiert, muss im Ordner „plugins liegen“

Mögliche Werte für "monitoring:

  • changes: Überträgt alle Variablen bei jeder Änderung.
  • timer: Übertragt alle Variablen nach einem regelmäßigen Zeitplan.
    Parameter: interval: Intervall des Timers in Sekunden

Beispielabruf

Aufbau abzurufende XML Datei

Beim Aufruf der Adresse 192.168.01/values.xlm wird folgende XLM-Datei zurückgegeben. Dabei sollen die Werte für 02-gehalt und Stammwürze inklusive Minimum und Maximum Werte ausgelesen werden.

<?xml version="1.0" encoding="ISO-8859-1"?>
<fieldgate ser="K1002404428" tag="Fueller A1 RSG 35" type="full">
    <device id="AI01IV" tag="O2-Gehalt" type="INTRN">
        <v1>0.0125</v1>
        <param>
            <min>0.0</min>
            <max>0.50000</max>

        </param>
        <tag>O2-Gehalt</tag>
    </device>
    <device id="AI02IV" tag="Stammwuerze" type="INTRN">
        <v1>9.70</v1>
        <param>
            <min>0.0</min>
            <max>20.0</max>
        </param>
    </device>
</fieldgate>

Aufbau Transformationsskript

Das Transformationsskript wird unter http_skript.py im Ordner plugins abgelegt. Das Skript verarbeitet die XML-Datei zu Namen-Wert-Paaren.

from typing import Dict, Any
import xml.etree.ElementTree as ET

def Transform(data: str) -> Dict[str, Any]:
    tree = ET.parse(data)   
    root = tree.getroot()
    # List of desired tags
    tags = ["O2-Gehalt", "Stammwuerze"]

    # Iterate through each device element in the XML
    for device in root.findall('device'):
        tag = device.find('tag').text
        if tag in tags:
            value = float(device.find('v1').text)
            min_value = device.find('param/min').text if device.find('param/min') is not None else None
            max_value = device.find('param/max').text if device.find('param/max') is not None else None
            data[tag] = {
                'value': value,
                'min': float(min_value) if min_value else None,
                'max': float(max_value) if max_value else None
            }

    return data

Aufbau Konfigurationsdatei config.json

Die Konfiguration gibt einen Abruf alle 15 Sekunden vor, ruft die XML-Datei ab und nutzt das Transformationsskript zur Verarbeitung. Anschließend werden die Daten an eine lokale smartPLAZA Instanz gesendet.

[
    {
        "bucket": "Test",
        "server": "http://localhost",
        "writeKey": "123456789",
        "source": "http",
        "params": {
            "interval": 15,
            "url": "http://192.168.0.1/values.xml",
            "transformation": "http_skript",
            "monitoring": "timer"

        }

    }
]
Sie möchten mehr zum Thema HTTP Verbindung erfahren?
Der Autor Maximilian ist Geschäftsführer bei DatenBerg. Er begleitet Kunden von der Datenerfassung bis hin zur automatisierten Auswertung. Ist er nicht bei Kunden im Einsatz, hält er Vorträge zu den Themen Daten nutzen in der Produktion, Anwendungsfälle von Industrie 4.0 und automatisierte Auswertung von Produktionsdaten. Gerne besprechen wir mit Ihnen, wie das Thema HTTP Verbindung in Ihrer Produktion umgesetzt werden kann. Kontaktieren Sie uns hier.

Ähnliche Beiträge