Frage zu Readingsgroup und valueStyle

Begonnen von errazzor, 22 März 2017, 13:01:04

Vorheriges Thema - Nächstes Thema

errazzor

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.

errazzor


Uwe_Eta20

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Manul

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?

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Uwe_Eta20

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

justme1968

den vergleich auf $READING kannst du jeweils weg lassen. das hast du mit dem hash key jeweils schon erreicht.

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

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