FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: Commander am 02 Oktober 2017, 11:05:22

Titel: [gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: Commander am 02 Oktober 2017, 11:05:22
Hallo
ich habe eine readingGroup die auch soweit ganz gut funktioniert.
Folgender valueStyle zeigt mir auch die Werte rot an wenn sie über 100 sind.
{($READING eq "current_period" && $VALUE > 100)?'style="color:red"':'style="color:green"'}

Jetzt möchte ich aber den Wert mit previous_period vergleichen und wenn dieser überschritten ist rot anzeigen lassen.

Dies geht so jedenfalls nicht
{($READING eq "current_period" && $VALUE > "previous_period" )?'style="color:red"':'style="color:green"'}

Hat jemand vielleicht ein Tipp für mich?

Vielen Dank
Titel: Antw:readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: supernova1963 am 02 Oktober 2017, 11:32:28
Zitat von: Commander am 02 Oktober 2017, 11:05:22
...Dies geht so jedenfalls nicht
{($READING eq "current_period" && $VALUE > "previous_period" )?'style="color:red"':'style="color:green"'}

Hat jemand vielleicht ein Tipp für mich?
Versuche mal den Vergleichswert mit ReadingsVal() abzufragen:
{($READING eq "current_period" && $VALUE > ReadingsVal("previous_period",$DEVICE,""} )?'style="color:red"':'style="color:green"'}

EDIT: Achtung ReadingsVal Parameter vertauscht, siehe unten
Titel: Antw:readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: Commander am 02 Oktober 2017, 11:40:50
ergibt leider folgende Meldung:
syntax error at (eval 49686) line 1, at EOF
Unmatched right curly bracket at (eval 49686) line 1, at end of line
syntax error at (eval 49686) line 1, near "}}"


{($READING eq "current_period" && $VALUE > ReadingsVal("previous_period",$DEVICE,""} )?'style="color:red"':'style="color:green"'}

Warum auf einmal $DEVICE und nicht mehr $VALUE ?
Titel: Antw:readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: Commander am 02 Oktober 2017, 12:09:27
Super  ;) habs hinbekommen mit

{($READING eq ("current_period") && $VALUE > ReadingsNum($DEVICE, "previous_period",undef))?'style="color:red"':'style="color:green"'}

Vielen Herzlichen Dank
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: supernova1963 am 02 Oktober 2017, 13:52:20
Sorry, ich hatte die Parameter vertauscht.

Gernot
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: MichlB am 19 Februar 2019, 17:44:12
hallo,
darf ich mich da mal anhängen...
ich hab auch ein Problem mit dem valueStyle im readingsgroup....

ich versuche verzweifelt einen wert aus der readingsgroup mit einem Wert eines Dummies (nicht in der readingsgroup definition) zu vergleichen...
geht so etwas?

in der readingsgroup def steht: MYSENSOR_190:,<°C>,temperature,<RLF>,humidity
und ich möchte ihn mit dem state von Kids vergleichen und wenn gleich dann soll mysensor grün sein..

habe das versucht...

{ if($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE > $DEVICE eq "Kids" && $READING eq "state" && $VALUE ) { 'style="color:red"'}
und mit
{ if($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE > Kids.state ) { 'style="color:red"'}
und mit diversen anderen variationen versucht, aber bin immer kläglich gescheitert...

kann ich werte aus readingsgroup mit werten ausserhalb dieser readingsgroup überhaupt vergleichen???


Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: supernova1963 am 20 Februar 2019, 05:01:46
Versuche es mal mit:

ReadingsVal("<beliebiges fhem device>","<readings des fhem devices>","<Ausgabe, wenn nicht ermittelbar>")
oder
ReadingsNum("<beliebiges fhem device>","<readings des fhem devices>","<Ausgabe, wenn nicht ermittelbar>")
Z.B.:
{ if($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE > ReadingsVal("Kids","state","" ) { 'style="color:red"'}
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: MichlB am 22 Februar 2019, 06:03:14
danke supernova1963 für die rasche Antwort, bin leider erst jetzt zum testen gekommen,
die ersten beiden varianten funktionieren gar nicht... da ist alles in einer farbe...
die dritte variante scheint einigermassen zu funktionieren...aber die nachfolgenden werte sind alle in einer farbe...
siehe screenshot...

ich habe die änderung erst beim ersten sensor angewandt.....


hier mein code
{ if(($DEVICE  eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE) > (ReadingsVal("Kids","state",""))) { 'style="color:red"'}
elsif(($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE) == (ReadingsVal("Kids","state",""))) { 'style="color:green"'}
elsif(($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE) < (ReadingsVal("Kids","state",""))) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realhum") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE >= 21 && $VALUE <= 23) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperatur1e" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE < 20) { 'style="color:RGB(238,207,161)"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE >= 18) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE < 18) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "humidity") { 'style="color:lightblue"'}}



hast du vielleicht noch eine idee?
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: OdfFhem am 22 Februar 2019, 06:36:01
Bei diesen Bedingungsteilen in den ersten 3 Zeilen scheinen die Klammern nicht zielführend ...

&& $VALUE) > (ReadingsVal
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: MichlB am 22 Februar 2019, 07:04:15
so gehts... sehr gut! Danke dir...

{ if($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE > (ReadingsVal("Kids","state",""))) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE == (ReadingsVal("Kids","state",""))) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE < (ReadingsVal("Kids","state",""))) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "temperature" && $VALUE < 10) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_190" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realtemp" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_101" && $READING eq "realhum") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE > ReadingsVal("Schlafzimmer","state","")) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE == ReadingsVal("Schlafzimmer","state","")) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE < ReadingsVal("Schlafzimmer","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "temperature" && $VALUE < 10) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_130" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE > ReadingsVal("Kueche","state","")) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE == ReadingsVal("Kueche","state","")) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE < ReadingsVal("Kueche","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_160" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE > 20) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_180" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE > ReadingsVal("Bad","state","")) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE == ReadingsVal("Bad","state","")) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperatur1e" && $VALUE < ReadingsVal("Bad","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "temperature1" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_150" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE > ReadingsVal("Wohnzimmer","state","")) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE == ReadingsVal("Wohnzimmer","state","")) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE < ReadingsVal("Wohnzimmer","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_120" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE > ReadingsVal("Zimmer","state","")) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE == ReadingsVal("Zimmer","state","")) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE < ReadingsVal("Zimmer","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "temperature" && $VALUE < 5) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_170" && $READING eq "humidity") { 'style="color:lightblue"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE > ReadingsVal("Wohnzimmer","state","")) { 'style="color:red"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE == ReadingsVal("Wohnzimmer","state","")) { 'style="color:green"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE < ReadingsVal("Wohnzimmer","state","")) { 'style="color:orange"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE < 10) { 'style="color:RGB(238,207,161)"'}
elsif($DEVICE eq "WW3" && $READING eq "temperature" && $VALUE < 0) { 'style="color:blue"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE > 30) { 'style="color:red"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE >= 22 && $VALUE <= 24) { 'style="color:green"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE >= 18) { 'style="color:orange"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "temperature" && $VALUE < 18) { 'style="color:lightblue"'}
elsif($DEVICE eq "MYSENSOR_70" && $READING eq "humidity") { 'style="color:lightblue"'}}
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: supernova1963 am 22 Februar 2019, 17:18:54
Zitat von: Michl1003! am 22 Februar 2019, 06:03:14
...
die ersten beiden varianten funktionieren gar nicht... da ist alles in einer farbe...
die dritte variante scheint einigermassen zu funktionieren...

Die ersten "Varianten" waren als Syntax für den ReadingsVal und ReadingsNum gemeint.

Du hast ja eine Lösung gefunden.
Bitte achte bei Problemen darauf, dass ReadingsVal einen String zurückgibt und ReadingsNum eine Zahl.
Da du ReadingsVal verwendest und einen Zahlenvergleich machst, kann es hier zu Problemen kommen, wenn nicht ausschliesslich ein Zahlenwert zurückgegeben wird. 

Gernot
Titel: Antw:[gelöst]readingsGroup valueStyle zwei Werte vergleichen
Beitrag von: eisman am 22 Februar 2019, 19:43:15
hi,

es geht auch mit sub....

sub s_humidity($) {
my ($T1) = @_;
if   ($T1 < 30)                     { return 'style="font-weight:bold; color:springgreen;"'}
elsif($T1 >= 30 and $T1 < 50)       { return 'style="font-weight:bold; color:deepskyblue;"'}
elsif($T1 >= 50 and $T1 < 70)       { return 'style="font-weight:bold; color:dodgerblue;"' }
else                                { return 'style="font-weight:bold; color:blue;"'       }
}

sub s_temperature($) {
my ($T1) = @_;
if   ($T1 <   0)                    { return 'style="font-weight:bold; color:darkslateblue;"'}
elsif($T1 >=  0 and $T1 < 10)       { return 'style="font-weight:bold; color:dodgerblue;"'   }
elsif($T1 >= 10 and $T1 < 18)       { return 'style="font-weight:bold; color:deepskyblue;"'  }
elsif($T1 >= 18 and $T1 < 25)       { return 'style="font-weight:bold; color:springgreen;"'  }
else                                { return 'style="font-weight:bold; color:red;"'          }
}


Aufruf

valueStyle
{if($READING eq "temperature") {s_temperature($VALUE)}
elsif($READING eq "temperature_avg_day") {s_temperature($VALUE)}
elsif($READING eq "humidity") {s_humidity($VALUE)}}


und für ICON


sub FEIcon($) {
my ($Nr) = @_; my $Icon = ''; my $Farbe = "";
if   ($Nr eq "closedclosed") { $Icon="fts_window_2w";               $Farbe = "springgreen" }
elsif($Nr eq "openclosed")   { $Icon="fts_window_2w_open_l";        $Farbe = "red"         }
elsif($Nr eq "closedopen")   { $Icon="fts_window_2w_open_r";        $Farbe = "red"         }
elsif($Nr eq "openopen")     { $Icon="fts_window_2w_open_lr";       $Farbe = "red"         }
elsif($Nr eq "tiltedtilted") { $Icon="fts_window_2w_tilt_lr";       $Farbe = "yellow"      }
elsif($Nr eq "closedtilted") { $Icon="fts_window_2w_tilt";          $Farbe = "yellow"      }
elsif($Nr eq "tiltedclosed") { $Icon="fts_window_2w_tilt_l";        $Farbe = "yellow"      }
elsif($Nr eq "opentilted")   { $Icon="fts_window_2w_open_l_tilt_r"; $Farbe = "red"         }
elsif($Nr eq "tiltedopen")   { $Icon="fts_window_2w_tilt_l_open_r"; $Farbe = "red"         }
#Log(1,"Fenster: $Nr $Icon $Farbe");
return $Nr . ":" . $Icon . "\@" . $Farbe;
}





devStateIcon  { FEIcon(ReadingsVal("FE_0100","state",0))}


grus