Bislang 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!
Nun 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):
- 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:
- Helles Blog mit einem tollen Beispiel von der Netatmo
- Mein Raspberry Pi (neu installiert mit Raspbian)
- Installation Fiddler Web Debugger
- 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
- googlen für curl, sed (zu lange her)
- skripten und natürlich mal den Helle was fragen 😉
- 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…
Update:
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.