HTTP

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 der abzurufenden 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

# Parses an XML string to extract specific device data and returns it as a dictionary.

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"

        }

    }
]