FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dk3572 am 28 Oktober 2020, 07:26:34

Titel: [Gelöst]stateFormat 2 Werte
Beitrag von: dk3572 am 28 Oktober 2020, 07:26:34
Hallo,

ich möchte in stateFormat 2 Werte anzeigen.


{ my $Wert = ReadingsNum($name,"total_pac",0);
  my $Ladu = ReadingsNum($name,"chargestatus",0);
    my $string  = ' ';
if ($Wert > 0) {
    $string  = sprintf("Einspeisung: %.1f W ",$Wert);
}
elsif ($Wert <= 0) {
    $string  = sprintf("Ladung: %.1f W ",$Wert);
}
  if ($Wert > 0) {
    return '<font color="Yellow"><b>' . $string . '</b></font>'}
  elsif ($Wert <= 0) {
    return '<font color="Green"><b>' . $string . '</b></font>'}
  else {return $string }
}


Wie bekomme ich my $Ladu mit dem Zusatz "Status" hinter den 1. Wert?

Soll dann z.B. so aussehen:    Einspeisung: 500 W   Status 50 %

Danke für Hilfe und VG Dieter
Titel: Antw:stateFormat 2 Werte
Beitrag von: eki am 28 Oktober 2020, 08:05:06
Vielleicht habe ich ja das Problem nicht so recht verstanden, aber folgendes müsste eigentlich gehen


{ my $Wert = ReadingsNum($name,"EnergyExpected",0);
  my $Ladu = ReadingsNum($name,"Global.Radiation",0);
    my $string  = ' ';
if ($Wert > 0) {
    $string  = sprintf("Einspeisung: %.1f W ",$Wert);
}
elsif ($Wert <= 0) {
    $string  = sprintf("Ladung: %.1f W ",$Wert);
}
  $string .= sprintf("Status: %.1f %",$Ladu);
  if ($Wert > 0) {
    return '<font color="Yellow"><b>' . $string . '</b></font>'}
  elsif ($Wert <= 0) {
    return '<font color="Green"><b>' . $string . '</b></font>'}
  else {return $string }
}


Falls der Status nicht die Farbe und den Font übernehmen soll, dann könnte es so aussehen:


{ my $Wert = ReadingsNum($name,"EnergyExpected",0);
  my $Ladu = ReadingsNum($name,"Global.Radiation",0);
    my $string  = ' ';
if ($Wert > 0) {
    $string  = sprintf("Einspeisung: %.1f W ",$Wert);
}
elsif ($Wert <= 0) {
    $string  = sprintf("Ladung: %.1f W ",$Wert);
}
  #$string .= sprintf("\nStatus: %.1f %",$Ladu);
  if ($Wert > 0) {
    return '<font color="Yellow"><b>' . $string . '</b></font>' . sprintf("\nStatus: %.1f %",$Ladu)}
  elsif ($Wert <= 0) {
    return '<font color="Green"><b>' . $string . '</b></font>' . sprintf("\nStatus: %.1f %",$Ladu)}
  else {return $string }
}


Falls der Status nicht in eine neue Zeile kommen soll, müsstest Du das \n weglassen.
Titel: Antw:stateFormat 2 Werte
Beitrag von: dk3572 am 28 Oktober 2020, 08:19:08
Hallo eki,

vielen Dank, fast perfekt  ;)

Der Status steht trotz \n nicht in einer neuen Zeile.
Muss er auch nicht unbedingt, aber wie bekomme ich etwas Abstand zwischen die beiden Werte?
Titel: Antw:stateFormat 2 Werte
Beitrag von: mumpitzstuff am 28 Oktober 2020, 09:14:16
Hast du mal <br> versucht anstatt \n? Ansonsten \n durch Leerzeichen ersetzen oder &nbsp;
Titel: Antw:stateFormat 2 Werte
Beitrag von: Christoph Morrison am 28 Oktober 2020, 11:54:58
Ich würde ja in etwa sowas schreiben:


    my $Wert = ReadingsNum($name, q{EnergyExpected}, 0);
    my $Ladu = ReadingsNum($name, q{Global.Radiation}, 0);

    my ($direction, $colour) =
        ($Wert > 0) ? qw{Einspeisung yellow} : qw{Ladung green};

    return sprintf(
        qq{<span style="color: %s">%s: %1.f W</span><br />Ladung: %.1f %%},
        $colour, $direction, $Wert, $Ladu
    );
Titel: Antw:stateFormat 2 Werte
Beitrag von: dk3572 am 28 Oktober 2020, 12:27:37
Zitat von: mumpitzstuff am 28 Oktober 2020, 09:14:16
Hast du mal <br> versucht anstatt \n? Ansonsten \n durch Leerzeichen ersetzen oder &nbsp;

Vielen Dank bis hier hin, mit <br> hat es funktioniert.

Jetzt noch rechtsbündig.
Geht wohl hiermit <ALIGN=\"RIGHT\">

Aber wohin?
Titel: Antw:stateFormat 2 Werte
Beitrag von: Christoph Morrison am 28 Oktober 2020, 12:36:22
Zitat von: dk3572 am 28 Oktober 2020, 12:27:37
Jetzt noch rechtsbündig.

Mein Lösungsweg, rechtsbündig:

my $Wert = ReadingsNum($name, q{EnergyExpected}, 0);
my $Ladu = ReadingsNum($name, q{Global.Radiation}, 0);

my ($direction, $colour) =
    ($Wert > 0) ? qw{Einspeisung yellow} : qw{Ladung green};

return sprintf(
    qq{<div style="text-align: right;"><span style="color: %s">%s: %1.f W</span><br />Ladung: %.1f %%</div>},
    $colour, $direction, $Wert, $Ladu
);
Titel: Antw:stateFormat 2 Werte
Beitrag von: dk3572 am 28 Oktober 2020, 12:46:48
ok, vielen Dank für eure Hilfe, passt jetzt.