[Gelöst]stateFormat 2 Werte

Begonnen von dk3572, 28 Oktober 2020, 07:26:34

Vorheriges Thema - Nächstes Thema

dk3572

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

eki

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.

dk3572

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?

mumpitzstuff

Hast du mal <br> versucht anstatt \n? Ansonsten \n durch Leerzeichen ersetzen oder &nbsp;

Christoph Morrison

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
    );

dk3572

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?

Christoph Morrison

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
);

dk3572

ok, vielen Dank für eure Hilfe, passt jetzt.