Weichwasseranlage Grünbeck Softliq SC18, InfluxDB und Grafana
Unsere Weichwasseranalge (Grünbeck softliQ SC 18 * Affiliatelink) wurde bisher mittels eines php-Scripts in eine MySQL-DB eingelesen und mittels selbstgeschriebenen Auswertungen angezeigt. Das geht mit Grafana doch schöner.
Ich wollte folgende Werte anzeigen (gibt noch viele mehr, die aber bei permanenter Abfrage der Daten keinen Sinn ergeben).
Code | Beschreibung | Einheit |
D_Y_1 | Wasserverbrauch gestern | l |
D_Y_5 | Aktueller Regenerationsschritt | 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat |
D_Y_10_1 | Aktuelle Restkapazität Austauscher | % |
D_A_1_1 | Aktueller Durchfluss | m³ |
D_A_1_2 | Restkapazität | m³*°dH |
D_A_1_3 | Kapazitätszahl | m³*°dH |
D_A_2_1 | Restzeit/-menge Reg.Schritt | l oder min |
D_A_3_1 | Letzte Regeneration | h |
D_A_3_2 | Prozentsatz der letzten Regeneration | % |
Python-Code
Der Einfachheit halber bin ich auf Python umgestiegen. Vorher muss die influxdb-python-pip installiert werden:
sudo pip install influxdb
Dann das folgende Script erstellen:
#!/usr/bin/python
import requests
url = 'http://192.168.2.91/mux_http' #URL der Wasserenthaertungsanlage
headers = {'Content-Type': 'application/xml'} #HTTP Post Header
#POST Daten
xml_akt = "getXML(\"id=625&show=D_Y_1|D_Y_5|D_Y_10_1|D_A_1_1|D_A_1_2|D_A_1_3|D_A_2_1|D_A_3_1|D_A_3_2~\",1);"
#POST
data_akt = requests.post(url, data=xml_akt, headers=headers)
#Strings
xml_header = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
xml_footer = ""
import xml.etree.ElementTree as ET
xml_text = xml_header + data_akt.text + xml_footer
xml_text = xml_text.replace("<code>ok</code>","")
root = ET.fromstring(xml_text)
from datetime import datetime
current_time = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
json_body = [
{
"measurement": "softliqSC18",
"time": current_time,
"fields": {child.tag: float(child.text) for child in root}
}
]
from influxdb import InfluxDBClient
client = InfluxDBClient(database='weichwasser')
client.write_points(json_body)
Das Script fragt die entsprechenden Codes an der Anlage ab, gibt diese als xml zurück welches wir dann analysieren und in die InfluxDB speichern.
Die Tabelle muss vorher im Influx angelegt werden:
influx
> CREATE DATABASE weichwasser
Das Script wird bei mir einfach per Crontab ausgeführt (möglich wäre z.B. auch collectd):
# Fetchen Weichwasserdaten für InfluxDB
* * * * * /usr/bin/python /home/pi/shell/gruenbeck.py
Ich habe mich für das ausführen jede Minute entschieden. Öfter macht glaube ich keinen Sinn und überlastet auch die Schnittstelle. Man bekommt dann nicht immer eine Antwort zurück.
Dashboard
https://grafana.com/grafana/dashboards/12417
Update [08.06.2020]
Ich habe das Python-Script aktualisiert. Der xml-tag „code“ wird entfernt und die Werte vom String in Float gecastet. Die Graphen wurden zwar angezeigt, aber die Werte im Tooltip sowie die Alarme funktionierten nicht.
Sollte das Script schon gelaufen sein einfach die Influx-Tabelle löschen:
influx
> DROP DATABASE weichwasser
> CREATE DATABASE weichwasser
Ein Kommentar