Hallo,
kann ich innerhalb von valueStyle auch zwei ausgelesene Werte miteinander vergleichen?
Ich lese per Readingsgroup meine Temperatursensoren aus (Temperature,Humidity,dewpoint).
Jetzt würde ich gerne den Taupunkt rot einfärben, sofern dieser größer als die Raumtemperatur ist.
Anhand von Zahlenwerten geht das einfärben ja wie folgt:
elsif($READING eq "dewpoint" && $VALUE > 5) { 'style="color:red"'}else{'style="color:green"'} }
In diesem Beispiel würde "dewpoint" rot gefärbt, wenn der Wert größer 5 ist.
Wie aber bekomme ich es hin, dass der Wert "dewpoint" mit dem Wert "temperature" verglichen wird?
Alle Varianten die ich probiert habe gehen nicht, egal ob mit oder ohne zusätzliche Klammern:
elsif($READING eq "dewpoint" && $VALUE > $READING eq "temperature" && $VALUE) { 'style="color:red"'}else{'style="color:green"'} }
elsif($READING eq "dewpoint" && $VALUE > ($READING eq "temperature" && $VALUE)) { 'style="color:red"'}else{'style="color:green"'} }
elsif(($READING eq "dewpoint" && $VALUE) > ($READING eq "temperature" && $VALUE)) { 'style="color:red"'}else{'style="color:green"'} }
Geht das gar nicht oder habe ich nur Syntaxfehler?
Danke.
Niemand eine Idee? :-[
ja, ich probiere das auch schon seit Tagen, es wird nix.
Es ist zum verzweifeln.
Ich versuche, mit den Vergleich des aktuellen Luftdruckes zum Mittelwert ( mean )auszugeben.
Diese Version -weiter unten -hatte ich zuletzt drin, zig andere wurden aber durchprobiert, keine Chance.
Als Vergleich nimmt er nur eine feste Zahl, keine Variable, ich glaube fast, hier werden die Worte("Pressure" ...) miteinander verglichen.
Bei HTTPMOD klappt's dafür besser, hier arbeite ich zusätzlich noch die Standardabweichung ein, will es aber auch per Übersicht haben.
Vielleicht ist unser Ansatz der Falsche, da wir keine Intervalle pollen, und nur Werte "anzeigen" lassen.
{'pressure-nn' =>
($READING eq ("pressure-nn") && $VALUE) <($READING eq ("mpressure") && $VALUE)?'style="color:crimson"':'style="color:darkorchid"'}
-> bleibt immer die selbe Farbe
Problematisch vielleicht auch, da wir beides, das Reading und den Wert vergleichen, das geht dann nicht, es soll ja nur der Wert des Reading verglichen werden.
Lieber wäre mir das so zu schreiben,kommen dann aber 2 Syntaxfehler..dann eben nicht.
{'pressure-nn' =>
($VALUE($READING eq ("pressure-nn"))) < ($VALUE($READING eq ("mpressure")))?'style="color:crimson"':'style="color:darkorchid"'}
(Anfänger)Gruss
Uwe
Ich habe folgendes, vielleicht hilft es:
my_Utils:
sub my_SetClimateStatusValueStyle($$)
{
my ($Device, $Reading) = @_;
my $StyleString = "style=\"color:black;text-align:right\"";
my $DesTemp = 0.0;
my $Value = 0.0;
my $DewpointOutside = 0.0;
my $Dewpoint = 0.0;
my $MeasuredTemp = 0.0;
my @DeviceParts = split(/_/,$Device);
# set colors for humidity
if($Reading eq "humidity")
{
$Value = ReadingsNum($Device, "humidity", 0);
if($Value > 65 || $Value < 30)
{$StyleString = "style=\"color:red;text-align:right\""}
elsif($Value > 55 || $Value < 40)
{$StyleString = "style=\"color:orange;text-align:right\""}
else
{$StyleString = "style=\"color:green;text-align:right\""}
}
# set colors for outside temperature
elsif($Reading eq "temperature")
{
$Value = ReadingsNum($Device, "temperature", 0.0);
if($Value < 5)
{$StyleString = "style=\"color:blue;text-align:right\""}
elsif($Value < 15)
{$StyleString = "style=\"color:orange;text-align:right\""}
else
{$StyleString = "style=\"color:red;text-align:right\""}
}
# set colors for desired temp
elsif($Reading eq "desired-temp")
{
$Value = ReadingsNum($Device, "desired-temp", 0.0);
if($Value < 15)
{$StyleString = "style=\"color:blue;text-align:right\""}
elsif($Value < 20)
{$StyleString = "style=\"color:orange;text-align:right\""}
else
{$StyleString = "style=\"color:red;text-align:right\""}
}
# set colors for mesured temp
elsif($Reading eq "measured-temp")
{
$Value = ReadingsNum($Device, "measured-temp", 0.0);
# if window is open set the color depending on last desired temp
# so it is visible when better close the window again
if(ReadingsVal($Device, "winOpenReporting", "off") eq "on")
{
$DesTemp = ReadingsNum("$myDummySavedDesTemps", "$DeviceParts[1]", 0.0);
if($Value <= ($DesTemp + 0.2))
{$StyleString = "style=\"color:blue;text-align:right\""}
elsif($Value <= ($DesTemp + 0.5))
{$StyleString = "style=\"color:orange;text-align:right\""}
else
{$StyleString = "style=\"color:red;text-align:right\""}
}
# if window is closed set the color depending on actual desired temp
else
{
$DesTemp = ReadingsNum($Device, "desired-temp", 0.0);
if($Value <= ($DesTemp - 0.5))
{$StyleString = "style=\"color:blue;text-align:right\""}
elsif($Value < $DesTemp - 0.1)
{$StyleString = "style=\"color:orange;text-align:right\""}
else
{$StyleString = "style=\"color:red;text-align:right\""}
}
}
# set colors for dewpoint
elsif($Reading eq "dewpoint")
{
$MeasuredTemp = ReadingsNum($Device, "measured-temp", 0.0);
$Dewpoint = ReadingsNum($Device, "dewpoint", 0.0);
$DewpointOutside = ReadingsNum("Aussenthermometer", "dewpoint", 0.0);
if($Device eq "Aussenthermometer")
{
return $StyleString;
}
# if room temperature is smaller than dewpoint AND the window is closed
# set color to red to signal that the window should/must be opened
if(($MeasuredTemp - 3) <= $Dewpoint)
{
if(ReadingsVal($Device, "winOpenReporting", "on") eq "off")
{$StyleString = "style=\"color:red;text-align:right\""}
}
# if dewpoint outside is greater than dewpoint of room AND window is open
# set color to orange to signal that it is better to close the window
if(($DewpointOutside + 1) > $Dewpoint)
{
if(ReadingsVal($Device, "winOpenReporting", "off") eq "on")
{$StyleString = "style=\"color:orange;text-align:right\""}
}
# Log(1,"my_SetClimateStatusValueStyle Device: $Device MeasuredTemp: $MeasuredTemp Dewpoint: $Dewpoint DewpointOutside: $DewpointOutside");
}
return $StyleString;
}
Und in der ReadingsGroup:
attr rgClimateStatus valueStyle {my_SetClimateStatusValueStyle($DEVICE, $READING)}
Gruß, Joachim
Müsste für den einfachen Vergleich zweier Werte nicht auch sowas wie
($READING eq ("pressure-nn") && $VALUE < ReadingsNum($DEVICE, "mpressure",undef))?'style="color:crimson"':'style="color:darkorchid"'}
funktionieren?
Da der post ja schon etwas älter ist und ich keine Ahnung habe, ib der TE noch mitliest erlaube ich mir mal das Thema ins richtige Forum zu schieben
ja, Manul, das geht...( moment, erst mal warten, bis das Barometer wieder steigt ;-) )
Wenn du mehrere Werte der Groupings aktualisiert dargestellt bekommen willst, dann kannst du das so schreiben:
Die mWerte sind event-aggregatoren.
{'pressure-nn' =>
($READING eq ("pressure-nn") && $VALUE > ReadingsNum($DEVICE, "mpressure",undef))?'style="color:crimson"':'style="color:darkorchid"',
'aTemp' =>
($READING eq ("aTemp") && $VALUE > ReadingsNum($DEVICE, "mTemp",undef))?'style="color:crimson"':'style="color:darkorchid"'}
den vergleich auf $READING kannst du jeweils weg lassen. das hast du mit dem hash key jeweils schon erreicht.
gruss
andre