Hauptmenü

BenzinpreisMonitor

Begonnen von Phil__, 16 April 2014, 18:52:21

Vorheriges Thema - Nächstes Thema

frank

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.  ;)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

moonsorrox

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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Holger S

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

betateilchen


define GreenlineDieselNotify notify Greenline.*Diesel.* {WhatsApp_Diesel ("Test")}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stromer-12

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
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

RaspiCOC

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?

ergerd

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
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

moonsorrox

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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

ergerd

Vielen Dank moonsorrox!

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

Grüße
Rainer
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

gloob

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
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Amenophis86

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: */*
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

kumue

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

gloob

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
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

hartenthaler

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

  • Das Standard-fhem-Icon gasoline.svg lässt sich nicht grün/rot einfärben. Mein erster Versuch, das zu ändern, hat noch nicht geklappt. Hat jemand ein besseres Tankstellen-Icon?
  • Ich habe keine Ahnung wie man etwa neben der Spalte mit den E10-Preisen auch noch eine Spalte mit Diesel-Preisen angezeigt bekommt. Alles untereinander ist kein Problem, aber das sieht ja doof aus. Wie geht das denn?
  • Gravierender: ich möchte in der readingsGroup das Icon der Tankstelle und auch noch die Adresse anzeigen. Weiß aber noch nicht wie ich das hinbekomme. Hat jemand eine Idee? Meine Funktion in der myUtils kann per myPetrolStationInfo("address","Benzinpreise",$READING) die Adresse zu einem Tankstellen-Reading liefern, so dass man z.B. entsprechende userReadings generieren könnte, aber dann bleibt noch das Problem von 2.

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)
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Ascos

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
1x RaspberryPi 3, HMUART, HMLAN
4x HM-CC-RT-DN, 4x HM-Sec-SCo, 4x HM-TC-IT-WM-W-EU, 1 Jeelink, 4 Lacrosse Fühler, 2 LD382A
1x ZBox mit Kodibuntu, mehrere schaltbare Steckdosen