FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Phil__ am 16 April 2014, 18:52:21

Titel: BenzinpreisMonitor
Beitrag von: Phil__ am 16 April 2014, 18:52:21
Hallo,

ich habe schon seit längerem ein kleines PHP-Skript am laufen, welches mir beliebige (je nach Konfiguration) Tankstellen Preise loggt und einen Verlauf darstellt. Siehe Anhang!
Dies werden in einem File in folgendem Format gespeichert:
2014-01-01_13:31:48 Aral_xy 1.359
2014-01-01_13:31:48 Shel_xy 1.369
2014-01-01_13:31:48 Total_xy 1.349

Habe da schonmal ein Format gewählt, wie die Fhem eigenen Logs.

Gibt es eine Möglichkeit das Logfile in Fhem einzubinden ??

Mit folgendem könnte ich schonmal das Logfile aufrufen

define FileLog_Tanken FileLog /media/usblog/fhem/log/benzinpreis.log BENZIN_PREIS
attr FileLog_Tanken logtype text
attr FileLog_Tanken room Uebersicht,Technik



Gibt es eine Möglichkeit die Aktuellen Preise aus dem File auszulesen und in Fhem darzustellen??
zB. readingsGroup?

-----===== UPDATE =====-----

Hier mal eine Zusammenfassung bzw. Beispiel, zusammengestellt aus dem nachfolgenden Thread:

Ersteinmal einen Dank an alle die sich hier so rege beteiligt haben. Ich habe das ganze bei mir auch mal umgesetzt und will hier mal ein komplettes Beispiel zur verfügung stellen, da der Thread schon ziemlich lang und unübersichtlich ist. Werde das Ganze dann auch auf Seite 1 im ersten Post einfügen. Für Ergänzungen, einfach hier schreiben oder eine kurze PN an mich.
Angefangen von Tankstellen define, über ReadingsGroup, Filelog, bis hin zum Plot ist hier mal alles zusammengefasst:

#########################################################
###                   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


In die 99_myUtils.pm muss folgendes eingefügt werden um in der ReadingsGroup die Preis unterschiedlich farblich darzustellen, je nach Preisniveau.
Die genauen Preisgrenzen muss natürlich jeder für sich selbst festlegen:

###################################################
###     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);
  } 
}



Hier eine verbesserte Alternative zur farblichen Markierung der Preis-Levels:

#------------------------------------------------------------------------------
# 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 -------------------------------------------------------------




Die .gplot Datei sieht in diesem Beispiel wie nachfolgend aus:
SVG_FileLog_Spritpreise_1.gplot

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

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

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



--== Update 2 ==--

Hier der Link zum Wiki: http://www.fhemwiki.de/wiki/Spritpreismonitor (http://www.fhemwiki.de/wiki/Spritpreismonitor)
Einen Dank an Rince!

Viele Grüße

Philipp

Titel: Antw:BenzinpreisMonitor
Beitrag von: rudolfkoenig am 16 April 2014, 23:09:58
Mit FHEM kann man das ganze auch einfach plotten: im FileLog Detail-Ansicht "Create SVG plot" anklicken, und Editor ausfuellen. Das direkte Anzeigen der einzelnen Werte ist aufwendiger: man muesste ein at definieren, der mit FileLog get Zeilen aus der Datei rausfischt (leider muss man hier einen Zeitraum definieren), Aus diesen Werten den letzten bestimmt, und sie dann per trigger an einem dummy oder aehnliches weitergibt.
Das alles erfordert aber ein bisschen perl Know-How.

Ich wuerde es anders angehen: Statt die Werte in eine Datei zu schreiben wuerde ich diese direkt an FHEM weitergeben. z.Bsp. per Unix-Befehl 'perl fhem.pl localhost:7072 "set Aral 1.72"'. FHEM uebernimmt Anzeige/Logging/Plotten/etc.
Titel: Antw:BenzinpreisMonitor
Beitrag 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...
Titel: Antw:BenzinpreisMonitor
Beitrag von: Markus Bloch am 17 April 2014, 00:00:20
würde mich ebenfalls interessieren. evtl. lässt sich daraus ein FHEM Modul bauen, was das ganze direkt als Readings ausspuckt.

Gruß
Markus
Titel: Antw:BenzinpreisMonitor
Beitrag von: P.A.Trick am 17 April 2014, 00:09:53
Finde ich auch interessant!
Titel: Antw:BenzinpreisMonitor
Beitrag von: mi.ke am 17 April 2014, 00:46:39
Ich find die Idee sensationell.

In Verbindung mit z.B.
http://forum.fhem.de/index.php/topic,20151.0.html
und/oder einer Wetterabfrage im Winter "Hats Heute geschneit, Schnee schippen, würgt"
und anderen Google-Kalenderplanungen (Handwerker, ebay-Käufen, whatever) . . .

wäre die Fahrzeit zur Arbeit optimal berechnet,
der Wecker zur rechten Zeit gestellt,
und dazu noch preiswert getankt.

Klasse ! ! !



Titel: Antw:BenzinpreisMonitor
Beitrag von: Phil__ am 17 April 2014, 07:02:28
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...

Ja klar,

vielleicht können wir da ja zusammen was erarbeiten.
Wenn ich heute von der Arbeit zuhause bin, werde ich den Code hier zur Verfügung stellen.

Grüsse

Gesendet von meinem Nexus 5 mit Tapatalk

Titel: Antw:BenzinpreisMonitor
Beitrag von: Phil__ am 19 April 2014, 09:21:05
Hallo,

bin zur Zeit leider ziemlich beschäftigt, deshalb erst jetzt das php script für das einsammeln der Benzin/diesel Preise.
Das "get" Script selbst stammt nicht von mir, sondern wurde mir von einem Freund (Marcel) zur verfügung gestellt und gab mir auch die Erlaubnis es hier zu Entwicklungszwecken zur verfügung zu stellen.

Ich bin leider sehr kurz angebunden, falls Fragen sind nur zu ich werde versuchen Zeitnah zu antworten.
Ganz kurz:
- get_data.php: Ganz am ende der Datei unter "fetchPricelData" euren entsprechenden Link von www.clever-tanken.de einfügen. (Nach euren Tankstellen suchen und den Link kopieren) Anschließend das Script am besten per Cronjob in regelmäßigen Abständen ausführen lassen. (Bei mir alle 10 min)

config.ini: Die Daten werden aktuell bei dem Script noch in eine Mysql Datenbank geloggt. in der ini datei die Daten eurer Datenbank eintragen.

preis-monitor.sql: Am besten in eure Datenbank importieren da hier Beispieltabellen enthalten sind.


So, hoffe das war verständlich!

Vielleicht kann ja von euch jemand das Ganze in ein Fhem Modul umsetzen, meine perl Kenntnisse sind leider noch sehr limitiert.
Freue mich über rege Beteiligung und sorry für die Verspätung der versprochenen Files.

Viele Grüße

Philipp



Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 17 Juli 2014, 21:22:00
Hallo zusammen,

ich finde es ebenfalls eine interessante Idee.
Hat sich schon jemand näher mit der Verwendung in FHEM beschäftigt oder hat sogar schon etwas laufen?
MTHPRD
Grüße aus Wuppertal

Jörg
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 17 Juli 2014, 22:14:32
Coole Idee

Danke



Gesendet von meinem iPad mit Tapatalk
Titel: Antw:BenzinpreisMonitor
Beitrag von: no_Legend am 17 Juli 2014, 22:22:37
Finde sie auch sau gut
Titel: Antw:BenzinpreisMonitor
Beitrag 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:

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


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
Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 17 Juli 2014, 23:36:54
Das hört sich doch schon mal super an....werde mich morgen mal mit deiner Lösung beschäftigen.  Gruß und allerseits gute Nacht....Jörg
Titel: Antw:BenzinpreisMonitor
Beitrag von: P.A.Trick am 18 Juli 2014, 00:02:45
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:

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


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

Super funktioniert bei mir! danke Frank!
Titel: Antw:BenzinpreisMonitor
Beitrag von: fh168 am 18 Juli 2014, 11:02:34
Ich habe mal versucht, die Filterung vom Regex mit dem regexr.com zu verstehen, ich komme da nicht mit klar. Der wirft mir nicht den Preis raus. Man hätte ja das als Vorlage für andere Projekte nehmen können.

Egal, das frankBeckers-Beispiel klappt bei mir, Daumen hoch.
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 11:10:29
Hallo,

ich benutze:

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


in den Readings steht dann :

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


Nun meine Fragen:

Ich frage ja eigentlich nur Diesel ab. Warum kommen auch die anderen Preise ?

Im Webinterface zeigt Benzinpreis nur ??? an. Wie bekomme ich den Preis angezeigt ?
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 12:10:35
ok habs gefunden

attr Benzinpreis stateFormat {sprintf(ReadingsVal($name,"Diesel",0))}

aber nun kann fhem nicht mehr auf die Seite zugreifen

Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 18 Juli 2014, 12:31:59
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.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 13:04:18
ok

aber jetzt kann fhem auf clever-tanken nicht mehr zugreifen.

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))}
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 18 Juli 2014, 14:29:03
Hm,
vielleicht mag clever tanken nicht automatisiert aufgerufen werden? Also oft hintereinander?

Ruf es mal von deinem PC aus auf.
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 14:37:26
Vom PC aus lässt sich die Seite einwandfrei laden auch von einem anderen System mit wget. Es muss also an HTTPMOD liegen
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 18 Juli 2014, 15:09:20
in deinem list ist immer noch dein attribut

stateFormat {sprintf(ReadingsVal($name,"Diesel",0))}

eingetragen.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 15:23:58
Ja, das mit dem Attribut stimmt, aber nun wird ja die Webseite nicht mehr gelesen und das ist ein ganz anderes Problem.
Ich glaube ich mach mal einen neuen Thread in Module auf
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 18 Juli 2014, 15:28:33
@raspklaus

bei mir funktioniert der folgende Code:

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


zuvor hatte ich noch das überflüssige Reading aus der ersten cfg  gelöscht.

sehe gerade, dass ich günstig tanken kann.

gruss
salvadore
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 15:28:48
Hallo,

grad mal definiert bei mir - klappt wunderbar.
Danke.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 18 Juli 2014, 15:39:34
Bei mir gings ja auch ne zeit lang aber danach war dann schluss
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 15:42:29
Hallo,

dann warten wir mal.

Ich hab den Abfragezyklus auf 1800 Sekunden (ich hoffe das es Sekunden sind - ich hab noch nicht in die commandref geschaut  8) ) gestellt.
Der Spritpreis wird sich ja hoffentlich nicht im Minutentakt ändern - wobei, bei denen weiß man ja nie  ::)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 18 Juli 2014, 15:51:23
@puschel
sind Sekunden. Habe vorsichtshalber auch mal den Intervall hochgesetzt.
Mal sehen, ob ich den Preis noch unterschiedlich einfärben kann, z.B. bei Diesel <= 1.32 gelb einfärben und > z.B. rot.

Salvadore
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 16:00:24
Hallo,

ZitatMal sehen, ob ich den Preis noch unterschiedlich einfärben kann, z.B. bei Diesel <= 1.32 gelb einfärben und > z.B. rot.
Sollte mit stateFormat klappen. Blödsinn
Aber wird der dann jemals gelb  8)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 18 Juli 2014, 16:42:22
Jetzt noch eine passende Logfiledefinition und ein gplot für:
Täglich
Wöchentlich
Monatlich (mit gemittelten Tageswerten)

Dann wissen wir, wann es wirklich günstig ist zu tanken ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 16:49:12
Hallo,

so - ich hab die Werte mal eingefärbt.

Wir definieren uns eine readingsGroup (da sich valueStyle nur auf eine readingsGroup anwenden lässt):
define Benzinpreise readingsGroup (Gehring|Shell):(Diesel|SuperE10|SuperE5).*
Das "Device" heisst bei mir Gehring - Namen bitte anpassen.
Dieser readingsGroup verpasssen wir ein 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"' }}
Werte bitte anpassen.

Nun sollte so aussehen wie im Screenshot  ;)

@raspklaus
Daten werden einwandfrei abgeholt.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 17:23:09
Hallo,

ZitatJetzt noch eine passende Logfiledefinition
Dann mach mal  ;)

Da ich mit DbLog arbeite brauch ich mir um ein Logfile keine Gedanken machen  8)

GPlot werde ich noch nachreichen - jetzt geh ich erstmal ein Eis mampfen  :P

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 18 Juli 2014, 17:24:14
das sieht gut aus... 8)

mir fehlt jetzt aber ein wenig der Zusammenhang zwischen dem Code von salvadore und der readingsgroup..? Wo steht denn in der readingsgroup die Internetadresse
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 18:39:24
Hallo,

Nirgends.
Wozu auch?
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.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 18 Juli 2014, 18:50:02
Ihr seid ja wirklich GENIAL
Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 18 Juli 2014, 18:54:30
....der zweite Teil meines Posts fehlte....
die Preise werden bei mir noch nicht ausgegeben.
Ich denke mal, es liegt irgendwie an Regex.

von attrib bis +) ist doch eine Zeile, oder? Ich gebe nichts in der config,  sondern alles über die Befehlszeile ein.

So, statt Eis mampfen darf ich jetzt Burger am Grill machen:'(

Gruß,  Jörg
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 18 Juli 2014, 19:01:00
habe noch auf meine Situation angepasst,

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"' }}


klappt schon mal so;
aber muss noch erweitert werden, denn das Einfärben muss differenziert passieren, weil für SuperE5 andere Preise wie für Diesel.

Gruß
Salvadore
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 18 Juli 2014, 19:17:01
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.

alles klar... jetzt  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 18 Juli 2014, 20:03:40
Hallo,

und hier erstmal auf die Schnelle eine GPlot für DbLog (siehe Anhang).

Definiert wird es so:
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


Namen bitte ggf. anpassen.

Aussehen dann so (siehe Screenshot).

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 18 Juli 2014, 21:46:55
so....Burger sind auf.....und ich auch.
War anscheinend die Hitze, ich hatte den Code nicht in der WEB Ansicht geöffnet und darum fehlte der entscheidende Teil.

Funktioniert nun auch bei mir.

Schön dass dieser Thread doch wieder lebt. Konnte so eine Menge lernen.

Allseits einen schönen Sommerabend.

Bei mir muss jetzt nur noch eine Sprachausgabe her die mir sagt TAAAANKEN.

Grüße aus Wtal

Jörg
Titel: Antw:BenzinpreisMonitor
Beitrag von: dieda am 18 Juli 2014, 23:04:37
Die Idee ist super, aber ...

Mir ist nu die Idee in Verbindung mit Pushover und Treshold so wie Tanken auf der Route in den Sinn gekommen...

Wenn man dann noch Pushover per Tasker zum Schwätzen bekommt...
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 10:56:36
Wie bekommt man es hin dass nur der Preis in die Log geschrieben wird ?

So gehts nicht:

define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis
attr FileLog_Dieselpreis logtype text
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 19 Juli 2014, 11:45:09
Weiß ich noch nicht, ich bastle grade.
Was du wohl brauchst, ist ein event-on-change Reading.

Damit taucht das Ding schon mal im Eventmonitor auf.

Leider eben auch nur, wenn sich der Preis geändert hat.


Wenn er das mal wieder tut, sehe ich ob mein Logfile klappt ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: bsl02 am 19 Juli 2014, 11:50:03
Teste doch zunächst mit
Event-on-update-reading

Gruss, Stefan
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 12:10:09
Ja, aber da wird nur dies geschrieben:

2014-07-19_11:20:33 Dieselpreis Diesel: 1.32

Ich bräuchte aber nur den Betrag
Titel: Antw:BenzinpreisMonitor
Beitrag von: mi.ke am 19 Juli 2014, 12:47:23
Vielleicht so....

define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis:Diesel.*

chhers
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 13:46:55
ich habe auch diese ganzen Formatierungszeichen in den Logs wie kann ich das abstellen


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>


erledigt und gefunden...!

meine Filelog lese ich aus den Readings aus und sieht so aus:

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


meine readingsgroup:
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"' }}
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 13:59:15
Hallo,

du kannst dein regexp kürzen  8)

(SuperE5|Diesel).*

Diesel ist Diesel ist Diesel und SuperE5 ist SuperE5 ist SuperE5  ;)

dito bei der readingsgroup

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 14:00:29
jo, Danke habe schon editiert und gefunden... siehe oben  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 14:09:40
Zitatdefine FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y-%m.log Dieselpreis:Diesel.*

im LOg steht immer noch:

2014-07-19_14:06:50 Dieselpreis Diesel: 1.31
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 19 Juli 2014, 14:16:21
Zitatim LOg steht immer noch:
das bleibt da auch. jeder logeintrag besteht immer aus timestamp+readingname+wert.
was willst du denn überhaupt machen? wo brauchst du den wert?
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 14:18:27
Ich brauche den Wert für einen Plot
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 14:21:21
du brauchst doch den Wert, wenn du ein Plot machen möchtest...! 8)

@puschel74
kannst du mal ein Screenshot von deinem Ploteditor rein stellen, ich bekomme die ganzen Einträge nicht gebacken..? d.h. die Linien/Farben habe ich schon, aber der Rest will nicht so richtig bisher habe ich nur einen senkrechten schwarzen Strich für den ersten Eintrag
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 14:22:31
Der Wert ist doch in diesem Fall 1.31 oder ?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 19 Juli 2014, 14:23:17
Das Plot Modul von fhem macht daraus einen sehr ordentlichen Plot.
Dafür ist sogar wichtig, dass die Tanke drin steht, sonst kann ja fhem nicht unterscheiden von welcher Tanke nun der Spritpreis ist.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 14:32:32
Hallo,

@moonsorrox
Anbei - siehe Screenshot
Ich hab das aber nicht mit dem Editor gemacht.
Meine Gplots mache ich alle "per Hand".

@raspklaus
Wie Rince schon geschrieben hat - das SVG-Modul braucht auch den Namen des Readings.
Sonst hast du Probleme mit der Darstellung wenn mehrere Werte zu plotten sind die NICHT zum selben Reading gehören.

Grüße

Edith: Heut morgen hat Shell schon die Preise nachgezogen  >:(
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 15:05:00
OK ich danke dir... das habe ich auch so gemacht aber schau dir mal die Linien an, irgendwie fehlt da was..?
Ich dachte ich habe etwas falsch eingetragen...! und ich bekomme den Hintergrund nicht formatiert, dachte das geht über den Editor, aber das muss ich wohl im Code machen
siehe Screenshots
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 15:15:24
Hallo,

nö da fehlt nix.
Man sieht nur 2 Linien nicht weil sie sich gegenseitig überdecken.

HEM und Star haben dieselben Preise daher liegen auch die jeweiligen Linien genau übereinander.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 15:24:15
Also irgendwie komme ich nicht weiter. Ein Logfileeintrag wird nur durch einen Neustart das Testsystems erzeugt

Hier der Code:

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


Nach 30 Minuten sollte doch eigentlich ein weiterer Eintrag in der Logdatei sein
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 15:25:34
was ich bei dir sehe, da ist keine Linie ganz unten...
Richtig ist das schon wenn unten 1,30 ist, aber da sollte ein kleiner Zwischenraum sein wie bei dir sonst sieht man ja nichts, da liegt auch keine Linie ganz unten..!
Ich habe das im Editor mal eingetragen [1.25:1.65] aber man muss das eben immer wieder mal korrigieren... sollte es höher/tiefer gehen
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 15:27:52
Zitat von: raspklaus am 19 Juli 2014, 15:24:15

Nach 30 Minuten sollte doch eigentlich ein weiterer Eintrag in der Logdatei sein

bei mir jede Minute, probiere doch mal erst einmal mit 60 und schaue ob deine readings rot werden
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 15:28:57
Hallo,

auf dem Screenshot hast du die Linie bei 1.30 und die beiden Tankstellen haben den Preis auch bei 1.30
Man sieht aber die rote (oder braune) Linie bei dir ganz unten.
Sonst mach den Bereich doch mal größer und schick nen neuen Sreenshot bitte.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 15:37:39
@Puschel74

ja das habe ich schon gemacht, dass funktioniert auch. Nur wie oben erwähnt muss das immer mal wieder angepaßt werden..!
wie oben geschrieben habe ich das so  [1.25:1.65] gemacht.
Bei dir sehe ich aber im Editor das dort nichts drin steht und die Linien trotzdem etwas höher beginnen, dass hat mich etwas irritiert.. 8)

Noch mal ne Frage zum Plot Titel ich habe das mal probiert so in der Art:
#attr SVG_FileLog_Benzinpreise_1 label "Benzinpreise Diesel - SuperE5 - Min: $data{min1}€   Max: $data{max1}€   Akt: $data{currval1}€"


könnte man das für Diesel und Super spezifizieren so zeigt er immer nur einen an..! aber welchen ? siehe Screenshot
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 15:45:41
Hallo,

Zitatmin1
Müste bei dir dann STAR Diesel sein weil er als erster in deinem Plot gezeichnet wird.

Mit
min2
min3
min4
...
(selbiges mit maxn)
kannst du dir die restliche nWerte auch anzeigen lassen.
Interssant wäre im Label aber currvaln (also der momentane Wert).

GRüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 15:57:17
Zitat von: Puschel74 am 19 Juli 2014, 15:45:41
Interssant wäre im Label aber currvaln (also der momentane Wert).


ganz genau der wäre interessant, die anderen sieht man ja im Plot  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 16:05:58
ich habe das jetzt mal angepaßt, da wichtig für mich.... ich mit dem Auto Diesel tanke... Motorrad natürlich Super habe ich jetzt mal vernachlässigt  8)

hier noch der zugehörige Code:
attr SVG_FileLog_Benzinpreise_1 label "Aktuelle Preise Diesel - Star: $data{currval1} € - Aral: $data{currval2} € - HEM: $data{currval3} €"
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 16:06:52
Hallo,

dann stell es doch ein  ;)

Grüße

Edith: Grad gesehen - hast du schon erledigt
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Juli 2014, 16:25:38
hab grad gesehen das das Attribut plotfunction nur für die Datenbank ist
Aus dem Fhem Wiki
"Das Attribut plotfunction bestimmt, welches device in der Datenbank selektiert wird (in diesem Beispiel AussenTempHum). "

Muss das auch mal angehen mit der Datenbank, aber erst mal einiges dazu lesen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 16:32:34
Hallo,

OT aber hier hab ich was gefunden:
http://forum.fhem.de/index.php/topic,21560.0.html (http://forum.fhem.de/index.php/topic,21560.0.html)
Und hier findest du eine Anleitung um sqlite3 zu installieren:
http://www.fhemwiki.de/wiki/Neues_Charting_Frontend#Basisinstallation (http://www.fhemwiki.de/wiki/Neues_Charting_Frontend#Basisinstallation)
BTT

@raspklaus
Klappt bei dir jetzt alles?

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 19 Juli 2014, 19:33:21
Ich muss noch einen Langzeittest machen, aber es scheint nun alles zu laufen
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 19 Juli 2014, 19:52:09
muss mich auch noch mal melden. Ich wollte gerne die Preise farblich unterschiedlich dargestellt haben und dabei zwischen z.B. Diesel + Super unterscheiden.
Das ist dabei herausgekommen:

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"' }}


Die "Schmerzgrenzen" muss dann jeder für sich selbst festlegen.
Vielleicht kann es ja wer gebrauchen.
Gruss
Salovadore
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 19 Juli 2014, 20:04:44
Dann könnte jetzt jemand nen Wiki Eintrag draus basteln :)

Wenn keiner "hier" schreit werde das übernehmen, aber erst nächste Woche.
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 19 Juli 2014, 20:21:21
@Rince
von mir aus, mir fehlt dazu die Kompetenz.
Schönes Wochenende
Salvadore
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 20:28:04
Hallo,

perfekt aber ...
das valueStyle lässt sich sicher noch vereinfachen - ich mach mich noch dran aber muss jetzt weg (bei dem Wetter erstmal ne Runde Fahrrad fahren und dann gemütlich was mampfen und ein kühles Blondes dazu).

Aber wie schon öfter geschrieben - ich find die Communitiy einfach nur genial  ;D
Mahlzeit und Prost

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 19 Juli 2014, 20:40:07
@Puschel74
beim "zusammenbasteln" habe ich noch gedacht, dass muss sicher noch einfacher möglich sein aber der Ansatz dazu !?.
Schön, wenn Du dich noch mal damit beschäftigen willst. Kann ich auch wieder nur was draus lernen (>60 hin und wieder und nur mit do it your self nicht immer so einfach)
Werde mir jetzt auch ein kühles Blondes gönnen.

Grüsse
Titel: Antw:BenzinpreisMonitor
Beitrag 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, 16:06:52
Hallo,

dann stell es doch ein  ;)

Grüße

Edith: Grad gesehen - hast du schon erledigt
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 19 Juli 2014, 20:56:40
zum valueStyle:

- wenn es komplex wird ist es einfacher das in eine sub in 99_myUtils auszulagern und diese aufzurufen:attr <name> valueStyle {myPreisToFormat($READING,$VALUE)}

- valueStyle für unterschiedliche readings kann man auch im mapping schon aufteilen:attr <name> valueStyle { SuperE5 => {perl code}, Diesel => {perl code} }

- ifs lassen sich verschachtelnif( $READING eq ... ) {
  return xxx if( $VALUE < 1 );
  return yyy if( $VALUE < 1.5 );
  return zzz;
} elsif( $READING eq ... ) {
  ...
}


da alles lässt sich natürlich auch kombinieren und so viel lesbarer machen als ein einziger langer bandwurm.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 22:35:35
Hallo,

Zitat von: frankbeckers am 19 Juli 2014, 20:55:16
@Puschel74: woher kommen denn die "eckigen" Linien in Deinem Plot Screenshot aus diesem Posting ?

Welche Linien meinst du?
Zur Not einen Screenshot dranhängen bitte.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: frankbeckers am 19 Juli 2014, 22:40:22
Zitat von: Puschel74 am 19 Juli 2014, 22:35:35
Hallo,

Welche Linien meinst du?
Zur Not einen Screenshot dranhängen bitte.

Grüße

ich meine die Linien, welche aus kleinen Kreisen bestehen...
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 19 Juli 2014, 22:42:15
Hallo,

nennt sich points

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 20 Juli 2014, 12:01:05
nur mal so am Rande, dass mit den unterschiedlichen Einstellungen im Editor bei min:max funktioniert bei mir nicht da werden bei mir nur 3 Linien angezeigt und die gehen nach unten weg... wie gesagt nicht wichtig hatte ich nur gestern mal ausprobiert

OT
interessanter Verlauf heute morgen... Aral ist wohl immer der erste der den Preis vorgibt
Titel: Antw:BenzinpreisMonitor
Beitrag 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 ?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 20 Juli 2014, 14:14:29
Zitatmin:max funktioniert bei mir nicht 

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]
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 20 Juli 2014, 14:15:10
Hallo,

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 ?

Hier http://forum.fhem.de/index.php/topic,22554.msg184737.html#msg184737 (http://forum.fhem.de/index.php/topic,22554.msg184737.html#msg184737)
siehst du im zweiten Screenshot das Attribut fixedrange - damit kannst du das erledigen.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 21 Juli 2014, 13:52:03
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]

nee,ja  ;) das ist schon klar hatte ich auch so geschrieben  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 21 Juli 2014, 14:08:55
Hallo,

eigenartig.
Bei mir klappt das mit dem Range.

Heute musste ich schon nachbessern - Shell und Jet fahren ganz schön Berg und Tal mit den Preisen (wobei es eher Bergauf geht  ::) ).

Grüsse
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 21 Juli 2014, 14:29:53
naja sieht bei uns wohl etwas besser aus...!  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: yogiflop am 21 Juli 2014, 14:30:07
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]

aber mit : zwischen den Werten und nicht mit ;  ...... wenn ich mich richtig erinnere
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 21 Juli 2014, 14:46:32
Ups. Richtig. :
Tschuldigung.
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 21 Juli 2014, 14:57:15
 ;) wollte nicht so kleinlich sein  ;) Spass
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 21 Juli 2014, 18:57:16
Hallo,

ich hab leider noch keine andere Möglichkeit gefunden um die unterschiedlichen Spritarten einfacher einfärben zu können.

Im Wiki ist auch kein Beispiel das sich aus valueStyle in eine sub in der 99_MyUtils.pm verzweigen lässt und bei meinem Versuch hat das nicht geklappt (was ja logisch ist  ::) ).
Daher hier der "lange" Weg direkt im valueStyle.

Damit:
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"' } }
habe ich es geschafft das ich Diesel, SuperE10 und SuperE5 nach unterschiedlichen Preisen einfärben kann (siehe Screenshot).

Ich bin mir sicher das sich das ganze auch noch vereinfachen lässt und das sich das genauso auch in die 99_MyUtils.pm auslagern lässt - ich hab es nur leider noch nicht geschafft.
Die Preise müsst ihr natürlich an Eure "Schmerzgrenzen" anpassen - ich habe sie momentan nur so gewählt das man bei SuperE10 und SuperE5 den Unterschied sieht.

Für Vereinfachungen bzw. Auslagerungstipps in eine xx.pm bin ich immer zu haben  ;D

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 21 Juli 2014, 19:11:30
ich habe das bisher auch so...

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"' }}
Titel: Antw:BenzinpreisMonitor
Beitrag von: salvadore am 21 Juli 2014, 19:13:51
siehe #70  8)

Salvadore
Titel: Antw:BenzinpreisMonitor
Beitrag 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?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 21 Juli 2014, 19:21:40
Hallo,

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?

Öh, ja, nö, naja, jetzt schon  :-[

Aber ich hab schon gesehen das ich nicht der einzige bin  ::)
Ich werd mich mal ans umbauen machen  8)

Kurze Frage noch dazu:
attr <name> valueStyle { SuperE5 => {perl code}, Diesel => {perl code} }
Kannst du hier mal ein kurzes Beispiel einwerfen oder ist es das mapping aus der commandref und dem Wiki (dann denke ich mal das ich mich durchbeissen kann und selbst auf einen grünen Zweig kommen dürfte  8) )?
Es genügt mir auch ein kurzes und knappes "Ja" - dann weiß ich das ich im Wiki nach dem mapping schauen muss.
Danke.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 21 Juli 2014, 22:48:57
das prinzip ist immer das gleiche. der name des readings (oder <device>.<reading> oder <reading>.<value>) wird als key genommen um den parameter für den aktuellen wert zu suchen.

statt der if abfrage auf das $DEVICE kann man direkt den jeweiligen zweig ins mapping für das reading packen.

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"';}

das spart alle vergleiche auf $READING.

wenn man die ifs absteigend nach größe sortier spart man dann noch einige vergleiche.

da alles auf einer zeile steht ist es aber immer noch nicht wirklich übersichtlich. in eine sub gepackt würde es dann so aussehen:
attr <name> valueStyle { SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }


und das hier in 99_myUtils.pm:
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"';
}


gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 15:10:27
ich habe das mal so eingebaut, aber ich bekomme keine farbige Anzeige die Werte sind nur weiß... weiß jetzt nicht was falsch ist, hier mal mein Code


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"


die  99_myUtils.pm habe ich unverändert übernommen von dir, habe ich etwas übersehen..?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 18:10:38
Hallo,

hast du auch ein reload 99_myUtils eingeworfen?

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 18:14:46
ja hatte ich gestern in der Nacht schon war nur zu spät und ich hatte vergessen, dass er mir ein Fehler zeigt beim reload, diesen hier:
Illegal declaration of subroutine main::my at ./FHEM/99_myUtils.pm line 108.

hatte noch nicht geschaut ob dies nun zum Benzinpreis Monitor gehört... da es ja in der Version ohne funktioniert hat
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 18:24:33
Hallo,

wirf hier mal das my raus:
sub DieselColors($) {
...
...
}


Grüße

Edith:
Und wieso hast du hier
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
3-mal SuperE5 und 3-mal Diesel als regexp  ???
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 22 Juli 2014, 18:28:47
das my gehört da natürlich nicht hin.

ein mal SuperE5 und Diesel reicht.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 18:48:06
Hallo,

hmm, färbt dennoch nicht  ???

Dieser Code:
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"';
}

liefert mir im Logfile das:
Zitat2014.07.22 18:42:12 3: Super E5 Werte: 1.39
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
d.h. die Werte werden an jede sub übergeben und nicht getrennt.

Allerdings hätte ich mir erwartet das dann wenigstens nach dem letzten Wert (hier 1.61) die Werte rot eingefärbt werden.

Ach ja, valueStyle ist so angelegt:
{ SuperE5 => {SuperE5Colors($VALUE)}, Diesel => {DieselColors($VALUE)} }

Ich bin noch am grübeln  8)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 18:48:51
Zitat von: Puschel74 am 22 Juli 2014, 18:24:33
wirf hier mal das my raus:
sub DieselColors($) {
...
...
}


ja also alles angepaßt, aber die Preise bleiben einfach nur weiß, nehmen keine Farbe an  ??? nach dem reload wird auch nicht mehr gemeckert von fhem... mmh

Zitat von: Puschel74 am 22 Juli 2014, 18:24:33
Edith:
Und wieso hast du hier
define Benzinpreise readingsGroup (Aral|Star|HEM):(SuperE5|SuperE5|SuperE5|Diesel|Diesel|Diesel).*
3-mal SuperE5 und 3-mal Diesel als regexp  ???

gute Frage weiß ich auch nicht mehr, aber ist sicher durch das vorherige herum probieren und dann nicht mehr gesehen  8)


Edith:

log bei mir:
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


OK dann bin ich ja richtig und nicht der einzige bei dem das nicht geht  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 18:53:23
Hallo,

zeig mal ein bischen Code zu deinen Logeinträgen bitte.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 18:59:10
99_myUtils wie oben jetzt aber eben verbessert ohne "my"

hier das define:

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"


dann habe ich noch die Tankstellen: hier nur eine mal

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 19:00:56
Kuckuck - wo kommen bei dir die Logeinträge her?
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 19:03:25
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
Titel: Antw:BenzinpreisMonitor
Beitrag 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  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 19:05:03
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  ;)

;) ;) ;) schon gemacht
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 22 Juli 2014, 19:09:25
@puschel

return 'style="color:LightGreen;;font-weight:bold"';
bei mir wird das klein geschrieben: lightgreen.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 22 Juli 2014, 19:16:44
 is egal hat damit nichts zutun, habe ich schon probiert ;) hab ich sogar in der myUtils zu stehen grad mal eben geschaut  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 20:01:22
Hallo,

autsch, war das eine schwere Geburt.

valueStyle habe ich so angelegt:
{Werte($READING,$VALUE)}

In die 99_MyUtils.pm habe ich das
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);
  } 
}

eingefügt und es klappt.

Grüße

Edith: Code geändert da vorher noch fehlerhaft ($VALUE gegen $wert getauscht)
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 22 Juli 2014, 20:09:56
return 'style="color:red"' if($VALUE >= 1.60);
aber komisch, dass das funktioniert. $VALUE wird in deiner sub gar nicht definiert. solltest du mit $wert ersetzen.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 Juli 2014, 20:11:25
Hallo,

ja, hab beim speichern auch die Fehlermeldung bekommen.
In notepad++ hatte ich $VALUE stehen aber in der 99_MyUtils.pm habe ich dann $VALUE gegen $wert ersetzt - danke für den Hinweis.

Hier der korrigierte Code
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);
  } 
}


Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 23 Juli 2014, 09:34:35
die ganze zeit übersehen und erst durch einen anderen post drauf gestoßen... da fehlen noch anführungszeichen für diese version.

{ SuperE5 => '{SuperE5Colors($VALUE)}', Diesel => '{DieselColors($VALUE)}' }

sorry
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 23 Juli 2014, 20:14:14
Hallo,

kein Problem andre - so mussten wir auch ein bischen denken  ;)
Aber auf die fehlenden ' bin ich auch nicht gekommen  :-[

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Paul am 27 Juli 2014, 13:19:47
Bei Tankstellen werden auch außerhalb der Öffnungszeiten, die Preise vor der Schließung, übertragen.
hat das schon jemand berücksichtigt, z.B. Preis 0,00 ?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 27 Juli 2014, 13:30:20
Den Preis auf 0 setzen ist imho eine schlechte Idee. Das versaut dir den ganzen Graph.
Besser ist es die Öffnungszeiten anzuzeigen, vielleicht noch die Zahlen anders einfärben.
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 27 Juli 2014, 13:42:24
bei manchen ist, dass dann wohl auch der preis des tankautomaten.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Paul am 28 Juli 2014, 02:18:34
Das hat mE nichts mit Tankautomaten zu tun, sondern eher das die Seite von clever-tanken da einen kleinen Fehler hat.




Bild 1 zeigt die geschlossene Tankstelle ohne Preis



Bild 2 zeigt den Preis noch vom Vorabend an.

Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 28 Juli 2014, 09:43:51
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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 02 August 2014, 18:36:25
Hallo

Ja das ist ja mal eine sache......

Jetzt bin ich aber auf der anderen Seite der Kette.....

Mein Kumpelhat eine Freie Tankstelle und will natürlich immer aktuell günstige Preise für die Kunden machen.

Bisher schaue ich/er dafür natürlich auch immer in den Portalen nach den Preisen der Mitbeweber. Nun wäre es für
Mich/ihn echt eine Super Lösung wenn FHEM jetzt zu einer Preismeldung der Mitbewerber einen Hinweis
Bringt..... (dieses natürlich nur unter Berücksichtigung der Öffnungszeiten von der Tankstelle hier......)

Derzeit fange ich an 4 Tankstellen in der Umgebung alle 5 Minuten in ein LogFile zu loggen.
Ein event-on-change würde gehen macht aber ein scheiß Plot...
Wie könnte ich jetzt aus den 4 Stationen eine meldung generieren?

Es wäre jedoch auch möglich wenn mir einer erklärt wie ich das datum und die uhrzeit aus letzte mts-k Preisänderung auslese....
Datum und uhrzeit stehen im quelltext mit 02.08.2014 19:00:00 - das datum alleine bekomme ich, aber es wäre beides zum korrekten auswerten nötig.....

Im Moment wird mit

attr Preisaenderung_bft readingsRegex_MTS Preisänderung:[^0-9]+([0-9\.]+)

Nur das Datum ausgeworfen - Die Uhrzeit fällt wohl aufgrund des Leerzeichens weg....
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 03 August 2014, 18:59:43
Habe es hinbekommen....


attr Preisaenderung readingsRegex_MTS Preisänderung:[^0-9]+([ \0-9\.\:]+)

Damit ist es zwar in einem Reading aber ich kann darauf reagieren.... hoffe ich zumindestens
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 04 August 2014, 17:25:22
Weil es soviel Spass macht......

Eine der Stationen die ich abfrage hat laut Clever-Tanken.de die letzte MTS-K Änderung um
8:25 gehabt - aber es gab zwisch 16:40 bis 16:55 neue Preise.....

Also mus ich irgendwie bei einem Wechsel eines readingsName_SuperE10, readingsName_SuperE5 oder readingsName_Diesel ein Ereignis erstellen.......

Da ich aber einen "Schönen" Plot möchte wies ich jetzt nicht wie ich dann ein Ereignis erstelle.......
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 06 August 2014, 15:37:03
Hallo

Ich versuche jetzt seit ein paar Tagen mit FHEM festzustellen wann sich ein
Reading verändert.

Im Monent werden die Preise alle 10 Minuten gelogt (für einen sauberen Plot).

1. Gedanke
Eine Auswerzung der Angabe Letzte MTS-K Meldung bei clever Tanken stimmt nicht immer - daher unbrauchbar.

2. Gedanke
Mit dem Modul Statistics auswerten - bekomme aber keine Werte damit.


Weis hier einer wie ich es hinbekomme bei einem neuen Preis eine Aktion zu starten?


stenny
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 06 August 2014, 15:53:59
Hallo,

wenn alle Stricke reissen dann den momentanen Preis in einen dummy (oder ein Reading) speichern und bei jedem Aufruf vergleichen.
Wenn die beiden Werte unterschiedlich sind muss sich ja was geändert haben am Preis  8)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 06 August 2014, 16:28:48
Hallo Puschel74

danach habe ich in der Zwischenzeit auch shon gesucht.
Im Moment grübelle ich noch wie ich bestimmen kann wann der dummy weggeschrieben wird.....
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 06 August 2014, 17:10:14
Hallo,

das erste Mal jetzt und dann nur wenn sich der Wert geändert hat.
Aber vorher solltest du natürlich noch deine Aktion loslassen.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 07 August 2014, 12:38:08
Ich merke gerade ich bin zu Blöd dafür......

Muss ich jetzt für jedes Reading eine eigene Abfrgabe machen????

Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 07 August 2014, 15:41:49
Hallo,

wenn du jedes reading extra abfragen willst dann ja.
Du kannst aber auch alle in einem Rutsch prüfen lassen.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 08 August 2014, 07:52:59
Versuche mich jetzt an den kopieren in einen dummy

attr testdummy userReadings Preis_Diesel_1 {ReadingsVal("Preismonitor_Eigene","Diesel",0)}

Ich erhalte aber keine so keine Werte, was ist da noch falsch?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 08 August 2014, 18:28:11
Hallo,

bei den userReadings kann ich dir leider nicht helfen - da verzweifel ich auch immer noch dran  :-[
Ich schreib mir das direkt in Dummys - für jeden Wert natürlich einen Dummy  ::) (siehe oben).

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 15 August 2014, 14:51:08
Hallo


Ich mal wieder.....

Den Preiswechsel habe ich jetzt etwas einfacher herrausgesucht..... Ein UserReading....

Diesel_div difference {ReadingsVal("Preismonitor_Eigene","Diesel","0")}, SuperE10_div difference {ReadingsVal("Preismonitor_Eigene","SuperE10","0")}
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 16 August 2014, 11:02:30
So

glaube/hoffe ein letztes mal zu stören......

Da ich nun bei mir die Auswertungen der Tankstellen am laufen habe will ich jetzt noch eine Benachrichtigung erstellen....

Die Stationen heissen Preismonitor_ESSO, Preismonitor_Jet ud so weiter - die userReadings zur Auswertung heissen Div_Diesel und Div_SuperE10

Mein gedanke war ein Notify das auf die userReadings

define Preismonitor_Meldung notify Preismonitor*.*:Div*.* {if("%" !~ m/0/){\
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung', '@ %')};;;; \
}\

aber es läuft nicht. Was müste ich anpassen?

Danke
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 16 August 2014, 11:06:16
Hallo,

1.) Finger weg von der fhem.cfg
2.) "Aber es läuft nicht" ist nicht nur zuwenig, das ist genau nichts.

Fehlermeldungen im Logfile?
DebianMail klappt sonst bei dir?
@ und % sollte $DEVICE und $EVENT sein.

1. hat auch den Vorteil das du dich um / und ; (oder ;;;;) nicht kümmern brauchst.
Aber am wichtigsten bei solchen "fehlern" ist immer die "Fehlermeldung" aus dem Logfile.
Bedenke: DU sitzt vor deiner Installation und siehst was du machst - wir sehen das nicht.

Grüße

edith: hab grad mal bei mir die Mailroutine eingebaut ins notify und Mail kommt an.
Nun wäre gut wissen WAS genau nicht klappt bei dir.

(Gehring|Shell):SuperE10.* {
  DebianMail('xxx.yyy@zzz.de',$NAME,$EVENT);
}

liefert:
Zitat2014.08.16 11:25:28 1: sendEmail RCP: xxx.yyy@zzz.de
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!
Und die Mail siehe Screenshot
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 16 August 2014, 12:52:35
hallo

Ja, Mail klappt soweit - aus irgend einem Grund hatte aber wohl der Rechner gehangen?!? Neustart i.o.

Mails kommen jetzt - aber nicht auf die Readings Div_Diesel und Div_SuperE10....

Also mit Diesel, SuperE10,

Nochmal das Def aus den Notify

Preismonitor*.*:Div*.* {if("%" !~ m/0/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}


den letzten Teil mit '@ %' natürlich entfernt.... war ein Überbleibsel aus der Batterieüberwachung
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 16 August 2014, 13:33:41
Hallo,

lass mal das
{if("%" !~ m/0/)
weg.
Was passiert dann?

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 16 August 2014, 13:35:11
Erst mal meine Fragen vergessen.......

IRGENDWIE spinnt das ganze System. Werde wohl erst mal alles durchschauen müssen....
Es fehlen einige Abfragen undsoweiter....

Danke erstmal....

stenny
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 19 August 2014, 20:48:57
Hallo zusammen,

gibt es die Möglichkeit (außer per attr <name> sortDevices 1) Dinge in der readingsGroup zu sortieren?
Bei mir sieht es (ohne das "Einfärbeskript") so aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=22554.0;attach=18240;image)
Aber es wäre m.E. besser, wenn E10 untereinander und Diesel untereinander stünden.
Mir ist klar, dass ich mit geeigneter Namenswahl umsortieren kann, allerdings würde ich dann für eine Tankstelle zwei HTTPMOD Instanzen aufmachen, und das macht m.E. keinen Sinn (ich würde zweimal dieselben Daten abholen und irgendwo speichern bzw. das, was ich will, herausfieseln).

Vielen Dank im voraus für einen kleinen Tipp.

Gruß PeMue
Titel: BenzinpreisMonitor
Beitrag von: justme1968 am 19 August 2014, 20:57:24
wenn du die devices nicht per regex auswählst sondern im define der readingsGroup explizit einzeln hin schreibst (jeweils mit leerzeichen getrennt) und das sortDevices weg lässt werden sie in der angegeben reihenfolge angezeigt.

nur wenn die devices per regex ausgewählt werden ist die reihenfolge unbestimmt.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 19 August 2014, 21:18:01
wow, ging das schnell  :)
Also statt
define Spritpreis readingsGroup (SpritSpathelf|SpritHagelauer|SpritShellIlsfeld):(Diesel|SuperE10).*
sehr händisch mit
define Spritpreis readingsGroup SpritSpathelf:Diesel.* SpritHagelauer:Diesel.* SpritShellIlsfeld:Diesel.* SpritSpathelf:SuperE10.* SpritHagelauer:SuperE10 SpritShellIlsfeld:SuperE10.*

Ich vermute mal, eine Klammer um die Readings würde nur stören, oder?

Danke + Gruß

PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Bennemannc am 19 August 2014, 21:25:27
Hallo,

ich hätte da mal zwei Fragen:
1) gibt es irgendwo eine Zsammenfassung, Wiki, TUT ?
2) kann das auch auf einer Fritzbox laufen oder benötige ich dafür einen Einplatinencomputer ?

Gruß Christoph
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 19 August 2014, 21:32:00
Hallo Christoph,

das läuft bei mir auf der Fritz Box 7490.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 19 August 2014, 21:39:47
ja genau so. klammern um die regex für die readings würden hier keinen unterschied machen.

je nach dem wie due die reihenfolge genau haben möchtest reicht aber vielleicht schon so etwas:define Spritpreis readingsGroup Sprit.*:Diesel.* Sprit.*:SuperE10.* oder sogar:define Spritpreis readingsGroup .*:Diesel .*:SuperE10

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 22 August 2014, 20:01:40
<offtopic?>
das Ganze geht auch für den Ölpreis (halt mit einer Webseite, die keine Skripte hat oder diese schon gerechnet hat):
# 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;; }

Das mit dem Komma ersetzen sollte ich auch noch irgendwie hinbekommen (userReadings?).
Auf jeden Fall habe ich beim Thema regex wieder an Wissen gewonnen (das mit den runden Klammer musste ich doch relativ lange suchen).
Viel Hilfe hatte ich auch hier (http://regex101.com/).
</offtopic?>

Viele Grüße

PeMue

Edit 1:
Zeile mit userReadings eingefügt.

Edit 2:
So einfach geht es mit den RegEx nicht, Kommentar aktualisiert.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 22 August 2014, 21:11:29
Hallo,

ich lass mir zur Zeit die gleichen Preise bei 2 Tankstellen gelb färben - der billigste wird grün und der teuerste logischerweise rot.

Und hier der Code dazu:
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"'
  }
    }
  }
}

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.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 23 August 2014, 01:29:09
das sieht doch gut aus...  :D so in etwa habe ich das auch, aber du hast komische Sprünge drin. also so eckig  ;)
Ich dachte das dürfen die nicht mehr so machen.... 8)

OK ich bin erst mal zufrieden....
Titel: Antw:BenzinpreisMonitor
Beitrag von: Jojo11 am 23 August 2014, 08:31:06
Ich denke das liegt an der zeitlichen Auflösung des Plots ;)
[OT] Ich frage mich, warum die Preise abends immer so stark angehoben werden, um dann im Laufe des Tages wieder zu sinken.

schöne Grüße
Jo
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 23 August 2014, 09:33:11
@jojo11

Das ist unterer anderem Angebot und Nachfrage.....

Bei mir in der Umgebung ziehen die Preise ab ca. 23:00 an, zu dieser Zeit haben die meisten Tankstellen schon zu - also wer da noch tanken will muss Zahlen.... desweiteren bekommt das Personal an machen Tankstellen Nachts auch mehr Geld und das muss ja auch irgendwoher kommen.

Da wir schon um 22:00 Uhr schließen können wir den Preis auch morgens noch unten halten.

Stenny

Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 23 August 2014, 14:01:07
Zitat von: Jojo11 am 23 August 2014, 08:31:06
Ich denke das liegt an der zeitlichen Auflösung des Plots ;)

jo recht haste, habe ich gar nicht drauf geachtet...!  :D
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 23 August 2014, 14:21:15
Hallo,

ich frage die Tankstellen alle 1800 Sekunden ab.
Auch wenn ich die zeitliche Auflösung auf "nur" 7 Tage stelle ändert sich nicht viel an den Sprüngen  8)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 23 August 2014, 18:34:28
Zitat von: Puschel74 am 22 August 2014, 21:11:29
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.
Hallo Puschel,

ich hab mal etwas programmiert, siehe hier:
#------------------------------------------------------------------------------
# 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 -------------------------------------------------------------

Grundidee ist es, den Array der Tankstellen (sind vermutlich mehr, als die Spritsorten) abzugrasen und dann den teuersten und den billigsten rauszusuchen. Einen Nachteil hat das Ding: Bei Preisgleichheit wird der vorletzte, der abgefragt wird, gelb. Ist aber m.E. vom Core her etwas übersichtlicher als Deins.  8)

Gibt es eigentlich auch orange? In der Standardansicht ist gelb extrem schlecht lesbar ...

Gruß PeMue

Edit:
Ups, so ganz perfekt ist das noch nicht ...
(http://forum.fhem.de/index.php?action=dlattach;topic=22554.0;attach=18382;image)
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 23 August 2014, 19:44:11
Hallo

Ich mal wieder mit einem alten Problem....

Da mein Server mit FHEM usw. mit akuter Altersschwäche in Rente gejagt wurde und nun alles wieder
zufriedenstellend läuft bin ich wieder bei meinem letzten Problem mit der Meldung bei Preisänderung
angekommen.....

Derzeit ist.....

Neues Ubuntu - aktuell
Neues FHEM aktuell

Alle Konfigs in extra Dateien
Mail, Asterisk Meldungen alles i.O.

Es werden 3 Tankstellen abgefragt.
Über userReading wird die Diverenz ermittelt (DEF)
Div_Diesel difference {ReadingsVal("Preismonitor_bft_B10","Diesel","0")}, Div_SuperE10 difference {ReadingsVal("Preismonitor_bft_B10","SuperE10","0")}

Bei Wert "0" soll keine Meldung erfolgen - Bei Abweichung vorerst eine Mail.

Aus der Batterieüberwachung habe ich
Preismonitor*.*:Div*.* {if("%" !~ m/ok/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}

übernommen - hier kommt bei jedem Wert Logischerweise eine Mail

also
Preismonitor*.*:Div*.* {if("%" !~ m/0/){
DebianMail('werauchimmer@@googlemail.com','FHEM Preisänderung')};
}

Und es kommt nie eine Mail - mit oder Ohne Preisänderung.....

Einträge im Log gibt es hierzu auch nicht

Wer kann Helfen.....




stenny
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 23 August 2014, 20:54:20
Hallo stenny,

ich musste mich auch erst einlesen, aber mit
attr <device> <name> diff_Diesel difference { ReadingsVal("Preismonitor_bft_B10","Diesel","0") }
müsste eigentlich immer, wenn ein neues Reading <name> eingeht, die Differenz berechnet werden.
Was sagt denn der Event-Monitor? Einfach mal etwas warten und nach diff_Diesel suchen.
Wenn da nichts kommt, versagt auch Dein notify.

Gruß PeMue

Edit:
Beim PCA301 geht es bei mir mit:
attr PCA301_055708 userReadings power_diff difference {ReadingsVal($name,'power',0)}
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 23 August 2014, 22:47:23
Die Differenz habe ich ja sauber, nur das notify macht halt nicht das was es soll.....
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 24 August 2014, 08:53:14
Hallo,

versuchs mal so:
Preismonitor.*:Div.* {if("%" !~ m/0/){

*.* macht mAn keinen Sinn
.* deckt ja schon so gut wie alles ab
Ob du im if mit !~ m/0/ glücklich wirst - keine Ahnung
Lass es doch mal weg und schau erstmal das das regexp des notify nur auf die Differenz triggert.

Alles nur geraten und ohne wissen warum  ;D

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 24 August 2014, 08:56:07
Hallo,

@PeMue
Übersichtlicher ist dein Code bestimmt - ich frag aber nur 2 Tankstellen ab und vergleiche von diesen beiden die Preise.
Und bei mir wird auch richtig eingefärbt  ;) ;D

Ich habe auch schon mit einem Array versucht aber bin dann wie die Kuh vor dem Tor gestanden wenn es blitzt.
Evtl. hab ich heute mal etwas Zeit dann werd ich mal schauen inwieweit ich deine Lösung mit meiner verschmelzen kann (und ob das überhaupt Sinn macht).

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 24 August 2014, 10:19:11
Zitat von: Puschel74 am 24 August 2014, 08:56:07
@PeMue
... Und bei mir wird auch richtig eingefärbt
:P
Versuch's mal damit:
#------------------------------------------------------------------------------
# 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 -------------------------------------------------------------

Das tut bei mir.
(http://forum.fhem.de/index.php?action=dlattach;topic=22554.0;attach=18384;image)
Grundidee: Ein Array für die Tankstellen und eine if Bedinung für jede Spritsorte (ich gehe mal davon aus, dass die Zahl der Tankstellen höher ist als die Anzahl der Spritsorten). Der Array wird einmal komplett durchgesucht und danach wird das Format zurückgegeben. Geht jetzt auch für gleiche Preise  8) *coolzurücklehn*
Warum das if / elsif Konstrukt vorher nicht funktioniert hat, weiß ich nicht.

Gruß und schönen Sonntag.

PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 24 August 2014, 11:47:46
@Puschel74


Keine Änderung durch deinen Vorschlag.

Da mein Part aus der Batterieüberwachung abgeleitet ist habe ich das gefühl das das wohl vielleicht nur auf Text greift?!?!?!? Es geht ja schließlich wenn ich "ok" statt "0" darin habe.


stenny
Titel: Antw:BenzinpreisMonitor
Beitrag 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 24 August 2014, 11:56:31
Hallo,

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

Ab hier http://forum.fhem.de/index.php/topic,22554.msg184354.html#msg184354 (http://forum.fhem.de/index.php/topic,22554.msg184354.html#msg184354)
sollte es losgehen.

Oder auch hier:
http://forum.fhem.de/index.php/topic,22554.msg184523.html#msg184523 (http://forum.fhem.de/index.php/topic,22554.msg184523.html#msg184523)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 24 August 2014, 12:29:32
uuh jetzt wirds hier wieder interessant... Das ist eine tolle Idee, mit der Anzeige für Hoch und niedrig.
Der Code von PeMue steht wohl in der 99_myUtils und der damals erarbeitet wurde, muss dann raus..?

Ich habe ja noch diesen hier drin, den hatten damals alle zusammen erstellt als es anfing mit dem Benzinpreismonitor... (ich eher nicht  ;))

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);
  } 
}
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 24 August 2014, 13:32:28
Hallo

Auch mein Problem habe ich scheinbar - warte noch auf reguläre Änderung - am laufen.

define Preismonitor_Nachricht notify Preismonitor_.*:Div_.* { if($EVENT !~ m/0$/mi) {DebianMail('werauchimmer@@googlemail.com', 'FHEM Preisänderung', 'FHEM Preisänderung')}}

Wenn ich jetzt mit
trigger Preismonitor_Jet Div_Diesel:0.01
absetze kommt eine Mail.

stenny
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 24 August 2014, 14:24:19
Zitat von: moonsorrox am 24 August 2014, 12:29:32
Der Code von PeMue steht wohl in der 99_myUtils und der damals erarbeitet wurde, muss dann raus..?
Warum denn? Meine Funktion heißt doch ganz anders. Einfach den anderen Aufruf nehmen und freuen ...

Gruß und schönen Sonntag.

PeMue
Titel: BenzinpreisMonitor
Beitrag von: no_Legend am 24 August 2014, 17:52:06
Liest einer bei Shell "Shell V-Power Racing" aus?
Bekomme es nicht ausgelesen.

Edit: Hab's hin bekommen
Titel: Antw:BenzinpreisMonitor Bitte um Hilfe
Beitrag von: Schiltkamp am 07 September 2014, 11:42:47
Ich hoffe es findet sich jemand mit Mitgefühl :)

Lage: FHEM auf FB 7390 mit CUNO.

Habe versucht die Zeile mit HTTPMOD einzugeben, bekomme aber immer eine Fehlermeldung.
Vielleicht erklärt ihr mir, was ich falsch mache.
Ich arbeite sonst nur mit Sensoren und Aktoren.

Herzlichen Dank und einen schönen Sonntag
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 07 September 2014, 11:55:36
Hallo Schiltkamp,

der Befehl müsste so heißen:
define <name> HTTMPOD <webseite> <intervall>
bzw. als Beispiel von mir:
define SpritHagelauer HTTPMOD http://www.clever-tanken.de/tankstelle_details/30437 3600

Aber das ist erst der Anfang  ;)

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 07 September 2014, 11:58:08
Hallo,

ZitatVielleicht erklärt ihr mir, was ich falsch mache.
Kurz und knapp:
http://forum.fhem.de/index.php/topic,16311.0.html (http://forum.fhem.de/index.php/topic,16311.0.html)

Und nun lang:
ZitatHabe versucht die Zeile mit HTTPMOD einzugeben, bekomme aber immer eine Fehlermeldung.
Ok, und wir sollen jetzt raten welche das ist?

Dann geb ich mal einen Tipp ab - ich weiß es nicht  ;)

Man könnte dir etwas besser helfen wenn du uns an deinem Wissen teilhaben lässt und uns die Fehlermeldung zeigst.
Aber bitte nicht etwas in die Richtung -
Zitatbla undefined oder so ähnlich irgendwie
.

Grüße

Eith: @PeMue - ich gehe davon aus das er bis zum define gelesen hat und das evtl. noch richtig hinbekommen hat  8)
Dennoch wäre es einfacher wenn wir wüssten welche! Fehlermeldung er bekommen hat.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 07 September 2014, 12:18:19
Danke für die schnelle Hilfe.

Ich glaube mir haben Updates gefehlt.

Geben bald neuen Status.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 09:11:07
Hat alles gut geklappt.
Nun habe ich meine zwei Dieselpreise und leider 2 verschiedene Plot.
Würde sie gerne in einem Plot sehen.
Freue mich jetzt schon wieder über eure Hilfe. Es ist toll, wenn man
so hilfsbereite Menschen trifft.

define Dieselpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/956 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 SVG_0 SVG FileLog_HMS100TFK_774c:fht80tf:CURRENT

define FileLog_Dieselpreis FileLog ./log/Dieselpreis-%Y.log Dieselpreis
attr FileLog_Dieselpreis logtype text
attr FileLog_Dieselpreis room Benzinpreis
define SVG_FileLog_Dieselpreis_1 SVG FileLog_Dieselpreis:SVG_FileLog_Dieselpreis_1:CURRENT

define Dieselpreis2 HTTPMOD http://www.clever-tanken.de/tankstelle_details/35152 1800
attr Dieselpreis2 group Treibstoff
attr Dieselpreis2 readingsName_Diesel Diesel
attr Dieselpreis2 readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Dieselpreis2 room Benzinpreis
attr Dieselpreis2 stateFormat Liter_Diesel: Diesel
attr Dieselpreis2 timeout 5

define FileLog_Dieselpreis2 FileLog ./log/Dieselpreis2-%Y.log Dieselpreis2
attr FileLog_Dieselpreis2 logtype text
attr FileLog_Dieselpreis2 room Benzinpreis
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 09 September 2014, 10:12:24
Hallo Schiltkamp,

irgendwie passt m.E. die Zeile
define SVG_0 SVG FileLog_HMS100TFK_774c:fht80tf:CURRENT
überhaupt nicht in Dein ganzes Konstrukt (muss wohl von oben oder unten noch übrig ein).
Wenn Du alle Preise in einer Grafik sehen willst, dann musst Du auch alle Preise auch in eine Datei loggen. Das sieht dann in etwa so aus:
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

Oder Du nimmst die Datenbank (dBlog), da kann Dir aber sicher Puschel74 weiterhelfen  ;)
Aber auch da ist es so, dass alle Daten in eine (oder mehrere) Datenbank geschrieben werden und beim Plotten nur die gewünschten Elemente herausgefiltert werden. Und ich glaube, es geht auch nicht, in einem Plot verschiedene Datenbankquellen anzugeben.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 09 September 2014, 10:43:22
Zitat von: PeMue am 09 September 2014, 10:12:24
Und ich glaube, es geht auch nicht, in einem Plot verschiedene Datenbankquellen anzugeben.

klar geht das. mit dem modul hier: http://forum.fhem.de/index.php/topic,26529.0.html (http://forum.fhem.de/index.php/topic,26529.0.html).

aber in deinem fall solltest du alles ins gleiche file oder die gleiche db loggen.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 10:53:50
Echt toll, wie schnell ihr mir helf.

Wie bringe ich es in eine Datei?
Was von dem orangen Code muss ich ändern?

Danke Euch! :)

define Dieselpreis HTTPMOD http://www.clever-tanken.de/tankstelle_details/956 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.log Dieselpreis
attr FileLog_Dieselpreis logtype text
attr FileLog_Dieselpreis room Benzinpreis
define SVG_FileLog_Dieselpreis_1 SVG FileLog_Dieselpreis:SVG_FileLog_Dieselpreis_1:CURRENT

define Dieselpreis2 HTTPMOD http://www.clever-tanken.de/tankstelle_details/35152 1800
attr Dieselpreis2 group Treibstoff
attr Dieselpreis2 readingsName_Diesel Diesel
attr Dieselpreis2 readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Dieselpreis2 room Benzinpreis
attr Dieselpreis2 stateFormat Liter_Diesel: Diesel
attr Dieselpreis2 timeout 5

define FileLog_Dieselpreis2 FileLog ./log/Dieselpreis2-%Y.log Dieselpreis2
attr FileLog_Dieselpreis2 logtype text
attr FileLog_Dieselpreis2 room Benzinpreis
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 09 September 2014, 13:02:23
ich habe diese Plotfunktion so
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


Plot sieht so aus, meinst du das..?

Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 13:11:28
Genau so.
Den Plot werde ich dann hinbekommen.
Aber wie bekomme ich die Daten von zwei Tankstellen in eine Datei? Was habe ich falsch gemacht? Siehe letzte Nachricht oranger Teil.

Danke
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 09 September 2014, 13:20:01
Zitat von: Schiltkamp am 09 September 2014, 13:11:28
Aber wie bekomme ich die Daten von zwei Tankstellen in eine Datei?
ohne deinen Code anzuschauen, aber du mußt schon 3 define anlegen, so habe ich das einschl. der 99_myUtils Geschichten von weiter vorne

das habe ich in der 99_myUtils noch drin
########################################################
##   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);
  } 
}


dann das als eine Tannkstelle, somit für jede extra:
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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 13:39:51
Erstmal Danke.

Mein Problem ist, wie und mit welchen Namen lege ich die 2te Tanke an.

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

define Star HTTPMOD http://www.clever-tanken.de/tankstelle_details/xxx 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

Ich weiß, bin ein ziemlicher Beginner.
Aber der Benzinverlauf ist schon echt interessant.

Gruß

Christian
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 09 September 2014, 13:43:50
Zitat von: Schiltkamp am 09 September 2014, 13:39:51
Mein Problem ist, wie und mit welchen Namen lege ich die 2te Tanke an.


na dann eben mit

define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/45856 1800


ichhabe noch eine Readingsgroup angelegt:
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)}
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 15:36:43
Irgendwo is bei mir noch der Wurm drin:

Wäre nett, wenn ihr/du einen Blick drauf wirfst

define Avia HTTPMOD http://www.clever-tanken.de/tankstelle_details/956 1800
attr Avia group Treibstoff
attr Avia readingsName_Diesel Diesel
attr Avia readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Avia room Benzinpreis
attr Avia stateFormat Liter_Diesel: Diesel
attr Avia timeout 5


define FileLog_Avia FileLog ./log/Avia-%Y.log Avia
attr FileLog_Avia logtype text
attr FileLog_Avia room Benzinpreis


define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/35152 1800
attr Esso group Treibstoff
attr Esso readingsName_Diesel Diesel
attr Esso readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Esso room Benzinpreis
attr Esso stateFormat Liter_Diesel: Diesel
attr Esso timeout 5

define FileLog_Esso FileLog ./log/Esso-%Y.log Esso
attr FileLog_Esso logtype text
attr FileLog_Esso room Benzinpreis

define Benzinpreise readingsGroup (Dieselpreis|Esso):(Diesel).*
attr Benzinpreise group Preisübersicht
attr Benzinpreise room Benzinpreis
attr Benzinpreise style style="font-size:16px"
attr Benzinpreise valueStyle {Werte($READING,$VALUE)}

define SVG_FileLog_Benzinpreise_1 SVG FileLog_Benzinpreise:SVG_FileLog_Benzinpreise_1:CURRENT
attr SVG_FileLog_Benzinpreise_1 alias Benzinpreise - Diesel
attr SVG_FileLog_Benzinpreise_1 fixedrange 4days
attr SVG_FileLog_Benzinpreise_1 group Treibstoff
attr SVG_FileLog_Benzinpreise_1 label "Aktuelle Preise Diesel - Dieselpreis: $data{currval4} € - Dieselpreis2: $data{currval5} €"
attr SVG_FileLog_Benzinpreise_1 plotfunction Dieselpreis Dieselpreis2
attr SVG_FileLog_Benzinpreise_1 room Benzinpreis,Plots
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 15:42:18
Noch ein Bild von der Ansicht
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 09 September 2014, 16:07:03
ich glaube dein Logfile ist falsch:

meines sieht so aus, passe einfach die Namen an wie z.B. bei dir Esso Avia
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
Titel: Antw:BenzinpreisMonitor
Beitrag 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_AviaEsso FileLog ./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:

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.

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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 09 September 2014, 18:12:32
Hallo,

ich versteh jetzt nicht ganz wo das Problem ist.

Die Spritpreise in EIN Logfile zu schreiben wird doch in den mittlerweile 13 Seiten die dieser Beitrag umfasst bereits beschrieben.
Nun kommen wieder 2 Seiten dazu wo das selbe nochmal erklärt wird.
Logisch das sich dann der nächste die, bis dahin geschätzten 19 Seiten, nichtmehr durchliest und gleich ans Ende springt und seine Frage stellt.

Ich weiß jetzt nicht was zielführender ist - die Fragesteller sollten sich die bisherigen Beiträge erstmal durchlesen BEVOR sie ihre Frage los werden (die bereits erklärt und beschrieben wurde).
Aber diese Unart zieht sich ja mittlerweile durch das gesamte Forum durch.

Grüße

P.S.: Nein, ich habe KEIN Problem damit wenn Fragen gestellt werden - aber erst sollte man sich die Basics aneignen und/oder zumindest den bestehenden Beitrag soweit durchlesen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 19:32:58
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_AviaEsso FileLog ./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:

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.

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.

Hallo PeMue,

ich denke ich habe es fast geschafft. Jedoch schreibt er mir nach der orangen Zeile den Fehler, dass es FileLog_Avia schon gibt und ich diese erst delete soll.

define Avia HTTPMOD http://www.clever-tanken.de/tankstelle_details/956 1800
attr Avia group Treibstoff
attr Avia readingsName_Diesel Diesel
attr Avia readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Avia room Benzinpreis
attr Avia stateFormat Liter_Diesel: Diesel
attr Avia timeout 5
define SVG_0 SVG FileLog_HMS100TFK_774c:fht80tf:CURRENT

define FileLog_Avia FileLog ./log/Avia-%Y.log Avia
attr FileLog_Avia logtype text
attr FileLog_Avia room Benzinpreis


define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/35152 1800
attr Esso group Treibstoff
attr Esso readingsName_Diesel Diesel
attr Esso readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)
attr Esso room Benzinpreis
attr Esso stateFormat Liter_Diesel: Diesel
attr Esso timeout 5

define FileLog_Avia FileLog ./log/Avia-%Y.log Esso
define FileLog_Spritpreis FileLog ./log/fuel-%Y.log (Avia|Esso)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 19:37:10
Ich glaube ich habs.

Augenblick.

Danke für die ganze Hilfe
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 09 September 2014, 19:38:05
Hallo Christian,

entweder ein
delete FileLog_Avia in der fhem Konsole oder ein
rereadcfg

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 09 September 2014, 19:44:07
Hallo,

und noch ein gut gemeinter Tipp der dir das Leben mit FHEM vereinfachen kann:

Vergiss die fhem.cfg - diese Datei gibt es nicht - wer die Konfig in einer DB hat KANN diese garnicht bearbeiten.
Und das ist auch absolut nicht nötig - ausser wenn mal ein IODev später hinzu kommt (aber das lassen wir hier erstmal).
Sonst gibt es absolut KEINE Notwendigkeit die fhem.cfg direkt zu bearbeiten.

Die Befehlszeile ist dein Freund und den DEF-Button wirst du lieben lernen  ;)
Glaube mir - du wirst dir jede Menge Ärger und unnötige Arbeit ersparen wenn du die fhem.cfg vergisst.

Grüße

P.S.: Wie man ein notify oder at per Befehlszeile und DEF anlegt ist auch schon beschrieben  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 19:45:30
Danke PeMue,

hat geklappt. Hätte genauer lesen sollen in deiner Anleitung.
Ich hatte es doppelt gemoppelt.
Der Graph steht auch schon.


Grüße aus Neumarkt

CS
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 09 September 2014, 20:06:06
Zitat von: Puschel74 am 09 September 2014, 19:44:07
Vergiss die fhem.cfg - diese Datei gibt es nicht - wer die Konfig in einer DB hat KANN diese garnicht bearbeiten.
Ich will aber meine schönen Kommentare in der fhem.cfg haben *duckundweg*  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 09 September 2014, 20:11:54
Hallo,

Zitat von: PeMue am 09 September 2014, 20:06:06
Ich will aber meine schönen Kommentare in der fhem.cfg haben *duckundweg*  8)

Wer weiß was er in der fhem.cfg macht (und vor allem WIE er das zu machen hat) darf auch gerne weiterhin jegliche Art von Kommentare und sonstiges einfügen  :P
Und auch alle anderen dürfen natürlich in der fhem.cfg machen was sie wollen - das FHEM-Leben wird nur schwerer wenn man ein paar Dinge nicht weiß und beherrscht.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 20:19:11
Bekomme ich den Graph auch in andFhem?

Danke für die Hilfe vorher
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 09 September 2014, 20:20:24
Hallo,

das ist eine Frage für andFHEM und das heisst die Frage gehört unter Mobile Devices wenn mich nicht alles täuscht.
Bitte dort suchen oder fragen.
Danke.

Grüße

Edith: Nicht das die Frage hier nicht beantwortet werden dürfte - aber wir haben ja nicht umsonst unterschiedliche Forenbereiche.
Von daher kann jede Frage gleich im passenden Bereich gestellt werden - wo sie in der Regel auch schneller beantwortet werden kann.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 09 September 2014, 20:38:21
Danke für den Tipp
Titel: Antw:BenzinpreisMonitor
Beitrag von: Schiltkamp am 11 September 2014, 10:05:31
Da bin ich schon wieder :)

Jetzt habe ich noch eine andere Seite um einen Wert auszulesen, nur kann ich leider mit dem Befehl readingsregex gar nichts anfangen.
Es ist die Seite "vtm-fair.de". Dort muss ich mich mit Benutzer und Passwort anmelden und bekomme dann folgende Daten:

<h1>Meine Kraftstoffpreise</h1>

                <p>Unsere aktuellen Angebote für Sie, gültig am 11.09.2014 von 09:15 bis 15:00.</p>
        <dl class="dl-horizontal">
                    <dt>Diesel</dt>
            <dd>1,299 &euro;/l inkl. USt., Einlagerungsdauer 8 Wochen <a ng-click="bestellen(1)">Weiter</a> </dd>
                    <dt>Super95</dt>
            <dd>1,489 &euro;/l inkl. USt., Einlagerungsdauer 8 Wochen <a ng-click="bestellen(2)">Weiter</a> </dd>
                    <dt>SuperPlus98</dt>
            <dd>1,529 &euro;/l inkl. USt., Einlagerungsdauer 8 Wochen <a ng-click="bestellen(3)">Weiter</a> </dd>
                    <dt>Super95E10</dt>
            <dd>1,449 &euro;/l inkl. USt., Einlagerungsdauer 8 Wochen <a ng-click="bestellen(4)">Weiter</a> </dd>
                </dl>

Den orangen Wert würde ich gerne auslesen und wenn es möglich ist, mich vorher automatisch anmelden.

Vielleicht seid ihr so nett und helft nochmal. Finde das echt toll.
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 19 September 2014, 16:19:56
Ich habe mittlerweile auch den Benzinpreis Monitor installiert und meinen Bedürfnissen angepasst. Was ich nicht so gut gelöst finde die aktuelle Zeit anzugeben. Denn das ist nicht der aktuelle Preis. Ich weiß ja nicht wann der Tankstellenbesitzer diesen Preis eingeben hat, manchmal ist es schon 1 Std her oder Stunden her. Besser wäre es wenn man die Zeit der letzten Engabe wüßte zb. "vor 55 min aktuallisiert". Dann kann man sich überlegen ob da hin fährt oder auch nicht, weil der Preis vielleicht nicht mehr stimmt. Leider weiß ich aber nicht wie man diesen Wert aus dem ganzen Datengetümmel in der Homepage ausliest. Drin steht er, das habe ich schon gefunden.
Vielleicht weiß es einer von Euch die dieses Thema viel besser beherrscht als ich.

Gruß aus Köln
Norbert

Im Board habe ich schon alles abgesucht aber dazu wie man überhaupt bestimmte Wert aus einer Hompage ausliest, nichts gefunden.
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 19 September 2014, 17:08:06
Hallo cocojambo,


http://www.clever-tanken.de (http://www.clever-tanken.de) gibt leider keine Zeitinformation aus, dann kann fhem diese auch nicht auslesen. Wenn Du eine Website mit der entsprechenden Zeitinformation hast, kann ich schauen, wie diese extrahiert werden kann.

@Schiltkamp: ich habe leider keine Ahnung, wie man den User bzw. das Passwort in HTTPMOD übergibt, die commandref gibt leider auch keinen Hinweis.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 19 September 2014, 17:13:30
wenn du den preis zb alle 5 minuten abfragst, und event-on-change aktiviert hast, wird immer ein neues event bei preisänderung erzeugt (auch der timestamp). dann kann der wert im reading nur ca 5min älter sein als der timestamp des readings.
mein nachbar ist eine tankstelle, da kann ich das mit dem fernglas gut überprüfen.  ;) das passt eigentlich besser als gedacht.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 19 September 2014, 17:22:02
auch bei event-on-change wird der timestamp bei jedem schreiben des readings aktualisiert. auch wenn kein event erzeugt wird.

wenn du readings mit einem bestimmten timestamp erzeugen möchtest muss das im modul explizit berücksichtigt werden. und es kann dann Probleme mit FileLog geben.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 19 September 2014, 17:31:52
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.

gruss frank
Titel: Antw:BenzinpreisMonitor
Beitrag von: stenny73 am 20 September 2014, 08:02:23
Ausserdem der Preis muss aktuell sein.

Jede Tankstelle ist verpflichtet den Preis innerhalb von 5 Minuten der MTS-K zu melden. Diese Daten werden unmittelbar an die Preisnehmer - clever-tanken usw - weitergeleitet.

Was du also nicht abfangen kannst ist wann die nächste Umstellung erfolgt und dieses hat nichts mit der letzten Meldung zutun.

Wenn du dir jedoch die durch die entstehende Kurve der vorherigen Tage ansiehst kann man schon eine gewisse Tendenz erkennen - zu mindestens bei mir in der Gegend....
Titel: Antw:BenzinpreisMonitor
Beitrag von: olli84 am 17 Oktober 2014, 15:42:21
Ich habe öfter mal folgende Meldungen:

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


timeout steht auf 5 - einfach mal erhöhen?
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 18 Oktober 2014, 12:48:28
... ich vermute mal, dass der Server in dieser Zeit gerade nicht erreichbar ist. Timeout erhöhen wäre sinnvoll.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: olli84 am 21 Oktober 2014, 12:50:31
Danke, mit Timeout 7 hab ich nur noch ca. 2 Timeouts pro Tag. :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Phil__ am 23 Oktober 2014, 08:47:55
Hallo an alle,

ich bin auch mal wieder aus meiner "Sommerpause" erwacht...  :P
Hier hat sich ja einiges getan, in bezug auf den Spritpreismonitor/Benzinpreismonitor.

Ersteinmal einen Dank an alle die sich hier so rege beteiligt haben. Ich habe das ganze bei mir auch mal umgesetzt und will hier mal ein komplettes Beispiel zur verfügung stellen, da der Thread schon ziemlich lang und unübersichtlich ist. Werde das Ganze dann auch auf Seite 1 im ersten Post einfügen. Für Ergänzungen, einfach hier schreiben oder eine kurze PN an mich.
Angefangen von Tankstellen define, über ReadingsGroup, Filelog, bis hin zum Plot ist hier mal alles zusammengefasst:

#########################################################
###                   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


In die 99_myUtils.pm muss folgendes eingefügt werden um in der ReadingsGroup die Preis unterschiedlich farblich darzustellen, je nach Preisniveau.
Die genauen Preisgrenzen muss natürlich jeder für sich selbst festlegen:

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

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



Die .gplot Datei sieht in diesem Beispiel wie nachfolgend aus:
SVG_FileLog_Spritpreise_1.gplot

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

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

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



Titel: Antw:BenzinpreisMonitor
Beitrag 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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 23 Oktober 2014, 15:33:06
Zitat von: Phil__ am 23 Oktober 2014, 08:47:55
Angefangen von Tankstellen define, über ReadingsGroup, Filelog, bis hin zum Plot ist hier mal alles zusammengefasst:
Das 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....
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 23 Oktober 2014, 15:46:38
Hallo,

das Modul gibt es bereits - nennt sich HTTPMOD  ;)
Aber Wiki-Artikel wär nicht verkehrt.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: iCure am 24 Oktober 2014, 17:56:39
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.

Keiner eine Idee?
OS ist Windows 7. Verbindung zum Internet besteht, Pushover usw. funktioniert, nur eben nicht das Seiten auslesen anhand von HTTPMOD.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 24 Oktober 2014, 18:00:20
Hallo,

da du von egal welcher Internetseite keine Werte bekommst wäre der Server Windows Bereich eher was für die Frage.
Hier geht es ja nur um den BenzinpreisMonitor und nicht um die Werte egal welcher Seite  ;)

ZitatKeiner eine Idee?
Dann wäre evtl. auch das Nachfragen nicht nötig.
Richtiger Bereich = schneller eine Antwort = schneller glücklich.

Aber vielleicht findet sich hier ja noch jemand der dir helfen kann.
Da musst du aber warten bis derjenige hier vorbei kommt und deine Frage findet (so er auch den BenzinpreisMonitor verwendet).

Grüße

P.S.: Sorry das ich dir leider nicht weiter helfen kann.
Titel: Antw:BenzinpreisMonitor
Beitrag von: bert am 26 Oktober 2014, 15:58:22
Vielen Dank an alle Teilnehmer in diesem Fred. Durch mitlesen habe ich viel gelernt, z.B. über Log-Dateien und ganz speziell über SVG-Plot´s. Dabei haben sich für mich viele Fragen geklärt, bezüglich des Zusammenspiel´s der Fhem-Dateien.
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.
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.

Gruß Bert
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 26 Oktober 2014, 18:16:00
Zitat von: bert am 26 Oktober 2014, 15:58:22
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.
Hallo Bert,

vielleicht lehne ich mich zu weit aus dem Fenster. Aber ich meine, dass alle Module, die mit xx_ anfangen (wobei x=[1:9]), von fhem automatisch geladen werden. Die Referenz auf das, was Du brauchst, wird mit dem Funktionsaufruf (case sensitive!) erledigt. Sprich: solange die Funktion, die Du aus fhem aufrufst, irgwendwo in einem (schon geladenen) Modul definiert ist, passt die Sache ...

@Puschel: Bitte um Widerspruch, wenn ich was falsches erzählt haben sollte ...

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 26 Oktober 2014, 18:27:37
Hallo,

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
Grad ich - genau ich - Scherzkeks  :P

Aber ja, soweit solltest du Recht haben.
Ich weiß nur sicher das 99_xxx automatisch geladen werden.
Und sobald in einer dieser pm-Dateien eine sub mit dem passenden Namen steht klappt der Funktionsaufruf.
Vielleicht mal am besten im Wiki den Artikel über die 99_myUtils.pm lesen - dort wird das schön erklärt.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Phil__ am 29 Oktober 2014, 17:58:55
Hallo,

@Bert: Sorry etwas verspätet...

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.


Die Gruppen kannst du beliebig wählen. Ich nutze das Dashboard und da kann man verschiedene Gruppen anzeigen lassen, deshalb hier des sortierens wegen diese drei Gruppen bei mir. Das kannst du aber machen wie du möchtest.
Die Gruppe "Spritpreise" sind bei mir meine drei Tankstellen. "Spritpreisverlauf" der Plot zu den Preisen und "Spritpreisübersicht" sind in einer ReadingsGroup alle drei Tankstellen zusammen gefasst. Somit sind das bei mir drei Gruppen/Elemente die ich im Dashboard einzeln anzeigen lassen kann.

Viele Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 29 Oktober 2014, 19:57:27
Zitat von: Puschel74 am 26 Oktober 2014, 18:27:37
Grad ich - genau ich - Scherzkeks  :P
bei >6900 Beiträgen erwarte ich schon eine gewisse Fachkompetenz  8) *duckundweg*

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 05 November 2014, 18:52:45
Das sagt ein Developer mit knapp 1000 Beiträgen...

*jetzt aber gaaaaanz schnell weg*
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 11 November 2014, 10:03:05
Mit Erlaubnis von Phil__ habe ich das mal ins Wiki übertragen:
http://www.fhemwiki.de/wiki/Spritpreismonitor

Bitte lest es gegen und korrigiert / ergänzt es bei Bedarf.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 11 November 2014, 10:14:40
Hallo,

Däumchen hoch  ;D

Kleiner "Schönheitsfehler":
ZitatSowie eine passende Radingsgroup:
Readingsgroup

Aber sonst top

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 11 November 2014, 13:27:55
Habs geändert. Danke Puschel :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: dieda am 11 November 2014, 15:20:14
Gute Arbeit. Ein rundum sorglos Paket.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Starkstrombastler am 11 November 2014, 23:19:13
Schöne Sache, hat sofort auf Anhieb funktioniert.

Ich habe noch für jedes Reading (über die Kommandozeile) ein attr hinzugefügt:
attr Aral readingsExpr_SuperE5 $val +0.009
Ist zwar etwas unsauber, aber die Preise werden passend um die üblichen "Komma-Neun" ergänzt.

....und gerade eben wurden die Preise an unserer Tanke mal um schlappe 10 ct hochgeschraubt  :o
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 12 November 2014, 09:14:37
Hallo,

wir haben eine super stabile Tankstelle und eine die zittert wie ein Kuhschwanz  ;D
Nun noch die Benachrichtigung per WhatsApp dazu und dem billigeren tanken steht nichts im Weg.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: corny456 am 12 November 2014, 11:29:05
Zitat von: Phil__ am 12 November 2014, 11:13:28
Bei Fragen dazu, einfach melden!

Meld!  :)

Also Pushover def ist klar aber wie machst du das genau? Per Notify?

Gruß Marius
Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 12 November 2014, 11:58:30
Gerne für alle und auch ins Wiki damit :-)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 12 November 2014, 13:22:52
Zitat von: Puschel74 am 12 November 2014, 09:14:37
wir haben eine super stabile Tankstelle und eine die zittert wie ein Kuhschwanz  ;D
bei uns seit Wochen immer dieses Szenario, Nachts/Morgens rauf gegen Abend runter
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 12 November 2014, 13:41:41
Hallo,

Zitat von: moonsorrox am 12 November 2014, 13:22:52
bei uns seit Wochen immer dieses Szenario, Nachts/Morgens rauf gegen Abend runter

Du kannst wenigstens eine Vorhersage treffen wann der Sprit günstiger werden könnte  ;D

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Iron-R am 14 November 2014, 18:28:51
Hallo Zusammen,

Kompliment super Arbeit. Ich habe gestern entsprechend der im http://www.fhemwiki.de/wiki/Spritpreismonitor veröffentlichten Anleitung den Spritpreismonitor installiert. Funktioniert einwandfrei, dennoch ist mir aufgefallen das hinter den Preisen das Datum und die Uhrzeit fehlt.

Hab schon mehrfach mit dem Wiki verglichen aber keinen Fehler gefunden.
Fehlermeldung oder sonstige Meldungen im fhem-Logfile sind nicht vorhanden
Kann mir jemand auf die Sprünge helfen.

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



Danke
Viele Grüße

Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 14 November 2014, 18:32:52
Hallo,

Zitatdennoch ist mir aufgefallen das hinter den Preisen das Datum und die Uhrzeit fehlt.
Nö.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: Iron-R am 14 November 2014, 19:14:43
Hallo Puschel,

genau das ist mein Problem bei Dir geht es und ich habe keine Idee mehr woran das liegen kann das bei mir der Datum und die Uhrzeit fehlt.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 14 November 2014, 19:16:28
bei mir gehts auch...

kann ja nur ein Fehler in der readingsgroup sein
nimm das mal raus "attr Spritpreise notime 1"
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 14 November 2014, 19:31:33
naja kein Fehler, eben ohne Zeit
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 14 November 2014, 19:33:47
Hätte Iron-R die Konfig dazu vorher gepostet wäre es einfacher gewesen.
Ich bin nur mittlerweile zu faul um ewig nach der zugehörigen Konfig zu fragen.
Wer die angepinnten Beiträge im Anfängerbereich nicht lesen will muss sich halt durchschlagen.
Edith: In diesem Fall dann eben das Wiki und die commandref dazu nicht gelesen  ::)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 14 November 2014, 19:35:42
hast du irgendwo Recht, aber die Konfig hat er ja gepostet... weiter oben ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 14 November 2014, 19:36:39
Zitat von: moonsorrox am 14 November 2014, 19:35:42
hast du irgendwo Recht, aber die Konfig hat er ja gepostet... weiter oben ;)
Wenn du schaust siehst du das 4 Minuten nach meinem Post sein Beitrag bearbeitet wurde - und nun rate mal was vorher gefehlt hat  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 14 November 2014, 19:37:58
 :P 8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Iron-R am 14 November 2014, 19:48:14
Hallo Puschel,
beim ersten Beitrag war ich zu schnell mit dem  "Schreiben" da waren nicht alle Infos eingetragen.

Hallo moonsorrox,
Dein Tipp mit dem
Zitatnimm das mal raus "attr Spritpreise notime 1"
war der richtige.
Danke für Deine Hilfe

Grüße

Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 14 November 2014, 20:12:49
Hallo,

ich hab grad eine dritte Tankstelle eingebunden und häng jetzt am einfärben der Werte  8)
Also ich häng nicht wirklich aber geht der Wertevergleich nicht einfacher als in der 99_myUtils.pm jetzt jeden Wert gegen die anderen beiden zu prüfen  ???
Wenn ich bedenke das ich mich evtl. noch eine vierte Tankstelle einbinden möchte  :o
Die Abfrage wird ja dann ein Konstrukt das mit Perl sicher eleganter zu lösen ist - ich muss mal wieder mein Perl-Buch rauskramen und schauen wie das eleganter geht.
Hat jemand auf die schnelle einen Tipp?

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 14 November 2014, 20:29:09
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

Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 14 November 2014, 20:33:16
Zitat von: PeMue am 14 November 2014, 20:29:09
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
kein Problem, ich mach mich auf die Suche - danke für den Stupf  ;D
Titel: Antw:BenzinpreisMonitor
Beitrag von: dieda am 14 November 2014, 20:51:49
Ich habe das hier bei ValueStyle stehen

{ 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"' } }


Wobei man die Preis für sich anpassen sollte. Ich habe mir die Tanken nach den Routen zusammengestellt. Weg zur Arbeit, zum Training, etc.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 15 November 2014, 16:57:43
Hallo,

@dieda
Danke für den Code aber den hatte ich ganz zu Anfang mal im Einsatz aber da mit fixen Werte für mich zu unflexibel.

@PeMue
Hab deinen Code auf Seite 11 gefunden - angepasst und eingefügt - danke dir.

Einwandfrei bis auf eine Kleinigkeit  ;)
Im elsif-Teil für SuperE10 hast du auch die Readings für Diesel eingelesen (aber das ist ja mittlerweile kein Problem mehr für mich  8) ) und
du hast einen elsif-Teil für SuperE5 unterschlagen - aber das hab ich dann auch noch grad so hinbekommen  ;D

Anbei mir für alle der neue Code-Teil:
#------------------------------------------------------------------------------
# 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 -------------------------------------------------------------

Achtung: In Zeile 22
my @device_list = ("Gehring","Jet","Jet_Loe","Shell","Shell_Loe");
müsst ihr Eure Tankstellen hartcodiert eintragen - das sollte aber das kleinere Problem sein  ;)

@Phil__
Kannst du den Code evtl. bitte noch im ersten Beitrag ergänzen (dann brauchen andere nicht solange suchen  ::) ) - Danke.

Das ganze sieht dann so aus wie im Screenshot.

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 15 November 2014, 18:21:18
Hallo Puschel,

ich vermute, dass ich das an dem Abend selber gefunden habe. Meine aktuelle Version ist noch ein bisschen einfacher:
#------------------------------------------------------------------------------
# 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 -------------------------------------------------------------

Ich suche erst den höchsten und den niedrigsten Preis. Wenn das Reading einem von beiden entspricht, dann wird es entprechend eingefärbt, ansonsten wird es gelb.

Gruß PeMue

Edit1: Das SuperE5 tanke ich nicht  ;) aber mit ein bisschen kopieren funktioniert das schon.
Edit2: SuperE5 ist mit drin.
Titel: Dritte Nachkommastelle fehlt
Beitrag von: dirk.msc am 16 November 2014, 17:19:47
Der Benzinpreismonitor ist echt Klasse! Leider fehlt die letzte Nachkommastelle. Ich habe den regulären Ausdruck zwar schon von
readingsRegex_SuperE5: <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)
umgeändert in
readingsRegex_SuperE5: <div class="fuel_type">Super E5[^0-9]+([0-9\.]+)[^0-9\.]*([0-9])

Aber das Modul verwendet nur den ersten Klammerwert und die 3. Stelle vom Preis fehlt immer noch. Hat jemand eine Idee, wie man das lösen kann?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 16 November 2014, 17:22:45
Hallo,

diesen Beitrag
http://forum.fhem.de/index.php/topic,22554.msg218095.html#msg218095 (http://forum.fhem.de/index.php/topic,22554.msg218095.html#msg218095)
hast du vermutlich bei deiner Suche übersehen  ;)

Grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: dirk.msc am 18 November 2014, 17:26:47
Danke, so geht's natürlich auch. Mich hätte es allerdings gereizt, den echten Wert mit einem angepassten Ausdruck auszulesen ;-)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Starkstrombastler am 18 November 2014, 23:10:38
Zitatden echten Wert mit einem angepassten Ausdruck auszulesen
In den Rohdaten steht ein ganzes Stück weiter die Zahl Neun. Vielleicht kann jemand den Regex-Ausdruck erweitern, ich hab's nicht geschafft.

Zur Kontrolle brauchen wir dann noch eine Tanke, deren Preis nicht mit Komma-Neun endet.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 22 November 2014, 21:20:45
Würdet ihr das in die Wiki schreiben, bitte?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Bootscreen am 24 November 2014, 15:58:05
gibt es denn eine Möglichkeit die echte 0,009 auszulesen? Da ich bei mir einige Autogas Tankstellen drin hab welche glatte Cent Beträge haben wäre es einfacher als immer nachzuschauen bei welcher Tanke und welchem Sprit die 0,009 hinzuaddiert werden müssen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 04 Dezember 2014, 12:19:19
Oh was ist denn mit dem Spritpreis los, ich glaube ich muss "nachbessern"  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Rince am 04 Dezember 2014, 16:30:59
ZitatOh was ist denn mit dem Spritpreis los, ich glaube ich muss "nachbessern"

Logisch. Du hast das Kleingedruckte nicht gelesen:
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

*duckundweg*
Titel: Antw:BenzinpreisMonitor
Beitrag von: mcbo am 05 Dezember 2014, 14:12:41
@moonsorrox

Kannst Du mir bitte Deine tolles Zapfsäulen Icon zur Verfügung stellen?


Danke

Gruß

Marcel
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 05 Dezember 2014, 14:47:34
ja klar, gerne  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: mcbo am 05 Dezember 2014, 15:18:24
Super, danke.
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 05 Dezember 2014, 15:46:14
Betr.: die Kommastelle
Ich habe weiter vorne den Beitrag schon gelesen:

Zitatattr Aral readingsExpr_SuperE5 $val +0.009

bei mir sieht aber diese Zeile so aus:

Zitatattr Benzinpreis1 readingsRegex_Diesel <div class="fuel_type">Diesel[^0-9]+([0-9\.]+)

Habe schon vieles probiert irgendwo in diese Zeile die 0.009 zu addieren. Kriege es aber nicht hin. Weiß jemand an welcher Stelle und wie ich das ändern muß?
Viele Dank
Norbert aus Köln
Titel: Antw:BenzinpreisMonitor
Beitrag von: Puschel74 am 05 Dezember 2014, 17:14:43
Hallo,

einfach als neues Reading Attribut anlegen.
siehe Screenshot.

Grüße

Edith: Reading ist natürlich falsch - sollte auch Attribut heissen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 07 Dezember 2014, 14:41:40
@Puschel74

Habe ich gemacht, funktioniert, Vielen Dank.
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: andrece am 08 Dezember 2014, 14:29:20
hallo

Plott funzt bei mir nicht es kommt folgendes

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

hier ein Auszug aus der fhem.cfg

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


Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 08 Dezember 2014, 19:12:16
Hallo andrece,

ich denke, wenn der Fehler beim Plotten liegt, solltest Du die zugehörige Plotdatei bzw. einen Auszug aus dem Logfile posten.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: andrece am 08 Dezember 2014, 19:38:44
jo.

Aber hat sich erledigt er hatte irgendwelche Zeichen statt € eingetragen. Habs gerade entdeckt. :o 8) ::)
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 09 Dezember 2014, 14:51:57
Hallo,

Bei mir im Log steht ständig und 10-20 hiintereinander diese Fehlermeldung:

2014.12.09 04:49:35 3: HTTPMOD got error in callback: connect to http://www.clever-tanken.de:80 timed out

Probiert habe ich auch schon hier mit anderen Werten, auch schon ohne das Attribut, ändert sich aber nix.

attr Benzinpreis4 timeout 5

Der BezinpreisMonitor funktioniert zwar weiter, nur der LOG wird unnütz voll und unübersichtlich. Läßt sich das abstellen?

Gruß aus Köln
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: Mario67 am 09 Dezember 2014, 15:18:54
@cocojambo: Ist denn FHEM aktuell? (vergl. dazu http://forum.fhem.de/index.php/topic,29269.msg220319.htm (http://forum.fhem.de/index.php/topic,29269.msg220319.htm)).

Gruß,
Mario
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 09 Dezember 2014, 15:44:13
Ich mache regelnmäßig 1x pro Woche ein Update um genau solchen Problemen vorzubeugen. Werde aber jetzt noch sicherheitshalber ein manuelles Update von HttpUtils und von HTTPMOD machen. Mal gucken obs dann weg ist. Erst mal vielen Dank für den Tipp.
Gruß
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: Thoffi1978 am 10 Dezember 2014, 11:23:37
Hallo andrece,

wo hast du den Fehler gefunden? Ich habe die selber Fehlermeldung.

Vielen Dank
Thoffi
Titel: Antw:BenzinpreisMonitor
Beitrag von: dieda am 10 Dezember 2014, 22:08:25
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

An dieser Lösung bin ich interessiert. Bin da noch nicht so fit...
Titel: Antw:BenzinpreisMonitor
Beitrag von: mcbo am 11 Dezember 2014, 14:12:19
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!

Würde mich auch interessieren, wie Du das gelöst hast.
Was liest Du für das notify aus? Die "readingsGroup" oder jede Tankstelle einzeln?


Gruß

Marcel
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 15 Dezember 2014, 11:39:09
Ich habe den Vorschlag die HttpUtils und HTTPMOD upzudaten gemacht. Leider kommen die Error Meldungen immer noch:

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


Was kann ich noch machen um diese Fehlermeldungen zu beseitigen?
Gruß aus Köln
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: Mario67 am 15 Dezember 2014, 17:27:13
@cocojambo: Die neueren Versionen von HTTPMOD werten das angegebene Timeout nun richtig aus. Welchen Wert hast Du denn gesetzt? Evtl. reichen 5 s bei Dir nicht aus (bei mir schon).

Gruß,
Mario
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 16 Dezember 2014, 19:22:13
Ich habe im Moment das Timeout auf 5 stehen und bekomme seit dem Update der neuen HTTPMod seitenweise Meldungen die sich alle paar Zeilen im Log wiederholen, Ich habe mal ein paar davon angehangen.

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


Ich habe jetzt mal das Timeout versuchweise auf 50 gestellt, mal sehen ob das auch daran liegt.
Gruß
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 19 Dezember 2014, 16:14:52
Der Fehler tritt weiterhin auf seit dem Update des neuen HTTPMod Moduls. Ich habe timeout 50 probiert und auch ohne timeout. In beiden Fällen kommen immer die langen Meldungen bei jeder einzelnen Abfrage für jede Tankstelle. Das müßten aber dann doch auch alle haben, die das Modul benutzen, haben. Soll ich das alte Modul noch mal einspielen?, aber das wird ja dann beim nächsten Update wieder überschrieben. Oder woran könnte das gerade bei mir liegen?
Gruß
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 19 Dezember 2014, 18:05:22
auch habe diese Fehler...! das Modul verursacht auch andere perl Fehler

hier die eine Abfrage, andere erspare ich mir:
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


und hier auch noch anderer Fehler:
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.

ich denke der Modulautor ist sicher schon angeschrieben, denn es hagelt ja überall Fehler
Titel: Antw:BenzinpreisMonitor
Beitrag von: hauwech am 14 Januar 2015, 09:49:49
Hallo zusammen,
der letzte Beitrag ist schon ein paar Wochen her, ich hab's aber erst gestern gefunden... und gleich probiert.
Da kommt aber gar nix. Ein wget http://www.clever-tanken.de/tankstelle_details/nnnn auf der Systemkonsole (Ubuntu 14.04.1 LTS) bringt nur timeout's, ein ping auf www.clever-tanken.de löst einen proxy auf: proxy.clever-tanken.de.
Muß ich für HTTPMOD noch an anderer Stelle etwas aktivieren oder installieren? Oder hat clever-tanken.de einen Proxy vorgeschaltet, weil der Traffic Überhand nimmt?
Fhem ist soweit aktuell:# $Id: fhem.pl 7528 2015-01-11 18:23:31Z rudolfkoenig $
.
.
# $Id: 98_HTTPMOD.pm 7313 2014-12-23 09:37:35Z ststrobel $

Eine Tankstelle sieht so aus: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


Gruß Roland
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 14 Januar 2015, 15:38:47
ich habe gerade bei mir auch probleme gesehen. kommt nichts mehr. schade. das war die letzte aktualisierung:

SuperE5  1.30  2015-01-13 04:32:54

entweder hat fhem zuviel traffic verursacht, oder die konzerne wollen wieder mehr verdienen.  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: stromer-12 am 14 Januar 2015, 16:04:59
Mal versucht den timeout etwas höher zu setzen, zB auf 10
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 14 Januar 2015, 18:53:43
selbst im browser mit versuch auf die homepage gibt es von firefox:
ZitatDer Server unter www.clever-tanken.de braucht zu lange, um eine Antwort zu senden.
Titel: Antw:BenzinpreisMonitor
Beitrag von: P.A.Trick am 14 Januar 2015, 18:54:40
Stimmt bei mir geht's gerade auch nicht!
Titel: Antw:BenzinpreisMonitor
Beitrag von: Paul am 14 Januar 2015, 19:18:56
Bei mir geht es mit Timeout 2
Titel: Antw:BenzinpreisMonitor
Beitrag von: stromer-12 am 14 Januar 2015, 19:31:29
Ich hatte heute gerade mal einen Timeout.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Bernhard-IN am 20 Februar 2015, 17:16:59
Hallo,

ich habe jetzt seit einigen Tagen den BenzinpreisMonitor installiert und ich muss sagen ich bin begeistert auch von der grafischen Auswertung. Prima!
Was ich bei mir noch gerne ändern würde, aber als Anfänger steh ich noch etwas aufm Schlauch, die Spritpreise in 2 Spalten auszugeben. Wobei eine Spalte 'SuperE5' und die zweite Spalte 'SuperE10' mit den verschiedenen Tanken auflisten sollte.

Wie kann ich das lösen?

Gruss Bernhard-IN
Titel: Antw:BenzinpreisMonitor
Beitrag von: bjoernbo am 07 April 2015, 15:25:33
Hallo,

ich habe die Einstellungen gem. WIKI vorgenommen! Wenn ich mir aber nun die FHEM.cf anschaue dann passt da was nicht und ist sicherlich die Erklärung warum mir in der ReadingGroup nichts angezeigt wird.

WIKI:
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

meine fhem.cfg

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

Spontan fallen mir dort die "readings" auf, aber ich habe gar keine andere Möglichkeit diese zu hinterlegen. Es wird mir immer "readingsName.*" und
"readingsRegex.*" angeboten. Ohne ".*" kann ich das gar nicht hinterlegen!

Wie hinterlege ich das richtig?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Kuzl am 07 April 2015, 15:44:09
Hallo,

einfach in der .cfg ändern - auch wenn immer alle sagen du sollst das nicht. ich kenne für solche Readings keine andere Methode
Titel: Antw:BenzinpreisMonitor
Beitrag von: justme1968 am 07 April 2015, 15:58:27
oben auf der seite in der commandbox eingeben.

gruss
  andre
Titel: Antw:BenzinpreisMonitor
Beitrag von: ujaudio am 22 April 2015, 17:50:16
Ich möchte gerne den Code verstehen:

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

Ich habe mir den Quelltext der Seite angesehen und da gibt es den Code
<div class="fuel_type">Diesel
Aber was macht das folgende
[^0-9]+([0-9\.]+)?
Und welche Bedeutung haben die beiden anderen rot markierten Attribute.

Ein Link auf die Stelle, wo ich das nachlesen kann, würde mir schon helfen.

Gruß
Jürgen
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wernieman am 22 April 2015, 19:57:56
Bezüglich "[^0-9]+([0-9\.]+)"
Sagt Dir "RegularExpression" etwas?

Muß jetzt allerdings in diesem Zusammenhang mit dem "^" passen, das es eigentlich bedeutet: Erstes Zeichen am Zeilenanfang?

ansonsten:
Nimm: 1 Zeichen 0-9 + Zeichen 0-9 oder .

also z.B. 1.42 <- was das bedeutet ist klar?  8)

das \ vor dem . ist ein Quota, da eigentlich der . bei Regular Expression bedeutet, ein beliebiges zeichen. Hier soll aber wirklich der . gelesen werden, wir müssen also Quoten/Maskieren.
Titel: Antw:BenzinpreisMonitor
Beitrag von: ujaudio am 23 April 2015, 13:30:32
Ich kämpfe mich gerade durch perl und seine Regular Expressions, aber ein wenig Abweichung schient es doch zu geben.
Ich werde jetzt mal die Beispiele durchspielen und Veränderungen an den RegEx ausprobieren...

Habe ich etwas überlesen oder genügt es, wenn man nur das Define mit den Attributen definiert und in den Floorplan einbaut? So ähnlich mit dem Weblink?
Titel: Antw:BenzinpreisMonitor
Beitrag von: DJ_SAMMY190 am 30 Juli 2015, 08:02:20
Irgendwie seit 2015-07-29 17:15:27

"Read response to Update didn't match any Reading(s)"

Hat das auch einer? Oder einer eine Idee? Daten holt er..

Titel: Antw:BenzinpreisMonitor
Beitrag von: scooty am 30 Juli 2015, 08:32:00
Webseite wurde wohl geändert.
Habe den Attributwert für die Regex auf z.B.
readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
geändert, damit funktioniert es bei mir wieder.

Andreas
Titel: Antw:BenzinpreisMonitor
Beitrag von: Snake1980 am 30 Juli 2015, 09:01:39
Suuuper! Und ich hab schon an meinem Verstand gezweifelt. Danke!!!


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.
readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
geändert, damit funktioniert es bei mir wieder.

Andreas
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 30 Juli 2015, 13:30:53
ich sage auch mal DANKE....!  :D
Titel: Antw:BenzinpreisMonitor
Beitrag von: CoolTux am 30 Juli 2015, 13:34:01
Dito. Auch ich möchte mich bedanken.
Titel: Antw:BenzinpreisMonitor
Beitrag von: wuppermann am 30 Juli 2015, 14:23:04
Auch von mir ein großes Danke !
Titel: Antw:BenzinpreisMonitor
Beitrag von: VB90 am 30 Juli 2015, 18:37:34
Ich bin heute durch Zufall auf diesen Thread gestossen.
Direkt umgesetzt, es klappt alles was ich benötige, prima.

Großes Danke an alle die sich hier eingebracht haben!

Nächste Idee, mal sehen wie sinnig das am Ende ist, eine Benachrichtigung mittels DOIF oder so per Whatsapp beim Unterschreiten gewisser Preise.

vb
Titel: Antw:BenzinpreisMonitor
Beitrag von: DJ_SAMMY190 am 30 Juli 2015, 18:50:52
Super klappt wieder ;) Danke ;)

Titel: Antw:BenzinpreisMonitor
Beitrag von: Mr. Flash am 01 August 2015, 22:55:30
Hallo Andreas,

vielen Dank für die Anpassung! Jetzt flutscht's wieder!
Bei war's am 29.07.2015 um 17:18:40, als die Log-Einträge ausblieben und die Kurven abrissen.

Grüße,
Nik
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 02 August 2015, 18:54:55
Geht wieder super gut, DANKE
Aber ich bekomme bei jeder Abfrage diese Perl-Meldung:
PERL WARNING: Odd number of elements in anonymous hash at (eval 187557) line 1, <$fh> line 1247.
Was hat es damit auf sich? oder kann das unbeachtet bleiben?
Gruß aus Köln
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 04 August 2015, 20:31:03
oh, bei mir hat das auch am 29.07. gestoppt, danke für die Info.

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: cocojambo am 07 August 2015, 11:34:52
Habe auch diese Zeile geändert und eingefügt:

attr Benzinpreis1 readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)

Jetzt kommen folgende Fehlermeldungen im LOG:

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)


Was ist jetzt falsch? und was muß ich noch bei der Abfrage ändern?
Gruß aus Köln
nobbi
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 07 August 2015, 12:13:54
ich kriege auch seit ca. 3 Tagen diese Fehler, die obige Änderung habe ich aber gemacht
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,
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 07 August 2015, 12:26:00
Zitat von: cocojambo am 07 August 2015, 11:34:52
Habe auch diese Zeile geändert und eingefügt:

attr Benzinpreis1 readingsRegex_Diesel <span>Diesel</span>[^0-9]+([0-9\.]+)


mach mal dieses dann sollte es gehen:
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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Michi240281 am 10 August 2015, 18:27:54
Ich habe es für SuperE5 wieder hinbekommen mit folgendem Ausdruck:

readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)

Für Ultimate 102 bekomme ich es aber nicht hin.

readingsName_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?
Titel: Antw:BenzinpreisMonitor
Beitrag von: ph1959de am 10 August 2015, 18:40:27
Zitat von: Michi240281 am 10 August 2015, 18:27:54
Ich habe es für SuperE5 wieder hinbekommen mit folgendem Ausdruck:

readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)

Für Ultimate 102 bekomme ich es aber nicht hin.

readingsName_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?
Schau 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.

Peter
Titel: Antw:BenzinpreisMonitor
Beitrag von: Franz Tenbrock am 10 August 2015, 19:09:42
Hallo
kannst du alle attr posten ?!

komme nicht weiter . Diesel ok aber was mit der Schreibweise von Super E10 ist wohl nicht ok
Titel: Antw:BenzinpreisMonitor
Beitrag von: Michi240281 am 10 August 2015, 20:19:28
Hier mal ein Auszug aus dem buf:

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">


Dementsprechend habe ich das regex folgendermaßen angepasst:

readingsRegex_AralUltimate102 <span>ARAL Ultimate 102</span>[^0-9]+([0-9\.]+)

Tuts leider nicht! :(

@Franz:

Hier meine kompletten attr:

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\.]+)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Michi240281 am 10 August 2015, 20:43:06
Sooooooooo, habs hinbekommen! :)

   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\.]+)
Titel: Antw:BenzinpreisMonitor
Beitrag von: ph1959de am 10 August 2015, 20:43:14
In deinem "buf" steht <span>ARAL Ultimate 102</div> und Deine Regex prüft auf <span>ARAL Ultimate 102</span> ... wie soll das funktionieren?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Klinki am 01 September 2015, 07:11:18
Ich möchte nur fein artig "Danke" sagen!
Die Anpassung
<div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)
hat auch bei mir funktioniert.

Ich hab einen Systemwechsel durchgeführt und natürlich das Problem erst Mal bei mir gesucht.
Tja, hätte ich direkt hier geschaut... ::)

Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 13 September 2015, 18:44:51
Hallo ,

weiß jemand warum mein Log folgendes anzeigt ??

2015.09.13 18:31:15 1: reload: Error:Modul 99_myUtils deactivated:

habe mein Fhem neu aufgesetzt und auch den Spritpreismonitor , aber nach anlegen der  99_myUtils.pm kommt diese Fehlermeldung .


Folgendes steht in der  99_myUtils.pm :

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);
  } 
}
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 13 September 2015, 18:48:01
Hallo Sky,

was steht denn in deiner fhem Logdatei? Da meckert er meistens, was ihm nicht gefällt.
Vermutlich eine Klammer vergessen oder so ...

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 13 September 2015, 18:54:22
Hallo PeMue ,

danke für die schnelle Antwort.
In meinem Logfile steht leider nicht mehr .
Habe die 99_myUtils.pm angelegt wie unter http://www.fhemwiki.de/wiki/Spritpreismonitor
Wollte dann die Werte ( € ) für mich ändern .

Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 29 September 2015, 13:04:41
Was mich bisher immer etwas gestört hat, die fehlenden 0.009 :)

Lösung:

attr Shell readingsExpr_Diesel $val + 0.009
attr Shell readingsExpr_SuperE5 $val + 0.009


:)
Titel: Antw:BenzinpreisMonitor
Beitrag von: ChHerrm am 07 Oktober 2015, 10:27:33
Hallo! Der Spritpreismonitor läuft sehr gut und zuverlässig. Besten Dank für die Arbeit daran! :)
Ich habe jetzt zu der farblichen Darstellung eine hoffentlich nicht allzu schwer zu beantwortende Frage. Dafür zunächst der Code:

in der fhem.cfg:

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'}


Das läuft auch sehr gut. Alle in der Readingsgroup aufgeführten Tankstellen sind wie Aral aufgebaut.

In der 99_myUtils.pm dann folgenden Code an den Schluss vor der letzten 1 gesetzt:

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"'; }
  }
}


Es passiert aber dadurch noch nichts :( Auch nach einem Neustart ist nichts farbig hervorgehoben.  Kann mir jemand bitte damit weiterhelfen, wie ich diese Funktion jetzt genau aufrufen oder umbauen muss? Im Anhang befindet sich ein Bild von meiner bisherigen Darstellung. Ich nutze also kein plot und zeige keine 9 hinter dem Preis an.


PS: Also, dass es ein 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?

---------------------------------------------------------
Habs doch noch gerade gefunden, unter die readingsgroup: attr LuebzT valueStyle {FuelFormat($DEVICE, $READING, $VALUE)}

Entschuldigt die Störung
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 17 Oktober 2015, 13:55:31
Zitat von: Hauswart am 29 September 2015, 13:04:41
Was mich bisher immer etwas gestört hat, die fehlenden 0.009 :)

Lösung:

attr Shell readingsExpr_Diesel $val + 0.009
attr Shell readingsExpr_SuperE5 $val + 0.009


:)

Wo kann dies eingefügt werden ?

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


Natürlich dann mit Esso, aber ich habe schon die verschiedensten Varianten probiert. FHEM weigert sich konstant diese Erweiterung anzuzeigen
Titel: Antw:BenzinpreisMonitor
Beitrag von: habl am 17 Oktober 2015, 18:52:49
Hi raspklaus

probier mal so:
attr Esso stateFormat { sprintf("Super: %.3f €", ReadingsVal ($name,"SuperE5",0)+0.009)}

Gruß
habl
Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 19 Oktober 2015, 09:10:35
Zitat von: habl am 17 Oktober 2015, 18:52:49
Hi raspklaus

probier mal so:
attr Esso stateFormat { sprintf("Super: %.3f €", ReadingsVal ($name,"SuperE5",0)+0.009)}

Das ist auch ein interessanter Ansatz, speichert dann aber weiterhin den Wert ohne 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


Sollte eigentlich problemlos gehen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: raspklaus am 21 Oktober 2015, 20:09:56
Ja, funktioniert

Danke
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 27 Oktober 2015, 20:41:02
kann mit jemand mit dem stateFormat auf die Sprünge helfen?

Ich bekomme es nicht folgendermaßen hin
Diesel: 1.99€  Super: 2.99€

bei mir wird im State immer das Wort Diesel durch den aktuellen Preis ersetzt :-(

Als Escapezeichen habe ich schon folgende probiert: "'´`$ und auch \ einzelnd und vor jedem Zeichen :-(

Gruß und Dank

Ralf
Titel: Antw:BenzinpreisMonitor
Beitrag von: RalleBMG am 16 November 2015, 16:11:09
hallo gemeinde
habe ein problem mit dem Autogas LPG  wird nicht angezeigt.
wenn ich eine tankstelle mit nur einer Kraftstoffgruppe auswähle läut es einwandfrei
sobald ich superE5 und Autogas benutze wird nichts angezeigt

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

wo liegt da der fehler???
danke :D :D
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 16 November 2015, 16:18:57
stateformat :-)

Die enizelreadings sind ja vorhanden, oder?
Titel: Antw:BenzinpreisMonitor
Beitrag von: RalleBMG am 16 November 2015, 16:34:03
ja sind sie ich weiss nicht wo der fehler liegen sollte.
ob es sein kann das bei LPG eine null vor dem komma steht?
aber das dürfte eigendlich auch nicht sein
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 16 November 2015, 23:30:34
aus

attr StarBOH stateFormat Liter_Autogas: Autogas

wird

attr StarBOH stateFormat Liter_Autogas: Autogas Liter_Super: SuperE5
Titel: Antw:BenzinpreisMonitor
Beitrag von: RalleBMG am 17 November 2015, 09:25:22
funktioniert immer noch nicht kann es vielleicht daran liegen???
attr StarBOH userattr readingsName_SuperE5 readingsRegex_SuperE5 stateFormat timeout
Titel: Antw:BenzinpreisMonitor
Beitrag von: RobertD am 24 November 2015, 23:56:35
Hallo zusammen,

ich versuch gerade auf Basis des BenzinpreisMonitor eine Art AktienMonitor zu bauen.
ich hoffe es geht in Ordnung das ich das hier drin schreibe und nicht extra ein neues Thema aufmache.

Als Basis dient die Börse Frankfurt:

define DAX30 HTTPMOD http://m.boerse-frankfurt.de/de/parts/element_list.m?type=index&secu=290 600

Denn Intervall hab ich jetzt bewusst hochgesetzt, diesen werde ich wenns funktioniert später reduzieren.

unter "buf" sieht man auch die Namen und Preise, nur hab ich gerade Probleme diese 30 Einzelwerte zu filtern.
Hier 2 Beispiele:
<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>


so wie es Aussieht bekommt man 2 Namen je Aktie: 1.= 296@6.22_agname und 2.= 296@6.22_price.
Damit müsste es doch machbar sein, diese zu filtern und in eine Logdatei zu schreiben.

Ziel: Wäre eine Art Tabelle in FHEM anzeigen zu lassen:
FirmaAG 1 | Preis 1
FirmaAG 2 | Preis 2
FirmaAG 3 | Preis 3
usw...

Wäre Dankbar für einen kleinen Tipp an dieser Stelle

Gruß Robert
Titel: Antw:BenzinpreisMonitor
Beitrag von: carlos am 25 November 2015, 07:29:24
Nimm doch einfach das module aus diesem Thread hier
Neues Modul: 98_STOCKQUOTES (http://forum.fhem.de/index.php/topic,33352.0.html)
Das funktioniert bestens.
Ist leider noch nicht im SVN.

Gruß
Carlos
Titel: Antw:BenzinpreisMonitor
Beitrag von: RobertD am 25 November 2015, 21:23:10
@Carlos You just made my day.

Genau sowas wollte ich jetzt bauen.
Im ersten Schritt nur die Preise, später dann Stückzahl etc...

Danke

Gruß Robert
Titel: Antw:BenzinpreisMonitor
Beitrag 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?

2.) Hat jemand schon die Farbgestaltung (der eigentliche Smart-Part) automatisiert?
Also die Min-Max-Werte irgendwie dynamisch gesetzt, damit man nicht alle paar Wochen den "akzeptablen" Rahmen selbst definieren muss?
Ich denke z.B. an Dummies mit Statistics oder Treshold Modul oder den Daten aus dem lokalen Preisverlauf.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pr3mut05 am 02 Januar 2016, 15:06:18
Wie schaffe ich es die Werte, also die aktuellen Preise
per Nachricht (Telegrambot oder Pushover) an mein Handy zu senden
Natürlich über einen bestimmten "Event" wie Uhrzeit oder ähnliche

Titel: Antw:BenzinpreisMonitor
Beitrag von: Kuzl am 03 Januar 2016, 18:39:05
über ein notify, das entweder bei Änderung des Readings oder jedem beliebigen EVENT aktiviert wird und dann über ReadingsVal auf das Reading zugreifen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: mrfloppy am 10 Januar 2016, 11:34:14
Gibt es den Spritpreismonitor auch für Österreichische Tankstellen?
Hat das schon mal jemand versucht?

LG
Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 11 Januar 2016, 08:49:26
Zitat von: mrfloppy am 10 Januar 2016, 11:34:14
Gibt es den Spritpreismonitor auch für Österreichische Tankstellen?
Wenn 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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Cruiser79 am 11 Januar 2016, 10:21:25
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?


Mit der API habe ich bei mir einen Benzinmonitor schon seit längerer Zeit am laufen.


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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: masterpete23 am 13 Januar 2016, 14:15:20
Zitat von: Cruiser79 am 11 Januar 2016, 10:21:25
Mit der API habe ich bei mir einen Benzinmonitor schon seit längerer Zeit am laufen.


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.
Danke läuft so
Titel: Antw:BenzinpreisMonitor
Beitrag 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Hauswart am 15 Januar 2016, 11:30:14
Zitat von: mrfloppy am 14 Januar 2016, 19:07:58
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.
Hallo Thomas, sendest du uns mal Links deiner Tankstellen? Oder wie wir selektieren müssen?

Gruss
Titel: Antw:BenzinpreisMonitor
Beitrag von: Cruiser79 am 15 Januar 2016, 12:08:06
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

"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?
Ansonsten wäre ja der Ansatz mit HTTPMOD eine Abfrage mit deiner Location zu machen. Daraufhin bekommst du die Tankstellen aus diesem Bereich. HTTPMOD unterstützt in der neuesten Version (noch nicht per update verteilt) auch das parsen von JSON, was in diesem Fall dann hilfreich wäre. Damit dann alle Tankstellenpreise und -namen heraus extrahieren. Die Readings von HTTPMOD könntest du dann irgendwo darstellen lassen (Floorplan, direkt im State, usw.)
Titel: Antw:BenzinpreisMonitor
Beitrag von: mrfloppy am 15 Januar 2016, 13:25:33
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?

Ich fahre eigentlich meist Tankstellen die in meinem Umkreis von daheim sind und am Arbeitsweg.
Von diesen würde ich gerne den Benzin/Deiselpreis im FTUI anzeigen lassen.
Je nachdem richte ich mir den weg zur Arbeit um dort zu tanken.

Httputils hab ich schon mal reingeschaut, aber da das ja keine Api ist auf der Spritpreisseite, seh ich mich da nicht ganz raus.

ZitatHallo Thomas, sendest du uns mal Links deiner Tankstellen? Oder wie wir selektieren müssen?

Avanti - Julius Ficker Straße 77 , 1210 Wien
Avanti - Leopoldauer Straße 131 , 1220 Wien
BP - Leopoldauerstr.7 - 2201 Gerasdorf

LG Thomas
Titel: Antw:BenzinpreisMonitor
Beitrag von: RobertD am 08 Februar 2016, 18:43:19
Für alle die Probleme mit Spritsorten haben die ein Leerzeichen beinhalten.

Hier die Lösung:

Setzt einfach ein " ' " vor und nach dem Namen = 'ARAL Ultimate 102'

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


Nachtrag: Komisch wenn man nun die ' ' entfernt funktioniert das schreiben in ein Logfile.

Gruß Robert
Titel: Antw:BenzinpreisMonitor
Beitrag 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>
Titel: Antw:BenzinpreisMonitor
Beitrag von: no_Legend am 16 Februar 2016, 07:50:42
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>

Probier mal so abzufragen:

<div data-type="label" data-device="bft"
                        data-get="SuperE5"
                        style="color:#aa6900"
                        class="right" >


Lese so den Status eine Dummies in der tabletui aus.

Gruß Robert
Titel: Antw:BenzinpreisMonitor
Beitrag von: Warlock_2016 am 19 Februar 2016, 20:54:25
Vielen Dank, das war es :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: no_Legend am 22 Februar 2016, 22:01:33
Hi

kann mir keine helfen, wie ich bei Shell oder Aral die Preise bei clever-tanken für superplus abfragen kann?

Hab es mal bei Shell hiermit Probiert:


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
Titel: Antw:BenzinpreisMonitor
Beitrag 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 da <span>Shell V-Power Racing</div>

Sollte also mit attr SpritMon.Hedd.Shell readingsRegex_SuperPlus <span>Shell V-Power Racing</div>[^0-9]+([0-9\.]+) funktionieren.
Titel: Antw:BenzinpreisMonitor
Beitrag von: no_Legend am 23 Februar 2016, 07:28:45
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 da <span>Shell V-Power Racing</div>

Sollte also mit attr SpritMon.Hedd.Shell readingsRegex_SuperPlus <span>Shell V-Power Racing</div>[^0-9]+([0-9\.]+) funktionieren.

Super, danke geht nun!
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 09 März 2016, 17:54:42
hallo,
ich habe am dem 06.03.2016 ein Update durchgeführt und da war auch ein Update für 98_HTTPMOD.pm dabei.
ich habe seit dem beim Neustart von Fhem folgenden Fehler (Meldungen)

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


meine readingsRegEx_Diesel
<div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)

stimmt noch mit den Readings überein.

Wo ist der Fehler ???

Gruß Werner

PS. Es funktioniert aber noch
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 09 März 2016, 18:03:35
Zitat von: Intruder1956 am 09 März 2016, 17:54:42
Wo ist der Fehler ???
siehe https://forum.fhem.de/index.php/topic,50281.0.html

Gruß PeMue
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 09 März 2016, 20:46:46
@PeMue,

danke habe es umgestellt mit attr und set

Gruß Werner
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 10 März 2016, 19:54:19
Hallo Intruder1956 ,

kannst Du vielleicht ein Beispiel posten wo, bzw. wie Du die Umstellung gemacht hast ?
Ich werde daraus nicht schlau ....


Oder ich sehe im Moment vor lauter Bäumen keinen Wald .......:-(

Vielen Dank
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 10 März 2016, 20:07:37
ich habe in Spritpreis das
attr TankeDierdorf  enableControlSet 1
gesetzt
dann erscheint oben "set" und da dann

set TankeDierdorf upgradeAttributes

speichern fertig
evtl. auch nochmal ausführen wenn noch Meldungen im Log stehen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 10 März 2016, 20:46:15
Wow ...

das ging schnell.
Werde ich gleich versuchen ,vielen vielen Dank
:)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 11 März 2016, 15:48:20
Hallo ..

habe immer noch ein Problem seit dem Update des HTTPMOD

In meinem log steht:
2016.03.11 15:19:36 3 : SBMarkt: Read response to update didn't match any Reading
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

nach der Umstellung mit attr und set sieht die definition so aus :

define Jet HTTPMOD http://www.clever-tanken.de/tankstelle_details/3694 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

und die Readings so :

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

was stimmt da nicht ??
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 11 März 2016, 16:15:34
.... was habe ich oben geschrieben ???  :) :) :)
wenn noch Meldung da ist noch mal
set TankeDierdorf upgradeAttributes

da waren sie dann bei mir weg
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 11 März 2016, 16:21:23
Hatte ich ja gemacht  ???

Probiere einfach noch ein paar mal ..
Trotzdem Danke  :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 11 März 2016, 16:25:04
Zitat2016.03.11 15:19:36 3 : SBMarkt: Read response to update didn't match any Reading
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
was steht denn in buf drin? es wird halt nichts geparsed.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 11 März 2016, 16:34:50
setze mal bei

reading01Regex <div class="fuel-price-type"><span>Diesel[^0-9]+([0-9\.]+)

und bei Super auch
<div class="fuel-price-type"><span>Super E5[^0-9]+([0-9\.]+)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 11 März 2016, 16:45:00
Ihr seid die Besten ....

das ist die Lösung,nochmal DANKE  :) :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Intruder1956 am 11 März 2016, 16:50:16
ich bin "nur" Anfänger  8)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Sky am 11 März 2016, 17:10:42
Ich auch ,aber ich finde es gut das man auch "Noob" -  Fragen beantwortet
8) 8)
Titel: Antw:BenzinpreisMonitor
Beitrag 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 ?
Titel: Antw:BenzinpreisMonitor
Beitrag von: CoolTux am 17 März 2016, 12:13:35
Was hast Du denn bis jetzt?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Cruiser79 am 17 März 2016, 12:15:12
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 ?

Notify? Mir würde da eher ein at einfallen, mit dem ich um 17h ein pushover mit den aktuellen Daten der Tankstelle versende.
Titel: Antw:BenzinpreisMonitor
Beitrag von: benkler am 17 März 2016, 12:36:47
Da ich mich mit Notify & At noch nicht auseinander gesetzt habe habe ich noch nicht wirklich viel.
Pushover habe ich schon eingerichtet und es funktioniert schon (sendet mir eine nachricht nach neustart)

danke für den Hinweis auf at

also würde das so ungefähr gehen: define SpritpreisePush at *17:00:00 <command>

ich muss mit das mal ganz genau anschauen, denn beim command scheitert es momentan :-(
ich gebe aber auch zu, ich habe mich noch nicht wirklich eingelesen....

Titel: Antw:BenzinpreisMonitor
Beitrag von: Paul am 17 März 2016, 18:22:18
Na in command kommt das rein ,wie du dir die Nachricht beim Neustart sendest
Titel: Antw:BenzinpreisMonitor
Beitrag von: benkler am 18 März 2016, 09:10:49
Ja das nachricht senden bekome ich hin, nur steige ich momentan nicht ganz durch, wie ich die Readings da rein bekomme...

Update:

so funktioniert es:

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 ''")}


natürlich muss vorher pushover eingerichtet sein im fall von diesem Beispiel als push :)

Grüße
Benkler
Titel: Antw:BenzinpreisMonitor
Beitrag von: ToM_ToM am 27 März 2016, 13:23:45
Hey, weiß jemand von euch wie man im reading01Regex die Punkte durch ein Komma ersetzten kann?

Dass Benzinpreis = 1,499 statt 1.499 ist...

VG und frohe Ostern, Thomas
Titel: Antw:BenzinpreisMonitor
Beitrag von: ToM_ToM am 29 März 2016, 15:37:13
Hier die Lösung um Komma durch Punkt zu ersetzen:

Zitat von: betateilchen am 29 März 2016, 15:12:28
Es funktioniert über den Umweg mit userReadings:

attr BenzinpreisePL_Apexim userReadings reading01User {my $v = ReadingsVal('BenzinpreisePL_Apexim','Apexim_SuperE5','');; $v =~ tr/,/./;; return $v;;}

(http://up.picr.de/25027967oc.jpg)

Großen Dank an betateilchen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: en-trust am 01 April 2016, 16:26:56
Blöde Frage, aber wie bekomme ich den Benzinmonitor in eine html seite eingebunden ?

readingGroup ist wie folgt aufgebaut...

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

Bin neu und arbeite mich gerade ein.

Gruss
Titel: Antw:BenzinpreisMonitor
Beitrag von: perseusarm am 09 April 2016, 00:57:41
Hallo Leute,

ich habe den Benzinpreismonitor so eingerichtet

#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

...
...
Das Gleiche für "Tankpunkt"
...
...


Im Log habe ich aber:

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


Die Empfehlung aus einem vorherigen Thread mit

attr Jet enableControlSet 1

ist ja drinnen und ein
set Spritpreise upgradeAttributes
bringt die Meldung:
Unknown argument upgradeAttributes, choose one of visibility

Nach dem Update all
2016.04.09 00:47:37 1 :
2016.04.09 00:47:37 1 : fhem
2016.04.09 00:47:38 1 : nothing to do...
2016.04.09 00:47:38 1 :
2016.04.09 00:47:38 1 : fhemabfall
2016.04.09 00:47:39 1 : nothing to do...
hat sich leider nichts verändert.

Meine 98_HTTPMOD.pm  scheint auch aktuell zu sein:
# $Id: 98_HTTPMOD.pm 11002 2016-03-05 19:39:06Z ststrobel $

Keine Ahnung wo ich noch suchen soll. Könnte bitte mal jemand nachsehen wo ich ich was übersehene habe.
Vielen Dank
Titel: Antw:BenzinpreisMonitor
Beitrag von: perseusarm am 09 April 2016, 23:24:41
Gelöst.
Ich hab nochmal komplett von vorne angefangen (laut http://www.fhemwiki.de/wiki/Spritpreismonitor) und jetzt klappts. Das Problem muss wohl ca. 40 cm vor dem Monitor gewesen sein.  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Marius82 am 12 April 2016, 09:44:56
Hallo,

ich schaffe es nicht das als 3.Kommastelle die 9 mit angezeigt wird.
Mein code:
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 €'}


Ich habe die beiden +0.009 wie im Wiki nachzulesen hinzu gebracht, es werden aber nur 2 Kommastellen angezeigt.
Kann mir jemand unter die Arme greifen?

Ich bin noch Anfänger...

Danke
Titel: Antw:BenzinpreisMonitor
Beitrag von: benkler am 12 April 2016, 09:50:05
Hallo Marius82

du hast reading01 & reading02 dann brauchen die auch die Expr.

bei mir schaut das so aus


reading01Name SuperE10
reading01Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
reading01Expr $val + 0.009



Gruß
benkler
Titel: Antw:BenzinpreisMonitor
Beitrag von: Marius82 am 12 April 2016, 09:54:30
Super, Danke!!!
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 12 April 2016, 10:42:32
attr Spritpreise valueFormat {'%.2f €'}
warum schneidest du die 3. nachkommastelle dann in der readingsgroup eigentlich wieder ab?
Titel: Antw:BenzinpreisMonitor
Beitrag von: Marius82 am 13 April 2016, 09:38:24
Noch eine Frage:
Im Wiki zum Spritpreismonitor wird zB. "attr Jet icon tanken" angegeben.
Das Icon "tanken" ist aber nicht in der Auswahl vorhanden, oder verstehe ich da etwas falsch?

Danke
Titel: Antw:BenzinpreisMonitor
Beitrag 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..?

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: betateilchen am 08 Mai 2016, 13:03:52
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..?

nein, aber bei HTTPMOD. Mach doch einfach das, was Dir in den Logmeldungen empfohlen wird:

For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 08 Mai 2016, 13:30:06
ich habe da ewig nichts verändert und es funktioniert ja auch alles..! ich sehe eben nur die letzten Tage diese Logmeldungen

Aber 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  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 08 Mai 2016, 13:55:05
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,

1. set-befehle freischalten mit

attr <my_device> enableControlSet 1

2. nun die vorhandenen attribute "aktualisieren" mit

set <my_device> upgradeAttributes

anschliessend save config, damit du länger was davon hast.  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 08 Mai 2016, 14:07:19
Zitat von: frank am 08 Mai 2016, 13:55:05
du sollst auch nichts rumfummeln, sondern lediglich, wie der text sagt,
das ist ja rumfummeln  ;) nee Spaß beiseite  :D

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.  ;)

das habe ich jetzt mal getan und sage Danke..! Da kommt mir wieder Satz in den Sinn...
"Kaum macht man etwas richtig funktioniert es auch"  :D ;) :D
Titel: Notify
Beitrag von: Holger S am 25 Juli 2016, 16:47:09
Hallo,

versuche gerade ein Notify einzurichten:

Dies sendet bei Änderungen egal bei welcher Sorte eine Nachricht:

define GreenlineDieselNotify notify Greenline.* {WhatsApp_Diesel ("Test")}

Ich wollte das aber nach Spritsorte separieren:

define GreenlineDieselNotify notify Greenline.*Diesel* {WhatsApp_Diesel ("Test")}

Leider funktioniert das Zweite nicht.

Was mache ich falsch?

Vielen Dank
Titel: Antw:Notify
Beitrag von: betateilchen am 25 Juli 2016, 17:45:05

define GreenlineDieselNotify notify Greenline.*Diesel.* {WhatsApp_Diesel ("Test")}
Titel: Antw:BenzinpreisMonitor
Beitrag von: stromer-12 am 30 Juli 2016, 02:15:17
Hi,

Habe nochmal wegen der Nachkommastellen gesucht:

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: RaspiCOC am 05 August 2016, 15:43:43
Wahrscheinlich würde ichdie Lösung irgendwo in diesem Thread finden. Aus irgendeinem Grund wirft mir folgende Abfrage der Heizölpreise kein Reading aus:

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]+)


Die RegEx habe ich auf RegExr getestet. Sie wirft mir den niedrigsten Preis, also den ersten Preis der Liste als Group1 aus. Nur wird kein Reading erzeugt. Was ist hier falsch?
Titel: Antw:BenzinpreisMonitor
Beitrag von: ergerd am 21 September 2016, 17:46:45
Hallo zusammen,

ich bekomme seit dem 7.09.2016 nur noch folgende Meldung, wenn www.clever-tanken.de abgerufen wird:

Read response to update didn't match any Reading

Hat sich da etwas geändert?

Grüße
Rainer
Titel: Antw:BenzinpreisMonitor
Beitrag von: moonsorrox am 21 September 2016, 17:55:28
Nein...

alles gut heute:
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
Titel: Antw:BenzinpreisMonitor
Beitrag von: ergerd am 21 September 2016, 20:00:04
Vielen Dank moonsorrox!

Unsere Tanke hat die Marke gewechselt und daher eine neue Nummer erhalten.

Grüße
Rainer
Titel: Antw:BenzinpreisMonitor
Beitrag von: gloob am 23 September 2016, 07:55:12
Hallo,

Ich nutze due API von Tankerkönig jedoch bekomme ich zur Zeit ab und an Fehlermeldungen im Log.

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,


Kann jemand was damit anfangen und mir sagen, wie ich es beheben könnte?

Vielen Dank.
Stefan
Titel: Antw:BenzinpreisMonitor
Beitrag 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:


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: */*
Titel: Antw:BenzinpreisMonitor
Beitrag von: kumue am 27 September 2016, 17:32:47
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:


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: */*


Danke für den Tipp.
Habs gestern bei mir auch umgestellt und es läuft fehlerfrei...
Titel: Antw:BenzinpreisMonitor
Beitrag von: gloob am 27 September 2016, 19:04:48
Läuft auch bei mir. Jetzt muss ich nur schauen wie ich das ganze wieder in eine Readingsgroup bekomme oder hat jemand ein Sample für mich
Titel: Antw:BenzinpreisMonitor
Beitrag 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.

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 &nbsp;;
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) }

Im Attribut replacement1Value habe ich den API-Key hinterlegt, den ich bei der Registrierung auf der Tankerkönig-Seite https://creativecommons.tankerkoenig.de/ erhalten habe. Die beiden Platzhalter in der URL %apikey% und %stationlist% werden vor dem Aufruf der URL dann entsprechend der Angaben in den Attributen replacement1Value und replacement2Value ersetzt.

Und hier noch das Plotfile SVG_FileLog_Benzinpreise.gplot

# 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

Das muss bei anderen Tankstellen dann natürlich entsprechend anders aussehen. Und ich interessiere mich nur für E10; wer Diesel möchte, muss es entsprechend anpassen.

Kernelement ist eine Routine in der 99_myUtils.pm, denn dort ist u.a. die Liste der abzufragenden Tankstellen hinterlegt:

#################################################################
###       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);
   }
}


In der Tabelle der Tankstellen wird als Schlüssel die ID von Tankerkönig verwendet. Diese findet man zum Beispiel, wenn man nach einer Suche auf der Landkarte mit den Treffern auf ein Tankstellenfähnchen klickt und dann dort auf das gelbe Feld "Meldung" klickt: nun kann man die ID der Tankstelle im Adressfeld des Browsers ablesen. Die Schlüssel verweisen auf die Felder "sort", "brand" und "address". Das erste Feld "sort" dient zur Festlegung der Reihenfolge bei der Darstellung in der readingsGroup, "brand" wird verwendet um auf ein Icon mit der Tankstellen-Marke zu verweisen (tankstelle_<brand>.png), also etwa tankstelle_shell.png; diese Icons habe ich selbst erstellt und unter /opt/fhem/www/images/default abgelegt (ich vermute, dass es da rechtliche Probleme geben könnte, so dass ich die Icons hier nicht einstellen möchte). Allerdings funktionieren die Icons derzeit noch  nicht. Unter "address" ist der Name und die Adresse der jeweiligen Tankstelle hinterlegt. Dies sind ja statische Informationen und Tankerkönig hat etwas dagegen, wenn man sich solche Informationen ständig über die Web-Schnittstelle neu zieht, daher hier direkt abgelegt. Die Adressen werden automatisch in ein entsprechende Readings kopiert.

Anbei ein Bild wie das Ganze dann derzeit bei mir aussieht.

Was ist noch offen?

Nachtrag: das nun modifizierte gasoline2.svg läßt sich jetzt rot und grün einfärben und liegt nun hier bei.
Nachtrag 2: nun sieht die readingsGroup schon besser aus, jetzt fehlen nur noch die Icons, die statt der Tankstellen-Id angezeigt werden sollen. Bild hänge ich an.
Nachtrag 3: kleinere Anpassungen am Code vorgenommen (z.B. neues Feld um die Sortierreihenfolge individuell festzulegen)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Ascos am 01 November 2016, 19:03:32
Hey,

ich habe heute bei mir auch den Spritpreismonitor vom Wiki mit Clever-Tanken eingerichtet.
Das alles läuft auch einwandfrei.
Nun würde ich gerne noch die Zeit anzeigen lassen, wann der Preis das letzte Mal online aktualisiert wurde.
Ich habe mich schon ein bisschen selbst dran versucht, aber es leider nicht hinbekommen, den Teil aus dem Quellcode zu extrahieren.
Leider hat mir die Onlinehilfe auf regex101.com auch nicht geholfen. Was dort angeblich funktioniert, geht in FHEM leider nicht.
kann mir jemand helfen?

Viele Grüße
Tino
Titel: Antw:BenzinpreisMonitor
Beitrag 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...


attr DEIN_SPRITPREIS_MONITOR userReadings Stand {lastCheck}

in der 99_myUtils.pm die Funktion lastCheck eingetragen

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 )
    );
}


Wenn FHEM die Daten holt, wird das Reading Stand aktualisiert.
sieht bei mir dann so aus:
Stand     18:17 01.11.2016
Titel: Antw:BenzinpreisMonitor
Beitrag von: Ascos am 01 November 2016, 19:27:47
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...

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:

Letzte 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Cruiser79 am 07 November 2016, 09:21:49
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:

Letzte 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
Poste doch mal, welche URL du genau abfragst und wie du momentan versucht hast, den Wert auszulesen?

Gruß,
Tim
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pankratius am 07 November 2016, 14:05:00
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:

Letzte 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

Hallo Tino,

lustig, genau das habe ich heute vormittag gemacht.

Hier meine Codes:

fhem.cfg

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 €'}

und in tablet UI

<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>

Hier das Ergebnis:


Ich habe nur die Uhrzeit ausgegeben um die Anzeige nicht zu groß werden zu lassen.

Das Grundmuster habe ich aus dem Wiki genommen und das tablet UI von jürgensTechnickwelt (Jürgen: Danke für die tollen Vorlagen )

Viel Spaß
Rüdiger

Titel: Antw:BenzinpreisMonitor
Beitrag von: Ascos am 07 November 2016, 16:09:31
Hallo Rüdiger,

das ist ja super, vielen Dank. Funktioniert einwandfrei.
Was für ein Timing.

Viele Grüße
Tino
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pankratius am 07 November 2016, 16:15:48
Hallo Tino,

aktuell habe ich die Preise farblich hervorgehoben ( < 1.10, <1.20,>1.20).
Aber im Moment habe ich keine Idee wie ich es hinbekomme die Zeit rot zu markieren wenn der Zeitpunkt länger als
15 Stunden alt ist und evlt. grün wenn er kürzer als 1 Stunde.

Da bin ich noch am grübeln,
vielleicht hat jemand eine Idee.

Viele Grüße
Rüdiger
Titel: Antw:BenzinpreisMonitor
Beitrag von: pHiDdeath am 09 November 2016, 13:46:48
hallo zusammen, forgendes Problem. habe alles nach Anleitung (http://www.fhemwiki.de/wiki/Spritpreismonitor) gemacht, funzt auch soweit, nur bekomme ich es nicht hin das mir der Superplus preis angezigt wird. jemand eine idee ?

grüße
Titel: Antw:BenzinpreisMonitor
Beitrag von: hartenthaler am 09 November 2016, 18:38:36
Hallo pHiDdeath!
Magst Du nicht noch ein paar mehr Infos preisgeben? Oder sollen wir mal raten?

Also: Was bekommst Du nicht hin? Welche Tankstelle? Hat die überhaupt Superplus? Wie sieht die Definition Deines Devices aus? Was genau geht nicht? Welche Fehlermeldung kommt im Logfile? etc. ....

Hilfe kann man nur bekommen, wenn man es den Helfern nicht unmöglich macht zu helfen.

Viel Grüße
Hermann
Titel: Antw:BenzinpreisMonitor
Beitrag von: pHiDdeath am 09 November 2016, 19:28:40
habs nach der anleitung ausm wiki gemacht , die tankstelle ist die Sprint *01662 Meißen* und ja die bietet SuperPlus an ,
attr Shell readingsName_SuperPlus SuperPlus
attr Shell readingsName_SuperE5 SuperE5
attr Shell readingsRegex_SuperPlus <span>SuperPlus</span>[^0-9]+([0-9\.]+)
attr Shell readingsRegex_SuperE5 <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Shell room Spritpreise
attr Shell stateFormat Preis: SuperE5 € SuperPlus €
attr Shell timeout 5

der SuperE5 wird angezeigt, SuperPlus wird nicht angezeigt, erscheint auch nicht in den Readings ...
Titel: Antw:BenzinpreisMonitor
Beitrag von: hartenthaler am 09 November 2016, 20:10:16
Dann liegt es am regulären Ausdruck in readingsRegex_SuperPlus "<span>SuperPlus</span>[^0-9]+([0-9\.]+)". Vergleiche diesen Ausdruck mal mit dem Inhalt im buf. Suche die Stelle wo "<span>SuperPlus<span>" steht. Wird das dort genau so geschrieben? Direkt danach müsste der Preis kommen.
Titel: Antw:BenzinpreisMonitor
Beitrag 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 ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pankratius am 09 November 2016, 21:32:04
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 ;)

Ja manchmal sind es die Kleinigkeiten die einen manchmal ausbremsen,
aber mit suchen und finden klappt es halt.

:)
Rüdiger
Titel: Antw:BenzinpreisMonitor
Beitrag von: domii666 am 16 November 2016, 09:58:03
hab das nach Wiki gemacht aber mir zeigt es leider nur das hier an

tanken Suedtank                                                                        Liter_Diesel: Diesel
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pankratius am 16 November 2016, 10:32:44
Zitat von: domii666 am 16 November 2016, 09:58:03
hab das nach Wiki gemacht aber mir zeigt es leider nur das hier an

tanken Suedtank                                                                        Liter_Diesel: Diesel

Sieht aus als ob der reguläre Ausdruck nicht stimmt.

Müsstest mal schauen was in der heruntergeladenen Datei steht.

Zeig mal die entsprechenden Codes.

Gruß
Rüdiger

Titel: Antw:BenzinpreisMonitor
Beitrag von: domii666 am 16 November 2016, 16:28:54
hat sich mittlerweile erledigt und es klappt danke, war zu ungeduldig, aktualisierungsintervall zu lang.

Titel: Antw:BenzinpreisMonitor
Beitrag von: derNeue am 18 November 2016, 08:46:16
Morgen zusammen, ich habe ein Problem mit dem Benzinpreismonitor.....

hier mein Code der in der fhem.cfg steht. Die Preise werden ausgelesen und es geht auch alles Ich bekomme nur kein Diagramm (Plot)

#Tankstelle Eschweiler HIT

##################################################################

#Tankstelle Eschweiler HIT

define Eschweiler_Hit HTTPMOD http://www.clever-tanken.de/tankstelle_details/21784 600
attr Eschweiler_Hit userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr Eschweiler_Hit enableControlSet 1
attr Eschweiler_Hit group Spritpreise
attr Eschweiler_Hit icon gasoline
attr Eschweiler_Hit reading01Name SuperE10
attr Eschweiler_Hit reading01Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
attr Eschweiler_Hit reading02Name SuperE5
attr Eschweiler_Hit reading02Regex <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Eschweiler_Hit reading03Name aktZeit
attr Eschweiler_Hit 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 Eschweiler_Hit reading04Name test
attr Eschweiler_Hit reading04Regex Letzte MTS-K Preisänderung: (([01]?\d|2[0-3]):([0-5]?\d))
attr Eschweiler_Hit room Spritpreise
attr Eschweiler_Hit stateFormat SuperE5 SuperE10 aktZeit-1
attr Eschweiler_Hit timeout 5

#Tankstelle Eschweiler Jet

define Markant_Aldenhoven HTTPMOD http://www.clever-tanken.de/tankstelle_details/10374 600
attr Markant_Aldenhoven userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr Markant_Aldenhoven group Spritpreise
attr Markant_Aldenhoven icon gasoline
attr Markant_Aldenhoven reading01Name SuperE10
attr Markant_Aldenhoven reading01Regex <span>Super E10</span>[^0-9]+([0-9\.]+)
attr Markant_Aldenhoven reading02Name SuperE5
attr Markant_Aldenhoven reading02Regex <span>Super E5</span>[^0-9]+([0-9\.]+)
attr Markant_Aldenhoven reading03Name aktZeit
attr Markant_Aldenhoven 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 Markant_Aldenhoven reading04Name test
attr Markant_Aldenhoven reading04Regex Letzte MTS-K Preisänderung: (([01]?\d|2[0-3]):([0-5]?\d))
attr Markant_Aldenhoven room Spritpreise
attr Markant_Aldenhoven stateFormat SuperE5 SuperE10 aktZeit-1
attr Markant_Aldenhoven timeout 5


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



define Spritpreise readingsGroup (Eschweiler_Hit|Markant_Aldenhoven):(SuperE5|SuperE10).*
attr Spritpreise group Spritpreisuebersicht
attr Spritpreise notime 1
attr Spritpreise room Spritpreise
attr Spritpreise valueFormat {'%.2f €'}

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

in meiner SVG_FileLog_Spritpreise_1.gplot steht das .....

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:Eschweiler_Hit.SuperE10\x3a:1:
#FileLog 4:Total.Diesel\x3a:1:
#FileLog 4:Eschweiler_Hit.SuperE5\x3a:1:
#FileLog 4:Shell.SuperE5\x3a:1:


plot "<IN>" using 1:2 axes x1y2 title 'Eschweiler_Hit SuperE10' ls l1 lw 1 with lines,\
     
     "<IN>" using 1:2 axes x1y2 title 'Eschweiler_Hit SuperE5' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Markant_Aldenhoven SuperE10' ls l4 lw 1 with lines,\
     
     "<IN>" using 1:2 axes x1y2 title 'Markant_Aldenhoven SuperE5' ls l4 lw 1 with lines, \

Mein Fehler
Can't open /media/usblog/fhem/log/spritpreise-langen-2016-11.log: No such file or Directory

aber warum nicht ????



Danke , ich komme einfach nicht weiter...   



Titel: Antw:BenzinpreisMonitor
Beitrag von: kumue am 18 November 2016, 13:04:45
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

Vermute, der Pfad ist aus dem Wiki. Du musst ihn an deine Gegebenheiten anpassen...
Oder einen Pfad /media/usblog/fhem/log anlegen mit den entsprechenden Rechten, wenn Du es so haben möchtest.
Titel: Antw:BenzinpreisMonitor
Beitrag von: derNeue am 18 November 2016, 13:31:38
ja, habe ich mir gedacht, das der Pfad falsch ist....soll ich denn mit Filezilla eine Log Datei anlegen dort wo ich möchte, oder kann ich das auch über Fhem....

Die angaben stehen in der Wiki, wenn das nicht stimmt sollte man das einmal anpassen....

Gruß
Danke
Titel: Antw:BenzinpreisMonitor
Beitrag von: kumue am 18 November 2016, 14:10:22
Du kannst ja mit dem Attribut logdir bei global einen Pfad für deine Logdateien angeben.
attr global logdir <DEIN_PFAD>

und bei der Definition von FileLog dich mit %L darauf beziehen...
siehe commandref http://fhem.de/commandref_DE.html#FileLog (http://fhem.de/commandref_DE.html#FileLog)
ZitatFHEM ersetzt %L mit dem Wert des global logdir Attributes.
Titel: Antw:BenzinpreisMonitor
Beitrag von: hartenthaler am 04 Dezember 2016, 04:05:15
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.
...

Ich war damals mit der readingsGroup noch nicht zufrieden. Inzwischen ist es weitgehend so wie ich es wollte, allerdings deutlich komplizierter als gedacht. Einen aktuellen Screenshot hänge ich an.

Ein Hauptgrund für die Entwicklung der hier vorgestellten Lösung war, dass ich keine regulären Ausdrücke verwenden wollte um die passenden Angaben aus einer Webseite herauszusuchen. Jedes Mal wenn sich die Webseite ändert, muss man dann nacharbeiten. Eine Schnittstelle im XML-Format, wie sie Tankerkönig bietet, ist da viel stabiler (um diese Lösung zu nutzen, muss man sich auf der Tankerkönig-Seite https://creativecommons.tankerkoenig.de/ registrieren und einen API-Key besorgen). Dann wollte ich für die Benzinpreise nur ein Device haben in dem alles zusammen gefasst ist. Und ich wollte eine Struktur wo ich beim Hinzufügen oder Ändern von Tankstellen diese Änderung nur an einer Stelle machen muss und alles andere sich dann automatisch danach ausrichtet (dieses Ziel habe ich fast, aber nicht ganz erreicht). Ob diese Vorteile gegenüber der gestiegenen Komplexität meiner Lösung im Vergleich zu bisher hier diskutierten Lösungen wirklich überwiegen, muss jeder selbst beurteilen.

Kernelement ist eine Routine in der 99_myUtils.pm, denn dort ist u.a. die Liste der abzufragenden Tankstellen hinterlegt:

#################################################################
###       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"
   }
}


In der Tabelle der abzufragenden Tankstellen wird als Schlüssel die ID von Tankerkönig verwendet. Diese konnte man bislang recht einfach finden, wenn man nach einer Suche auf der Landkarte von Tankerkönig mit den Treffern auf ein Tankstellenfähnchen klickte und dann dort auf das gelbe Feld "Meldung" klickte. In der aktuellen Version der Webseite habe ich so eine Möglichkeit nicht mehr gefunden. Aber man kann nun stattdessen im Browser eine Umkreissuche starten:
https://creativecommons.tankerkoenig.de/json/list.php?lat=52.1&lng=13.5&rad=25&type=diesel&apikey=xxx&sort=dist
Dort muss man die ungefähren Koordinaten der gesuchten Tankstellen bei lat/lng eingeben, den Suchradius (in km) bei rad setzen und den eigenen apikey statt der xxx einsetzen. In der Trefferliste kann man dann die gewünschten Tankstellen raussuchen und deren "id" notieren.

Die Schlüssel mit den IDs in der Tankstellenliste verweisen auf die Felder "sort", "brand" und "address". Das erste Feld "sort" dient zur Festlegung der Reihenfolge bei der Darstellung in der readingsGroup, "brand" wird verwendet um auf ein Icon mit der Tankstellen-Marke zu verweisen (tankstelle_<brand>.png), also etwa tankstelle_shell.png; diese Icons habe ich selbst erstellt und unter /opt/fhem/www/images/default abgelegt (ich vermute, dass es da rechtliche Probleme geben könnte, so dass ich die Icons hier nicht einstellen möchte). Unter "address" ist der Name und die Adresse der jeweiligen Tankstelle hinterlegt. Dies sind ja statische Informationen und Tankerkönig hat etwas dagegen, wenn man sich solche Informationen ständig über die Web-Schnittstelle neu zieht, daher sind sie hier direkt abgelegt. Die Angaben zu den Icons und den Adressen werden automatisch in entsprechende Readings des Benzinpreis-Devices kopiert.

Das Device sieht bei mir dann so aus

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)}

Im Attribut replacement1Value habe ich den API-Key hinterlegt, den ich bei der Registrierung auf der Tankerkönig-Seite https://creativecommons.tankerkoenig.de/ erhalten habe. Die beiden Platzhalter in der URL %apikey% und %stationlist% werden vor dem Aufruf der URL dann entsprechend der Angaben in den Attributen replacement1Value und replacement2Value ersetzt. Im Attribut userReadings stehen Angaben, die dafür sorgen dass jedes Mal, wenn eine Tankstelle ausgelesen wird, ein Zeitstempel gesetzt wird, so dass man ggf. erkennen kann, wenn Werte nicht mehr aktuell sind, etwa weil es die Tankstelle inzwischen nicht mehr gibt. Diese Liste muss man bei jeder Änderung der Tankstellenliste anpassen, also auch beim ersten Mal nach der Definition. Das kann man tun indem man in der fhem-Kommandozeile folgendes eingibt (der zweite Parameter ist der Name des fhem-Devices):
{ myPetrolStationInfo("userReadings","Benzinpreise") }
Die Ausgabe dieses Befehls kopiert man dann in das Attribut userReadings.

Ergänzend kann man ein Logfile anlegen und den Preisverlauf plotten:

## 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


Und hier noch das Plotfile SVG_FileLog_Benzinpreise.gplot

# 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

Das muss bei anderen Tankstellen dann natürlich entsprechend anders aussehen. Hier interessiere ich mich nur für E10; wer Diesel möchte, muss es entsprechend anpassen. Und wenn man Tankstellen hinzufügt/löscht/ändert muss man das Plotfile auch anfassen.

Und zu guter letzt die etwas trickreiche readingsGroup

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 &nbsp;;
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) }


Abschliessende Bemerkungen:
Titel: Antw:BenzinpreisMonitor
Beitrag von: bele2000 am 01 Januar 2017, 15:23:14
Hi, allen ein gutes neues Jahr
ist der Benzinpreismonitor auch mit mehrTanken möglich
https://mehr-tanken.de/tankstelle/0869d04b/superu-25-rue-du-tramway-67114#s95_e5
ich bekomme keine Preise angezeigt.
Hintergrund ist der Preis aus Frankreich.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Amenophis86 am 02 Januar 2017, 08:36:00
Nein, die Seite ist nicht integriert. Da musst du den Modul Ersteller fragen, ob er es umbaut. Alternativ kannst du dir die Preise mit HTTPMOD oder mit JSONList / JSON2List (Sollten Daten im JSON Format vorliegen) holen.
Titel: Antw:BenzinpreisMonitor
Beitrag von: rohlande am 26 Januar 2017, 10:52:40
Hallo Zusammen,

@Phil__ : kannst Du bitte im WIKI eine Ergänzung für die RegExp bezüglich "AUTOGAS" machen?

Ich habe bemerkt, dass unter Verwendung der Seite "http://www.clever-tanken.de/tankstelle_details/......." die Daten nicht richtig ausgelesen werden, da auf der Seite der Code für z.B. "Autogas" anders aufgebaut ist.

Vergleich:

<span>Diesel</span>[^0-9]+([0-9\.]+)
<span>Autogas</div>[^0-9]+([0-9\.]+)

Ich bin mir nicht sicher ob das jemand überhaupt benutzt. Ich tanke nur diese Sorte und finde das Modul echt super.

Gruss Denny



Titel: Antw:BenzinpreisMonitor
Beitrag von: betateilchen am 26 Januar 2017, 10:57:41
Zitat von: rohlande am 26 Januar 2017, 10:52:40
<span>Autogas</div>[^0-9]+([0-9\.]+)

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:



<div class="fuel-price-type"><span>SuperPlus</div>
<div class="fuel-price-type"><span>Autogas</div>

Titel: Antw:BenzinpreisMonitor
Beitrag von: rohlande am 26 Januar 2017, 11:00:07
Da bin ich mir halt nicht sicher. Denn die Tankstellen welche ich verwendet habe (2.Stck) sind beide so aufgebaut.
Nachdem ich mir die Code Blöcke der Seiten angeschaut habe, ist mir das aufgefallen.

Gruss Denny

Titel: Antw:BenzinpreisMonitor
Beitrag von: ph1959de am 26 Januar 2017, 11:17:28
Zitat von: betateilchen am 26 Januar 2017, 10:57:41
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:



<div class="fuel-price-type"><span>SuperPlus</div>
<div class="fuel-price-type"><span>Autogas</div>


Scheint bei allen "Kraftstoffsorten" falsch zu sein, die nicht als "MTS-K Preis" gekennzeichnet sind.

<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>

Für diese Fälle wird wohl definitiv fehlerhaftes html generiert.
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 01 März 2017, 13:46:59
Gibt es auch die Möglichkeit, Daten aus Luxemburg einzubinden?

Als Datenquelle könnte man http://www.petrol.lu/Prix/ nehmen, das sind die staatlich (?) vorgegebenen Maximalpreise, die nutzen wohl alle Marken-Tankstellen, die Freien liegen da hier und da mal ein paar Cent drunter.
Alternativ stehen die Preise auch auf der Webseite von ARAL Luxemburg: http://www.aral.de/de_lu/luxembourg/kraftstoffe-und-preise/aktuelle-kraftstoffpreise.html

Ich wohne recht nah an der Grenze, für mich wäre es interessant zu wissen, ob es sich lohnt "rüber" zu fahren...
Titel: Antw:BenzinpreisMonitor
Beitrag von: ares am 27 März 2017, 21:42:44
Zitat von: szoller am 01 März 2017, 13:46:59
Gibt es auch die Möglichkeit, Daten aus Luxemburg einzubinden?

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:

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.]+)


Viele Grüße
Manfred
Titel: Antw:BenzinpreisMonitor
Beitrag von: ares am 27 März 2017, 21:46:03
Ach ja, die dritte Stelle hinter dem Komma erhältst Du bei http://www.clever-tanken.de z.B. wie folgt:
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;;


Viele Grüße
Manfred
Titel: Antw:BenzinpreisMonitor
Beitrag von: stromer-12 am 27 März 2017, 22:16:51
Ich suche mir so die Werte mit 3.Stelle:

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: ares am 27 März 2017, 22:28:23
Zitat von: stromer-12 am 27 März 2017, 22:16:51
Ich suche mir so die Werte mit 3.Stelle:

Die Vereinfachung habe ich dankend übernommen!

Viele Grüße
Manfred
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 28 März 2017, 00:45:08
Uff, danke, werde ich die Tage mal ausprobieren! Wäre ja genial, wenns klappen würde  ;)
Titel: Antw:BenzinpreisMonitor
Beitrag von: ArduPino am 31 März 2017, 18:46:53
Ich habe das auch mit HTTPMOD gelöst, nun habe ich aber gesehen das ich Meldungen im LOG habe:
Error: read from http://www.keup.lu:80 timed out
Error: read from http://www.clever-tanken.de:80 timed out
Daten werden aber geliefert.
Kann man das vernachlässigen ?
Titel: Antw:BenzinpreisMonitor
Beitrag 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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 07 Juni 2017, 08:21:18
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

Gute Arbeit :-)

damit es nicht in Vergessenheit gerät wäre es da nicht genial im Wiki von FHEM aufgehoben?

Liebe Grüße

Wuppi
Titel: Antw:BenzinpreisMonitor
Beitrag von: Waschto am 07 Juni 2017, 15:45:27
Zitatdamit es nicht in Vergessenheit gerät wäre es da nicht genial im Wiki von FHEM aufgehoben?

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wuppi68 am 07 Juni 2017, 15:56:49
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

mach es selber :-)

am besten auch Deinen Blogeintrag dort ablegen :-)
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 16 Juni 2017, 02:08:02
Zitat von: ares am 27 März 2017, 21:42:44
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:
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,]+)

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.]+)

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...)
Titel: Antw:BenzinpreisMonitor
Beitrag von: ares am 16 Juni 2017, 12:23:03
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...)

Weitere Beispiele:
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.]+)


Viele Grüße
Manfred
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 16 Juni 2017, 14:40:13
Irgendwas mach ich falsch, verstehe das aber auch ehrlich gesagt nicht so richtig... :-/

Momentan siehts bei mir so aus:
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


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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: ares am 16 Juni 2017, 14:56:44
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.

Na dann lösch die doppelten doch einfach:
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\.]+)


und Du hast Dich vertippt:
attr KP_Aral_LU reading03Regex (?s)text">Diesel.*?inkl.?text">([0-9.]+)
statt:
attr KP_Aral_LU reading03Regex (?s)text">Diesel.*?inkl.*?text">([0-9.]+)
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 16 Juni 2017, 18:00:02
Danke, es klappt nun! :)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Neelix am 02 Mai 2018, 21:34:01
Hallo zusammen,

ich bekomme seit 14 Tagen immer den gleichen Spritpreis angezeigt. Bei der Recherche ist mir aufgefallen das Clever-Tanken.de auf HTTPS umgestellt hat.

Im Logfile findet sich deshalb folgender Eintrag bei mir:
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.


Ist das schon bekannt, oder muss ich lokal bei mir auf Fehlersuche gehen. Hat da jemand eine Idee wo ich ansetzen kann?
Titel: Antw:BenzinpreisMonitor
Beitrag von: gloob am 03 Mai 2018, 06:45:27
Bei Tankerkönig klappt es noch ohne Probleme:

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wernieman am 03 Mai 2018, 08:27:12
ZitatIO/Socket/SSL.pm
Hast Du das passende Perl Modul installiert?

Auf Systemebene:
apt-get install libio-socket-ssl-perl

Wenn Du natürlich per CPAN installiert, mußt Du es anders machen
Titel: Antw:BenzinpreisMonitor
Beitrag von: Neelix am 04 Mai 2018, 21:38:08
Hallo Wernieman,

ich habe FHEM auf der Synology laufen. Dort ist per iPKGui das Paket "perl-io-socket-ssl" mit Version 2.012-2 installiert.

Wie schon geschrieben, lief das ganze bis 23.04., vermutlich sogar mit der HTTPS-Variante von clever-tanken.de

Nach weiterer Recherche im FHEM LogFile, bin ich auf weitere Fehlermeldungen im Zusammenhang mit HTTPMOD gestoßen. Was mich dann zum iPKG geführt hat. Da musste ich feststellen, das die iPKGui-Update-Funktion gehangen hatte. Es waren letztendlich 16 Perl-Module zu aktualisieren.

Jetzt läuft der Spritpreis-Monitor mit "perl-io-socket-ssl" Version 2.012-3, egal mit welcher URL ob HTTP oder HTTPS.

Danke trotzdem für den Hinweis auf das Perl-Modul.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wernieman am 04 Mai 2018, 21:45:55
Zitat16 Perl-Module zu aktualisieren.

Was genau das problem von CPAN ist. Wenn Teile Aktuallisiert werden, macht er keine Komplettaktuallisierung .... und dann kann es passieren, das man zwar Module "drauf" hat, sie aber nicht verwendet werden ...

Btw:
https://stackoverflow.com/questions/3727795/how-do-i-update-all-my-cpan-modules-to-their-latest-versions (https://stackoverflow.com/questions/3727795/how-do-i-update-all-my-cpan-modules-to-their-latest-versions)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Stonemuc am 17 Juli 2018, 11:34:10
Ich habe mir jetzt mal den Spritpreismonitor 2.0 von waschto eingerichtet, bekomme aber immer folgende Fehlermeldungen im logfile und kann auch keine Nachrichten senden. Hat da jemand eine Idee woran es liegen könnte?

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: kleineslichtHH am 17 Juli 2018, 14:35:06
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




dein Device zum senden müsste hiernach 0 heißen. Wenn dem nicht so ist, dann liegt da der Fehler
Titel: Antw:BenzinpreisMonitor
Beitrag von: Stonemuc am 17 Juli 2018, 21:46:55
Ich finde den Punkt nicht, wo ich das so fefiniert hätte...das Ding müsste normal Citylife****_Bot heißen.

ich muss je ein setreading erstellen im Beispiel heißt es setreading Spritmonitor telegram telegram - an welche stelle muss hier mein Citylife***_Bot? Eventuell habe ich die Werte da vertauscht...oder muss ich beide mit dem Bot ersetzen?
Titel: Antw:BenzinpreisMonitor
Beitrag von: kleineslichtHH am 18 Juli 2018, 10:23:07

Es könnte daran liegen:


Laut Webseite:

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
Titel: Antw:BenzinpreisMonitor
Beitrag von: Stonemuc am 18 Juli 2018, 21:04:12
Ich hab versucht den Spritmonitor 2.0 zu installieren - da sieht das mit dem Notify leider anders aus
Titel: Antw:BenzinpreisMonitor
Beitrag von: Lippie am 01 Dezember 2018, 13:49:36
Hi,

bin neu hier im Forum, nachdem ich schon eine ganze Weile FHEM nutze und immer wieder interessante Module mit Hilfe des Forums eingerichtet habe, bin ich über de Spritpreismonitor im Wiki gestolpert.
Mir ist aufgefallen, dass die obligatorischen 0.009€ nur dazuaddiert werden sollen. Aber es gibt ja auch Tankstellen mit 0.004€.

falls es euch interessiert, ich habe folgendes verändert, um alles korrekt auszulesen:

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) }


Beste Grüße
Lippie


Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 01 Dezember 2018, 15:04:27
Zitat von: Lippie am 01 Dezember 2018, 13:49:36
Falls es euch interessiert, ich habe folgendes verändert, um alles korrekt auszulesen:
Willkommen im Forum,

cool wäre es, wenn Du Deinen Code noch in codetags einschließen würdest. Geht auch nachträglich noch und ist deutlich lesbarer.

Danke + Gruß

Peter
Titel: Antw:BenzinpreisMonitor
Beitrag von: bsl02 am 26 April 2019, 23:48:57
Hallo,

hat sich in den letzten Tagen bezüglich "BenzinpreisMonitor" etwas geändert?
Seit    2019-04-24 09:49:53   werden bei mir keine Werte mehr aktualisiert.

Gruß, Stefan

/EDIT:
Thema wird bereits diskutiert: https://forum.fhem.de/index.php/topic,99939.0.html (https://forum.fhem.de/index.php/topic,99939.0.html)
Titel: Antw:BenzinpreisMonitor
Beitrag von: Pumba9876 am 28 Mai 2019, 18:35:05
Habe schon gedacht das ich irgend etwas falsch gemacht habe
Bei mir funktioniert es auch nicht mehr.
Titel: Antw:BenzinpreisMonitor
Beitrag von: Atze am 19 September 2019, 18:16:34
Die Lösung ist relativ einfach.

Ihr geht dazu in FHEM auf eure ,,Tankstelle" und wählt das RegEx aus und tauscht den Code gegen die unten stehende Variante aus.
Schon funktioniert der Spritpreismonitor wieder.

ALT
<span>Diesel</span>[^0-9]+([0-9.]+)
<span>Super E10</span>[^0-9]+([0-9.]+)
<span>Super E5</span>[^0-9]+([0-9.]+)


Neu

<span id="current-price-1">([0-9.]+)
<span id="current-price-2">([0-9.]+)
<span id="current-price-3">([0-9.]+)


Quelle: https://stefans-itblog.de/fhem-aenderungen-am-spritpreismonitor-04-2019/
Titel: Antw:BenzinpreisMonitor
Beitrag von: jopi am 27 Oktober 2019, 13:30:21


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.]+)

Hallo, ich bekomme es nicht hin die Preise aus Luxemburg mit MwSt. auszulesen. Ohne MwSt. funktioniert es.
Viele Grüße
 
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 26 November 2019, 22:52:42
@jopi:

Hast du es hinbekommen? Bei mir klappt's auch nicht mehr :(
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 26 November 2019, 23:31:06
attr Lux reading01Regex (?s)<td>EuroSuper 95.*?<td>.*?<td>([0-9.]+)
Titel: Antw:BenzinpreisMonitor
Beitrag von: szoller am 27 November 2019, 17:59:26
Danke, hat funktioniert!
Titel: Antw:BenzinpreisMonitor
Beitrag von: Wasserwerk33 am 21 Januar 2020, 23:59:15
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.
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 22 Januar 2020, 00:09:06
Seite 26?
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 22 Januar 2020, 08:04:31
Zitat von: amenomade am 22 Januar 2020, 00:09:06
Seite 26?
müsste eher Seite 27 (https://forum.fhem.de/index.php/topic,22554.390.html) sein  ;)

Gruß Peter
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 22 Januar 2020, 18:32:08
Wenn ich deinen Link folge, lande ich auf Seite 16...
Titel: Antw:BenzinpreisMonitor
Beitrag von: frank am 22 Januar 2020, 19:24:35
da jeder die anzahl der beiträge pro seite im profil einstellen kann, solltet ihr euch vielleicht auf eine "eindeutigere" aussage einigen.  :)
zb die nummer einer antwort.
Titel: Antw:BenzinpreisMonitor
Beitrag von: PeMue am 22 Januar 2020, 19:57:34
Zitat von: frank am 22 Januar 2020, 19:24:35
zb die nummer einer antwort
dann die #390 ff. (https://forum.fhem.de/index.php/topic,22554.msg513776.html#msg513776)  ;)

Gruß Peter
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 22 Januar 2020, 23:55:17
Zitat von: Wasserwerk33 am 21 Januar 2020, 23:59:15
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.
Ok, jetzt weiss ich was Du versucht hast ;)

"dieses klappt aber nicht": was bedeutet das genau? Kann man das nicht einfügen? Kommt eine Ferhlermeldung? Kommt nichts in der Log, aber die Zeit wird nicht aktualisiert, trotz erfolgreiches Einfügen?
Titel: Antw:BenzinpreisMonitor
Beitrag von: romakrau am 05 Oktober 2020, 23:06:56
Hallo zusammen,
ich habe dasselbe Problem das bei mir die Uhrzeit nicht ausgegeben wird. Ich habe gemäß dem Beitrag #390 definiert:

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


Ich bin leider kein Regex-Experte und bräuchte da etwas Hilfe.
Gurß Roman
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 05 Oktober 2020, 23:19:22
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))
oder nur die Zeit:
attr Aral reading05Regex Letzte Aktualisierung:.*?(([01]?\d|2[0-3]):([0-5]?\d))
Titel: Antw:BenzinpreisMonitor
Beitrag von: romakrau am 05 Oktober 2020, 23:41:13
Danke, aber das funktioniert nicht bei mir?!
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 06 Oktober 2020, 00:09:58
Hast Du das geändert? Zeig bitte ein list von deinem HTTPMOD, wie er nach Änderung aussieht
Titel: Antw:BenzinpreisMonitor
Beitrag von: romakrau am 06 Oktober 2020, 03:51:10
Anbei das httpmod:

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



Ich habe das auch mal mit regex101 getestet, das ergab:
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

also alles in Ordnung. Funktioniert wohl der Regex nicht so wie er soll?

NACHTRAG: Typisch wenn man Nachts nicht mehr zwischen Edit der CFG und der Benutzeroberfläche unterscheiden kann. Läuft!!
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 06 Oktober 2020, 18:47:22
attr Aral reading05Regex attr Aral reading05Regex Letzte Aktualisierung:.*?(([01]?\d|2[0-3]):([0-5]?\d))


???

Sowas habe ich nicht geschrieben.
Titel: Antw:BenzinpreisMonitor
Beitrag von: amenomade am 06 Oktober 2020, 18:48:57
Zitat von: romakrau am 06 Oktober 2020, 03:51:10

NACHTRAG: Typisch wenn man Nachts nicht mehr zwischen Edit der CFG und der Benutzeroberfläche unterscheiden kann. Läuft!!
Da ist nichts zu entscheiden. Immer Benutzeroberfläsche.
Titel: Antw:BenzinpreisMonitor
Beitrag von: infokalypse am 23 Oktober 2021, 12:13:50
Hallo zusammen, da ich das Modul schon sehr lange nutze und schon viel aus diesem Forum profitiert habe möchte ich gerne etwas zurückgeben. In meinem Fall lasse ich mich per Push benachrichtigen, wenn der Spritpreis unter einen bestimmten Wert gefallen ist und auch, wenn er danach wieder über diesen Wert steigt - um nicht umsonst zur Tanke zu fahren nachdem bereits wieder angepasst wurde. Vielleicht hilft es dem ein oder anderen hier, auch wenn der Thread ziemlich verwaist ist:

Dummy zur Eingabe des Wertes, unter dem eine Push-Meldung erfolgen soll: (per Weboberfläche oder iOS via Homebridge)

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:€


Abfrage, ob aktuell getankt werden muss (per Weboberfläche oder iOS via Homebridge)

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


DOIF für die Push-Benachrichtigung (Push erfolgt via Push_M mit PushNotifier) bei Unterschreiten des Preises in Benzinpreis_Eingabe:

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


Beispiel einer Tankstelle in FHEM:

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"}}


Bei Fragen, Wünschen oder Anregung lasst es mich gerne wissen. Bei mir läuft alles soweit stabil und problemlos, bin aber auch für Ideen und Verbesserungen zu haben.
Titel: Antw:BenzinpreisMonitor
Beitrag von: infokalypse am 23 Oktober 2021, 12:14:34
Alternativ dazu DOIF für die Push-Benachrichtigung (Push erfolgt via Push_M mit PushNotifier) bei Unterschreiten des günstigsten Monatsdurchschnittswertes aller in FHEM eingepflegten Tankstellen:

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


Und zur Visualisierung der Werte noch ein Filelog

define FileLog_Benzinpreise FileLog ./log/Benzinpreise-%Y-%m.log .*_Tankstelle:SVG_.*
attr FileLog_Benzinpreise logtype text
attr FileLog_Benzinpreise nrarchive 1


Und die passenden SVG Graphen dazu, einmal für Benzin und einmal Diesel

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


Bei den SVG ist folgendes wichtig: (am Beispiel für Super E10 bei Preisen zwischen 1,55 und 1,80 EUR/l
Y-Axis label: Super E10 in €/l
Range as [min:max]: [1.55:1.80]

Label: Name der Tankstelle
Source: FileLog_Benzinpreise
Column: 4
Regexp: ARAL_Tankstelle.SVG_SuperE10:
Rest ist Geschmacksache...