FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: errazzor am 22 März 2017, 13:01:04

Titel: Frage zu Readingsgroup und valueStyle
Beitrag von: errazzor am 22 März 2017, 13:01:04
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.
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: errazzor am 23 März 2017, 08:42:26
Niemand eine Idee?  :-[
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: Uwe_Eta20 am 11 Mai 2017, 22:27:18
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
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: MadMax-FHEM am 11 Mai 2017, 22:42:59
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
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: Manul am 11 Mai 2017, 22:53:17
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?
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: KernSani am 11 Mai 2017, 23:18:09
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
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: Uwe_Eta20 am 12 Mai 2017, 14:03:52
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"'}
Titel: Antw:Frage zu Readingsgroup und valueStyle
Beitrag von: justme1968 am 14 Mai 2017, 15:01:24
den vergleich auf $READING kannst du jeweils weg lassen. das hast du mit dem hash key jeweils schon erreicht.

gruss
  andre