Hauptmenü

BenzinpreisMonitor

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

Vorheriges Thema - Nächstes Thema

Puschel74

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

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

salvadore

FHEM 5.6, APU-Board, CUNO 1.x, RFXtrx433, 8 FHT80B, diverse FS20 Aktoren, Rasperry, div. DS18x-Sensoren, KD101, AB400R, HE877, ESA2000, Beaglebone Black Rev.C, Jeelink, PCA 301, PT8005,

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Puschel74

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

justme1968

#95
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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

moonsorrox

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

Puschel74

Hallo,

hast du auch ein reload 99_myUtils eingeworfen?

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

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

Puschel74

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

justme1968

das my gehört da natürlich nicht hin.

ein mal SuperE5 und Diesel reicht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Puschel74

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

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

Puschel74

Hallo,

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

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

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