[gelöst]readingsGroup valueStyle zwei Werte vergleichen

Begonnen von Commander, 02 Oktober 2017, 11:05:22

Vorheriges Thema - Nächstes Thema

Commander

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
FHEM5.6 auf Intel NUC NUC5PPYH
HM-CFG-USB-2 / HMLAN
CUL 433 CUL 868 / WMBus_T (Techem) JeeLink
MAX! Cube,Logitech Harmony Hub,Philips Hue

supernova1963

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

Commander

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 ?
FHEM5.6 auf Intel NUC NUC5PPYH
HM-CFG-USB-2 / HMLAN
CUL 433 CUL 868 / WMBus_T (Techem) JeeLink
MAX! Cube,Logitech Harmony Hub,Philips Hue

Commander

Super  ;) habs hinbekommen mit

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

Vielen Herzlichen Dank
FHEM5.6 auf Intel NUC NUC5PPYH
HM-CFG-USB-2 / HMLAN
CUL 433 CUL 868 / WMBus_T (Techem) JeeLink
MAX! Cube,Logitech Harmony Hub,Philips Hue

supernova1963


MichlB

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


1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

supernova1963

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

MichlB

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?
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

OdfFhem

Bei diesen Bedingungsteilen in den ersten 3 Zeilen scheinen die Klammern nicht zielführend ...

&& $VALUE) > (ReadingsVal

MichlB

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"'}}
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

supernova1963

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

eisman

#11
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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S