Helios KWL sendet Daten an die Zipabox

Helios_OverviewBislang hab ich noch nicht so extrem viel von der Hausautomation geschrieben, dabei gibt es genug was es zu erzählen gibt. In diesem Fall wollte ich neben meiner zentralen Haussteuerung nicht noch das Webportal der Helios-Anlage zusätzlich aufrufen, sondern alle Daten in einer Oberfläche, der Zipabox, haben.


Hier bin ich sehr froh Kontakt zu Helle und seinem Blog zipabox.de zu haben. Er ist sehr hilfreich und hat mit seinen vielen Beiträgen schon einige Fragen erschlagen, dennoch nerve ich ihn immer wieder und er ist geduldig. Danke Dir Helle!

Helios_LüftungsdatenNun aber zurück zum Thema. Ich habe eine Helios KWL mit dem „neuen“ easyControls. Das finde ich auch klasse aber mich stört, dass ich zur Anzeige ein Browserfenster öffnen muss und nicht mal eine App verfügbar ist. Außerdem würde ich die KWL gerne dahin automatisieren, dass Sie sich höher schaltet wenn die Luftwerte schlecht sind (CO2) oder eben herunter oder gar abschaltet, wenn die Luftfeuchtigkeit unter 50% sinkt. Das Optimieren hätte nicht nur Vorteile für die Luftqualität, auch der Geldbeutel wird geschont, da die KWL schon ein kleiner Stromfresser im 24h-Betrieb ist (gemessen mit dem Greenwave Zwichenstecker):

Helios_Temp

  • Verbrauch Stufe 1: ca. 18 Watt
  • Verbrauch Stufe 2: ca. 67 Watt
  • Verbrauch Stufe 3: ca. 122 Watt
  • Verbrauch Stufe 4: ca. 207 Watt

Eigentlich wollte ich gar nicht scripten für die Hausautomation, aber nach ein bis zwei Stündchen Arbeit (da hat das Suchen für eine leere SD-Karte für den Raspberry gefühlt länger gedauert), wurden die ersten Daten zur Zipabox gesendet.

Mein Weg dahin:

  1. Helles Blog mit einem tollen Beispiel von der Netatmo
  2. Mein Raspberry Pi (neu installiert mit Raspbian)
  3. Installation Fiddler Web Debugger
  4. Mit Hilfe des Web Debugger hab ich dann den Web-Aufruf der easyControl-Oberfläche im Heimnetz analysiert; hier habe ich geprüft ob spezielle Cookies, Session-Variablen usw. gesetzt werden
  5. googlen für curl, sed (zu lange her)
  6. skripten und natürlich mal den Helle was fragen 😉
  7. ausbessern, Zeitzone und Zeit richtig abfragen: http://aufschnur.de/2014/raspberry-pi-uhrzeit-automatik/

Das Script möchte ich niemanden vorenthalten, vielleicht ist es ja noch für andere sinnvoll?

#!/bin/bash
# Author: O. Splitt
# Version 1.3
# Script zum auslesen und auswerten der Helios KWL Daten aus easyControls
# letztes Update: Gnuplot-Integration

# Aktuelles Datum und Zeit
CURR_TIME=`date +"%d.%m.%Y %T"`

# Aktuelle Minute
CURR_MINUTE=`date +"%M"`

# Wie haeugig (Intervall in Minuten) sollen die Werte an die Zipabox uebertragen werden
SEND_INTERVALL=10

# Working Directory
WD_DIR=/home/pi/kwl/

# temporaeres File mit den heruntergeladenen Daten der KW
KWL_TMP_FILE=${WD_DIR}.kwl_temp-data

# temporaeres File mit Lueftungsstufe
KWL_TMP_STUFE=${WD_DIR}.kwl_temp-stufe

# zuletzt eingestellte Stufe
LAST_LEVEL=`cat ${KWL_TMP_STUFE}`

# CSV-Datei zum archivieren der verschieden Daten
KWL_CSV=${WD_DIR}kwl.csv

# IP oder DNS-Name im lokalten Netzwerk
FQDN_KWL=<A.B.C.D>

# Zugangspasswort zur KWL
PASSWORD_KWL=<Zugangspassword>

# Fake Browser
USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586"

# URLs der einzelnen Werte der KWL
URL_ZIPABOX_KWL_STUFE="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_MODUS="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_AUSSENLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_ZULUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_ABLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_FORTLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_DZ_ZULUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_DZ_ABLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial==<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="
URL_ZIPABOX_KWL_BYPASS="https://my.zipato.com/zipato-web/remoting/attribute/set?=<Serial>&apiKey=apiKey&ep=<ep>&value<Number>="

# Anmeldung
curl -silent -A="${USER_AGENT}" -d "v00402=${PASSWORD_KWL}" http://${FQDN_KWL}/info.htm > /dev/null

# Auslesen der Werte
curl -silent -d "xml=/data/werte8.xml" http://${FQDN_KWL}/data/werte8.xml > ${KWL_TMP_FILE}
curl -silent -d "xml=/data/werte4.xml" http://${FQDN_KWL}/data/werte4.xml >> ${KWL_TMP_FILE}
curl -silent -d "xml=/data/lab8_de.xml" http://${FQDN_KWL}/data/lab8_de.xml >> ${KWL_TMP_FILE}

# KWL Stufe
KWL_STUFE=`grep -A 1 v00102 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
#echo ${KWL_STUFE:0:1}
# KWL Modus
KWL_MODUS=`grep -A 1 v00101 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Aussenluft
KWL_AUSSENLUFT=`grep -A 1 v00104 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Zuluft
KWL_ZULUFT=`grep -A 1 v00105 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Abluft
KWL_ABLUFT=`grep -A 1 v00107 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Fortluft
KWL_FORTLUFT=`grep -A 1 v00106 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Drehzahl Zuluft
KWL_DZ_ZULUFT=`grep -A 1 v00348 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Drehzahl Abluft
KWL_DZ_ABLUFT=`grep -A 1 v00349 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`

# KWL Bypass
KWL_BYPASS=`grep -A 1 v02119z ${KWL_TMP_FILE} | sed -n -e 's/.*<VL>\(.*\)<\/VL>.*/\1/p'`

if [ $((${CURR_MINUTE}%${SEND_INTERVALL})) -eq 0 ] || [ ${LAST_LEVEL} -ne ${KWL_STUFE:0:1} ]
then
        echo ${KWL_STUFE:0:1} > ${KWL_TMP_STUFE}
        # Uebertragen der Werte an die Zipabox
        curl -silent ${URL_ZIPABOX_KWL_MODUS}${KWL_MODUS:0:1} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_STUFE}${KWL_STUFE:0:1} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_AUSSENLUFT}${KWL_AUSSENLUFT} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_ZULUFT}${KWL_ZULUFT} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_ABLUFT}${KWL_ABLUFT} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_FORTLUFT}${KWL_FORTLUFT} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_DZ_ZULUFT}${KWL_DZ_ZULUFT} > /dev/null
        curl -silent ${URL_ZIPABOX_KWL_DZ_ABLUFT}${KWL_DZ_ABLUFT} > /dev/null
        # curl -silent ${URL_ZIPABOX_KWL_BYPASS}${KWL_BYPASS} #> /dev/null
        echo "${CURR_TIME};${KWL_MODUS:0:1};${KWL_STUFE:0:1};${KWL_AUSSENLUFT};${KWL_ZULUFT};${KWL_ABLUFT};${KWL_FORTLUFT};${KWL_DZ_ZULUFT};${KWL_DZ_ABLUFT};${KWL_BYPASS}" >> ${KWL_CSV}
fi

# Ablage der Werte zwecks Auswertung mit Gnuplot
echo "'${CURR_TIME}' ${KWL_STUFE:0:1} ${KWL_AUSSENLUFT} ${KWL_ZULUFT} ${KWL_ABLUFT} ${KWL_FORTLUFT} ${KWL_DZ_ZULUFT}" >> ${WD_DIR}plot.dat

Nun heißt es für mich noch zu lernen, wie ich der Anlage Werte übergebe, der Rest ist ein Kinderspiel…

Helios_ChartUpdate:

Ich hab vergessen zu erwähnen, dass das Script per crontab aktuell im Minutentakt aufgerufen wird. Allerdings werden die Werte nur alle 10 Minuten (immer um 0, 10, 20, …) zur Zipabox gesendet, es sei denn, dass die Lüftungsstufe sich verändert hat.

Mittlerweile hab ich auch ein paar weitere Werte ausgelesen. Leider kann der Wert Bypass nicht übermittelt werden (Inhalt ist „Geschlossen“, da anscheinend nur Zahlenwerte funktionieren. Hier könnte man anstatt dessen natürlich eine 1 oder 0 senden.

Zusätzlich lasse ich die Daten noch in eine CSV-Datei schreiben. Hier kann ich dann den Bypass ebenso auswerten… Die Datei sieht dann wie folgt aus:

16.01.2016 23:15:01;0;1;4.2;16.1;18.0;6.6;609;615;Geschlossen
16.01.2016 23:18:14;1;2;4.2;16.0;18.2;6.5;1216;1331;Geschlossen
16.01.2016 23:19:01;0;1;3.5;15.8;18.2;6.8;613;621;Geschlossen
16.01.2016 23:20:01;0;1;3.9;16.3;18.4;6.5;609;616;Geschlossen
16.01.2016 23:21:01;1;2;3.6;15.6;18.3;6.7;1418;1430;Geschlossen
16.01.2016 23:22:01;0;1;3.4;16.1;18.4;6.5;608;615;Geschlossen

Hier meine crontab:

@reboot ntpdate -s 0.de.pool.ntp.org
0 1 * * * ntpdate -s 0.de.pool.ntp.org
* * * * * /home/pi/kwl/./getval.sh

Was noch fehlt ist der Partymodus. Diesen müsste ich abfragen, da dann ein anderes Feld für die Lüftungsstufe greift… Warum und wieso verstehe ich nicht so wirklich, aber mir ist aufgefallen, das der Wert v00092 greift im Partybetrieb (bzw. der zuletzt dort hinterlegte) und ansonsten v00102 der korrekte Wert ist. Mir fehlte nun ehrlich gesagt die Motivation noch den Partybetrieb raus zu suchen.

Das könnte Dich auch interessieren …

1 Antwort

  1. Markus Reschka sagt:

    Hey Olli,

    ich wünschte ich hätte Deinen Artikel schon viel eher gefunden, dann hätte ich mir meine eigene Lösung sparen können. Die Lösung ist schon alleine super, weil sie so schlank ist! 🙂

    Ich hatte den Weg seinerzeit dann per MODBUS TCP und MQTT eingeschlagen: https://www.npmjs.com/package/helios2mqtt bzw. https://github.com/mreschka/helios2mqtt

    Viele Grüße,

    Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.