Für den Abruf von Daten via HTTP müssen folgende Parameter definiert werden:
Optional können diese Parameter definiert werden:
Mögliche Werte für "monitoring:
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>
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
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"
}
}
]