Homematic Sensoren mit Plug-In einlesen

Moderator: Mattk

Post Reply
herbertchen
Fresh Boarder
Fresh Boarder
Posts: 3
Joined: Mon Mar 25, 2013 9:50 pm

Homematic Sensoren mit Plug-In einlesen

Post by herbertchen » Mon Mar 25, 2013 10:31 pm

Hallo,

ich möchte hier meinen Weg beschreiben, mit dem ich Daten der Homematic Haussteuerung per Plug-In in Meteohub importiere, speziell die Sensorwerte des OC-3 Kombisensors sowie diverse Temperatur/Feuchtesensoren, z.B. von Thermostatsteuerungen.

Zunächst muss einiges auf der Homematic vorbereitet werden (ftp server installieren, Sensoren in Gewerk zuordnen, HM-Skript und TCL-Skript erstellen), aber dies kann hier nachgelesen werden und soll nicht nochmal wiederholt werden: http://homematic-forum.de/forum/viewtop ... ten#p84420

Das Ergebnis ist eine Textdatei auf der Homematic, in der die jeweils persönlich konfigurierten Sensorwerte in dieser Form vorliegen:
>>Wetter Kombisens;23.03.2013;23:40;2,00;62;false;188,80;5,10;175;67;192;8;6,68
>>Thermostat Wohnzimmer I;23.03.2013;23:40;22,20;32;;;;;;;;

Wetter Kombisens ist der OC3 Sensor mit folgendem Datenaufbau: Name;Datum;Uhrzeit;Temperatur;Feuchte;Status Regenmelder;Regenmenge;Windgeschwindigkeit;Windrichtung;Schwankungsbreite Wind;Sonnenscheindauer;Helligkeit; (der letzte Wert (6,68) ist meine Garagentemperatur, den Wert habe ich mir in dieser Kollation noch mit aufgenommen)

Die Häufigkeit des Updates wird auf der Homematic selbst im entsprechenden Skript entschieden. Gemäß diesem Updateintervall habe ich einen Cronjob auf Meteohub definiert, der per FTP die CSV-Datei von der Homematic abholt.

FTP-Skript:

Code: Select all

#!/bin/sh
#
path="/usr/local/usbstick/"
file="wetter.csv"
hostname="homematic"
username="username"
password="password"

ftp -in $hostname <<EOF
quote USER $username
quote PASS $password

cd $path
binary
prompt
hash

get $file
quit
Nun müssen die ganzen Daten in die vom Plug-In gewünschten Formate umgerechnet werden, geht bestimmt eleganter, aber es funzt:

Code: Select all

#!/bin/sh
#
while :
do

 #Innensensoren (Temp+Luftfeucht)
 grep "Wohnzimmer I" /home/meteohub/wetter.csv | gawk '{ (split($3,feld,";"))} {gsub(",",".",feld[4])} {printf "th5 %2.0f %d\n", feld[4]*10, feld[5] >>"/home/meteohub/hm_conv_data.txt"}'

 #Aussentemp
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {gsub(",",".",feld[4])} {printf "th9 %2.0f %d\n", feld[4]*10, feld[5] >>"/home/meteohub/hm_conv_data.txt"}'
 
#Wind
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {printf "wind9 %d 0 %2.0f\n", feld[9], lround (feld[8]/0.36) >> "/home/meteohub/hm_conv_data.txt" }'

 #Regenmenge
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {gsub(",",".",feld[7])} {printf "rain9 0 %3.0f\n", feld[7] >> "/home/meteohub/hm_conv_data.txt" }'

 #Regenstatus
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))}
  {if(feld[6]=="false") {printf "data0 0\n" >> "/home/meteohub/hm_conv_data.txt" }
   else {printf "data0 1\n" >> "/home/meteohub/hm_conv_data.txt" }}'

 #Helligkeit
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {printf "sol9 %d\n", lround (feld[12]/28.333) >> "/home/meteohub/hm_conv_data.txt" }'

 #Sonnenscheindauer
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {printf "data1 %d\n", feld[11]*100 >> "/home/meteohub/hm_conv_data.txt" }'

 #Garagentemperatur
 grep "Kombisens" /home/meteohub/wetter.csv | gawk '{ (split($2,feld,";"))} {gsub(",",".",feld[13])} {printf "t9 %2.0f\n", feld[13]*10 >>"/home/meteohub/hm_conv_data.txt"}'

 # write to stdout (funzt nicht mir printf oder echo, warum auch immer)
 cat "/home/meteohub/hm_conv_data.txt"

 sync
 # Aufräumen
 rm -f /home/meteohub/wetter.csv
 rm -f /home/meteohub/hm_conv_data.txt

 sleep 120
done
In meiner x86 Distro unter VM-Ware (auf Win Server 2003) funktioniert die Ausgabe nach STDOUT über printf nur, wenn ich das Shell-Skript manuell starte.
Der Aufruf über das Plug-In hatte das Skript zwar gestartet, aber es wurde kein Sensorwert eingelesen.
Die einzige Lösung, die ich gefunden habe, ist folgender Workaround: die Ausgaben werden in eine Textdatei umgeleitet ("hm_conv_data.txt") und danach von "cat" auf STDOUT geschrieben - komisch, aber immerhin funktioniert es so!

Was ich noch generell sagen wollte: Es ist großartig, daß es eine kostenlose Demoversion von Meteohub gibt, mit der man alles erst testen kann. Ich gabe mir gestern abend dann auch die Lizenz bestellt, aber es war mir wichtig vorher zu sehen, ob alles stabil und so läuft, wie ich mir das vorstelle. Echt gutes Programm, auch die Möglichkeit WD Live direkt zu verwenden.

Stationen in Betrieb:
WS2300 Matrix
WS 300 PC-II
Homematic

Gruß aus Biblis
Richard Schwinn
Attachments
hm.jpg
hm.jpg (78.69 KiB) Viewed 2162 times

Post Reply