Hauptmenü

BenzinpreisMonitor

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

Vorheriges Thema - Nächstes Thema

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

PeMue

#241
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.
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

dirk.msc

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?

Puschel74

Hallo,

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

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

dirk.msc

Danke, so geht's natürlich auch. Mich hätte es allerdings gereizt, den echten Wert mit einem angepassten Ausdruck auszulesen ;-)

Starkstrombastler

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.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Rince

Würdet ihr das in die Wiki schreiben, bitte?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Bootscreen

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.
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

moonsorrox

Oh was ist denn mit dem Spritpreis los, ich glaube ich muss "nachbessern"  ;)
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

Rince

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*
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

mcbo

@moonsorrox

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


Danke

Gruß

Marcel

moonsorrox

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

mcbo


cocojambo

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
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Puschel74

#254
Hallo,

einfach als neues Reading Attribut anlegen.
siehe Screenshot.

Grüße

Edith: Reading ist natürlich falsch - sollte auch Attribut heissen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.