splittscheid 2.0

Helios KWL sendet Daten an die Zipabox

Helios_Overview 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!

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 z
wei 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?

  1. #!/bin/bash
  2. # Author: O. Splitt
  3. # Version 0.2
  4. # Script zum auslesen und auswerten der Helios KWL Daten aus easyControls
  5. # Aktuelles Datum und Zeit
  6. CURR_TIME=`date +"%d.%m.%Y %T"`
  7. # Aktuelle Minute
  8. CURR_MINUTE=`date +"%M"`
  9. # Wie haeugig (Intervall in Minuten) sollen die Werte an die Zipabox uebertragen werden
  10. SEND_INTERVALL=<10>
  11. # Working Directory
  12. WD_DIR=</dein/directory/wo/das/script/ausgefuehrt/wird/>
  13. # temporaeres File mit den heruntergeladenen Daten der KW
  14. KWL_TMP_FILE=${WD_DIR}.kwl_temp-data
  15. # temporaeres File mit Lueftungsstufe
  16. KWL_TMP_STUFE=${WD_DIR}.kwl_temp-stufe
  17. # zuletzt eingestellte Stufe
  18. LAST_LEVEL=`cat ${KWL_TMP_STUFE}`
  19. # CSV-Datei zum archivieren der verschieden Daten
  20. KWL_CSV=${WD_DIR}kwl.csv
  21. # IP oder DNS-Name
  22. FQDN_KWL=<1.2.3.4>
  23. # Zugangspasswort zur KWL
  24. PASSWORD_KWL=<Dein Passwort>
  25. # URLs der einzelnen Werte der KWL
  26. URL_ZIPABOX_KWL_STUFE="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  27. URL_ZIPABOX_KWL_MODUS="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  28. URL_ZIPABOX_KWL_AUSSENLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  29. URL_ZIPABOX_KWL_ZULUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  30. URL_ZIPABOX_KWL_ABLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  31. URL_ZIPABOX_KWL_FORTLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  32. URL_ZIPABOX_KWL_DZ_ZULUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  33. URL_ZIPABOX_KWL_DZ_ABLUFT="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  34. URL_ZIPABOX_KWL_BYPASS="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=XXX="
  35. # Anmeldung (funktioniert leider nocht nicht korrekt, zumindest nicht immer)
  36. curl -silent -d "v00402=${PASSWORD_KWL}" http://${FQDN_KWL}/ > /dev/null
  37. # Auslesen der Werte
  38. curl -silent -d "xml=/data/werte8.xml" http://${FQDN_KWL}/data/werte8.xml > ${KWL_TMP_FILE}
  39. curl -silent -d "xml=/data/werte4.xml" http://${FQDN_KWL}/data/werte4.xml >> ${KWL_TMP_FILE}
  40. curl -silent -d "xml=/data/lab8_de.xml" http://${FQDN_KWL}/data/lab8_de.xml >> ${KWL_TMP_FILE}
  41. # KWL Stufe
  42. KWL_STUFE=`grep -A 1 v00102 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  43. # KWL Modus
  44. KWL_MODUS=`grep -A 1 v00101 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  45. # KWL Aussenluft
  46. KWL_AUSSENLUFT=`grep -A 1 v00104 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  47. # KWL Zuluft
  48. KWL_ZULUFT=`grep -A 1 v00105 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  49. # KWL Abluft
  50. KWL_ABLUFT=`grep -A 1 v00107 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  51. # KWL Fortluft
  52. KWL_FORTLUFT=`grep -A 1 v00106 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  53. # KWL Drehzahl Zuluft
  54. KWL_DZ_ZULUFT=`grep -A 1 v00348 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  55. # KWL Drehzahl Abluft
  56. KWL_DZ_ABLUFT=`grep -A 1 v00349 ${KWL_TMP_FILE} | sed -n -e 's/.*<VA>\(.*\)<\/VA>.*/\1/p'`
  57. # KWL Bypass
  58. KWL_BYPASS=`grep -A 1 v02119z ${KWL_TMP_FILE} | sed -n -e 's/.*<VL>\(.*\)<\/VL>.*/\1/p'`
  59. if [ $((${CURR_MINUTE}%${SEND_INTERVALL})) -eq 0 ] || [ ${LAST_LEVEL} -ne ${KWL_STUFE:0:1} ]
  60. then
  61. echo ${KWL_STUFE:0:1} > ${KWL_TMP_STUFE}
  62. # Uebertragen der Werte an die Zipabox
  63. curl -silent ${URL_ZIPABOX_KWL_MODUS}${KWL_MODUS:0:1} > /dev/null
  64. curl -silent ${URL_ZIPABOX_KWL_STUFE}${KWL_STUFE:0:1} > /dev/null
  65. curl -silent ${URL_ZIPABOX_KWL_AUSSENLUFT}${KWL_AUSSENLUFT} > /dev/null
  66. curl -silent ${URL_ZIPABOX_KWL_ZULUFT}${KWL_ZULUFT} > /dev/null
  67. curl -silent ${URL_ZIPABOX_KWL_ABLUFT}${KWL_ABLUFT} > /dev/null
  68. curl -silent ${URL_ZIPABOX_KWL_FORTLUFT}${KWL_FORTLUFT} > /dev/null
  69. curl -silent ${URL_ZIPABOX_KWL_DZ_ZULUFT}${KWL_DZ_ZULUFT} > /dev/null
  70. curl -silent ${URL_ZIPABOX_KWL_DZ_ABLUFT}${KWL_DZ_ABLUFT} > /dev/null
  71. # curl -silent ${URL_ZIPABOX_KWL_BYPASS}${KWL_BYPASS} > /dev/null
  72. 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}
  73. fi

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

Helios_Chart

 

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:

CSV   
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:

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. Die Anmeldung ist ein sehr merkwürdiger Prozess, melde ich mich am Rechner (andere IP) an, funktioniert es auch in der Shell, aber diese muss einmal erfolgen und dann rennt der Raspberry. Erfolgt die Anmeldung nicht, läuft das Script auf Fehler!

Schreibe einen Kommentar

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