Hauptmenü

BenzinpreisMonitor

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

Vorheriges Thema - Nächstes Thema

Puschel74

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

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

stenny73

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
FHEM auf XEN, Ubuntu-Server 14.04   - HM-Lan - Max - ZWave -WS1080 -BlueTooth

FHEM auf Ubuntu-Server 14.04   - HM-LAN

FHEM auf Raspberry Pi   - CSM für Max - HM-USB - WiFi-LED

PeMue

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

stenny73

Die Differenz habe ich ja sauber, nur das notify macht halt nicht das was es soll.....
FHEM auf XEN, Ubuntu-Server 14.04   - HM-Lan - Max - ZWave -WS1080 -BlueTooth

FHEM auf Ubuntu-Server 14.04   - HM-LAN

FHEM auf Raspberry Pi   - CSM für Max - HM-USB - WiFi-LED

Puschel74

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

Puschel74

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

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

stenny73

@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
FHEM auf XEN, Ubuntu-Server 14.04   - HM-Lan - Max - ZWave -WS1080 -BlueTooth

FHEM auf Ubuntu-Server 14.04   - HM-LAN

FHEM auf Raspberry Pi   - CSM für Max - HM-USB - WiFi-LED

no_Legend

Hi Leute,

kann vielleicht einer kurz ne Anleitung machen, wie man das ganze bei Sich einbaut?

Danke und Gruß Robert
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.

Puschel74

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
sollte es losgehen.

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

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.

moonsorrox

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

stenny73

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
FHEM auf XEN, Ubuntu-Server 14.04   - HM-Lan - Max - ZWave -WS1080 -BlueTooth

FHEM auf Ubuntu-Server 14.04   - HM-LAN

FHEM auf Raspberry Pi   - CSM für Max - HM-USB - WiFi-LED

PeMue

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

no_Legend

#164
Liest einer bei Shell "Shell V-Power Racing" aus?
Bekomme es nicht ausgelesen.

Edit: Hab's hin bekommen
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.