define FileLog_Tanken FileLog /media/usblog/fhem/log/benzinpreis.log BENZIN_PREIS
attr FileLog_Tanken logtype text
attr FileLog_Tanken room Uebersicht,Technik
#########################################################
### Spritpreise ####
#########################################################
#########################################################
#########################################################
### Spritpreise Diesel/SuperE5 - Langen ####
#########################################################
#########################################################
### Tankstellen - Langen ####
#########################################################
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
#########################################################
### 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
#########################################################
### 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)}
#########################################################
### Plot ####
#########################################################
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
###################################################
### 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);
}
}
#------------------------------------------------------------------------------
# FuelFormat:
# sets the valueStyle of the fuel monitor:
# lowest value: green bold
# biggest value: red bold
# $DEVICE contains the station
# $REDING contains the fuel type
# $VALUE contains the price
#
# calling in fhem:
# attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
#
# version/programming:
# 0.1/Peter Mühlbeyer
#
# bugs/improvements:
# - in case of same max. or min. values only one value will be marked
#------------------------------------------------------------------------------
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("Gehring","Jet","Shell","Shell_Loe");
my $lowprice1 = 99; my $lowdevice1;
my $highprice1 = -99; my $highdevice1;
my $actprice1;
my $lowprice2 = 99; my $lowdevice2;
my $highprice2 = -99; my $highdevice2;
my $actprice2;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "Schleife: $_ $actprice1";
if ($actprice1 > $highprice1)
{
$highprice1 = $actprice1;
$highdevice1 = $_;
}
elsif ($actprice1 < $lowprice1)
{
$lowprice1 = $actprice1;
$lowdevice1 = $_;
}
}
if ($DEVICE eq $lowdevice1) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice1) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE10")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE10",99);
if ($actprice2 > $highprice2)
{
$highprice2 = $actprice2;
$highdevice2 = $_;
}
elsif ($actprice2 < $lowprice2)
{
$lowprice2 = $actprice2;
$lowdevice2 = $_;
}
}
if ($DEVICE eq $lowdevice2) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice2) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE5")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE5",99);
if ($actprice2 > $highprice2)
{
$highprice2 = $actprice2;
$highdevice2 = $_;
}
elsif ($actprice2 < $lowprice2)
{
$lowprice2 = $actprice2;
$lowdevice2 = $_;
}
}
if ($DEVICE eq $lowdevice2) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice2) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
#----- FuelFormat -------------------------------------------------------------
# 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
Zitat von: AndreR am 16 April 2014, 23:43:48
Würdest du das PHP Script zur Verfügung stellen?
Ich find die Idee echt gut, da könnte man z.b. Mit nem notify reagieren wenn der spritpreis mal ungewöhnlich niedrig sein sollte...
define Benzinpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/642 60
attr Benzinpreis readingsName_Diesel Diesel
attr Benzinpreis readingsName_SuperE10 SuperE10
attr Benzinpreis readingsName_SuperE5 SuperE5
attr Benzinpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Benzinpreis readingsRegex_SuperE10 <div class="fuel_type">Super E10[^0-9]+([0-9\.]+)
attr Benzinpreis readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Benzinpreis room Benzinpreis
attr Benzinpreis timeout 5
Zitat von: frankbeckers am 17 Juli 2014, 23:05:37
Die Idee hat mich sofort begeistert. Habe direkt versucht es mit Bordmitteln umzusetzen.
Mit HTTPMOD ist als erster Versuch folgendes herausgekommen:Code Auswählendefine Benzinpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/642 60
attr Benzinpreis readingsName_Diesel Diesel
attr Benzinpreis readingsName_SuperE10 SuperE10
attr Benzinpreis readingsName_SuperE5 SuperE5
attr Benzinpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Benzinpreis readingsRegex_SuperE10 <div class="fuel_type">Super E10[^0-9]+([0-9\.]+)
attr Benzinpreis readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Benzinpreis room Benzinpreis
attr Benzinpreis timeout 5
Damit hat man die Benzinpreise in eigenen Readings und kann diese dann weiter verarbeiten. Das ganze lässt sich bestimmt noch weiter ausbauen.
Gruß
Frank
define Benzinpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/2634 60
attr Benzinpreis readingsName_Diesel Diesel
attr Benzinpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Benzinpreis room Benzinpreis
attr Benzinpreis timeout 5
Diesel 1.32 2014-07-18 11:06:20
SuperE10 1.51 2014-07-18 10:44:50
SuperE5 1.55 2014-07-18 10:44:50
Zitatattr Benzinpreis stateFormat {sprintf(ReadingsVal($name,"Diesel",0))}nicht so kompliziert.
attr Benzinpreis stateFormat mein_diesel: Diesel
ZitatIch frage ja eigentlich nur Diesel ab. Warum kommen auch die anderen Preise ?sind wohl noch von der ersten definition übriggeblieben.
Internals:
CHANGED
DEF http://www.clever-tanken.de/tankstelle_details/2634 60
Interval 60
NAME Benzinpreis
NR 32
STATE 1.32
TYPE HTTPMOD
addr http://www.clever-tanken.de:80
buf HTTP/1.1 403 FORBIDDEN
Date: Fri, 18 Jul 2014 11:03:37 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Content-Type: text/html
Via: 1.0 www.clever-tanken.de
Content-Length: 1006
Connection: close
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="robots" content="NONE,NOARCHIVE">
<title>403 Forbidden</title>
<style type="text/css">
html * { padding:0; margin:0; }
body * { padding:10px 20px; }
body * * { padding:0; }
body { font:small sans-serif; background:#eee; }
body>div { border-bottom:1px solid #ddd; }
h1 { font-weight:normal; margin-bottom:.4em; }
h1 span { font-size:60%; color:#666; font-weight:normal; }
#info { background:#f6f6f6; }
#info ul { margin: 0.5em 4em; }
#info p, #summary p { padding-top:10px; }
#summary { background: #ffc; }
#explanation { background:#eee; border-bottom: 0px none; }
</style>
</head>
<body>
<div id="summary">
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
</div>
<div id="explanation">
<p><small>More information is available with DEBUG=True.</small></p>
</div>
</body>
</html>
code 403
conn
data 1
displayurl http://www.clever-tanken.de/tankstelle_details/2634
host www.clever-tanken.de
loglevel 4
path /tankstelle_details/2634
protocol http
redirects 0
timeout 2
url http://www.clever-tanken.de/tankstelle_details/2634
Readings:
2014-07-18 11:18:21 Diesel 1.32
2014-07-18 10:44:50 SuperE10 1.51
2014-07-18 10:44:50 SuperE5 1.55
Attributes:
readingsName_Diesel Diesel
readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
requestData.* 1
room Benzinpreis
stateFormat {sprintf(ReadingsVal($name,"Diesel",0))}
stateFormat {sprintf(ReadingsVal($name,"Diesel",0))}
define Benzinpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/13320 60
attr Benzinpreis group Treibstoff
attr Benzinpreis readingsName_SuperE5 SuperE5
attr Benzinpreis readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Benzinpreis room Benzinpreis
attr Benzinpreis stateFormat Liter_Benzin: SuperE5
attr Benzinpreis timeout 5
define Dieselpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/13320 60
attr Dieselpreis group Treibstoff
attr Dieselpreis readingsName_Diesel Diesel
attr Dieselpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Dieselpreis room Benzinpreis
attr Dieselpreis stateFormat Liter_Diesel: Diesel
attr Dieselpreis timeout 5
ZitatMal sehen, ob ich den Preis noch unterschiedlich einfärben kann, z.B. bei Diesel <= 1.32 gelb einfärben und > z.B. rot.
define Benzinpreise readingsGroup (Gehring|Shell):(Diesel|SuperE10|SuperE5).*
{ if($VALUE < 1.20){ 'style="color:green;font-weight:bold"' }elsif(($VALUE >= 1.20) && ($VALUE < 1.35)){ 'style="color:yellow"' }elsif($VALUE > 1.35 ){ 'style="color:red"' }}
ZitatJetzt noch eine passende LogfiledefinitionDann mach mal ;)
define Benzinpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/13320 1800
attr Benzinpreis group Treibstoff
attr Benzinpreis readingsName_SuperE5 SuperE5
attr Benzinpreis readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Benzinpreis room hidden
attr Benzinpreis stateFormat Liter_Benzin: SuperE5
attr Benzinpreis timeout 5
define Dieselpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/13320 1800
attr Dieselpreis group Treibstoff
attr Dieselpreis readingsName_Diesel Diesel
attr Dieselpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Dieselpreis room hidden
attr Dieselpreis stateFormat Liter_Diesel: Diesel
attr Dieselpreis timeout 5
define Benzinpreise readingsGroup (Dieselpreis|Benzinpreis):(Diesel|SuperE5).*
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:18px"
attr Benzinpreise valueStyle { if($VALUE < 1.20){ 'style="color:green;;font-weight:bold"' }elsif(($VALUE >= 1.20) && ($VALUE < 1.35)){ 'style="color:yellow"' }elsif($VALUE > 1.35 ){ 'style="color:red"' }}
Zitat von: Puschel74 am 18 Juli 2014, 18:39:24
Mit der readingsGroup werden einfach nur die beiden "Geräte" (Gehring und Shell bei mir) in eine Gruppe verpackt und valueStyle verwenden zu können.
Die beiden "Geräte" werden ganz normal definiert wie in den vorigen Beiträgen gezeigt.
define wl_Benzinpreise SVG myDbLog:Benzinpreise_db:HISTORY
attr wl_Benzinpreise label "Benzinpreise (€/Liter)"
attr wl_Benzinpreise plotfunction Gehring Shell
attr wl_Benzinpreise room 02_Benzinpreise
define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis
attr FileLog_Dieselpreis logtype text
2014-07-19_11:20:33 Dieselpreis Diesel: 1.32
define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis:Diesel.*
2014-07-19_13:40:07 Benzinpreise Aral.SuperE5: <div style="color:red">1.54</div>
2014-07-19_13:40:07 Benzinpreise Aral.Diesel: <div style="color:yellow">1.33</div>
2014-07-19_13:40:07 Benzinpreise HEM.SuperE5: <div style="color:red">1.54</div>
2014-07-19_13:40:07 Benzinpreise HEM.Diesel: <div style="color:yellow">1.34</div>
2014-07-19_13:40:07 Benzinpreise Star.SuperE5: <div style="color:red">1.53</div>
2014-07-19_13:40:07 Benzinpreise Star.Diesel: <div style="color:yellow">1.32</div>
2014-07-19_13:39:07 Benzinpreise Aral.SuperE5: <div style="color:red">1.54</div>
2014-07-19_13:39:07 Benzinpreise Aral.Diesel: <div style="color:yellow">1.33</div>
2014-07-19_13:39:07 Benzinpreise HEM.SuperE5: <div style="color:red">1.54</div>
2014-07-19_13:39:07 Benzinpreise HEM.Diesel: <div style="color:yellow">1.34</div>
2014-07-19_13:39:07 Benzinpreise Star.SuperE5: <div style="color:red">1.53</div>
2014-07-19_13:39:07 Benzinpreise Star.Diesel: <div style="color:yellow">1.32</div>
define FileLog_Benzinpreise FileLog ./log/Benzinpreise-%Y-%m.log (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise alias Log Benzinpreise
attr FileLog_Benzinpreise group Logfile
attr FileLog_Benzinpreise room Logs
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:16px"
attr Benzinpreise valueStyle { if($VALUE < 1.25){ 'style="color:LightGreen;;font-weight:bold"' }elsif(($VALUE >= 1.25) && ($VALUE < 1.35)){ 'style="color:yellow"' }elsif($VALUE > 1.35 ){ 'style="color:red"' }}
(SuperE5|Diesel).*
Zitatdefine FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis:Diesel.*
2014-07-19_14:06:50 Dieselpreis Diesel: 1.31
Zitatim LOg steht immer noch:das bleibt da auch. jeder logeintrag besteht immer aus timestamp+readingname+wert.
define Dieselpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/2634 1800
attr Dieselpreis group Treibstoff
attr Dieselpreis readingsName_Diesel Diesel
attr Dieselpreis readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Dieselpreis room Benzinpreis
attr Dieselpreis stateFormat Liter_Diesel: Diesel
attr Dieselpreis timeout 5
define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis:Diesel:.*
attr FileLog_Dieselpreis logtype text
define SVG_FileLog_Dieselpreis_1 SVG FileLog_Dieselpreis:SVG_FileLog_Dieselpreis_1:CURRENT
Zitat von: raspklaus am 19 Juli 2014, 15:24:15
Nach 30 Minuten sollte doch eigentlich ein weiterer Eintrag in der Logdatei sein
#attr SVG_FileLog_Benzinpreise_1 label "Benzinpreise Diesel - SuperE5 - Min: $data{min1}€ Max: $data{max1}€ Akt: $data{currval1}€"
Zitatmin1Müste bei dir dann STAR Diesel sein weil er als erster in deinem Plot gezeichnet wird.
Zitat von: Puschel74 am 19 Juli 2014, 15:45:41
Interssant wäre im Label aber currvaln (also der momentane Wert).
attr SVG_FileLog_Benzinpreise_1 label "Aktuelle Preise Diesel - Star: $data{currval1} € - Aral: $data{currval2} € - HEM: $data{currval3} €"
define Benzinpreise readingsGroup (Dieselpreis|Benzinpreis):(Diesel|SuperE5).*
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:18px"
attr Benzinpreise valueStyle { if($READING eq "SuperE5" && $VALUE < 1.50){ 'style="color:green;;font-weight:bold"' }elsif(($READING eq "SuperE5" && $VALUE >= 1.50) && ($READING eq "SuperE5" && $VALUE < 1.55)){ 'style="color:yellow"' }elsif($READING eq "SuperE5" && $VALUE >= 1.55 ){ 'style="color:red"' }elsif($READING eq "Diesel" && $VALUE < 1.30){ 'style="color:green;;font-weight:bold"' }elsif(($READING eq "Diesel" && $VALUE >= 1.30) && ($READING eq "Diesel" && $VALUE < 1.35)){ 'style="color:yellow"' }elsif($READING eq "Diesel" && $VALUE >= 1.35 ){ 'style="color:red"' }}
Zitat von: Puschel74 am 19 Juli 2014, 16:06:52
Hallo,
dann stell es doch ein ;)
Grüße
Edith: Grad gesehen - hast du schon erledigt
attr <name> valueStyle {myPreisToFormat($READING,$VALUE)}
attr <name> valueStyle { SuperE5 => {perl code}, Diesel => {perl code} }
if( $READING eq ... ) {
return xxx if( $VALUE < 1 );
return yyy if( $VALUE < 1.5 );
return zzz;
} elsif( $READING eq ... ) {
...
}
Zitat von: frankbeckers am 19 Juli 2014, 20:55:16
@Puschel74: woher kommen denn die "eckigen" Linien in Deinem Plot Screenshot aus diesem Posting ?
Zitat von: Puschel74 am 19 Juli 2014, 22:35:35
Hallo,
Welche Linien meinst du?
Zur Not einen Screenshot dranhängen bitte.
Grüße
Zitatmin:max funktioniert bei mir nicht
Zitat von: raspklaus am 20 Juli 2014, 13:51:19
Hallo,
muss mich doch noch einmal melden. Bei meinem Plot wird bei einem Webseiterefresh immer nur der aktuelle Tag angezeigt. Ich möchte aber als Default beim Öffnen der FHEMseite die aktuelle Woche angezeigt bekommen. Wo kann man das einstellen ?
Zitat von: Rince am 20 Juli 2014, 14:14:29
Du musst die Werte auch wirklich in [ ] schreiben. Und wenn du Kommazahlen nimmst, darfst du kein , schreiben sondern musst einen . nehmen.
[1.2; 1.4]
Zitat von: Rince am 20 Juli 2014, 14:14:29
Du musst die Werte auch wirklich in [ ] schreiben. Und wenn du Kommazahlen nimmst, darfst du kein , schreiben sondern musst einen . nehmen.
[1.2; 1.4]
attr Benzinpreise valueStyle { if($READING eq "Diesel" && $VALUE < 1.40){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "Diesel" && ( $VALUE >= 1.40 && $VALUE < 1.60 ) ){ 'style="color:yellow"' }elsif( $READING eq "Diesel" && $VALUE >= 1.60 ){ 'style="color:red"' }elsif($READING eq "SuperE10" && $VALUE < 1.50){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "SuperE10" && ( $VALUE >= 1.50 && $VALUE < 1.55 ) ){ 'style="color:yellow"' }elsif( $READING eq "SuperE10" && $VALUE >= 1.55 ){ 'style="color:red"' }elsif($READING eq "SuperE5" && $VALUE < 1.60){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "SuperE5" && ( $VALUE >= 1.60 && $VALUE < 1.65 ) ){ 'style="color:yellow"' }elsif( $READING eq "SuperE5" && $VALUE >= 1.65 ){ 'style="color:red"' } }
attr Benzinpreise valueStyle { if($READING eq "SuperE5" && $VALUE < 1.50){ 'style="color:LightGreen;;font-weight:bold"' }elsif(($READING eq "SuperE5" && $VALUE >= 1.50) && ($READING eq "SuperE5" && $VALUE < 1.55)){ 'style="color:yellow"' }elsif($READING eq "SuperE5" && $VALUE >= 1.55 ){ 'style="color:Crimson"' }elsif($READING eq "Diesel" && $VALUE < 1.30){ 'style="color:LightGreen;;font-weight:bold"' }elsif(($READING eq "Diesel" && $VALUE >= 1.30) && ($READING eq "Diesel" && $VALUE < 1.35)){ 'style="color:yellow"' }elsif($READING eq "Diesel" && $VALUE >= 1.35 ){ 'style="color:Crimson"' }}
Zitat von: justme1968 am 21 Juli 2014, 19:13:59
das hier http://forum.fhem.de/index.php?topic=22554.msg184816#msg184816 hattet ihr aber schon gesehen oder?
attr <name> valueStyle { SuperE5 => {perl code}, Diesel => {perl code} }
attr <name> valueStyle { SuperE5 => {return 'style="color:Crimson"' if($VALUE >= 1.55); return 'style="color:yellow"' if($VALUE >= 1.50); return 'style="color:LightGreen;;font-weight:bold"';}, Diesel => {return 'style="color:Crimson"' if($VALUE >= 1.35); return 'style="color:yellow"' if($VALUE >= 1.30); return 'style="color:LightGreen;;font-weight:bold"';}
attr <name> valueStyle { SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }
sub SuperE5Colors($) {
my ($VALUE) = @_;
return 'style="color:Crimson"' if($VALUE >= 1.55);
return 'style="color:yellow"' if($VALUE >= 1.50);
return 'style="color:LightGreen;;font-weight:bold"';
}
sub DieselColors($) {
my ($VALUE) = @_;
return 'style="color:Crimson"' if($VALUE >= 1.35);
return 'style="color:yellow"' if($VALUE >= 1.30);
return 'style="color:LightGreen;;font-weight:bold"';
}
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
attr Benzinpreise valueStyle { SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }
attr Benzinpreise group Preisübersicht
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:16px"
Illegal declaration of subroutine main::my at ./FHEM/99_myUtils.pm line 108.
sub DieselColors($) {
...
...
}
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
sub SuperE5Colors($) {
my ($VALUE) = @_;
Log(3,"Super E5 Werte: $VALUE");
return 'style="color:red"' if($VALUE >= 1.65);
return 'style="color:yellow"' if(($VALUE >= 1.50)&& ($VALUE < 1.65));
return 'style="color:LightGreen;;font-weight:bold"';
}
sub DieselColors($) {
my ($VALUE) = @_;
Log(3,"Diesel Werte: $VALUE");
return 'style="color:red"' if($VALUE >= 1.60);
return 'style="color:yellow"' if(($VALUE >= 1.50)&& ($VALUE < 1.60));
return 'style="color:LightGreen;;font-weight:bold"';
}
Zitat2014.07.22 18:42:12 3: Super E5 Werte: 1.39d.h. die Werte werden an jede sub übergeben und nicht getrennt.
2014.07.22 18:42:12 3: Diesel Werte: 1.39
2014.07.22 18:42:12 3: Super E5 Werte: 1.57
2014.07.22 18:42:12 3: Diesel Werte: 1.57
2014.07.22 18:42:12 3: Super E5 Werte: 1.61
2014.07.22 18:42:12 3: Diesel Werte: 1.61
{ SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }
Zitat von: Puschel74 am 22 Juli 2014, 18:24:33
wirf hier mal das my raus:Code Auswählensub DieselColors($) {
...
...
}
Zitat von: Puschel74 am 22 Juli 2014, 18:24:33
Edith:
Und wieso hast du hierCode Auswählendefine Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
3-mal SuperE5 und 3-mal Diesel als regexp ???
2014-07-22_18:43:05 Aral SuperE5: 1.52
2014-07-22_18:43:05 Aral Diesel: 1.30
2014-07-22_18:43:05 Star SuperE5: 1.48
2014-07-22_18:43:05 Star Diesel: 1.29
2014-07-22_18:43:05 HEM SuperE5: 1.51
2014-07-22_18:43:05 HEM Diesel: 1.29
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|Diesel).*
attr Benzinpreise valueStyle { SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }
attr Benzinpreise group Preisübersicht
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:16px"
define Star HTTPMOD http://www.clever-tanken.de/tankstelle_details/14638 600
attr Star group Diesel
attr Star readingsName_Diesel Diesel
attr Star readingsName_SuperE5 SuperE5
attr Star readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Star readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Star room Benzinpreis
attr Star stateFormat Liter_Diesel: Diesel
attr Star timeout 5
define FileLog_Benzinpreise FileLog ./log/Benzinpreise-%Y-%m.log (Aral|Star|HEM):(SuperE5|Diesel).*
attr FileLog_Benzinpreise alias Log Benzinpreise
attr FileLog_Benzinpreise group Logfile
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise room Logs
Zitat von: Puschel74 am 22 Juli 2014, 19:04:09
Ah ok, aber auch hier kannst du dir das mehrfache Diesel, SuperE5 und SuperE10 sparen.
Einmal reicht ;)
return 'style="color:LightGreen;;font-weight:bold"';
{Werte($READING,$VALUE)}
sub Werte($$) {
my ($name, $wert) = @_;
# Log(3,"$name $wert");
if ($name eq "Diesel") {
return 'style="color:red"' if($wert >= 1.50);
return 'style="color:yellow"' if(($wert >= 1.39) && ($wert < 1.50));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.39);
}elsif ($name eq "SuperE10") {
return 'style="color:red"' 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.60);
return 'style="color:yellow"' if(($wert >= 1.50) && ($wert < 1.60));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.50);
}
}
return 'style="color:red"' if($VALUE >= 1.60);
sub Werte($$) {
my ($name, $wert) = @_;
# Log(3,"$name $wert");
if ($name eq "Diesel") {
return 'style="color:red"' if($wert >= 1.50);
return 'style="color:yellow"' if(($wert >= 1.39) && ($wert < 1.50));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.39);
}elsif ($name eq "SuperE10") {
return 'style="color:red"' 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.60);
return 'style="color:yellow"' if(($wert >= 1.50) && ($wert < 1.60));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.50);
}
}
{ SuperE5 => '{SuperE5Colors($VALUE)}', Diesel => '{DieselColors($VALUE)}' }
ZitatBild 2 zeigt den Preis noch vom Vorabend an.ich beobachte hier eine supermarkttankstelle, die von sa 20.00 bis mo 8.00 angeblich geschlossen ist. der preis "zappelt" während der schliesszeit rauf und runter, als wäre sie 24/7 geöffnet. tankautomat ist aber nicht angegeben. ansonsten sind die darstellungen wie bei dir.
(Gehring|Shell):SuperE10.* {
DebianMail('xxx.yyy@zzz.de',$NAME,$EVENT);
}
Zitat2014.08.16 11:25:28 1: sendEmail RCP: xxx.yyy@zzz.deUnd die Mail siehe Screenshot
2014.08.16 11:25:28 1: sendEmail Subject: Gehring
2014.08.16 11:25:28 1: sendEmail Text: SuperE10: 1.56
2014.08.16 11:25:29 1: sendEmail returned: Aug 16 11:25:29 cubian sendEmail[1661]: Email was sent successfully!
Preismonitor*.*:Div*.* {if("%" !~ m/0/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}
define Spritpreis readingsGroup (SpritSpathelf|SpritHagelauer|SpritShellIlsfeld):(Diesel|SuperE10).*
define Spritpreis readingsGroup SpritSpathelf:Diesel.* SpritHagelauer:Diesel.* SpritShellIlsfeld:Diesel.* SpritSpathelf:SuperE10.* SpritHagelauer:SuperE10 SpritShellIlsfeld:SuperE10.*
define Spritpreis readingsGroup Sprit.*:Diesel.* Sprit.*:SuperE10.*
oder sogar:define Spritpreis readingsGroup .*:Diesel .*:SuperE10
# Oelpreis
define Oelpreis HTTPMOD http://www.preiseheizoel.org/heizoelpreisvergleich/?rechner=heizoel&prod=8&short_vehicle=&hose=&payment_type=0&calculate=Rechnen&zipcode=74360&amount=3000&up=1&prod=8 86400
attr Oelpreis readingsName_Oel Oel
# nimmt den Oelpreis für den ersten dargestellten Preis (derzeit esyoil-Partner)
attr Oelpreis readingsRegex_Oel <span class="price-gross"[^0-9]+([0-9\,]+)
# jetzt muss nur noch das Komma durch einen Punkt ersetzt werden, bzw. durch 100 geteilt werden
attr Oelpreis userReadings Oel_l { my $val = (ReadingsVal("$name", "Oel", 0));; $val =~ s/\,/\./g;; $val = $val /100;; }
sub Abfrage($$$) {
my ($DEVICE, $READING, $VALUE) = @_;
my $Gehring_Diesel = ReadingsVal("Gehring","Diesel",99);
my $Gehring_SuperE10 = ReadingsVal("Gehring","SuperE10",99);
my $Gehring_SuperE5 = ReadingsVal("Gehring","SuperE5",99);
my $Shell_Diesel = ReadingsVal("Shell","Diesel",99);
my $Shell_SuperE10 = ReadingsVal("Shell","SuperE10",99);
my $Shell_SuperE5 = ReadingsVal("Shell","SuperE5",99);
if ($DEVICE eq "Shell") {
if ($READING eq "Diesel") {
if ($Shell_Diesel < $Gehring_Diesel) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_Diesel > $Gehring_Diesel) {
return 'style="color:red"'
} elsif ($Shell_Diesel = $Gehring_Diesel) {
return 'style="color:yellow"'
}
}
if ($READING eq "SuperE10") {
if ($Shell_SuperE10 < $Gehring_SuperE10) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_SuperE10 > $Gehring_SuperE10) {
return 'style="color:red"'
} elsif ($Shell_SuperE10 = $Gehring_SuperE10) {
return 'style="color:yellow"'
}
}
if ($READING eq "SuperE5") {
if ($Shell_SuperE5 < $Gehring_SuperE5) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_SuperE5 > $Gehring_SuperE5) {
return 'style="color:red"'
} elsif ($Shell_SuperE5 = $Gehring_SuperE5) {
return 'style="color:yellow"'
}
}
}
if ($DEVICE eq "Gehring") {
if ($READING eq "Diesel") {
if ($Shell_Diesel < $Gehring_Diesel) {
return 'style="color:red"'
} elsif ($Shell_Diesel > $Gehring_Diesel) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_Diesel = $Gehring_Diesel) {
return 'style="color:yellow"'
}
}
if ($READING eq "SuperE10") {
if ($Shell_SuperE10 < $Gehring_SuperE10) {
return 'style="color:red"'
} elsif ($Shell_SuperE10 > $Gehring_SuperE10) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_SuperE10 = $Gehring_SuperE10) {
return 'style="color:yellow"'
}
}
if ($READING eq "SuperE5") {
if ($Shell_SuperE5 < $Gehring_SuperE5) {
return 'style="color:red"'
} elsif ($Shell_SuperE5 > $Gehring_SuperE5) {
return 'style="color:lightgreen;;font-weight:bold"'
} elsif ($Shell_SuperE5 = $Gehring_SuperE5) {
return 'style="color:yellow"'
}
}
}
}
Zitat von: Jojo11 am 23 August 2014, 08:31:06
Ich denke das liegt an der zeitlichen Auflösung des Plots ;)
Zitat von: Puschel74 am 22 August 2014, 21:11:29Hallo Puschel,
Sorry aber anders hab ich das noch nicht geschafft - für Perl hab ich zur Zeit leider zuwenig Zeit :(
Ich denke mal das sich das auch auf einen einfacheren Nenner bringen lässt.
#------------------------------------------------------------------------------
# FuelFormat:
# sets the valueStyle of the fuel monitor:
# lowest value: green bold
# biggest value: red bold
# $DEVICE contains the station
# $REDING contains the fuel type
# $VALUE contains the price
#
# calling in fhem:
# attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
#
# version/programming:
# 0.1/Peter Mühlbeyer
#
# bugs/improvements:
# - in case of same max. or min. values only one value will be marked
#------------------------------------------------------------------------------
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("SpritSpathelf","SpritHagelauer","SpritShellIlsfeld","SpritAralIlsfeld","SpritRANDitzingen","SpritRANWeilimdorf");
my $lowprice1 = 99; my $lowdevice1;
my $highprice1 = -99; my $highdevice1;
my $actprice1;
my $lowprice2 = 99; my $lowdevice2;
my $highprice2 = -99; my $highdevice2;
my $actprice2;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "Schleife: $_ $actprice1";
if ($actprice1 > $highprice1)
{
$highprice1 = $actprice1;
$highdevice1 = $_;
}
elsif ($actprice1 < $lowprice1)
{
$lowprice1 = $actprice1;
$lowdevice1 = $_;
}
}
if ($DEVICE eq $lowdevice1) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice1) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE10")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"Diesel",99);
if ($actprice2 > $highprice2)
{
$highprice2 = $actprice2;
$highdevice2 = $_;
}
elsif ($actprice2 < $lowprice2)
{
$lowprice2 = $actprice2;
$lowdevice2 = $_;
}
}
if ($DEVICE eq $lowdevice2) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice2) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
#----- FuelFormat -------------------------------------------------------------
Div_Diesel difference {ReadingsVal("Preismonitor_bft_B10","Diesel","0")}, Div_SuperE10 difference {ReadingsVal("Preismonitor_bft_B10","SuperE10","0")}
Preismonitor*.*:Div*.* {if("%" !~ m/ok/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}
Preismonitor*.*:Div*.* {if("%" !~ m/0/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}
attr <device> <name> diff_Diesel difference { ReadingsVal("Preismonitor_bft_B10","Diesel","0") }
attr PCA301_055708 userReadings power_diff difference {ReadingsVal($name,'power',0)}
Preismonitor.*:Div.* {if("%" !~ m/0/){
Zitat von: Puschel74 am 24 August 2014, 08:56:07:P
@PeMue
... Und bei mir wird auch richtig eingefärbt
#------------------------------------------------------------------------------
# FuelFormat:
# sets the valueStyle of the fuel monitor:
# lowest value: green bold
# biggest value: red bold
# $DEVICE contains the station
# $REDING contains the fuel type
# $VALUE contains the price
#
# calling in fhem:
# attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
#
# version/programming:
# 0.2/Peter Mühlbeyer
#
# bugs/improvements:
# - none found but Puschel will do
#------------------------------------------------------------------------------
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("SpritSpathelf","SpritHagelauer","SpritShellIlsfeld","SpritAralIlsfeld","SpritRANDitzingen","SpritRANWeilimdorf");
my $lowprice1 = 9;
my $highprice1 = -9;
my $actprice1;
my $lowprice2 = 9;
my $highprice2 = -9;
my $actprice2;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "In Schleife Diesel $_: $actprice1";
if ($actprice1 > $highprice1) { $highprice1 = $actprice1; }
if ($actprice1 < $lowprice1) { $lowprice1 = $actprice1;}
}
#Log 3, "Nach Schleife Diesel: $lowprice1 $highprice1";
if ((ReadingsVal($DEVICE,"Diesel",99) == $lowprice1)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"Diesel",99) == $highprice1)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE10")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE10",99);
#Log 3, "In Schleife SuperE10 $_: $actprice2";
if ($actprice2 > $highprice2) { $highprice2 = $actprice2; }
if ($actprice2 < $lowprice2) { $lowprice2 = $actprice2;}
}
#Log 3, "Nach Schleife SuperE10: $lowprice2 $highprice2";
if ((ReadingsVal($DEVICE,"SuperE10",99) == $lowprice2)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"SuperE10",99) == $highprice2)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
#----- FuelFormat -------------------------------------------------------------
Zitat von: no_Legend am 24 August 2014, 11:52:54
Hi Leute,
kann vielleicht einer kurz ne Anleitung machen, wie man das ganze bei Sich einbaut?
Danke und Gruß Robert
sub Werte($$) {
my ($name, $wert) = @_;
# Log(3,"$name $wert");
if ($name eq "Diesel") {
return 'style="color:crimson"' if($wert >= 1.39);
return 'style="color:yellow"' if(($wert >= 1.30) && ($wert < 1.39));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.30);
}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:crimson"' if($wert >= 1.59);
return 'style="color:yellow"' if(($wert >= 1.50) && ($wert < 1.59));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.50);
}
}
define Preismonitor_Nachricht notify Preismonitor_.*:Div_.* { if($EVENT !~ m/0$/mi) {DebianMail('werauchimmer@@googlemail.com', 'FHEM Preisänderung', 'FHEM Preisänderung')}}
trigger Preismonitor_Jet Div_Diesel:0.01
Zitat von: moonsorrox am 24 August 2014, 12:29:32Warum denn? Meine Funktion heißt doch ganz anders. Einfach den anderen Aufruf nehmen und freuen ...
Der Code von PeMue steht wohl in der 99_myUtils und der damals erarbeitet wurde, muss dann raus..?
define <name> HTTMPOD <webseite> <intervall>
define SpritHagelauer HTTPMOD http://www.clever-tanken.de/tankstelle_details/30437 3600
ZitatVielleicht erklärt ihr mir, was ich falsch mache.Kurz und knapp:
ZitatHabe versucht die Zeile mit HTTPMOD einzugeben, bekomme aber immer eine Fehlermeldung.Ok, und wir sollen jetzt raten welche das ist?
Zitatbla undefined oder so ähnlich irgendwie.
define SVG_0 SVG FileLog_HMS100TFK_774c:fht80tf:CURRENT
2014-09-01_00:06:48 SpritAralIlsfeld Diesel: 1.48
2014-09-01_00:06:48 SpritAralIlsfeld SuperE10: 1.62
2014-09-01_00:06:48 SpritSpathelf Diesel: 1.38
2014-09-01_00:06:48 SpritSpathelf SuperE10: 1.54
2014-09-01_00:06:48 SpritShellIlsfeld Diesel: 1.48
2014-09-01_00:06:48 SpritShellIlsfeld SuperE10: 1.62
2014-09-01_01:06:48 SpritSpathelf Diesel: 1.38
2014-09-01_01:06:48 SpritSpathelf SuperE10: 1.54
2014-09-01_01:06:48 SpritHagelauer Diesel: 1.39
Zitat von: PeMue am 09 September 2014, 10:12:24
Und ich glaube, es geht auch nicht, in einem Plot verschiedene Datenbankquellen anzugeben.
define SVG_FileLog_Benzinpreise_1 SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise_1:CURRENT
attr SVG_FileLog_Benzinpreise_1 alias Benzinpreise - Diesel - Super
attr SVG_FileLog_Benzinpreise_1 fixedrange 4days
attr SVG_FileLog_Benzinpreise_1 group Treibstoff
attr SVG_FileLog_Benzinpreise_1 label "Aktuelle Preise Diesel - Star: $data{currval4} € - Aral: $data{currval5} € - HEM: $data{currval6} € - Star Super: $data{currval1} €"
attr SVG_FileLog_Benzinpreise_1 plotfunction Star Aral HEM
attr SVG_FileLog_Benzinpreise_1 room Benzinpreis,Plots
Zitat von: Schiltkamp am 09 September 2014, 13:11:28ohne deinen Code anzuschauen, aber du mußt schon 3 define anlegen, so habe ich das einschl. der 99_myUtils Geschichten von weiter vorne
Aber wie bekomme ich die Daten von zwei Tankstellen in eine Datei?
########################################################
## Benzinpreise
########################################################
sub Werte($$) {
my ($name, $wert) = @_;
# Log(3,"$name $wert");
if ($name eq "Diesel") {
return 'style="color:crimson"' if($wert >= 1.39);
return 'style="color:yellow"' if(($wert >= 1.30) && ($wert < 1.39));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.30);
}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:crimson"' if($wert >= 1.59);
return 'style="color:yellow"' if(($wert >= 1.50) && ($wert < 1.59));
return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.50);
}
}
define Star HTTPMOD http://www.clever-tanken.de/tankstelle_details/14638 600
attr Star group Diesel
attr Star icon tanken
attr Star readingsName_Diesel Diesel
attr Star readingsName_SuperE5 SuperE5
attr Star readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Star readingsRegex_SuperE5 <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
attr Star room Benzinpreis
attr Star stateFormat Liter_Diesel: Diesel
attr Star timeout 5
Zitat von: Schiltkamp am 09 September 2014, 13:39:51
Mein Problem ist, wie und mit welchen Namen lege ich die 2te Tanke an.
define Benzinpreise readingsGroup (Aral|Star|HEM|Real):(SuperE5|Diesel).*
attr Benzinpreise group Preisübersicht
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:16px"
attr Benzinpreise valueStyle {Werte($READING,$VALUE)}
define FileLog_Benzinpreise FileLog ./log/Benzinpreise-%Y-%m.log (Aral|Star|HEM):(SuperE5|Diesel).*
attr FileLog_Benzinpreise alias Log Benzinpreise
attr FileLog_Benzinpreise group Logfile
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise room Logs
define FileLog_Spritpreis FileLog ./log/fuel-%Y.log (Avia|Esso)
, was dem code oben von moonsorrox entspricht. Er hat dann halt noch E10 bzw. Diesel aus den einzelnen Tankstellen ausgelesen.Zitat von: PeMue am 09 September 2014, 17:34:34
Hallo Christian,
es ist im Prinzip egal, wie Du den Namen der Tankstelle anlegst. Du musst halt nur die Events von der zweiten Tankstelle in die gleiche Datei loggen. Ich habe mal Deine Beispiele zusammenkopiert und verändert:
define FileLog_Avia FileLog ./log/Avia-%Y.log Avia
define FileLog_AviaEssoFileLog ./log/AviaEsso-%Y.log Esso
Da würde ich dann einen sprechenderen Namen einsetzen, sprich Avia durch Spritpreis oder ähnlichem ersetzen.
Das kann dann in fhem auch vereinfacht werden:Code Auswählendefine FileLog_Spritpreis FileLog ./log/fuel-%Y.log (Avia|Esso)
, was dem code oben von moonsorrox entspricht. Er hat dann halt noch E10 bzw. Diesel aus den einzelnen Tankstellen ausgelesen.
Deinen letzten Abschnitt verstehe ich nicht so ganz.
Beschreib doch mal, was Du gerne machen möchtest, dann kann ich auch erklären (die fhem Befehle sollst dann Du raussuchen), was Du machen solltest.
Gruß PeMue
Edit:
Vereinfachung des FileLogs siehe oben.
delete FileLog_Avia
in der fhem Konsole oder einrereadcfg
Zitat von: Puschel74 am 09 September 2014, 19:44:07Ich will aber meine schönen Kommentare in der fhem.cfg haben *duckundweg* 8)
Vergiss die fhem.cfg - diese Datei gibt es nicht - wer die Konfig in einer DB hat KANN diese garnicht bearbeiten.
Zitat von: PeMue am 09 September 2014, 20:06:06
Ich will aber meine schönen Kommentare in der fhem.cfg haben *duckundweg* 8)
Zitatauch bei event-on-change wird der timestamp bei jedem schreiben des readings aktualisiert. auch wenn kein event erzeugt wird.das ist aber schade. dann müsste doch aber ein userreading (mit ReadingsVal), das durch das originale reading getriggert wird, funktionieren.
2014.10.16 21:07:55 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.10.16 21:53:15 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.10.16 21:58:15 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.10.16 22:00:15 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.10.16 22:09:25 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.10.16 22:12:35 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
#########################################################
### Spritpreise ####
#########################################################
#########################################################
#########################################################
### Spritpreise Diesel/SuperE5 - Langen ####
#########################################################
#########################################################
### Tankstellen - Langen ####
#########################################################
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
#########################################################
### 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
#########################################################
### 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)}
#########################################################
### Plot ####
#########################################################
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
###################################################
### 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);
}
}
# 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
Zitat von: Phil__ am 23 Oktober 2014, 08:47:55Das schreit für mich entweder nach einem Modul oder einem Wiki Artikel :) habe es gestern erst durch Zufall entdeckt und finde es super. Werde es die Tage ausprobieren....
Angefangen von Tankstellen define, über ReadingsGroup, Filelog, bis hin zum Plot ist hier mal alles zusammengefasst:
Zitat von: iCure am 23 Oktober 2014, 14:37:13
Guten Tag,
danke erstmal für den ausführlichen Niederschrieb.
Hast du evtl. eine erklärung für mein allgemeines Problem mit HTTPMOD:
HTTPMOD got error in callback: connect: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
Ich erhalte von egal welcher Internetseite keine Werte.
ZitatKeiner eine Idee?Dann wäre evtl. auch das Nachfragen nicht nötig.
Zitat von: bert am 26 Oktober 2014, 15:58:22Hallo Bert,
Das 2. woher weiss Fhem, dass für die Farbanpassung die 99_myUtils.pm zu benutzen ist? Nirgendwo habe ich einen Hinweis auf diese Datei gefunden.
Zitat@Puschel: Bitte um Widerspruch, wenn ich was falsches erzählt haben sollte ...Ich musst mich grad fest halten damit ich nicht vom Stuhl falle vor lachen ;D
Zitat von: bert am 26 Oktober 2014, 15:58:22
2 Dinge hab ich allerdings noch nicht verstanden. @Phil du verwendest die Group´s "Spritpreisübersicht", "Spritpreisverlauf" und "Spritpreise", wäre es nicht übersichtlicher nur 1 Group zu nehmen, oder muss das so sein? Wenn ja hätte ich gerne eine Erklärung.
Zitat von: Puschel74 am 26 Oktober 2014, 18:27:37bei >6900 Beiträgen erwarte ich schon eine gewisse Fachkompetenz 8) *duckundweg*
Grad ich - genau ich - Scherzkeks :P
ZitatSowie eine passende Radingsgroup:Readingsgroup
attr Aral readingsExpr_SuperE5 $val +0.009
Zitat von: Phil__ am 12 November 2014, 11:13:28
Bei Fragen dazu, einfach melden!
Zitat von: Puschel74 am 12 November 2014, 09:14:37bei uns seit Wochen immer dieses Szenario, Nachts/Morgens rauf gegen Abend runter
wir haben eine super stabile Tankstelle und eine die zittert wie ein Kuhschwanz ;D
Zitat von: moonsorrox am 12 November 2014, 13:22:52
bei uns seit Wochen immer dieses Szenario, Nachts/Morgens rauf gegen Abend runter
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/18222 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/1681 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 stateFormat Liter_SuperE5: SuperE5
attr Total timeout 5
define FileLog_Spritpreise FileLog ./log/spritpreise-%Y-%m.log (Shell|Total):(SuperE5|Diesel).*
attr FileLog_Spritpreise alias Log Spritpreise
attr FileLog_Spritpreise group Logfile
attr FileLog_Spritpreise logtype text
attr FileLog_Spritpreise room Spritpreise
define Spritpreise readingsGroup (Shell|Total):(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)}
#Plott
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
Zitatdennoch ist mir aufgefallen das hinter den Preisen das Datum und die Uhrzeit fehlt.Nö.
Zitat von: moonsorrox am 14 November 2014, 19:35:42Wenn du schaust siehst du das 4 Minuten nach meinem Post sein Beitrag bearbeitet wurde - und nun rate mal was vorher gefehlt hat ;)
hast du irgendwo Recht, aber die Konfig hat er ja gepostet... weiter oben ;)
Zitatnimm das mal raus "attr Spritpreise notime 1"war der richtige.
Zitat von: PeMue am 14 November 2014, 20:29:09kein Problem, ich mach mich auf die Suche - danke für den Stupf ;D
Hallo Puschel,
ich meine, dass ich weiter oben mal etwas gepostet hätte, mit dem das geht. Bin nur gerade am Tablet - und ich und Tablet sind zwei Gegensätze 8) ...
Gruß PeMue
{ if($READING eq "Diesel" && $VALUE < 1.40){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "Diesel" && ( $VALUE >= 1.40 && $VALUE < 1.60 ) ){ 'style="color:yellow"' }elsif( $READING eq "Diesel" && $VALUE >= 1.60 ){ 'style="color:red"' }elsif($READING eq "SuperE10" && $VALUE < 1.50){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "SuperE10" && ( $VALUE >= 1.50 && $VALUE < 1.55 ) ){ 'style="color:yellow"' }elsif( $READING eq "SuperE10" && $VALUE >= 1.55 ){ 'style="color:red"' }elsif($READING eq "SuperE5" && $VALUE < 1.60){ 'style="color:green;font-weight:bold"' }elsif( $READING eq "SuperE5" && ( $VALUE >= 1.60 && $VALUE < 1.65 ) ){ 'style="color:yellow"' }elsif( $READING eq "SuperE5" && $VALUE >= 1.65 ){ 'style="color:red"' } }
#------------------------------------------------------------------------------
# FuelFormat:
# sets the valueStyle of the fuel monitor:
# lowest value: green bold
# biggest value: red bold
# $DEVICE contains the station
# $REDING contains the fuel type
# $VALUE contains the price
#
# calling in fhem:
# attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
#
# version/programming:
# 0.1/Peter Mühlbeyer
#
# bugs/improvements:
# - in case of same max. or min. values only one value will be marked
#------------------------------------------------------------------------------
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("Gehring","Jet","Shell","Shell_Loe");
my $lowprice1 = 99; my $lowdevice1;
my $highprice1 = -99; my $highdevice1;
my $actprice1;
my $lowprice2 = 99; my $lowdevice2;
my $highprice2 = -99; my $highdevice2;
my $actprice2;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "Schleife: $_ $actprice1";
if ($actprice1 > $highprice1)
{
$highprice1 = $actprice1;
$highdevice1 = $_;
}
elsif ($actprice1 < $lowprice1)
{
$lowprice1 = $actprice1;
$lowdevice1 = $_;
}
}
if ($DEVICE eq $lowdevice1) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice1) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE10")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE10",99);
if ($actprice2 > $highprice2)
{
$highprice2 = $actprice2;
$highdevice2 = $_;
}
elsif ($actprice2 < $lowprice2)
{
$lowprice2 = $actprice2;
$lowdevice2 = $_;
}
}
if ($DEVICE eq $lowdevice2) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice2) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE5")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE5",99);
if ($actprice2 > $highprice2)
{
$highprice2 = $actprice2;
$highdevice2 = $_;
}
elsif ($actprice2 < $lowprice2)
{
$lowprice2 = $actprice2;
$lowdevice2 = $_;
}
}
if ($DEVICE eq $lowdevice2) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($DEVICE eq $highdevice2) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
#----- FuelFormat -------------------------------------------------------------
my @device_list = ("Gehring","Jet","Jet_Loe","Shell","Shell_Loe");
#------------------------------------------------------------------------------
# FuelFormat:
# sets the valueStyle of the fuel monitor:
# lowest value: green bold
# biggest value: red bold
# $DEVICE contains the station
# $READING contains the fuel type
# $VALUE contains the price
#
# calling in fhem:
# attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
#
# version/programming:
# 0.3/Peter Mühlbeyer
#
# bugs/improvements:
# - none found
#------------------------------------------------------------------------------
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("SpritSpathelf","SpritHagelauer","SpritShellIlsfeld","SpritAralIlsfeld","SpritRANDitzingen","SpritRANWeilimdorf");
my $lowprice1 = 9;
my $highprice1 = -9;
my $actprice1;
my $lowprice2 = 9;
my $highprice2 = -9;
my $actprice2;
my $lowprice3 = 9;
my $highprice3 = -9;
my $actprice3;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "In Schleife Diesel $_: $actprice1";
if ($actprice1 > $highprice1) { $highprice1 = $actprice1; }
if ($actprice1 < $lowprice1) { $lowprice1 = $actprice1;}
}
#Log 3, "Nach Schleife Diesel: $lowprice1 $highprice1";
if ((ReadingsVal($DEVICE,"Diesel",99) == $lowprice1)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"Diesel",99) == $highprice1)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE10")
{
foreach (@device_list)
{
$actprice2 = ReadingsVal($_,"SuperE10",99);
#Log 3, "In Schleife SuperE10 $_: $actprice2";
if ($actprice2 > $highprice2) { $highprice2 = $actprice2; }
if ($actprice2 < $lowprice2) { $lowprice2 = $actprice2;}
}
#Log 3, "Nach Schleife SuperE10: $lowprice2 $highprice2";
if ((ReadingsVal($DEVICE,"SuperE10",99) == $lowprice2)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"SuperE10",99) == $highprice2)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
elsif ($READING eq "SuperE5")
{
foreach (@device_list)
{
$actprice3 = ReadingsVal($_,"SuperE5",99);
#Log 3, "In Schleife SuperE5 $_: $actprice3";
if ($actprice3 > $highprice3) { $highprice3 = $actprice3; }
if ($actprice3 < $lowprice3) { $lowprice3 = $actprice3;}
}
#Log 3, "Nach Schleife SuperE5: $lowprice3 $highprice3";
if ((ReadingsVal($DEVICE,"Super5",99) == $lowprice3)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"SuperE5",99) == $highprice3)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
#----- FuelFormat -------------------------------------------------------------
Zitatden echten Wert mit einem angepassten Ausdruck auszulesenIn den Rohdaten steht ein ganzes Stück weiter die Zahl Neun. Vielleicht kann jemand den Regex-Ausdruck erweitern, ich hab's nicht geschafft.
ZitatOh was ist denn mit dem Spritpreis los, ich glaube ich muss "nachbessern"
ZitatBei Verwendung des Spritpreismonitors verpflichten Sie sich, 10 Cent / Liter für die Weiterentwicklung von fhem zu zahlen. Nach Erhalt Ihrer Zahlung erhalten Sie den Perl-Code, der den Spritpreis entsprechend um diese 10 Cent nach oben korrigiert
Zitatattr Aral readingsExpr_SuperE5 $val +0.009
Zitatattr Benzinpreis1 readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
ZitatXML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: http://192.168.178.220:8083/fhem/SVG_showLog?dev=SVG_FileLog_Spritpreise_1&logdev=FileLog_Spritpreise&gplotfile=SVG_FileLog_Spritpreise_1&logfile=CURRENT&pos=
Zeile Nr. 86, Spalte 95:<text x="12" y="80" text-anch
Zitat#Benzinpreise
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
define FileLog_Spritpreise FileLog ./log/spritpreise-%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
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)}
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
2014.12.09 04:49:35 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
attr Benzinpreis4 timeout 5
Zitat von: Phil__ am 12 November 2014, 11:13:28
Hallo,
ich mache die Benachrichtigung bei günstigen Preisen, zB. Diesel < 1.30€, per Pushover!
Bei Fragen dazu, einfach melden!
Viele Grüße
Zitat von: Phil__ am 12 November 2014, 11:13:28
ich mache die Benachrichtigung bei günstigen Preisen, zB. Diesel < 1.30€, per Pushover!
Bei Fragen dazu, einfach melden!
2014.12.14 18:01:43 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:01:48 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:02:03 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:06:37 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:06:43 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:06:55 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:07:08 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:11:37 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:11:43 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:11:48 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:12:03 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:16:40 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.14 18:16:43 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:16:48 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out
2014.12.14 18:17:03 3: HTTPMOD got error in callback: read from http://www.clever-tanken.de:80 timed out
2014.12.16 12:00:47 3: Benzinpreis1: read callback: request type was Update,
header: HTTP/1.1 200 OK
Date: Tue, 16 Dec 2014 10:55:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Type: text/html; charset=utf-8
Via: 1.0 www.clever-tanken.de
Content-Length: 22991
Connection: close, buffer empty,
Error read from http://www.clever-tanken.de:80 timed out
2014.12.16 12:05:47 3: Benzinpreis1: read callback: request type was Update,
header: HTTP/1.1 200 OK
Date: Tue, 16 Dec 2014 10:55:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Type: text/html; charset=utf-8
Via: 1.0 www.clever-tanken.de
Content-Length: 22991
Connection: close, buffer empty,
Error read from http://www.clever-tanken.de:80 timed out
2014.12.16 12:05:47 3: Benzinpreis3: read callback: request type was Update,
header: HTTP/1.1 200 OK
Date: Tue, 16 Dec 2014 11:00:43 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Type: text/html; charset=utf-8
Via: 1.0 www.clever-tanken.de
Content-Length: 23339
Connection: close, buffer empty,
Error read from http://www.clever-tanken.de:80 timed out
2014.12.16 12:10:47 3: Benzinpreis1: read callback: request type was Update,
header: HTTP/1.1 200 OK
Date: Tue, 16 Dec 2014 10:55:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Type: text/html; charset=utf-8
Via: 1.0 www.clever-tanken.de
Content-Length: 22991
Connection: close, buffer empty,
Error read from http://www.clever-tanken.de:80 timed out
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 22962
Via: 1.0 www.clever-tanken.de
Content-Type: text/html; charset=utf-8
Vary: Cookie,Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 19 Dec 2014 15:56:50 GMT
header: HTTP/1.1 200 OK
2014.12.19 02:07:02 1: PERL WARNING: Use of uninitialized value $setList in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 318.
# $Id: fhem.pl 7528 2015-01-11 18:23:31Z rudolfkoenig $
.
.
# $Id: 98_HTTPMOD.pm 7313 2014-12-23 09:37:35Z ststrobel $
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/nnnn 600
attr Aral userattr icon readingsName_Diesel readingsName_SuperE5 readingsRegex_Diesel readingsRegex_SuperE5 stateFormat timeout
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
SuperE5 1.30 2015-01-13 04:32:54
ZitatDer Server unter www.clever-tanken.de braucht zu lange, um eine Antwort zu senden.
Zitatdefine 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
Zitatdefine GO HTTPMOD http://www.clever-tanken.de/tankstelle_details/25916 600
attr GO userattr icon readingsName.* readingsRegex.* stateFormat timeout
attr GO group Spritpreise
attr GO icon tanken
attr GO readingsName.* _Diesel Diesel
attr GO readingsRegex.* _Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr GO room Benzin
attr GO stateFormat Liter_Diesel: Diesel
attr GO timeout 5
<div class="fuel_type">Diesel
[^0-9]+([0-9\.]+)
?readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
Zitat von: scooty am 30 Juli 2015, 08:32:00
Webseite wurde wohl geändert.
Habe den Attributwert für die Regex auf z.B.Code AuswählenreadingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
geändert, damit funktioniert es bei mir wieder.
Andreas
PERL WARNING: Odd number of elements in anonymous hash at (eval 187557) line 1, <$fh> line 1247.
attr Benzinpreis1 readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
2015.08.07 10:44:16 3: Benzinpreis2: Read response to Update didn't match any Reading(s)
2015.08.07 10:44:16 3: Benzinpreis1: Read response to Update didn't match any Reading(s)
2015.08.07 10:44:16 3: Benzinpreis4: Read response to Update didn't match any Reading(s)
2015.08.07 10:49:16 3: Benzinpreis2: Read response to Update didn't match any Reading(s)
2015.08.07 10:49:16 3: Benzinpreis3: Read response to Update didn't match any Reading(s)
2015.08.07 10:54:16 3: Benzinpreis3: Read response to Update didn't match any Reading(s)
2015.08.07 10:54:16 3: Benzinpreis4: Read response to Update didn't match any Reading(s)
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 531
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:33:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 10:24:00 3: Star: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 33268
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 10:23:57 3: Real: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 36916
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 10:23:57 3: Aral: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 34762
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 10:23:57 3: HEM: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 531
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:33:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 10:14:01 3: Star: Read callback: request type was Update,
2015.08.07 10:10:39 3: CUL_HM set RollladenWZ pct 70
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 531
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:33:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 10:03:59 3: Star: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 531
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:33:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 09:53:59 3: Star: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 33268
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:53:57 3: Real: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 36916
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:53:57 3: Aral: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 34762
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:53:57 3: HEM: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 531
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:33:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 09:43:59 3: Star: Read callback: request type was Update,
2015.08.07 09:33:54 3: Star: Read response to Update didn't match any Reading(s)
Error read from http://www.clever-tanken.de:80 timed out
Content-Type: text/html; charset=iso-8859-1, buffer empty,
Connection: close
Content-Length: 532
Vary: Accept-Encoding
Date: Fri, 07 Aug 2015 07:13:54 GMT
header: HTTP/1.1 502 Proxy Error
2015.08.07 09:23:59 3: Star: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 33268
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:23:57 3: Real: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 36916
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:23:57 3: Aral: Read callback: request type was Update,
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 34762
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:52 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:23:57 3: HEM: Read callback: request type was Update,
2015.08.07 09:13:54 3: Star: Read response to Update didn't match any Reading(s)
2015.08.07 09:13:54 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 798.
Error read from http://www.clever-tanken.de:80 timed out
Connection: close, buffer empty,
Content-Length: 34684
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Apache/2.2.22 (Ubuntu)
Date: Fri, 07 Aug 2015 06:53:54 GMT
header: HTTP/1.1 200 OK
2015.08.07 09:03:59 3: Star: Read callback: request type was Update,
Zitat von: cocojambo am 07 August 2015, 11:34:52
Habe auch diese Zeile geändert und eingefügt:Code Auswählenattr Benzinpreis1 readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
Zitat von: stromer-12 am 04 August 2015, 20:37:03
Ich habe bei mir die Regex wie folgt geändert:
<div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
Gesendet von meinem GT-I9295
readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
readingsName_AralUltimate102 Ultimate_102
readingsRegex_AralUltimate102 <span>Ultimate 102</span>[^0-9]+([0-9\.]+)
Zitat von: Michi240281 am 10 August 2015, 18:27:54Schau in die Details der betreffenden Tankstelle/Sorte. Da gibt es ein Internal "buf" ... such darin nach Ultimate... und übernehme die genaue Formulierung in deine Regex.
Ich habe es für SuperE5 wieder hinbekommen mit folgendem Ausdruck:Code AuswählenreadingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
Für Ultimate 102 bekomme ich es aber nicht hin.Code AuswählenreadingsName_AralUltimate102 Ultimate_102
readingsRegex_AralUltimate102 <span>Ultimate 102</span>[^0-9]+([0-9\.]+)
tuts leider nicht!
Jmd ne Idee bzw. es auch für Ultimate wieder hinbekommen?
src="/static/img/melder_icon_standard.png" class="report_price_symbol"/> <span class="report_price_label"> MTS-K Beschwerde </span> </button> </div> </div> <div
class="fuel-price-entry" ng-controller="SpritsortenController" ng-init="init('1,589')"> <div class="fuel-price-type"><span>ARAL Ultimate 102</div> <div class="price-box"> <div
class="price-input" ng-class="{'price-dirty': dirty}"> <span ng-click="minus()" class="decrease-price">-</span><span class="price-field"><span ng-bind=
"display_preis">1.58 </span> <sup ng-bind="suffix">9</sup></span><span ng-click="plus()" class="increase-price">+</span> </div> <button ng-cloak ng-click="melden('False','3880', 'ARAL Ultimate 102 (DE)',
'18')" ng-show="dirty" class="report-price" type="submit">
<img src="/static/img/melder_icon_standard.png" class="report_price_symbol"/> <span class="report_price_label">
readingsRegex_AralUltimate102 <span>ARAL Ultimate 102</span>[^0-9]+([0-9\.]+)
Attributes:
readingsName_AralUltimate102 ARAL_Ultimate_102
readingsName_SuperE5 Super_E5
readingsRegex_AralUltimate102 <span>ARAL Ultimate 102</span>[^0-9]+([0-9\.]+)
readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
readingsName_AralUltimate102 Ultimate_102
readingsName_SuperE5 Super_E5
readingsRegex_AralUltimate102 <span>ARAL Ultimate 102</div>[^0-9]+([0-9\.]+)
readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
<span>ARAL Ultimate 102</div>
und Deine Regex prüft auf <span>ARAL Ultimate 102</span>
... wie soll das funktionieren?
<div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
attr Shell readingsExpr_Diesel $val + 0.009
attr Shell readingsExpr_SuperE5 $val + 0.009
define AralLuebz HTTPMOD http://www.clever-tanken.de/tankstelle_details/45508 600
attr AralLuebz userattr icon readingsName_Diesel readingsRegex_Diesel stateFormat timeout
attr AralLuebz readingsName_Diesel Diesel
attr AralLuebz readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
attr AralLuebz stateFormat Diesel €/Liter
attr AralLuebz timeout 5
define LuebzT readingsGroup RaiffeisenLuebz:<%Raiffaisen_icon>,<Raiffeisen>,Diesel AralLuebz:<%Aral_icon>,<Aral>,Diesel ShellLuebz:<%shell_icon>,<Shell>,Diesel
attr LuebzT group Lübz
attr LuebzT noheading 1
attr LuebzT nostate 1
attr LuebzT notime 1
attr LuebzT room Tanken
attr LuebzT valueFormat { 'Diesel' => ': %.2f €/Liter', 'Diesel' => ': %.2f €/Liter', 'Diesel' => ': %.2f €/Liter'}
sub FuelFormat($$$)
{
my ($DEVICE, $READING, $VALUE) = @_;
my @device_list = ("RaiffeisenLuebz","ShellLuebz","AralLuebz");
my $lowprice1 = 9;
my $highprice1 = -9;
my $actprice1;
my $lowprice2 = 9;
my $highprice2 = -9;
my $actprice2;
my $lowprice3 = 9;
my $highprice3 = -9;
my $actprice3;
if ($READING eq "Diesel")
{
foreach (@device_list)
{
$actprice1 = ReadingsVal($_,"Diesel",99);
#Log 3, "In Schleife Diesel $_: $actprice1";
if ($actprice1 > $highprice1) { $highprice1 = $actprice1; }
if ($actprice1 < $lowprice1) { $lowprice1 = $actprice1;}
}
#Log 3, "Nach Schleife Diesel: $lowprice1 $highprice1";
if ((ReadingsVal($DEVICE,"Diesel",99) == $lowprice1)) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ((ReadingsVal($DEVICE,"Diesel",99) == $highprice1)) { return 'style="color:red"'; }
else { return 'style="color:yellow;;font-weight:bold"'; }
}
}
attr <name> valueStyle {FuelFormat($DEVICE,$READING,$VALUE)}
braucht, habe ich gelesen. Aber was bedeutet das jetzt bei mir? <name> geht für die gesamte Readingsgroup oder wie muss mein Aufruf aussehen?attr LuebzT valueStyle {FuelFormat($DEVICE, $READING, $VALUE)}
Zitat von: Hauswart am 29 September 2015, 13:04:41
Was mich bisher immer etwas gestört hat, die fehlenden 0.009 :)
Lösung:Code Auswählen
attr Shell readingsExpr_Diesel $val + 0.009
attr Shell readingsExpr_SuperE5 $val + 0.009
:)
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/2634 600
attr Esso userattr icon readingsName_Diesel readingsName_SuperE5 readingsRegex_Diesel readingsRegex_SuperE5 stateFormat timeout
attr Esso group Tanken
attr Esso readingsName_Diesel Diesel
attr Esso readingsName_SuperE5 SuperE5
attr Esso readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
attr Esso readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Esso room Unsorted
attr Esso stateFormat Liter_Diesel: Diesel
attr Esso timeout 5
attr Esso stateFormat { sprintf("Super: %.3f €", ReadingsVal ($name,"SuperE5",0)+0.009)}
Zitat von: habl am 17 Oktober 2015, 18:52:49
Hi raspklaus
probier mal so:Code Auswählenattr Esso stateFormat { sprintf("Super: %.3f €", ReadingsVal ($name,"SuperE5",0)+0.009)}
Zitat von: raspklaus am 17 Oktober 2015, 13:55:31
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/2634 600
attr Esso userattr icon readingsName_Diesel readingsName_SuperE5 readingsRegex_Diesel readingsRegex_SuperE5 stateFormat timeout
attr Esso group Tanken
attr Esso readingsName_Diesel Diesel
attr Esso readingsName_SuperE5 SuperE5
attr Esso readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
attr Esso readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Esso room Unsorted
attr Esso stateFormat Liter_Diesel: Diesel
attr Esso timeout 5
attr Esso readingsExpr_Diesel $val + 0.009
attr Esso readingsExpr_SuperE5 $val + 0.009
Diesel: 1.99€ Super: 2.99€
Zitatdefine StarBOH HTTPMOD http://www.clever-tanken.de/tankstelle_details/2967 600
attr StarBOH group Super
attr StarBOH icon tanken
attr StarBOH readingsName_Autogas Autogas
attr StarBOH readingsName_SuperE5 SuperE5
attr StarBOH readingsRegex_Autogas <span>Autogas</span>[^0-9]+([0-9\.]+)
attr StarBOH readingsRegex_SuperE5 <span>SuperE5</span>[^0-9]+([0-9\.]+)
attr StarBOH room Benzin-LPG
attr StarBOH stateFormat Liter_Autogas: Autogas
attr StarBOH timeout 5
attr StarBOH stateFormat Liter_Autogas: Autogas
attr StarBOH stateFormat Liter_Autogas: Autogas Liter_Super: SuperE5
attr StarBOH userattr readingsName_SuperE5 readingsRegex_SuperE5 stateFormat timeout
define DAX30 HTTPMOD http://m.boerse-frankfurt.de/de/parts/element_list.m?type=index&secu=290 600
<div style=" display:table-cell; vertical-align:middle;" id="296@6.22_agname" > Commerzbank AG </div> <div style=" display:table-cell; text-align:right;"> <span id="296@6.22_price" class="arp_296@6.22_p_format=security-price_foptionboerse-id=6_foptiontype=AG_foptionlang=1"> 10,270 </span
<div style=" display:table-cell; vertical-align:middle;" id="1252@6.22_agname" > Continental AG </div> <div style=" display:table-cell; text-align:right;"> <span id="1252@6.22_price" class="arp_1252@6.22_p_format=security-price_foptionboerse-id=6_foptiontype=AG_foptionlang=1"> 216,70 </span>
Zitat von: mrfloppy am 10 Januar 2016, 11:34:14Wenn die Treibstoffpreise online abrufbar sind, kann man den Spritpreismonitor auch für Österreich verwenden. Für die Schweiz habe ich leider noch keine Seite gefunden, welche die Daten bereitstellen kann, da die Tankstellen dort nicht wie in DE verpflichtet sind die Daten an einer Zentralen Stelle zu melden, ob dies in Österreich der Fall ist, ist mir unbekannt.
Gibt es den Spritpreismonitor auch für Österreichische Tankstellen?
Zitat von: rtv am 02 Dezember 2015, 16:06:47
Danke für die nette Idee!
Zwei Dinge dazu:
1.) Mir erscheint es etwas "overkill" jedesmal diese große Seite zu laden, zu parsen und hoffen, dass sich nichts ändert.
Ich hab' diese API gefunden:
https://creativecommons.tankerkoenig.de/#demo
Das JSON-List Ergebnis müsste sich doch recht gut in FHEM integrieren lassen?
define Shell HTTPMOD https://creativecommons.tankerkoenig.de/json/detail.php?id=[TANKSTELLENID]&apikey=[APIKEY] 600
attr Shell userattr reading1Name reading1Regex reading2Name reading2Regex stateFormat
attr Shell reading1Name E10
attr Shell reading1Regex e10":([\d\.]+)
attr Shell reading2Name Diesel
attr Shell reading2Regex diesel":([\d\.]+)
attr Shell room Verkehr
attr Shell stateFormat {sprintf("E10 %.3f €, Diesel %.3f €", ReadingsVal($name,"E10",0), ReadingsVal($name,"Diesel",0))}
Zitat von: Cruiser79 am 11 Januar 2016, 10:21:25Danke läuft so
Mit der API habe ich bei mir einen Benzinmonitor schon seit längerer Zeit am laufen.Code Auswählen
define Shell HTTPMOD https://creativecommons.tankerkoenig.de/json/detail.php?id=[TANKSTELLENID]&apikey=[APIKEY] 600
attr Shell userattr reading1Name reading1Regex reading2Name reading2Regex stateFormat
attr Shell reading1Name E10
attr Shell reading1Regex e10":([\d\.]+)
attr Shell reading2Name Diesel
attr Shell reading2Regex diesel":([\d\.]+)
attr Shell room Verkehr
attr Shell stateFormat {sprintf("E10 %.3f €, Diesel %.3f €", ReadingsVal($name,"E10",0), ReadingsVal($name,"Diesel",0))}
Mit einem Aufruf von https://creativecommons.tankerkoenig.de/json/list.php?lat=[LAT]&lng=[LON]&rad=4&sort=price&type=e10&apikey=[APIKEY] kann man sich die Tankstellen Id in seiner Nähe heraussuchen.
Zitat von: mrfloppy am 14 Januar 2016, 19:07:58Hallo Thomas, sendest du uns mal Links deiner Tankstellen? Oder wie wir selektieren müssen?
Ich habe aber Null Ahnung wie ich das in fhem umsetzten sollte.
Ich würde mir gerne den Preis von meinen beliebtesten Tankstellen abfragen und auf einem Tablet anzeigen lassen.
Zitat von: mrfloppy am 14 Januar 2016, 19:07:58
Es gibt in Österreich auch eine Webseite wo man die Preise abfragen kann. Man bekommt aber nur die 5 günstigsten Tankstellen angezeigt.
http://www.spritpreisrechner.at/
Dazu hab ich gesucht ob es eine API gibt und so wie es aussieht gibt es keine.
Da es aber Android Apps gibt zum Spritabfragen, bin ich dann auf diese Seite gestoßen.
https://blog.muehlburger.at/2011/08/spritpreisrechner-at-apps-entwickeln/
Da wird mit HTTP-POST abgefragt.
Ich habe aber Null Ahnung wie ich das in fhem umsetzten sollte.
Ich würde mir gerne den Preis von meinen beliebtesten Tankstellen abfragen und auf einem Tablet anzeigen lassen.
Hat jemand der Profis Ahnung und kann helfen?
LG Thomas
Zitat von: Cruiser79 am 15 Januar 2016, 12:08:06
"meinen beliebtesten Tankstellen" hört sich jetzt aber nicht so an, als ob die die Liste, die du zurück bekommst, einfach nur korrekt darstellen willst?
ZitatHallo Thomas, sendest du uns mal Links deiner Tankstellen? Oder wie wir selektieren müssen?
readingsName_Diesel Diesel
readingsName_Ultimate102 Ultimate102
readingsRegex_Diesel <div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
readingsRegex_Ultimate102 <div class="fuel-price-type"><span>'ARAL Ultimate 102'[^0-9]+([0-9\.]+)
room Benzinpreise
stateFormat AralPLZ ultimate102: Ultimate102, diesel: Diesel
userattr readingsName_Diesel readingsName_Ultimate102 readingsRegex_Diesel readingsRegex_Ultimate102 stateFormat
Zitat von: Warlock_2016 am 15 Februar 2016, 17:33:23
Hallo Zusammen
ich hab den Benzinpreis Monitor im Einsatz. Es kommen auch Werte heraus.
Hat jemand Erfahrung wie man die die am besten in Table UI anzeigen lassen kann?
Man braucht hier ja das Data-Device und den data-get. Hat jemand mit Erfahrung?
Gruss, Markus
</td>
<td>
<div type="label" device="bft" data-get="Diesel" data-unit="€" style="font-size:x-large;color:#aa6900;"></div>
<div data-type="label" class="cell" >Diesel</div>
</td>
<td>
<div type="label" device="bft" data-get="SuperE5" data-unit="€" style="font-size:x-large;color:#aa6900;"></div>
<div data-type="label" class="cell" >Super</div>
</td>
</tr>
<div data-type="label" data-device="bft"
data-get="SuperE5"
style="color:#aa6900"
class="right" >
define SpritMon.Hedd.Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/1221 3600
attr SpritMon.Hedd.Shell userattr readingsName_SuperPlus readingsRegex_SuperPlus
attr SpritMon.Hedd.Shell readingsName_SuperPlus SuperPlus
attr SpritMon.Hedd.Shell readingsRegex_SuperPlus <span>Shell V-Power Racing</span>[^0-9]+([0-9\.]+)
attr SpritMon.Hedd.Shell room 9.05_SpritMon
attr SpritMon.Hedd.Shell timeout 5
<span>Shell V-Power Racing</div>
attr SpritMon.Hedd.Shell readingsRegex_SuperPlus <span>Shell V-Power Racing</div>[^0-9]+([0-9\.]+)
funktionieren.
Zitat von: mahowi am 22 Februar 2016, 23:09:26
Da ist wohl ein Fehler auf der Seite Deiner Tankstelle. Der <span>-Tag wird nicht geschlossen, stattdessen steht daCode Auswählen<span>Shell V-Power Racing</div>
Sollte also mitCode Auswählenattr SpritMon.Hedd.Shell readingsRegex_SuperPlus <span>Shell V-Power Racing</div>[^0-9]+([0-9\.]+)
funktionieren.
2016.03.06 11:38:42 3: TankeDierdorf: Defined with URL http://www.clever-tanken.de/tankstelle_details/46511 and interval 1800
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsExpr_Diesel should no longer be used. Please use reading01Expr syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsExpr_Super should no longer be used. Please use reading01Expr syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsName_Diesel should no longer be used. Please use reading01Name syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsName_Super should no longer be used. Please use reading01Name syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsRegex_Diesel should no longer be used. Please use reading01Regex syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.03.06 11:38:42 3: TankeDierdorf: the attribute readingsRegex_Super should no longer be used. Please use reading01Regex syntax instead
2016.03.06 11:38:42 3: TankeDierdorf: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
<div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
Zitat von: Intruder1956 am 09 März 2016, 17:54:42siehe https://forum.fhem.de/index.php/topic,50281.0.html
Wo ist der Fehler ???
attr TankeDierdorf enableControlSet 1
set TankeDierdorf upgradeAttributes
set TankeDierdorf upgradeAttributes
Zitat2016.03.11 15:19:36 3 : SBMarkt: Read response to update didn't match any Readingwas steht denn in buf drin? es wird halt nichts geparsed.
2016.03.11 15:19:55 3 : Star: Read response to update didn't match any Reading
2016.03.11 15:20:15 3 : Jet: Read response to update didn't match any Reading
reading01Regex <div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
<div class="fuel-price-type"><span>Super E5[^0-9]+([0-9\.]+)
Zitat von: benkler am 17 März 2016, 12:05:44
Ich würde mir gerne die Preise der tankstellen täglich um 17:00 per pushover schicken lassen.
aber irgendwie checke ich das mit dem Notify noch nicht wirklich.
Kann mir da eventuell jemand ein paar tips gebeben ?
define SpritpreisePush at *17:00:00 {my $tanke1 = ReadingsVal("tanke1","SuperE10", "0");; my $tanke2 = ReadingsVal("tanke2","SuperE10", "0");; fhem ("set push msg 'Spritpreise' 'tanke1: $tanke1 €
tanke2: $tanke2 € ' '' 0 ''")}
Zitat von: betateilchen am 29 März 2016, 15:12:28
Es funktioniert über den Umweg mit userReadings:Code Auswählenattr BenzinpreisePL_Apexim userReadings reading01User {my $v = ReadingsVal('BenzinpreisePL_Apexim','Apexim_SuperE5','');; $v =~ tr/,/./;; return $v;;}
(http://up.picr.de/25027967oc.jpg)
#Benzinpreise
define Jet HTTPMOD http://www.clever-tanken.de/tankstelle_details/3471 600
attr Jet userattr reading01Name reading01Regex reading02Name reading02Regex
attr Jet enableControlSet 1
attr Jet group Spritpreise
attr Jet icon tanken
attr Jet reading01Name SuperE5
attr Jet reading01Regex <span>Super E5</span> [^0-9]+([0-9\.]+)
attr Jet reading02Name Diesel
attr Jet reading02Regex <span>Diesel</span> [^0-9]+([0-9\.]+)
attr Jet room Spritpreise
attr Jet stateFormat Liter_Diesel: Diesel
attr Jet timeout 5
2016.04.09 00:32:47 3: Jet: Read response to update didn't match any Reading
2016.04.09 00:32:48 3: Tankpunkt: Read response to update didn't match any Reading
attr Jet enableControlSet 1
set Spritpreise upgradeAttributes
define Buehne HTTPMOD http://www.clever-tanken.de/tankstelle_details/50302 600
attr Buehne userattr reading01Name reading01Regex reading02Name reading02Regex readingsExpr_Diesel readingsExpr_SuperE5
attr Buehne enableControlSet 1
attr Buehne group Spritpreise
attr Buehne icon tanken
attr Buehne reading01Name Diesel
attr Buehne reading01Regex <span>Diesel</span>[^0-9]+([0-9\.]+)
attr Buehne reading02Name SuperE5
attr Buehne reading02Regex <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Buehne room Spritpreise
attr Buehne stateFormat Liter_Diesel: Diesel
attr Buehne timeout 5
attr Buehne readingsExpr_Diesel $val + 0.009
attr Buehne readingsExpr_SuperE5 $val + 0.009
define Spritpreise readingsGroup (Buehne|Deisel|Donig):(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 €'}
reading01Name SuperE10
reading01Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
reading01Expr $val + 0.009
attr Spritpreise valueFormat {'%.2f €'}
2016.05.08 12:43:16 3: Real: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Real: the attribute readingsRegex_SuperE5 should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Real: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Real: the attribute readingsRegex_Diesel should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Real: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Real: the attribute readingsName_SuperE5 should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Real: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Real: the attribute readingsName_Diesel should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Real: Defined with URL http://www.clever-tanken.de/tankstelle_details/3884 and interval 1800
2016.05.08 12:43:16 3: Famila: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Famila: the attribute readingsRegex_SuperE5 should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Famila: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Famila: the attribute readingsRegex_Diesel should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Famila: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Famila: the attribute readingsName_SuperE5 should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Famila: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Famila: the attribute readingsName_Diesel should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Famila: Defined with URL http://www.clever-tanken.de/tankstelle_details/52793 and interval 1800
2016.05.08 12:43:16 3: HEM: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: HEM: the attribute readingsRegex_SuperE5 should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: HEM: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: HEM: the attribute readingsRegex_Diesel should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: HEM: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: HEM: the attribute readingsName_SuperE5 should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: HEM: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: HEM: the attribute readingsName_Diesel should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: HEM: Defined with URL http://www.clever-tanken.de/tankstelle_details/4881 and interval 1800
2016.05.08 12:43:16 3: Star: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Star: the attribute readingsRegex_SuperE5 should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Star: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Star: the attribute readingsRegex_Diesel should no longer be used. Please use reading01Regex syntax instead
2016.05.08 12:43:16 3: Star: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Star: the attribute readingsName_SuperE5 should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Star: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
2016.05.08 12:43:16 3: Star: the attribute readingsName_Diesel should no longer be used. Please use reading01Name syntax instead
2016.05.08 12:43:16 3: Star: Defined with URL http://www.clever-tanken.de/tankstelle_details/14638 and interval 1800
Zitat von: moonsorrox am 08 Mai 2016, 12:49:57
Ich habe seit einigen Tagen im Log immer diese Meldungen, hat das noch jemand..?
Wurde bei clever Tanken etwas umgestellt..?
For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
ZitatAber die Attribute für eine einzelne Abfrage erschlagen einen ja förmlich - ich glaube es sind einige an oder über die 100, ehe ich da rumfummel lasse ich das doch lieber ;)du sollst auch nichts rumfummeln, sondern lediglich, wie der text sagt,
attr <my_device> enableControlSet 1
set <my_device> upgradeAttributes
Zitat von: frank am 08 Mai 2016, 13:55:05das ist ja rumfummeln ;) nee Spaß beiseite :D
du sollst auch nichts rumfummeln, sondern lediglich, wie der text sagt,
Zitat von: frank am 08 Mai 2016, 13:55:05
1. set-befehle freischalten mit
2. nun die vorhandenen attribute "aktualisieren" mit
anschliessend save config, damit du länger was davon hast. ;)
define GreenlineDieselNotify notify Greenline.*Diesel.* {WhatsApp_Diesel ("Test")}
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4021 1805
attr Tankstelle_Aral userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex readingOExpr
attr Tankstelle_Aral enableControlSet 1
attr Tankstelle_Aral event-on-change-reading Diesel,SuperE10,SuperE5
attr Tankstelle_Aral reading01Name Diesel
attr Tankstelle_Aral reading01Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Diesel
attr Tankstelle_Aral reading02Name SuperE10
attr Tankstelle_Aral reading02Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E10
attr Tankstelle_Aral reading03Name SuperE5
attr Tankstelle_Aral reading03Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E5
attr Tankstelle_Aral readingOExpr $val =~ tr/,/./;;$val
attr Tankstelle_Aral room 2_6_Spritpreise
attr Tankstelle_Aral stateFormat E5: SuperE5 € / E10: SuperE10 € / D: Diesel €
attr Tankstelle_Aral timeout 10
attr Tankstelle_Aral verbose 2
define Oelpreis HTTPMOD https://www.esyoil.com/?calc%5Bamount%5D=3000&calc%5Bunloading_points%5D=1&calc%5Bprod%5D=8&calc%5Bpayment_type%5D=1&calc%5Bshort_vehicle%5D=&calc%5Bhose%5D=&calc%5Bapp%5D=1&calc%5Bzipcode%5D=82152&calc%5Bsubmit%5D= 43200
attr Oelpreis userattr readingsName_Oel readingsRegex_Oel
attr Oelpreis enableControlSet 1
attr Oelpreis readingsName_Oel Oel
attr Oelpreis readingsRegex_Oel <td>3.000 Liter<\/td>.*?([\d,\d]+)
Read response to update didn't match any Reading
2016.09.21 12:13:48 3: Real: Defined with URL http://www.clever-tanken.de/tankstelle_details/3884 and interval 1800
2016.09.21 12:13:48 3: Famila: Defined with URL http://www.clever-tanken.de/tankstelle_details/52793 and interval 1800
2016.09.21 12:13:48 3: HEM: Defined with URL http://www.clever-tanken.de/tankstelle_details/4881 and interval 1800
2016.09.21 12:13:48 3: Star: Defined with URL http://www.clever-tanken.de/tankstelle_details/14638 and interval 1800
2016.09.22 13:35:15 3: Tanken_Shell: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Thu, 22 Sep 2016 11:05:12 GMT
Content-Type: application/json; charset=utf-8
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type, accept
Access-Control-Allow-Methods: GET, body empty,
Error: read from https://creativecommons.tankerkoenig.de:443 timed out
2016.09.22 13:35:15 3: Tanken_Rewe: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Thu, 22 Sep 2016 11:05:12 GMT
Content-Type: application/json; charset=utf-8
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type, accept
Access-Control-Allow-Methods: GET, body empty,
Error: read from https://creativecommons.tankerkoenig.de:443 timed out
2016.09.22 13:35:15 3: Tanken_HEM_Bensheim: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Thu, 22 Sep 2016 11:05:12 GMT
Content-Type: application/json; charset=utf-8
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type, accept
Access-Control-Allow-Methods: GET, body empty,
Error: read from https://creativecommons.tankerkoenig.de:443 timed out
2016.09.22 13:35:15 3: Tanken_HEM: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Thu, 22 Sep 2016 11:05:12 GMT
Content-Type: application/json; charset=utf-8
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type, accept
Access-Control-Allow-Methods: GET, body empty,
https://creativecommons.tankerkoenig.de/json/prices.php?ids=e1a15081-2613-9107-e040-0b0a3dfe563c,174ba965-2b6e-468c-86c3-44a6601b1f3f,e8e2a14f-4bac-4b14-b8e8-b7b6347ffb56,2fdeef9e-36ca-44d7-9ee4-3bdaa0112539&apikey=XXXXXXXXXXXXX 610
attr Benzin enableControlSet 1
attr Benzin extractAllJSON 1
attr Benzin getHeader1 Content-Type: application/json
attr Benzin getHeader2 Accept: */*
Zitat von: Amenophis86 am 26 September 2016, 11:54:49
Die Fehler kommen daher, dass Tankerkönig die Server regelmäßig überlastet sind. Ich wurde von Tankerkönig per Mail angeschrieben mit der bitte meine Requests zu ändern. Dies kann ich auch jedem nur empfehlen. Und zwar sollen wir von detail.php auf prices.php wechseln. Ich stelle hier mal meine Definition als Beispiel rein. Hat auch den Vorteil, dass man alles in einem Device nun hat und nicht mehr für jedes ein eigenes machen muss:Code Auswählen
https://creativecommons.tankerkoenig.de/json/prices.php?ids=e1a15081-2613-9107-e040-0b0a3dfe563c,174ba965-2b6e-468c-86c3-44a6601b1f3f,e8e2a14f-4bac-4b14-b8e8-b7b6347ffb56,2fdeef9e-36ca-44d7-9ee4-3bdaa0112539&apikey=XXXXXXXXXXXXX 610
attr Benzin enableControlSet 1
attr Benzin extractAllJSON 1
attr Benzin getHeader1 Content-Type: application/json
attr Benzin getHeader2 Accept: */*
define Benzinpreise HTTPMOD https://creativecommons.tankerkoenig.de/json/prices.php?ids=[%stationlist%]&apikey=%apikey% 1200
attr Benzinpreise userattr getHeader1 getHeader2 getURL replacement0Mode:reading,internal,text,expression,key replacement0Regex replacement0Value replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value
attr Benzinpreise devStateIcon true:gasoline2@green false:gasoline2@red
attr Benzinpreise enableControlSet 1
attr Benzinpreise extractAllJSON 1
attr Benzinpreise getHeader1 Content-Type: application/json
attr Benzinpreise getHeader2 Accept: */*
attr Benzinpreise group Benzinpreis
attr Benzinpreise icon gasoline2
attr Benzinpreise replacement0Mode expression
attr Benzinpreise replacement0Regex (%stationlist%)
attr Benzinpreise replacement0Value { myPetrolStationInfo("list","Benzinpreise") }
attr Benzinpreise replacement1Mode text
attr Benzinpreise replacement1Regex (%apikey%)
attr Benzinpreise replacement1Value a4xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
attr Benzinpreise room Preis
attr Benzinpreise stateFormat ok
## Logfile Benzinpreise
define FileLog_Benzinpreise FileLog %L/benzinpreise-%Y-%m.log Benzinpreise:.*_e10.*
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise room log
## Plot Tagespreisübersicht
define SVG_FileLog_Benzinpreise SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise:CURRENT
attr SVG_FileLog_Benzinpreise group Benzinpreis
attr SVG_FileLog_Benzinpreise label "Preise für Super E10 an ausgewählten Tankstellen"
attr SVG_FileLog_Benzinpreise room Preis,Plots
## Reading Group Benzinpreise
define rg_Benzinpreise readingsGroup <Tankstelle>,<x>,<Adresse>,<offen/geschlossen>,<SuperE10>,<Diesel> Benzinpreise:@2,<#1>,prices_(.*)_address,prices_#1_status,prices_#1_e10,prices_#1_diesel
attr rg_Benzinpreise group Benzinpreis
attr rg_Benzinpreise mapping ;
attr rg_Benzinpreise nameIcon { myPetrolStationInfo("icon","Benzinpreise",$READING) }
attr rg_Benzinpreise room Preis
attr rg_Benzinpreise sortFn rgSortPetrolStation
attr rg_Benzinpreise valueFormat { myPetrolStationInfo("valueFormat","Benzinpreise",$READING) }
attr rg_Benzinpreise valueStyle { myPetrolStationInfo("valueStyle","Benzinpreise",$READING) }
# Created by FHEM/98_SVG.pm, 2016-10-17 07:17:36
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 '<L1>'
set ytics
set y2tics
set grid
set ylabel "Preis / (€/l)"
set y2label "Preis / (€/l)"
#FileLog_Benzinpreise 4:Benzinpreise.prices_e1a15081-255b-9107-e040-0b0a3dfe563c_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_a2f96cc4-b858-463d-bd93-b3056e81fcaa_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_0ab14657-b01e-4827-a5d4-311ad444b887_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_45936520-e830-4578-a3cb-188053b90765_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_005056ba-7cb6-1ee5-b791-639597361b11_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_f3c0c60e-7709-486b-a7d8-eea21ad0c2d9_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_29462a90-0092-437c-a287-ea4aa611c1c3_e10\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'HEM, 13467 Berlin, Berliner Str. 140' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'ESSO, 13467 Berlin, Hermsdorfer Damm 221' ls l1 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'SPREVES, 13467 Berlin, Hermsdorfer Damm 180' ls l2 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Shell, 13467 Berlin, Hermsdorfer Damm 141-143' ls l3 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'STAR, 10585 Berlin, Otto-Suhr-Allee 132' ls l4 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'SB, 10587 Berlin, Fraunhofer Straße 33-36' ls l5 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'ARAL, 10625 Berlin, Bismarckstraße 2' ls l6 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Shell, 13503 Berlin, Ruppiner Chaussee 339' ls l7 lw 1 with lines
#################################################################
### Benzinpreis und Tankstellen (Tankerkönig) ###
#################################################################
# 1. parameter $required is "icon" or "address" or "valueStyle" or "valueFormat" or "list"
# 2. parameter $device is the Tankerkönig device
# 3. parameter $reading has the format "prices_<tankerkoenig-id>_<type of fuel>" like "prices_e1a15081-255b-9107-e040-0b0a3dfe563c_e10" (parameter not needed if $required is "list" or "address")
#
# icon: returns the brand icon
# address: returns the station name and address
# valueStyle: returns the style for the prices as html code: lowest value: green bold, highest value: red
# valueFormat: returns "%.3f €/l" for prices
# list: returns the station list (part of URL to call Tankerkönig)
sub myPetrolStationInfo($$;$) {
my ($required, $device, $reading) = @_;
# Log3 undef, 3, "device $device";
my $icon = "unknown\@red";
my $folder = "/opt/fhem/www/images/default/";
my $prefix = "tankstelle_";
my %tankstellen = (
'e1a15081-255b-9107-e040-0b0a3dfe563c' => {sort => 3, brand => 'hem', address => 'HEM, 13467 Berlin, Berliner Str. 140'},
'a2f96cc4-b858-463d-bd93-b3056e81fcaa' => {sort => 4, brand => 'esso', address => 'ESSO, 13467 Berlin, Hermsdorfer Damm 221'},
'0ab14657-b01e-4827-a5d4-311ad444b887' => {sort => 5, brand => 'spreves', address => 'SPREVES, 13467 Berlin, Hermsdorfer Damm 180'},
'45936520-e830-4578-a3cb-188053b90765' => {sort => 2, brand => 'shell', address => 'Shell, 13467 Berlin, Hermsdorfer Damm 141-143'},
'005056ba-7cb6-1ee5-b791-639597361b11' => {sort => 6, brand => 'star', address => 'STAR, 10585 Berlin, Otto-Suhr-Allee 132'},
'f3c0c60e-7709-486b-a7d8-eea21ad0c2d9' => {sort => 7, brand => 'sb', address => 'SB, 10587 Berlin, Fraunhofer Straße 33-36'},
'09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0' => {sort => 8, brand => 'aral', address => 'ARAL, 10625 Berlin, Bismarckstraße 2'},
'29462a90-0092-437c-a287-ea4aa611c1c3' => {sort => 1, brand => 'shell', address => 'Shell, 13503 Berlin, Ruppiner Chaussee 339'}
);
sub rgSortPetrolStation {
return $tankstellen{@{$a}[1]}{'sort'} cmp $tankstellen{@{$b}[1]}{'sort'};
};
my ($prices, $tankerkoenig, $fuel_type) = split(/_/, $reading) if ($required ne "list" && $required ne "address");
#Log3 undef, 3, "required=$required, device=$device, reading=$reading, prices=$prices, tankerkoenig=$tankerkoenig, fuel_type=$fuel_type";
if ($required eq "icon") {
Log3 undef, 3, "tankerkoenig=$tankerkoenig";
# falls $reading keine "_" enthält, kann es sein, dass $reading nur die tankerkoenig id enthält; dann diese nehmen
#if ($tankerkoenig eq "") {$tankerkoenig = $prices;}
my $brand = $tankstellen{$tankerkoenig}{'brand'};
Log3 undef, 3, "brand=$brand";
if (! -e $folder . $prefix . $brand . ".png" ) {
return $icon;
}
$icon = $prefix . $brand;
return $icon;
} elsif ($required eq "address") {
return $tankstellen{$tankerkoenig}{'address'};
} elsif ($required eq "valueStyle") {
my $lowprice = 99;
my $highprice = -99;
my $actprice;
my $value = ReadingsVal($device, $reading, 99);
if ($value =~ m/\d\.\d/o) {
my $status = "prices_" . $tankerkoenig . "_status";
if (ReadingsVal($device, $status, "") ne "open") {
return 'style="color:black"';
} else { # compare with all open petrol stations
while (each %tankstellen) {
$status = "prices_" . $_ . "_status";
if (ReadingsVal($device, $status, "") eq "open") {
$actprice = ReadingsVal($device, "prices_" . $_ . "_" . $fuel_type, 99);
if ($actprice > $highprice) { $highprice = $actprice; }
if ($actprice < $lowprice) { $lowprice = $actprice; }
}
}
if ($value == $lowprice) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($value == $highprice) { return 'style="color:red"'; }
else { return 'style="color:black"'; }
}
} else { # $value is a string, not a real number
if ($value eq "open") { return 'style="color:lightgreen;;text-align: center;;"'; }
elsif ($value eq "closed") { return 'style="color:red;;font-weight:bold;;text-align: center;;"'; }
else { return 'style="color:black"'; }
}
} elsif ($required eq "valueFormat") {
my $value = ReadingsVal($device, $reading, 99);
if ($value =~ m/\d\.\d/o) { return '%.3f €/l'; }
else { return ''; }
} elsif ($required eq "list") {
my $list = "";
while (each %tankstellen) {
$list .= '"'.$_.'",';
fhem("setreading $device prices_".$_."_address ".$tankstellen{$_}{'address'});
}
return substr($list,0,length($list)-1);
}
}
attr DEIN_SPRITPREIS_MONITOR userReadings Stand {lastCheck}
sub lastCheck() {
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime( time() );
return sprintf(
"%02d:%02d %02d.%02d.%4d",
$hour, $min, $mday,
( $mon + 1 ),
( $year + 1900 )
);
}
Stand 18:17 01.11.2016
Zitat von: kumue am 01 November 2016, 19:19:14
ich habe mir ein Reading angelegt, wann FHEM die Daten letztmalig geholt hat...
Aber wenn ich deinen Post richtig verstanden habe, wilst Du die Zeit aus dem html-Code ziehen...
Letzte MTS-K Preisänderung: 01.11.2016 16:30
Zitat von: Ascos am 01 November 2016, 19:27:47Poste doch mal, welche URL du genau abfragst und wie du momentan versucht hast, den Wert auszulesen?
Hi Kumue,
danke für deine Antwort. Genau, mein Plan ist, mir anzeigen zu lassen, wann die Spritpreise online das letzte Mal aktualisiert wurden.
Das Ganze nennt sich:Code AuswählenLetzte MTS-K Preisänderung: 01.11.2016 16:30
Diesen Wert würde ich gerne extrahieren. Denn es kann ja gut sein, das FHEM sich aktualisiert, aber die Werte unverändert und somit alt sind.
Viele Grüße
Tino
Zitat von: Ascos am 01 November 2016, 19:27:47
Hi Kumue,
danke für deine Antwort. Genau, mein Plan ist, mir anzeigen zu lassen, wann die Spritpreise online das letzte Mal aktualisiert wurden.
Das Ganze nennt sich:Code AuswählenLetzte MTS-K Preisänderung: 01.11.2016 16:30
Diesen Wert würde ich gerne extrahieren. Denn es kann ja gut sein, das FHEM sich aktualisiert, aber die Werte unverändert und somit alt sind.
Viele Grüße
Tino
define Geilenkirchen HTTPMOD http://www.clever-tanken.de/tankstelle_details/52861 600
attr Geilenkirchen userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr Geilenkirchen group Spritpreise
attr Geilenkirchen icon car
attr Geilenkirchen reading01Name Diesel
attr Geilenkirchen reading01Regex <span>Diesel</span>[^0-9]+([0-9\.]+)
attr Geilenkirchen reading02Name SuperE10
attr Geilenkirchen reading02Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
attr Geilenkirchen reading03Name aktZeit
attr Geilenkirchen reading03Regex Letzte MTS-K Preisänderung: ((31|30|[012]\d|\d)\.(0\d|1[012]|\d)\.(\d{1,6}) ([01]?\d|2[0-3]):([0-5]?\d))
attr Geilenkirchen reading04Name test
attr Geilenkirchen reading04Regex Letzte MTS-K Preisänderung: (([01]?\d|2[0-3]):([0-5]?\d))
attr Geilenkirchen room Spritpreise
attr Geilenkirchen stateFormat SuperE10 Diesel aktZeit-1
attr Geilenkirchen timeout 5
define Jet HTTPMOD http://www.clever-tanken.de/tankstelle_details/13660 600
attr Jet userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex
attr Jet group Spritpreise
attr Jet icon gasoline
attr Jet reading01Name Diesel
attr Jet reading01Regex <span>Diesel</span>[^0-9]+([0-9\.]+)
attr Jet reading02Name SuperE10
attr Jet reading02Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
attr Jet reading03Name aktZeit
attr Jet reading03Regex Letzte MTS-K Preisänderung: ((31|30|[012]\d|\d)\.(0\d|1[012]|\d)\.(\d{1,6}) ([01]?\d|2[0-3]):([0-5]?\d))
attr Jet room Spritpreise
attr Jet stateFormat SuperE10 Diesel aktZeit-1
attr Jet timeout 5
define Spritpreise readingsGroup (PM24|Geilenkirchen|Jet):(SuperE10|Diesel).*
attr Spritpreise group Spritpreisuebersicht
attr Spritpreise notime 1
attr Spritpreise room Spritpreise
attr Spritpreise valueFormat {'%.2f €'}
<li data-row="5" data-col="4" data-sizex="2" data-sizey="1">
<header><div data-type="label" class="large">Spritpreise</div></header>
<table style="width:100%" class="top-space">
<tr>
<td>Tankstelle</td>
<td>E10</td>
<td>Diesel</td>
<td>Zeit</td>
</tr>
<tr>
<td>GK</td>
<td>
<div data-type="label" data-device="Geilenkirchen" data-part="1" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="Geilenkirchen" data-part="2" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="Geilenkirchen" data-part="4" class="cell narrow"></div>
</td>
</tr>
<tr>
<td>Beggendorf</td>
<td>
<div data-type="label" data-device="PM24" data-part="1" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="PM24" data-part="2" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="PM24" data-part="4" class="cell narrow"></div>
</td>
</tr>
<tr>
<td>Jet</td>
<td>
<div data-type="label" data-device="Jet" data-part="1" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="Jet" data-part="2" class="cell narrow"></div>
</td>
<td>
<div data-type="label" data-device="Jet" data-part="4" class="cell narrow"></div>
</td>
</tr>
</table>
</li>
Zitat von: pHiDdeath am 09 November 2016, 20:55:13
so scheine den fehler gefunden zu haben , nach SuperPlus kam kein </span> mehr ... jetzt noch in telegram einbinden und gut ;)
tanken Suedtank Liter_Diesel: Diesel
Zitat von: domii666 am 16 November 2016, 09:58:03
hab das nach Wiki gemacht aber mir zeigt es leider nur das hier anCode Auswählentanken Suedtank Liter_Diesel: Diesel
Zitat von: derNeue am 18 November 2016, 08:46:16
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Eschweiler_Hit|Markant_Aldenhoven):(SuperE5|SuperE10).*
Can't open /media/usblog/fhem/log/spritpreise-langen-2016-11.log: No such file or Directory
attr global logdir <DEIN_PFAD>
ZitatFHEM ersetzt %L mit dem Wert des global logdir Attributes.
Zitat von: hartenthaler am 21 Oktober 2016, 19:16:55
Ich habe auf die API von Tankerkönig umgestellt. Hier sind meine Definitionen für das API-Device, das Logfile, ein Plot und eine readingsGroup.
...
#################################################################
### Benzinpreis und Tankstellen (Tankerkönig) ###
#################################################################
# 1. parameter $required is "icon" or "address" or "valueStyle" or "valueFormat" or "list" or "userReadings"
# 2. parameter $device is the Tankerkönig device
# 3. parameter $reading has the format "prices_<tankerkoenig-id>_<type of fuel>" like "prices_e1a15081-255b-9107-e040-0b0a3dfe563c_e10" (parameter not needed if $required is "list" or "userReadings" or "address")
#
# icon: returns the brand icon (diese Funktion wird aktuell nicht verwendet!)
# address: returns the station name and address
# valueStyle: returns the style for the prices as html code: lowest value: green bold, highest value: red
# valueFormat: returns "%.3f €/l" for prices, translations for open/closed etc.
# list: returns the station list (part of URL to call Tankerkönig) - this function must be called once to additionally set the userReadings icon and address for each station
# userReadings: returns a list of userReadings for timestamps
sub myPetrolStationInfo($$;$) {
my ($required, $device, $reading) = @_;
# Log3 undef, 3, "device $device";
my $icon = "unknown\@red";
my $folder = "/opt/fhem/www/images/default/";
my $prefix = "prices_";
my $prefix_icon = "tankstelle_";
my %tankstellen = (
'e1a15081-255b-9107-e040-0b0a3dfe563c' => {sort => 3, brand => 'hem', address => 'HEM, 13467 Berlin, Berliner Str. 140'},
'a2f96cc4-b858-463d-bd93-b3056e81fcaa' => {sort => 4, brand => 'esso', address => 'ESSO, 13467 Berlin, Hermsdorfer Damm 221'},
'0ab14657-b01e-4827-a5d4-311ad444b887' => {sort => 5, brand => 'spreves', address => 'SPREVES, 13467 Berlin, Hermsdorfer Damm 180'},
'45936520-e830-4578-a3cb-188053b90765' => {sort => 2, brand => 'shell', address => 'Shell, 13467 Berlin, Hermsdorfer Damm 141-143'},
'005056ba-7cb6-1ee5-b791-639597361b11' => {sort => 6, brand => 'star', address => 'STAR, 10585 Berlin, Otto-Suhr-Allee 132'},
'f3c0c60e-7709-486b-a7d8-eea21ad0c2d9' => {sort => 7, brand => 'sb', address => 'SB, 10587 Berlin, Fraunhofer Straße 33-36'},
'09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0' => {sort => 8, brand => 'aral', address => 'ARAL, 10625 Berlin, Bismarckstraße 2'},
'29462a90-0092-437c-a287-ea4aa611c1c3' => {sort => 1, brand => 'shell', address => 'Shell, 13503 Berlin, Ruppiner Chaussee 339'}
);
sub rgSortPetrolStation {
return $tankstellen{@{$a}[1]}{'sort'} cmp $tankstellen{@{$b}[1]}{'sort'};
};
my ($prices, $tankerkoenig, $fuel_type) = split(/_/, $reading) if ($required ne "list" && $required ne "address");
#Log3 undef, 3, "required=$required, device=$device, reading=$reading, prices=$prices, tankerkoenig=$tankerkoenig, fuel_type=$fuel_type";
if ($required eq "icon") {
# falls $reading keine "_" enthält, kann es sein, dass $reading nur die tankerkoenig id enthält; dann diese nehmen
#if ($tankerkoenig eq "") {$tankerkoenig = $prices;}
my $brand = $tankstellen{$tankerkoenig}{'brand'};
if (! -e $folder . $prefix_icon . $brand . ".png" ) {
return $icon;
}
$icon = $prefix_icon . $brand;
return $icon;
} elsif ($required eq "address") {
return $tankstellen{$tankerkoenig}{'address'};
} elsif ($required eq "valueStyle") {
my $lowprice = 99;
my $highprice = -99;
my $actprice;
my $value = ReadingsVal($device, $reading, 99);
if ($value =~ m/\d\.\d/o) {
my $status = $prefix . $tankerkoenig . "_status";
if (ReadingsVal($device, $status, "") ne "open") {
return 'style="color:black"';
} else { # compare with all open petrol stations
while (each %tankstellen) {
$status = $prefix . $_ . "_status";
if (ReadingsVal($device, $status, "") eq "open") {
$actprice = ReadingsVal($device, $prefix . $_ . "_" . $fuel_type, 99);
if ($actprice > $highprice) { $highprice = $actprice; }
if ($actprice < $lowprice) { $lowprice = $actprice; }
}
}
if ($value == $lowprice) { return 'style="color:lightgreen;;font-weight:bold"'; }
elsif ($value == $highprice) { return 'style="color:red"'; }
else { return 'style="color:black"'; }
}
} else { # $value is a string, not a real number
if ($value eq "open") { return 'style="color:lightgreen;;text-align: center;;"'; }
elsif ($value eq "closed") { return 'style="color:red;;font-weight:bold;;text-align: center;;"'; }
else { return 'style="color:black"'; }
}
} elsif ($required eq "valueFormat") {
my $value = ReadingsVal($device, $reading, 0);
if ($value =~ m/\d\.\d/o) { return '%.3f €/l'; }
elsif ($reading =~ "icon") { return $value; }
elsif ($value eq "open") { return 'offen'; }
elsif ($value eq "closed") { return 'geschlossen'; }
elsif ($reading =~ "timestamp") { return substr($value,8,2).".".substr($value,5,2).".".substr($value,0,4)." ".substr($value,11,5)." Uhr"; }
elsif ($reading =~ "address") { return '<a href="https://creativecommons.tankerkoenig.de/json/detail.php?id='.$tankerkoenig.'&apikey='.AttrVal($device, "replacement1Value", "<apikey>").'">'.$value.'</a>'; }
else { return ''; }
} elsif ($required eq "list") {
my $list = "";
while (each %tankstellen) {
$list .= '"'.$_.'",';
#fhem("setreading $device $prefix".$_."_address ".latin1ToUtf8($tankstellen{$_}{'address'}));
fhem("setreading $device $prefix".$_."_address ".$tankstellen{$_}{'address'});
my $brand = $tankstellen{$_}{'brand'};
# Log3 undef, 3, "brand=$brand";
if (-e $folder . $prefix_icon . $brand . ".png" ) {
my $cmd = 'setreading '.$device.' '.$prefix.$_.'_icon <img src="fhem/images/default/'.$prefix_icon.$brand.'.png">';
fhem($cmd);
}
}
return substr($list,0,length($list)-1);
} elsif ($required eq "userReadings") {
my $ur = "";
while (each %tankstellen) {
$ur .= $prefix . $_ . '_timestamp {ReadingsTimestamp($name,"' . $prefix . $_ . '_status",0)}' . ',';
}
return substr($ur,0,length($ur)-1);
} else {
Log3 undef, 3, "error in calling myPetrolStationInfo with parameter $required";
return "error in calling myPetrolStationInfo with parameter $required"
}
}
https://creativecommons.tankerkoenig.de/json/list.php?lat=52.1&lng=13.5&rad=25&type=diesel&apikey=xxx&sort=dist
define Benzinpreise HTTPMOD https://creativecommons.tankerkoenig.de/json/prices.php?ids=[%stationlist%]&apikey=%apikey% 1200
attr Benzinpreise userattr getHeader1 getHeader2 getURL replacement0Mode:reading,internal,text,expression,key replacement0Regex replacement0Value replacement1Mode:reading,internal,text,expression,key replacement1Regex replacement1Value
attr Benzinpreise devStateIcon true:gasoline2@green false:gasoline2@red
attr Benzinpreise enableControlSet 1
attr Benzinpreise extractAllJSON 1
attr Benzinpreise getHeader1 Content-Type: application/json
attr Benzinpreise getHeader2 Accept: */*
attr Benzinpreise group Benzinpreis
attr Benzinpreise icon gasoline2
attr Benzinpreise replacement0Mode expression
attr Benzinpreise replacement0Regex (%stationlist%)
attr Benzinpreise replacement0Value { myPetrolStationInfo("list",$name) }
attr Benzinpreise replacement1Mode text
attr Benzinpreise replacement1Regex (%apikey%)
attr Benzinpreise replacement1Value xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
attr Benzinpreise room Preis
attr Benzinpreise stateFormat ok
attr Benzinpreise timestamp-on-change-reading prices_.*
attr Benzinpreise userReadings prices_29462a90-0092-437c-a287-ea4aa611c1c3_timestamp {ReadingsTimestamp($name,"prices_29462a90-0092-437c-a287-ea4aa611c1c3_status",0)},prices_005056ba-7cb6-1ee5-b791-639597361b11_timestamp {ReadingsTimestamp($name,"prices_005056ba-7cb6-1ee5-b791-639597361b11_status",0)},prices_09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0_timestamp {ReadingsTimestamp($name,"prices_09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0_status",0)},prices_45936520-e830-4578-a3cb-188053b90765_timestamp {ReadingsTimestamp($name,"prices_45936520-e830-4578-a3cb-188053b90765_status",0)},prices_0ab14657-b01e-4827-a5d4-311ad444b887_timestamp {ReadingsTimestamp($name,"prices_0ab14657-b01e-4827-a5d4-311ad444b887_status",0)},prices_a2f96cc4-b858-463d-bd93-b3056e81fcaa_timestamp {ReadingsTimestamp($name,"prices_a2f96cc4-b858-463d-bd93-b3056e81fcaa_status",0)},prices_f3c0c60e-7709-486b-a7d8-eea21ad0c2d9_timestamp {ReadingsTimestamp($name,"prices_f3c0c60e-7709-486b-a7d8-eea21ad0c2d9_status",0)},prices_e1a15081-255b-9107-e040-0b0a3dfe563c_timestamp {ReadingsTimestamp($name,"prices_e1a15081-255b-9107-e040-0b0a3dfe563c_status",0)}
{ myPetrolStationInfo("userReadings","Benzinpreise") }
## Logfile Benzinpreise
define FileLog_Benzinpreise FileLog %L/benzinpreise-%Y-%m.log Benzinpreise:.*_e10.*
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise room log
## Plot Tagespreisübersicht
define SVG_FileLog_Benzinpreise SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise:CURRENT
attr SVG_FileLog_Benzinpreise group Benzinpreis
attr SVG_FileLog_Benzinpreise label "Preise für Super E10 an ausgewählten Tankstellen"
attr SVG_FileLog_Benzinpreise room Preis,Plots
# Created by FHEM/98_SVG.pm, 2016-10-17 07:17:36
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 '<L1>'
set ytics
set y2tics
set grid
set ylabel "Preis / (€/l)"
set y2label "Preis / (€/l)"
#FileLog_Benzinpreise 4:Benzinpreise.prices_e1a15081-255b-9107-e040-0b0a3dfe563c_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_a2f96cc4-b858-463d-bd93-b3056e81fcaa_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_0ab14657-b01e-4827-a5d4-311ad444b887_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_45936520-e830-4578-a3cb-188053b90765_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_005056ba-7cb6-1ee5-b791-639597361b11_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_f3c0c60e-7709-486b-a7d8-eea21ad0c2d9_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_09c46b5b-20c0-4dcf-a4d4-e6c67f6d5bb0_e10\x3a::
#FileLog_Benzinpreise 4:Benzinpreise.prices_29462a90-0092-437c-a287-ea4aa611c1c3_e10\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'HEM, 13467 Berlin, Berliner Str. 140' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'ESSO, 13467 Berlin, Hermsdorfer Damm 221' ls l1 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'SPREVES, 13467 Berlin, Hermsdorfer Damm 180' ls l2 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Shell, 13467 Berlin, Hermsdorfer Damm 141-143' ls l3 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'STAR, 10585 Berlin, Otto-Suhr-Allee 132' ls l4 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'SB, 10587 Berlin, Fraunhofer Straße 33-36' ls l5 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'ARAL, 10625 Berlin, Bismarckstraße 2' ls l6 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Shell, 13503 Berlin, Ruppiner Chaussee 339' ls l7 lw 1 with lines
defmod rg_Benzinpreise readingsGroup <>,<Tankerkoenig ID>,<Marke>,<Adresse>,<offen/geschlossen>,<SuperE10>,<Diesel>,<Zeitstempel> Benzinpreise:@2,<#1>,prices_(.*)_icon,prices_#1_address,prices_#1_status,prices_#1_e10,prices_#1_diesel,prices_#1_timestamp
attr rg_Benzinpreise group Benzinpreis
attr rg_Benzinpreise mapping ;
attr rg_Benzinpreise room Preis
attr rg_Benzinpreise sortFn rgSortPetrolStation
attr rg_Benzinpreise valueFormat { myPetrolStationInfo("valueFormat",$name,$READING) }
attr rg_Benzinpreise valueStyle { myPetrolStationInfo("valueStyle",$name,$READING) }
Zitat von: rohlande am 26 Januar 2017, 10:52:40
<span>Autogas</div>[^0-9]+([0-9\.]+)
<div class="fuel-price-type"><span>SuperPlus</div>
<div class="fuel-price-type"><span>Autogas</div>
Zitat von: betateilchen am 26 Januar 2017, 10:57:41Scheint bei allen "Kraftstoffsorten" falsch zu sein, die nicht als "MTS-K Preis" gekennzeichnet sind.
wenn das wirklich so ist, dann ist das ein Fehler auf der Webseite, über den man den Anbieter ggf. mal informieren sollte.
Edit: Das ist nicht nur bei Autogas falsch, sondern auch bei SuperPlus:Code Auswählen
<div class="fuel-price-type"><span>SuperPlus</div>
<div class="fuel-price-type"><span>Autogas</div>
<div class="fuel-price-type"><span>Super E5</span><span class="mtsk-label"> MTS-K Preis </span></div>
<div class="fuel-price-type"><span>SuperPlus</div>
Zitat von: szoller am 01 März 2017, 13:46:59
Gibt es auch die Möglichkeit, Daten aus Luxemburg einzubinden?
Zitat
http://www.petrol.lu/Prix/
reading01Name Super 98 oct.
reading01Regex (?s)line1.*?\/span[^0-9]+([0-9,]+)
reading02Name Super 95 oct.
reading02Regex (?s)line1.*?\/span.*?\/span[^0-9]+([0-9,]+)
reading03Name Diesel
reading03Regex (?s)line1.*?\/span.*?\/span.*?\/span[^0-9]+([0-9,]+)
Zitat
http://www.aral.de/de_lu/luxembourg/kraftstoffe-und-preise/aktuelle-kraftstoffpreise.html
reading01Name EuroSuper 95
reading01Regex (?s)text">EuroSuper 95.*?text">([0-9.]+)
reading02Name Ultimate 98
reading02Regex (?s)text">Ultimate 98.*?text">([0-9.]+)
reading03Name Diesel
reading03Regex (?s)text">Diesel.*?text">([0-9.]+)
reading01Name Diesel
reading01Regex (?s)(.*)
reading01OExpr $val =~ /<span>Diesel<\/span>[^0-9]+([0-9\.]+).*"suffix">([0-9])/;;return$1.$2;;
reading02Name SuperE5
reading02Regex (?s)(.*)
reading02OExpr $val =~ /<span>Super E5<\/span>[^0-9]+([0-9\.]+).*"suffix">([0-9])/;;return$1.$2;;
attr Tankstelle_Aral reading01Name Diesel
attr Tankstelle_Aral reading01Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Diesel
attr Tankstelle_Aral reading02Name SuperE10
attr Tankstelle_Aral reading02Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E10
attr Tankstelle_Aral reading03Name SuperE5
attr Tankstelle_Aral reading03Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E5
attr Tankstelle_Aral readingOExpr $val =~ tr/,/./;;$val
Zitat von: stromer-12 am 27 März 2017, 22:16:51
Ich suche mir so die Werte mit 3.Stelle:
Zitat von: Waschto am 06 Juni 2017, 13:58:41
Hallo FHEM-Community,
für alle die Interesse an ein konfigurierbaren Spritpreismonitor haben. Ich habe auf meinem Blog eine kleine Anleitung geschrieben, wie man sich einen Spritpreismonitor einrichtet unteranderem mit Funktionen wie Zeitraumeinstellung, Intervallnachrichten oder Auswahl der Tankstellen und Kraftstoffe.
https://waschto.eu/spritmonitor-2-0-individualisierter-tankalarm (https://waschto.eu/spritmonitor-2-0-individualisierter-tankalarm)
Gruß
Daniel
Zitatdamit es nicht in Vergessenheit gerät wäre es da nicht genial im Wiki von FHEM aufgehoben?
Zitat von: Waschto am 07 Juni 2017, 15:45:27
Hallo,
das wäre natürlich wirklich cool. Weißt du an wen ich mich da richten muss, damit es entsprechend auf https://wiki.fhem.de/wiki/Spritpreismonitor (https://wiki.fhem.de/wiki/Spritpreismonitor) unter Links gelistet wird?
Gruß Daniel
Zitat von: ares am 27 März 2017, 21:42:44Entschuldige die späte Antwort, war etwas eingebunden...
Am besten Du nimmst den Quelltext der Seite und probierst die Reges z.B. auf https://regex101.com/ (https://regex101.com/) - anbei mögliche Beispiele:Code Auswählenreading01Name Super 98 oct.
reading01Regex (?s)line1.*?\/span[^0-9]+([0-9,]+)Code Auswählenreading02Name Super 95 oct.
reading02Regex (?s)line1.*?\/span.*?\/span[^0-9]+([0-9,]+)Code Auswählenreading03Name Diesel
reading03Regex (?s)line1.*?\/span.*?\/span.*?\/span[^0-9]+([0-9,]+)Code Auswählenreading01Name EuroSuper 95
reading01Regex (?s)text">EuroSuper 95.*?text">([0-9.]+)Code Auswählenreading02Name Ultimate 98
reading02Regex (?s)text">Ultimate 98.*?text">([0-9.]+)Code Auswählenreading03Name Diesel
reading03Regex (?s)text">Diesel.*?text">([0-9.]+)
Zitat von: szoller am 16 Juni 2017, 02:08:02
Entschuldige die späte Antwort, war etwas eingebunden...
Das klappt bei mir, sehr gut sogar, außer dass ich die Werte mit MwSt bräuchte, also eine Spalte weiter... meine Versuche waren eher erfolglos... (klar, ich könnte einfach die Mehrwertsteuer draufrechnen, aber das geht sicher eleganter...)
reading01Name EuroSuper 95_ohne
reading01Regex (?s)text">EuroSuper 95.*?ohne.*?text">([0-9.]+)
reading02Name EuroSuper 95_inkl
reading02Regex (?s)text">EuroSuper 95.*?inkl.*?text">([0-9.]+)
reading03Name EuroSuper 95_Satz
reading03Regex (?s)text">EuroSuper 95.*?Satz.*?text">([0-9.]+)
define KP_Aral_LU HTTPMOD http://www.aral.de/de_lu/luxembourg/kraftstoffe-und-preise/aktuelle-kraftstoffpreise.html 600
attr KP_Aral_LU userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex readingsName_Diesel readingsName_SuperE5 readingsRegex_Diesel readingsRegex_SuperE5
attr KP_Aral_LU group Spritpreise
attr KP_Aral_LU icon tanken
attr KP_Aral_LU reading01Name EuroSuper 95_inkl
attr KP_Aral_LU reading01Regex (?s)text">EuroSuper 95.*?inkl.*?text">([0-9.]+)
attr KP_Aral_LU reading02Name Ultimate 98
attr KP_Aral_LU reading02Regex (?s)text">Ultimate 98.*?inkl.*?text">([0-9.]+)
attr KP_Aral_LU reading03Name Diesel
attr KP_Aral_LU reading03Regex (?s)text">Diesel.*?inkl.?text">([0-9.]+)
attr KP_Aral_LU readingsName_Diesel Diesel
attr KP_Aral_LU readingsName_SuperE5 SuperE5
attr KP_Aral_LU readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
attr KP_Aral_LU readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
attr KP_Aral_LU room Informationen
attr KP_Aral_LU stateFormat Liter_Diesel: Diesel
attr KP_Aral_LU timeout 5
Zitat von: szoller am 16 Juni 2017, 14:40:13
Die Readings für Euro Super 95 und Ultimate 98 sind doppelt drin, einmal stehen die 95 und 98 jedoch jeweils in der Spalte mit den Werten vor diesen... :-/
Und der Dieselwert ist immernoch ohne MwSt.
attr KP_Aral_LU readingsName_Diesel Diesel
attr KP_Aral_LU readingsName_SuperE5 SuperE5
attr KP_Aral_LU readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)
attr KP_Aral_LU readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
attr KP_Aral_LU reading03Regex (?s)text">Diesel.*?inkl.?text">([0-9.]+)
attr KP_Aral_LU reading03Regex (?s)text">Diesel.*?inkl.*?text">([0-9.]+)
Tankstelle_Greenline: Read callback: Error: https://www.clever-tanken.de:443: Attempt to reload IO/Socket/SSL.pm aborted.
Compilation failed in require at (eval 212) line 2.
BEGIN failed--compilation aborted at (eval 212) line 2.
defmod Tanken_HEM_Bensheim HTTPMOD https://creativecommons.tankerkoenig.de/json/detail.php?id=e1a15081-2552-9107-e040-=4ed45c3a-f58c-8aba-bbfbbeb0 1800
attr Tanken_HEM_Bensheim userattr event-min-interval event-on-change-reading icon reading1Name reading1Regex reading2Name reading2Regex requestHeader stateFormat timeout
attr Tanken_HEM_Bensheim alias Bensheim - HEM
attr Tanken_HEM_Bensheim group Spritpreise
attr Tanken_HEM_Bensheim icon car
attr Tanken_HEM_Bensheim reading1Name Diesel
attr Tanken_HEM_Bensheim reading1Regex diesel":([\d\.]+)
attr Tanken_HEM_Bensheim reading2Name SuperE5
attr Tanken_HEM_Bensheim reading2Regex e5":([\d\.]+)
attr Tanken_HEM_Bensheim requestHeader Content-Type: application/json
attr Tanken_HEM_Bensheim room Tanken
attr Tanken_HEM_Bensheim stateFormat {sprintf("Diesel %.2f €\n <br> SuperE5 %.2f €", ReadingsVal($name,"Diesel",0), ReadingsVal($name,"SuperE5",0))}
attr Tanken_HEM_Bensheim timeout 5
ZitatIO/Socket/SSL.pmHast Du das passende Perl Modul installiert?
apt-get install libio-socket-ssl-perl
Zitat16 Perl-Module zu aktualisieren.
Zitat
2018.07.17 11:19:17 1: PERL WARNING: Use of uninitialized value $msg in concatenation (.) or string at ./FHEM/99_SpritalarmUtils.pm line 118.
2018.07.17 11:19:17 3: eval: my $EVENT='1_now_message: 1';my $NAME='Spritmonitor';my $EVTPART0='1_now_message:';my $SELF='notify_Spritmonitor';my $EVTPART1='1';my $TYPE='dummy';{callRoutine("$EVTPART0")}
2018.07.17 11:19:17 1: PERL WARNING: Use of uninitialized value $msg3 in concatenation (.) or string at ./FHEM/99_SpritalarmUtils.pm line 118.
2018.07.17 11:19:17 3: eval: my $EVENT='1_now_message: 1';my $NAME='Spritmonitor';my $EVTPART0='1_now_message:';my $SELF='notify_Spritmonitor';my $EVTPART1='1';my $TYPE='dummy';{callRoutine("$EVTPART0")}
2018.07.17 11:19:19 3: set 0 message @@USERNAME FreieTanke: ☆☆☆☆☆ - SuperE5: 1.46 €
FreieTanke: ☆☆☆☆☆ - SuperE10: 1.44 €
BayWa: ☆☆☆☆☆ - SuperE5: 1.46 €
BayWa: ☆☆☆☆☆ - SuperE10: 1.44 €
Aral: ★★★★★ - SuperE5: 1.43 €
Aral: ★★★★★ - SuperE10: 1.41 €
AVIA: ☆☆☆☆☆ - SuperE5: 1.47 €
AVIA: ☆☆☆☆☆ - SuperE10: 1.45 €
Shell: ★★★★★ - SuperE5: 1.48 €
Shell: ★★★★★ - SuperE10: 1.44 €
: Please define 0 first
2018.07.17 11:19:19 3: set 0 message @@USERNAME FreieTanke: ☆☆☆☆☆ - SuperE5: 1.46 €
FreieTanke: ☆☆☆☆☆ - SuperE10: 1.44 €
BayWa: ☆☆☆☆☆ - SuperE5: 1.46 €
BayWa: ☆☆☆☆☆ - SuperE10: 1.44 €
Aral: ★★★★★ - SuperE5: 1.43 €
Aral: ★★★★★ - SuperE10: 1.41 €
AVIA: ☆☆☆☆☆ - SuperE5: 1.47 €
AVIA: ☆☆☆☆☆ - SuperE10: 1.45 €
Shell: ★★★★★ - SuperE5: 1.48 €
Shell: ★★★★★ - SuperE10: 1.44 €
: Please define 0 first
Das Aufrufen der SubRoutine erfolgt nun über ein Notify, welches bei einer Preisänderung auslöst.define SpritkostenNotify notify Tankstelle.*:SuperE10:.* {
my $Nachricht = Tankalarm("$NAME","SuperE10");
if($Nachricht ne "keineAenderung"){
fhem("set Telegram message $Nachricht");}
}
attr Telegram defaultPeer 24xxxxxxx
attr ALLGUTH event-on-change-reading .*
attr ALLGUTH reading01Name SuperE5
attr ALLGUTH reading01Regex <span>Super E5</span>[^0-9]+([0-9\.]+) [^0-9]+([0-9]+)
attr ALLGUTH userReadings SuperE5 {return ReadingsVal($name,"SuperE5-1",0)+0.001*ReadingsVal($name,"SuperE5-2",0) }
Zitat von: Lippie am 01 Dezember 2018, 13:49:36Willkommen im Forum,
Falls es euch interessiert, ich habe folgendes verändert, um alles korrekt auszulesen:
<span>Diesel</span>[^0-9]+([0-9.]+)
<span>Super E10</span>[^0-9]+([0-9.]+)
<span>Super E5</span>[^0-9]+([0-9.]+)
<span id="current-price-1">([0-9.]+)
<span id="current-price-2">([0-9.]+)
<span id="current-price-3">([0-9.]+)
define Lux HTTPMOD https://www.aral.de/de_lu/luxembourg/home/kraftstoffe-und-preise/aktuelle-kraftstoffpreise.html 600 attr Lux reading01Name E10 attr Lux reading01Regex <td>EuroSuper 95.*?[^0-9]+([0-9.]+) attr Lux reading02Name E5 attr Lux reading02Regex <td>Ultimate 98.*?[^0-9]+([0-9.]+) attr Lux reading04Name Diesel attr Lux reading04Regex <td>Diesel.*?[^0-9]+([0-9.]+) |
Zitat von: amenomade am 22 Januar 2020, 00:09:06müsste eher Seite 27 (https://forum.fhem.de/index.php/topic,22554.390.html) sein ;)
Seite 26?
Zitat von: frank am 22 Januar 2020, 19:24:35dann die #390 ff. (https://forum.fhem.de/index.php/topic,22554.msg513776.html#msg513776) ;)
zb die nummer einer antwort
Zitat von: Wasserwerk33 am 21 Januar 2020, 23:59:15Ok, jetzt weiss ich was Du versucht hast ;)
Hallo kann mir vielleicht einer sagen wieso ich die aktuelle Zeit nicht abfragen kann?
Habe es versucht wie auf Seite 26 einzufügen dieses klappt aber nicht.
defmod Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/816 600
attr Aral userattr reading02Name reading02OExpr reading02Regex reading03Name reading03OExpr reading03Regex reading03Regex: reading04Name reading04Regex reading05Name reading05Regex
attr Aral enableControlSet 1
attr Aral reading02Name SuperE10
attr Aral reading02OExpr $val + 0.009
attr Aral reading02Regex "current-price-2">(\d.\d{2})
attr Aral reading03Name SuperE5
attr Aral reading03OExpr $val + 0.009
attr Aral reading03Regex "current-price-3">(\d.\d{2})
attr Aral reading04Name Zeit
attr Aral reading04Regex Letzte MTS-K Preisänderung: ((31|30|[012]\d|\d)\.(0\d|1[012]|\d)\.(\d{1,6}) ([01]?\d|2[0-3]):([0-5]?\d))
attr Aral reading05Name STime
attr Aral reading05Regex Letzte MTS-K Preisänderung: (([01]?\d|2[0-3]):([0-5]?\d))
attr Aral room Tankstellen
attr Aral stateFormat E5: SuperE5, E10: SuperE10, LetztAkt: STime
attr Aral timeout 5
setstate Aral E5: 1.339, E10: 1.289, LetztAkt: STime
setstate Aral 2020-10-05 22:59:07 SuperE10 1.289
setstate Aral 2020-10-05 22:59:07 SuperE5 1.339
setstate Aral 2020-10-05 22:59:07 Zeit-1 05.10.2020 22:03
setstate Aral 2020-10-05 22:59:07 Zeit-2 05
setstate Aral 2020-10-05 22:59:07 Zeit-3 10
setstate Aral 2020-10-05 22:59:07 Zeit-4 2020
setstate Aral 2020-10-05 22:59:07 Zeit-5 22
setstate Aral 2020-10-05 22:59:07 Zeit-6 03
attr Aral reading05Regex Letzte Aktualisierung: ((31|30|[012]\d|\d)\.(0\d|1[012]|\d)\.(\d{1,6}) ([01]?\d|2[0-3]):([0-5]?\d))
attr Aral reading05Regex Letzte Aktualisierung:.*?(([01]?\d|2[0-3]):([0-5]?\d))
defmod Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/816 600
attr Aral userattr reading02Name reading02OExpr reading02Regex reading03Name reading03OExpr reading03Regex reading03Regex: reading04Name reading04Regex reading05Name reading05Regex
attr Aral enableControlSet 1
attr Aral reading02Name SuperE10
attr Aral reading02OExpr $val + 0.009
attr Aral reading02Regex "current-price-2">(\d.\d{2})
attr Aral reading03Name SuperE5
attr Aral reading03OExpr $val + 0.009
attr Aral reading03Regex "current-price-3">(\d.\d{2})
attr Aral reading04Name Zeit
attr Aral reading04Regex Letzte Aktualisierung: ((31|30|[012]\d|\d)\.(0\d|1[012]|\d)\.(\d{1,6}) ([01]?\d|2[0-3]):([0-5]?\d))
attr Aral reading05Name STime
attr Aral reading05Regex attr Aral reading05Regex Letzte Aktualisierung:.*?(([01]?\d|2[0-3]):([0-5]?\d))
attr Aral room Tankstellen
attr Aral stateFormat E5: SuperE5, E10: SuperE10, LetztAkt: STime
attr Aral timeout 5
setstate Aral E5: 1.339, E10: 1.289, LetztAkt: STime
setstate Aral 2020-10-06 03:50:05 SuperE10 1.289
setstate Aral 2020-10-06 03:50:05 SuperE5 1.339
setstate Aral 2020-10-06 03:50:05 Zeit-1 06.10.2020 03:07
setstate Aral 2020-10-06 03:50:05 Zeit-2 06
setstate Aral 2020-10-06 03:50:05 Zeit-3 10
setstate Aral 2020-10-06 03:50:05 Zeit-4 2020
setstate Aral 2020-10-06 03:50:05 Zeit-5 03
setstate Aral 2020-10-06 03:50:05 Zeit-6 07
match,group,is_participating,start,end,content
1,0,yes,0,39,Letzte Aktualisierung: 06.10.2020 03:07
1,1,yes,34,39,03:07
1,2,yes,34,36,03
1,3,yes,37,39,07
attr Aral reading05Regex attr Aral reading05Regex Letzte Aktualisierung:.*?(([01]?\d|2[0-3]):([0-5]?\d))
Zitat von: romakrau am 06 Oktober 2020, 03:51:10Da ist nichts zu entscheiden. Immer Benutzeroberfläsche.
NACHTRAG: Typisch wenn man Nachts nicht mehr zwischen Edit der CFG und der Benutzeroberfläche unterscheiden kann. Läuft!!
define Benzinpreis_Eingabe dummy
attr Benzinpreis_Eingabe alias Push-Nachricht
attr Benzinpreis_Eingabe genericDeviceType light
attr Benzinpreis_Eingabe homebridgeMapping clear Brightness=homebridge,cmd=state,delay=750 On=homebridge,valueOff=0,cmdOff=0
attr Benzinpreis_Eingabe icon gasoline
attr Benzinpreis_Eingabe room Homekit,Verkehr
attr Benzinpreis_Eingabe setList state:textField
attr Benzinpreis_Eingabe siriName Benzinpreis
attr Benzinpreis_Eingabe stateFormat ...
attr Benzinpreis_Eingabe userReadings state {if(ReadingsNum($NAME,"state","") >= 2 and ReadingsNum($NAME,"state","") < 80) {(ReadingsNum($NAME,"state","")/100)+1} else {if(ReadingsNum($NAME,"state","") >= 80) {(ReadingsNum($NAME,"state","")/100)+0} else {ReadingsNum($NAME,"state","")}}},\
homebridge {if(ReadingsNum($NAME,"state","") >= 1) {round((ReadingsNum($NAME,"state","")-1)*100,0)} else {if(ReadingsNum($NAME,"state","") <= 1 and ReadingsNum($NAME,"state","") > 0.8) {round(ReadingsNum($NAME,"state","")*100,0)} else {"0"}}}
attr Benzinpreis_Eingabe webCmd wenn Benzinpreis weniger oder gleich:state:€
define Muss_Tanken dummy
attr Muss_Tanken alias Tank fast leer?
attr Muss_Tanken devStateIcon Ja:ios-on-green:Nein Nein:ios-off:Ja
attr Muss_Tanken eventMap on:Ja off:Nein
attr Muss_Tanken genericDeviceType switch
attr Muss_Tanken homebridgeMapping clear On=state,valueOn=on,valueOff=off,cmdOn=on,cmdOff=off
attr Muss_Tanken icon gasoline
attr Muss_Tanken room Homekit,Verkehr
attr Muss_Tanken siriName Tanken?
attr Muss_Tanken webCmd Ja:Nein
define Benzinpreis_Push_Diesel DOIF ((["Tankstelle:^Diesel",0] <= [?Benzinpreis_Eingabe:state]) and [?Muss_Tanken] eq "Ja")\
(set Push_M message 〽 $EVENT⁹ €/l bei {(AttrVal("$DEVICE","alias","$DEVICE"))} um {(strftime("%H:%M",localtime))} Uhr)\
DOELSEIF (["Tankstelle:Push",0] =~ "aus" and [?Muss_Tanken] eq "Ja")\
(set Push_M message 🛑 Preiserhöhung bei {(AttrVal("$DEVICE","alias","$DEVICE"))} _Neuer Preis für Diesel: {(ReadingsVal("$DEVICE","Diesel",""))}⁹ €/l)
attr Benzinpreis_Push_Diesel cmdState Benzinpreis unter [Benzinpreis_Eingabe:state] €/l um {(strftime("%H:%M",localtime))} Uhr|Benzinpreis wieder über [Benzinpreis_Eingabe:state] €/l um {(strftime("%H:%M",localtime))} Uhr
attr Benzinpreis_Push_Diesel do always
attr Benzinpreis_Push_Diesel event-on-change-reading state
define ARAL_Tankstelle HTTPMOD https://188.68.35.147/json/prices.php?ids=944c37e1-1c46-4fd4-95d5-0aa3e30b2f7d&apikey=1173c0e1-012a-3d9f-a2a5-9c63128632ad 300
attr ARAL_Tankstelle alias ARAL
attr ARAL_Tankstelle event-on-change-reading Diesel,SuperE10,Push_Diesel,Push_SuperE10,Status
attr ARAL_Tankstelle event-on-update-reading SVG_Diesel,SVG_SuperE10,Status
attr ARAL_Tankstelle reading01Name SVG_Diesel
attr ARAL_Tankstelle reading01Regex "diesel":(\d.\d\d)
attr ARAL_Tankstelle reading02Name SVG_SuperE10
attr ARAL_Tankstelle reading02Regex "e10":(\d.\d\d)
attr ARAL_Tankstelle reading03Name Status
attr ARAL_Tankstelle reading03Regex "status":"([^"]+)"
attr ARAL_Tankstelle requestHeader Content-Type: application/json
attr ARAL_Tankstelle room Verkehr
attr ARAL_Tankstelle stateFormat Auto 1: Diesel⁹ €/l (Ø Stat_DieselMonthAvg⁹ €/l) | Auto 2: SuperE10⁹ €/l (Ø Stat_SuperE10MonthAvg⁹ €/l)
attr ARAL_Tankstelle timeout 5
attr ARAL_Tankstelle userReadings Diesel:SVG_Diesel.* {ReadingsVal($name,"SVG_Diesel","")},\
SuperE10:SVG_SuperE10.* {ReadingsVal($name,"SVG_SuperE10","")},\
Push_Diesel:SVG_Diesel.* {if(ReadingsVal($name,"SVG_Diesel","") <= ReadingsVal("Benzinpreis_Eingabe","state","")) {"an"} else {"aus"}},\
Push_SuperE10:SVG_SuperE10.* {if(ReadingsVal($name,"SVG_SuperE10","") <= (minNum(ReadingsVal("ARAL_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsVal("OMV_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsVal("Selgros_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsVal("Shell_Tankstelle","Stat_SuperE10MonthAvg",0)))) {"an"} else {"aus"}}
define Benzinpreis_Push_SuperE10 DOIF ((["Tankstelle:^SuperE10",0] <= [?#min:"Tankstelle:^Stat_SuperE10MonthAvg":d]) and [?Muss_Tanken] eq "Ja")\
(set Push_M message 〽 $EVENT⁹ €/l bei {(AttrVal("$DEVICE","alias","$DEVICE"))} um {(strftime("%H:%M",localtime))} Uhr)\
DOELSEIF (["Tankstelle:Push_SuperE10",0] =~ "aus" and [?Muss_Tanken] eq "Ja")\
(set Push_M message 🛑 Preiserhöhung bei {(AttrVal("$DEVICE","alias","$DEVICE"))} _Neuer Preis für Super E10: {(ReadingsVal("$DEVICE","SuperE10",""))}⁹ €/l)
attr Benzinpreis_Push_SuperE10 cmdState Benzinpreis unter {(minNum(ReadingsNum("ARAL_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("OMV_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("Selgros_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("Shell_Tankstelle","Stat_SuperE10MonthAvg",0)))} €/l um {(strftime("%H:%M",localtime))} Uhr|Benzinpreis wieder über {(minNum(ReadingsNum("ARAL_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("OMV_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("Selgros_Tankstelle","Stat_SuperE10MonthAvg",0),ReadingsNum("Shell_Tankstelle","Stat_SuperE10MonthAvg",0)))} €/l um {(strftime("%H:%M",localtime))} Uhr
attr Benzinpreis_Push_SuperE10 do always
attr Benzinpreis_Push_SuperE10 event-on-change-reading state
define FileLog_Benzinpreise FileLog ./log/Benzinpreise-%Y-%m.log .*_Tankstelle:SVG_.*
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise nrarchive 1
define SVG_FileLog_Benzinpreise_1 SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise_1:CURRENT
attr SVG_FileLog_Benzinpreise_1 group 3) Benzinpreisvergleich
attr SVG_FileLog_Benzinpreise_1 room Verkehr
define SVG_FileLog_Benzinpreise_2 SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise_2:CURRENT
attr SVG_FileLog_Benzinpreise_2 group 3) Benzinpreisvergleich
attr SVG_FileLog_Benzinpreise_2 room Verkehr