Spritpreismonitor: Unterschied zwischen den Versionen

Aus FHEMWiki
K (diverse kleinere Korrekturen)
Zeile 60: Zeile 60:




Sowie eine passende Readingsgroup:
Sowie eine passende [[readingsGroup]]:
<pre>
<pre>
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*
Zeile 140: Zeile 140:


== Tricks für den HTTPMOD ==
== Tricks für den HTTPMOD ==
Je nach Internetverbindung und Geschwindigkeit des fhem Rechners, kann das Modul manchmal Probleme haben die Daten schnell genug zu verarbeiten.
Je nach Internetverbindung und Geschwindigkeit des fhem Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.


Eine Lösung dazu wäre z.B., die Daten vorher mit wget auf einen eigenen Webserver zu speichern (ein lokaler Apache z.B.), und das HTTPMOD auf diesen zugreifen zu lassen.  
Eine Lösung dazu wäre z.B., die Daten vorher mit wget auf einen eigenen Webserver zu speichern (ein lokaler Apache z.B.), und das HTTPMOD auf diesen zugreifen zu lassen.  


== Links ==
== Links ==
* Vorstellung und Diskussion [http://forum.fhem.de/index.php/topic,22554.msg210795.html#msg210795 hier]
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=Fhem Forum}}
* [http://www.clever-tanken.de/ Clever Tanken]
* [http://www.clever-tanken.de/ Clever Tanken]
[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Version vom 11. November 2014, 12:13 Uhr


Dieses Code-Fragment ermöglicht es, mit Hilfe von HTTPMOD bei clever-tanken.de von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Phil__. Das OriginalPosting ist hier

Einleitung

Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden gespeichert und als Diagramm aufbereitet.
Zum Nachbau ist es erforderlich, "seine" Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer. /tankstelle_details/0815
Die 600 in den Beispielen gibt das Abrufintervall in Sekunden an.

Code für fhem

define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600
attr Shell group Spritpreise
attr Shell icon tanken
attr Shell readingsName_Diesel Diesel
attr Shell readingsName_SuperE5 SuperE5
attr Shell readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Shell readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Shell room Spritpreise
attr Shell stateFormat Liter_Diesel: Diesel
attr Shell timeout 5


define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600
attr Total group Spritpreise
attr Total icon tanken
attr Total readingsName_Diesel Diesel
attr Total readingsName_SuperE5 SuperE5
attr Total readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Total readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Total room Spritpreise
attr Total stateFormat Liter_Diesel: Diesel
attr Total timeout 5


define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600
attr Aral group Spritpreise
attr Aral icon tanken
attr Aral readingsName_Diesel Diesel
attr Aral readingsName_SuperE5 SuperE5
attr Aral readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Aral readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Aral room Spritpreise
attr Aral stateFormat Liter_Diesel: Diesel
attr Aral timeout 5


Dazu kommen noch die Definitionen vom FileLog:

define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*
attr FileLog_Spritpreise alias Log Spritpreise
attr FileLog_Spritpreise group Logfile
attr FileLog_Spritpreise logtype text
attr FileLog_Spritpreise room Spritpreise


Sowie eine passende readingsGroup:

define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*
attr Spritpreise group Spritpreisuebersicht
attr Spritpreise notime 1
attr Spritpreise room Spritpreise
attr Spritpreise style style="font-size:16px"
attr Spritpreise valueFormat {'%.2f €'}
attr Spritpreise valueStyle {Werte($READING,$VALUE)}


Und eine Plotdefinition

define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf
attr SVG_FileLog_Spritpreise_1 room Spritpreise

Farbliche Hervorhebung

Folgender Code gehört in 99_myUtils.pm; Die Werte könen natürlich entsprechend angepasst werden

###################################################
###     Spritpreisübersicht - Farbsortierung    ###
###################################################

sub Werte($$) {
  my ($name, $wert) = @_;
# Log(3,"$name $wert");
  if ($name eq "Diesel") {
    return 'style="color:red"' if($wert >= 1.39); 
    return 'style="color:blue"' if(($wert >= 1.33) && ($wert < 1.39));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.32);
  }elsif ($name eq "SuperE10") {
    return 'style="color:crimson"' if($wert >= 1.70); 
    return 'style="color:yellow"' if(($wert >= 1.55) && ($wert < 1.70));
    return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.55);
  }elsif ($name eq "SuperE5") {
    return 'style="color:red"' if($wert >= 1.59); 
    return 'style="color:blue"' if(($wert >= 1.49) && ($wert < 1.59));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.48);
  }  
}

Die zugehörige .gplot Datei

SVG_FileLog_Spritpreise_1.gplot

# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Spritpreise'
set ytics 
set y2tics 
set grid
set ylabel "Preise (€/Liter)"
set y2label "Preise (€/Liter)"

#FileLog 4:Aral.Diesel\x3a:1:
#FileLog 4:Shell.Diesel\x3a:1:
#FileLog 4:Total.Diesel\x3a:1:
#FileLog 4:Aral.SuperE5\x3a:1:
#FileLog 4:Shell.SuperE5\x3a:1:
#FileLog 4:Total.SuperE5\x3a:1:

plot "<IN>" using 1:2 axes x1y2 title 'Aral Diesel' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Shell Diesel' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Total Diesel' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Aral Super' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Shell Super' ls l4 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Total Super' ls l5 lw 1 with lines



Tricks für den HTTPMOD

Je nach Internetverbindung und Geschwindigkeit des fhem Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.

Eine Lösung dazu wäre z.B., die Daten vorher mit wget auf einen eigenen Webserver zu speichern (ein lokaler Apache z.B.), und das HTTPMOD auf diesen zugreifen zu lassen.

Links