Heizöltank auslesen und Preis nach Inhalt berechnen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von matze-pe » 26.08.2013, 09:11

Hallo,
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:
tecson-lx-net-tankspion1.jpg

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:
programm.JPG

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");
programm.JPG
Aktuelle Skript im Download als ZIP File:
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:
heizoel-bestellen.JPG
email.png
email.png (17.6 KiB) 11255 mal betrachtet
tcl.JPG


So sehen dann meine Variabeln in der Homematic aus:
Variabeln.png
Variabeln.png (22.68 KiB) 11261 mal betrachtet

Und so lasse ich sie mir auf mein Tablet anzeigen (Foto ist nicht das aktuellste, da fehlt als Widget noch der Gesamtpreis):
Foto 9.JPG
edit:
Hier das aktuellste Foto:
homescreen.JPG




Viele Grüße
Matze
Dateianhänge
heizoelpreis.zip
aktuelles Skript
(950 Bytes) 197-mal heruntergeladen
Zuletzt geändert von matze-pe am 15.10.2015, 12:05, insgesamt 6-mal geändert.
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von erik » 28.08.2013, 23:09

Schöner beitrag, könnte ich auch brauchen.

Was kostet denn der tank sensor, finde auf der homepage des herstellers keinen preis.

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von matze-pe » 29.08.2013, 07:36

Ich hatte den vor gut 2 Jahren dort gekauft, und da lag der Preis (inkl. Messonde) bei 374€.

Es kann auch gut möglich sein, dass es mittlerweile weitere Anbieter gibt die einen Heizöltanksensor kostengünstiger anbieten.
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

dennismanz
Beiträge: 74
Registriert: 13.10.2014, 02:56
Wohnort: Nähe Köln

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von dennismanz » 29.10.2014, 17:15

hallo,

das ist ein super beitrag - habe mir darauf hin auch den tanksensor gegönnt weil eh etwas neues fällig war.
hat sich an den TCL Scripten etwas geändert auf Grund der Updates inzwischen?

ich hatte es mal getestet - aber leider kommen fehler bei dem erstellen der HTML Datei für die Preise des Öls.
Hatte die PLZ entsprechend gesetzt und die Formel für die multiplikation rausgenommen da ich nur einen tank habe.

viele grüße

dennis

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von matze-pe » 29.10.2014, 17:30

Hi,
ja irgendwas hatte sie mal auf der heizoel24.de Seite geändert.

Anbei mein aktuelles Skript (in der ZIP befindet sich das neue TCL Skript):
heizoelpreis.zip
(715 Bytes) 241-mal heruntergeladen
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

dennismanz
Beiträge: 74
Registriert: 13.10.2014, 02:56
Wohnort: Nähe Köln

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von dennismanz » 29.10.2014, 23:38

hi,

perfekt - jetzt klappt es. super vielen dank!!!

vg

Alexxx2005
Beiträge: 250
Registriert: 17.12.2014, 18:56
Hat sich bedankt: 19 Mal
Danksagung erhalten: 3 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von Alexxx2005 » 24.05.2015, 17:34

Hallo matze,

ich wollte mich erkundigen ob der Heizöladapter
noch funktioniert, habe es gestern mal so eingetragen
aber meine Variablen bleiben immer bei 0 €....

Viele Grüße Alex


matze-pe hat geschrieben:Hallo,
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:
tecson-lx-net-tankspion1.jpg

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:
programm.JPG

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.

Da ich nur die URL http://www.heizoel24.de/tagespreis-direkt/PLZ/1/MENGE/1 abrufen muss (PLZ und MENGE anzupassen) --> http://www.heizoel24.de/tagespreis-dire ... 8/1/2000/1.
Von der Seite entnehme ich dann den Gesamtpreis und den Liter Preis. 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");
programm.JPG

heizoelpreis.tcl

Code: Alles auswählen

load tclrega.so

# Variablen: Heizoelpreis Zahl

array set values [rega_script {
var menge=dom.GetObject('Heizoelfreiraum').Variable().ToInteger(); # Freiraum in L auslesen
}]

set bestell $values(menge);

# Aufruf und Erstellung der Datei
# =============================== 
set url http://www.heizoel24.de/tagespreis-direkt/31228/1/$bestell/1
exec /usr/bin/wget -q -O /usr/local/addons/heizoel/heizoelpreis.html $url

set f [open "/usr/local/addons/heizoel/heizoelpreis.html"]
set input [read $f]
close $f


# Werte aus Datei auslesen
# ========================
set preis 0.00;
regexp "../../../../oelbestellung/31228/1/$bestell/1/19,6,9,11/0/(.*?)," $input dummy preis  ;

# Gesamter Preis für den Wert der Menge aus Heizoelfreiraum
regexp " MwSt: (.*?) " $input dummy gpreis  ;


# Werte in Variabel schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('Heizoelpreis');" 
append rega_cmd "w0.State('0,$preis');"

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:
heizoel-bestellen.JPG
email.png
tcl.JPG


So sehen dann meine Variabeln in der Homematic aus:
Variabeln.png

Und so lasse ich sie mir auf mein Tablet anzeigen (Foto ist nicht das aktuellste, da fehlt als Widget noch der Gesamtpreis):
Foto 9.JPG
edit:
Hier das aktuellste Foto:
homescreen.JPG




Viele Grüße
Matze

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von matze-pe » 24.05.2015, 17:37

Ja funktioniert reibungslos ;-)
Bei Heizöl24 gibt es wahrscheinlich regional Unterschiede in der url, am besten vorab die url an passen, und angefragte Liter müssen größer 500L sein.
editier die Datei am besten mit notepad ++


... mobil via tapatalk
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

Semenchkare
Beiträge: 64
Registriert: 31.08.2014, 19:48
Danksagung erhalten: 1 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von Semenchkare » 25.05.2015, 18:56

Hallo,
ich habe gleiches Problem mit dem Preis. Er ist nicht mehr im Quelltext vorhanden, somit auch nicht auslesbar.
Da hilft auch die Datei vom 29.10.2014 nicht mehr...
Vermute, mit dieser Seite kann der Preis nicht mehr ermittelt werden...
Zuletzt geändert von Semenchkare am 25.05.2015, 20:32, insgesamt 1-mal geändert.
Viele Grüße

Seme

ccu3 Raspberrymatic 3.71.12.20231020,
Thermostate 8x HM-CC-RT-DN 105155 FW 1.4, Thermostat 1x HMIP-eTRV FW 1.6.3
Wandthermostat 1x HM-TC-IT-WM-W-EU FW 1.3
Tuer-Fensterkontakte 7x HM-Sec-SC-2 FW 1.2, Tuer-Fensterkontakt-optisch 1x HMIP-SWDO 1.10.7, Tuer-Fensterkontakt opt. HMIP-SWDO-I FW 1.14.0
Fenster-Drehgriffkontakt HMIP-SRH FW 1.0.1
Bewegungsmelder HM-Sec-MDIR-2 FW 1.6
Temperatur- Feuchtesensor aussen HM-WDS10-TH-O FW 1.3
Rauchmelder HM-Sec-SD FW 1.1, 2x HMIP-SWSD FW 1.0.11
Funk-Schaltaktor HM-LC-Sw1-FM FW 1.12, Funk-Schaltsteckdose HM-ES-PMSw1-Pl 2.5
Zusatzsoftware: CUXDaemon V. 2.11, E-Mail V. 1.7.6, XML API 1.22, hm_pdetect 1.16, Philips Hue 3.2.5

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Heizöltank auslesen und Preis nach Inhalt berechnen

Beitrag von matze-pe » 25.05.2015, 19:36

Ich lade die Tage meine Datei neu hoch


... mobil via tapatalk
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

Antworten

Zurück zu „Projektvorstellungen“