ich habe mir schon vor längere Zeit ein Heizöltanksensor von Fa. Tecson gekauft. Der Tanksensor hat ein Webinterface und man kann gegen eine Jahresgebühr von Fa. Tecson eine Vebrauchsansicht (pro Monat / IST-Zustand etc.) dazu kaufen. Mir war die Jahresgebühr zu teuer, und habe mir gedacht "das versuche ich mal selber auszulesen"
Ich hatte mich dann mal ein wenig mit dem Webinterface auseinander gesetzt, und eine XML Schnittstelle gefunden. Diese XML Werte habe ich mir dann mit PHP in eine Variabel geschrieben. Die Seite die mir die Werte ausliest, lasse ich per Task 1x im Monat aufrufen. Die Werte stelle ich dann mir grafisch in einem Diagramm da:
http://blog.reddemann.it/projekte/heizo ... verbrauch/
So sieht der Tankspion aus:
Jetzt bin ich seit 3 Wochen Besitzer meiner ersten Homematic CCU, und lese und probiere viel aus Ich bin über die Skripte von "Blurline" gestoßen, und konnte auf Basis von seinen Skripten die XML Werte von meinem Tanksensor in die Homematic einbinden.
Vor einem halben Jahr hatte ich mir ein Tablet in meiner Flur Wand integriert ( http://homematic-forum.de/forum/viewtop ... 18&t=13972 ), und jetzt stelle ich mir die Werte als Widget auf dem Tablet Homescreen da.
Folgende Systemvariabeln habe ich mir angelegt:
Heizoeluebersicht
Heizoelbestand
Heizoelfreiraum
Heizoelprozent
Heizoelpreis
Heizoelgesamtpreis
Benötigte Addons:
CCU1:
http://www.homematic-inside.de/software ... net-dienst -> mit Telnet ein Passwort für den FTP Zugang auf der CCU einrichten
Telnet Session (Windows) öffnen:
Start
Eingabeaufforderung
> telnet
> open 192.168.X.X
> root
> passwd
> dein Passwort
> dein Passwort
http://www.homematic-inside.de/software/addons/item/ftp -> Installieren
Filezilla:
https://filezilla-project.org/ -> Ordner/Datei Struktur unter /usr/local/addons/heizoel/ anlegen -> Berechtigung der heizoel.tcl auf 755 setzen
Server:192.168.X.XXX
User:root
Passwort:dein Passwort was beim Telnet gesetzt wurde
CCU2:
Filezilla:
https://filezilla-project.org/ -> Ordner/Datei Struktur unter /usr/local/addons/heizoel/ anlegen -> Berechtigung der heizoel.tcl auf 755 setzen
Server: sftp://192.168.X.XX
User:root
Passwort: MuZhlo9n%8!G
Port: 22
http://www.homematic-inside.de/software/cuxdaemon -> Performance schonender Aufruf
CUxD Gerätetyp: System (28) erstellt
Script im Programm:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/heizoel/heizoel.tcl");
Programm:
heizoel.tcl
Code: Alles auswählen
load tclrega.so
# Heiölwerte Zeichenkette
set url http://192.168.x.x/xml # IP-Adresse des Tanksensors, mit der XML Schnittstelle
exec /usr/bin/wget -q -O /usr/local/addons/heizoel/heizoel.xml $url
set f [open "/usr/local/addons/heizoel/heizoel.xml"]
set input [read $f]
close $f
# Werte aus XML Datei auslesen
# =============================
regexp "<tankLevel>(.*?)</tankLevel>" $input dummy tank ; #Bestand in L
regexp "<tankPercent>(.*?)</tankPercent>" $input dummy prozent ; #Prozentual
# Berechung auf 4 Tanks
# ======================
set alletanks [expr {$tank * 4}];
set freiraum [expr {4000-$alletanks}];
# Werte in Variabel schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('Heizoeluebersicht');"
append rega_cmd "w0.State('Bestand: $alletanks L ($prozent %)\nFreiraum: $freiraum L');"
append rega_cmd "var w1 = dom.GetObject('Heizoelbestand');"
append rega_cmd "w1.State('$alletanks');"
append rega_cmd "var w2 = dom.GetObject('Heizoelfreiraum');"
append rega_cmd "w2.State('$freiraum');"
append rega_cmd "var w3 = dom.GetObject('Heizoelprozent');"
append rega_cmd "w3.State('$prozent');"
rega_script $rega_cmd
Wenn ich Heizöl bestellen muss, schaue ich immer auf dem Portal von http://www.heizoel24.de und gebe meine PLZ sowie die bestellende Menge an. Danach wird mir der Tagespreis für die angegebene Heizölmenge angezeigt.
Da ich jetzt den Freiraum (L) für meine Tanks in eine Variabel schreibe, wollte ich den genauen Heizölpreis als Variabel auf mein Tablet angezeigt bekommen.
Um die XML Schnittstelle von heizoel24.de zu verwenden muss man sich unter folgendem Link registrieren:
https://www.heizoel24.de/linkpartner-werden
Und nach Freischaltung (ca. 1 Tag) bekommt man im Login Bereich das Passwort und Partner ID (Kundennummer)
Von der XML Datei entnehme ich den Liter Preis und berechne dadurch den Gesamtpreis. Die beiden Werte schreibe ich mir dann jeweils in eine Variabel:
Script im Programm:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/heizoel/heizoelpreis.tcl");
heizoelpreis.tcl
Code: Alles auswählen
load tclrega.so
array set values [rega_script {
var menge=dom.GetObject('Heizoelfreiraum').Variable().ToInteger();
}]
# Auswahl oelsorten = standard; super; bio; diesel
# API Daten
# ==========
set partner_id "XXXXXXX"
set password "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
set plz "XXXXX"
set oelsorte "standard"
set bestell $values(menge);
set lieferstellen "1"
if { $bestell<="500" } {
set liter "500"
} else {
set liter "$bestell"
}
# Aufruf und Erstellung der Datei
# ===============================
set url https://www.heizoel24.de/DailyPriceXml.ashx?AffiliateLinkId=$partner_id&password=$password&zipcode=$plz&oilgrade=$oelsorte&litre=$liter&unloadingpoints=$lieferstellen
exec /usr/bin/wget --no-check-certificate -q -O /usr/local/addons/heizoel/heizoelpreis.xml $url
set f [open "/usr/local/addons/heizoel/heizoelpreis.xml"]
set input [read $f]
close $f
# Werte aus Datei auslesen
# ========================
regexp "<result>(.*?)</result>" $input dummy result ; # öffne Bereich "<result>"
regexp "<deliveries>(.*?)</deliveries>" $result dummy2 deliveries ; # öffne Bereich "<deliveries>"
regexp "<delivery (.*?)</delivery>" $deliveries dummy3 delivery ; # öffne Bereich "<delivery>"
regexp "<price (.*?)</price>" $delivery dummy4 price ; #öffne Bereich "<price>"
regexp ">(.*?)," $price dummy5 preis ;
set literpreis [expr $preis / 100.0];
set gpreis [expr $literpreis * $bestell];
# Werte in Variabel schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('Heizoelpreis');"
append rega_cmd "w0.State('$literpreis').ToString(2);"
append rega_cmd "var w1 = dom.GetObject('Heizoelgesamtpreis');"
append rega_cmd "w1.State('$gpreis');"
rega_script $rega_cmd
Wenn der Bestand unter 50% ist, lasse ich mir über das Email-Addon eine Mail schicken:
So sehen dann meine Variabeln in der Homematic aus:
Und so lasse ich sie mir auf mein Tablet anzeigen (Foto ist nicht das aktuellste, da fehlt als Widget noch der Gesamtpreis): edit:
Hier das aktuellste Foto:
Viele Grüße
Matze