Hallo,
ich möchte den state bzw. stateFormat in Abhängigkeit vom Wert farbig gestalten.
Konkret geht es um folgendes:
define Device MQTT
attr Device stateFormat Lüftung: an (bzw. aus)
Ich hätte gerne "Lüftung: an" in rot und "Lüftung: aus" in schwarz.
Kann man das innerhalb des Devices lösen, ohne Verwendung eines zusätzlichen notify's oder DOIF's?
Viele Grüße Gisbert
Hallo Gisbert,
ich kenne nur devStateIcon welches man farbig machen kann -> https://commandref.fhem.de/#devStateIcon
Gruß Otto
Hallo Otto,
ich hab im Forum, commandref und Wiki gesucht, aber nichts Greifbares gefunden.
Man kann Attribute mit Hilfe von notifys und DOIFs setzen, was aber mehr Einträge erzeugt. Das würde ich gerne vermeiden, bzw. es wäre in dieser Konstellation für mich uninteressant.
Viele Grüße Gisbert
Hallo,
probier es so
devStateIcon on:phone_call@limegreen off:phone_call_end@red
Ist ganz einfach:
<span style="color:#FF0000">Dein stateFormat in Rot.</span>
Das in Kombination mit Perlcode dann in etwa so:
{
my $value = ReadingsVal('device', 'reading', 'aus');
if ('an' eq $value)
{
return "an in rot";
}
else
{
return "aus";
}
}
Oder so (mit rot/grün):{(ReadingsVal($name,"state","") eq "off") ? "<span style='color:#FF0000'>Gerät Aus</span>":"<span style='color:#00FF00'>Gerät Ein</span>"}
Wieder was gelernt ;D Danke!
Gruß Otto
Zitat von: mumpitzstuff am 07 Mai 2018, 12:19:54
Ist ganz einfach:
<span style="color:#FF0000">Dein stateFormat in Rot.</span>
Das in Kombination mit Perlcode dann in etwa so:
{
my $value = ReadingsVal('device', 'reading', 'aus');
if ('an' eq $value)
{
return "an in rot";
}
else
{
return "aus";
}
}
Hallo mumpitzstuff,
Vielen Dank für deine Anregung.
Vielleicht sollte ich an dieser Stelle erwähnen, dass ich nicht programmieren kann - ich weiß, dass das keine Entschuldigung ist, aber es ist nun mal so, und wird sich leider nicht in absehbarer Zeit wesentlich ändern.
Mein Problem ist jetzt, deine Information in stateFormat und/oder userReadings in der richtigen Reihenfolge unterzubringen, so dass es funktioniert.
---------------------------------
Zitat von: Otto123 am 07 Mai 2018, 13:06:09
Oder so (mit rot/grün):{(ReadingsVal($name,"state","") eq "off") ? "<span style='color:#FF0000'>Gerät Aus</span>":"<span style='color:#00FF00'>Gerät Ein</span>"}
Wieder was gelernt ;D Danke!
Gruß Otto
Hallo Otto,
es funktioniert, so wie du es vorgeschlagen hast, wenn man die Definition in ein userReadings packt.
Vielen Dank.
Viele Grüße Gisbert
Den Code kannst du auch direkt im stateFormat verwenden.
Zitat von: Gisbert am 07 Mai 2018, 21:56:21
es funktioniert, so wie du es vorgeschlagen hast, wenn man die Definition in ein userReadings packt.
Hallo Gisbert,
das habe ich so direkt im stateFormat stehen!
Noch zu Erklärung des Programmcodes:Mein Konstrukt macht quasi das Gleiche wie das von mumpitzstuff, nur seines ist noch etwas sprechender.
Das Konstrukt ist -> Bedingung | Frage | Rückgabe:
{(Bedingung) ? Auswertung der Bedingung ist wahr : ... ist falsch}
Die roten Elemente sind sozusagen die Pflichtteile der Text ist auszustauschen.
Gruß Otto
Hallo Otto und mumpitzstuff,
vielen Dank für die Erklärung.
Ich hatte vorher eine Definition in userReadings, die ich beibehalten habe - jetzt mit der Variante Farbe -, und dieses Reading wurde dann in stateFormat aufgerufen.
Wenn ich es gleich in stateFormat definiere, spare ich mir den Zwischenschritt über userReadings.
Damit ist die Aufgabe für mich gelöst; ich gebe das dann noch im ersten Beitrag bekannt.
Viele Grüße Gisbert
Zitat von: Otto123 am 08 Mai 2018, 13:48:37
Das Konstrukt ist -> Bedingung | Frage | Rückgabe:
{(Bedingung) ? Auswertung der Bedingung ist wahr : ... ist falsch}
Die roten Elemente sind sozusagen die Pflichtteile der Text ist auszustauschen.
Hallo Otto,
könnte man auch statt "Auswertung der Bedingung ist wahr" ein Reading reinschreiben, welches numerisch ist und sich entsprechend ändern kann?
Ich hab's versucht, aber statt des Readingswertes wird der eingetippte Text (mit geschweften Klammern, runden Klammern, etc.) rausgeschrieben.
Viele Grüße Gisbert
Hallo Gisbert,
ja klar, so in der Art {Perlausdruck}:
{return ReadingsVal("SensorAussen","temperature",0)}
Du rufst quasi wieder eine Perl Funktion auf und gibst eine Wert zurück (deswegen return)
Gruß Otto
Hallo Otto,
attr Device stateFormat {(ReadingsVal($name,'Summe','') <= 0) ? "<span style='color:#000000'>{return ReadingsVal($name,'Summe',0)}</span>":"<span style='color:#FF0000'>{return ReadingsVal($name,'Summe',0)}</span>"}
liefert:
{return ReadingsVal(Device,'Summe',0)}
in schwarzer Farbe, da der Wert (Summe) kleiner Null war; d.h. den String, aber nicht Wert "Summe".
Viele Grüße Gisbert
Hallo Gisbert,
nach der Farbe hast Du diesmal nicht gefragt. ;D
Also ohne die Farbe geht das, statt "<span style ...." nur der {} Ausdruck.
Geht sicher auch mit Farbe, aber da bin ich adhock nicht so fit und zu müde ;)
Gruß Otto
Hallo Otto,
falls dir in den nächsten Tagen eine Lösung einfällt, dann bin ich nach wie vor sehr interessiert.
Viele Grüße Gisbert
Mehrzeilig, damit man es einfacher lesen kann, den Wert bitte in FHEMWEB eingeben, oder Zeilenende mit \ versehen.
attr Device stateFormat {
ReadingsVal($name,'Summe','') <= 0 ?
"<span style='color:#0000FF'>".ReadingsVal($name,'Summe',0)."</span>" :
"<span style='color:#FF0000'>".ReadingsVal($name,'Summe',0)."</span>"
}
Doppelte Schreibweise vermeidend:
attr Device stateFormat {
sprintf("<span style='color:#%s'>%s</span>",
ReadingsVal($name,'Summe','') <= 0 ? "0000FF":"FF0000",
ReadingsVal($name,'Summe',0))
}
Mit der FHEM SetMagic, kuerzer aber kryptischer:
attr Device stateFormat <span style='color:{(ReadingsVal("$name",'Summe','')<=0 ? "blue":"red")}'>[$name:Summe]</span>
Hallo Rudi,
:) :) :) Vielen herzlichen lieben Dank. Ich habe nur die dritte Variante getestet, diese funktioniert ! :) :) :)
Eine Ergänzung:
Wenn man weitere Readings in stateFormat darstellen will, dann muss man das anscheindend im folgenden Format machen.
Nur den Namen des Readings anzugeben, führt zur Ausgabe des Readingsnamens, nicht aber zum Wert des Readings.
Beispiel mit Zeilenumbruch:
attr Device stateFormat <span style='color:{(ReadingsVal("$name",'Summe','')<=0 ? "blue":"red")}'>[$name:Summe]</span><br/>[$name:Readings]
Diese erscheinen dann in der Standardfarbe.
Will man das weitere Readings in einer anderen Farbe haben, dann funktioniert es genauso wie für das 1. Reading.
Viele Grüße Gisbert
Hallo Gisbert,
jetzt war ich auch gerade fertig und Rudi war schneller.
So geht es auch (im FHEMWEB ins attr eintragen):
{
my $val = ReadingsVal("$name",'Summe',''
if ($val <= 0) {
return "<span style='color:#FF0000'>$val</span>";
}
else {
return "<span style='color:#00FF00'>$val</span>";
}
}
Oder mit falls die Farbe noch flexibler werden soll ;)
{
my $val = ReadingsVal("SensorAussen","temperature",0);
my $col = "red";
if (ReadingsVal($name,"state","") eq "off") {
$col = "red";
}
else {
$col = "blue";
}
return "<span style='color:".$col."'>".$val."</span>";
}
Gruß Otto
Hallo Leute,
ich hatte mal vor Jahren das gleiche Bedürfnis, Rudi hat damals ein eigenes Attribut dafür eingeführt: devStateStyle
Das kann man vergleichsweise leicht programmatisch verändern. Ich nutze es als Indikator für kritische Readings (rot, gelb, grün).
Wäre das was für Euch ?
mimue
Moin,
bevor ich einen neuen Thread aufmache frage ich hier noch einmal die Profis unter euch.
Ich habe ein HTTPMOD Device in dem ich auch Readings von anderen Devices anzeigen lasse.
Jetzt schaffe ich es einfach nicht einige Readings im State farbig dar zu stellen.
Hier mein Stateformat:
{return "
PV aktuell: ".sprintf("%.0f",ReadingsVal($name,"Produktion_P_Generate",0))." W <br/>
PV Eigenverbrauch: ".sprintf("%.0f",ReadingsVal($name,"PV_Eigenverbrauch_Aktuell_in_Watt",0))." W <br/>
PV Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"PV_Einspeisung_Aktuell_in_Watt",0))." W <br/>
Netzbezug: ".sprintf("%.0f",ReadingsVal($name,"Strombezug_Aktuell_in_Watt",0))." W <br/>
Stromverbrauch: ".sprintf("%.0f",ReadingsVal($name,"Strom_Gesamtverbrauch_Aktuell_in_Watt",0))." W<br/>
Autarkiegrad: ".sprintf("%.1f",ReadingsVal($name,"Relative_Current_Autonomy",0))." % <br/>
PV-Tagesertrag: ".sprintf(ReadingsVal("WR_Fronius","Energy_Day__kWh",0))." kWh<br/>
PV-Peak-Heute: ".sprintf("%.0f",ReadingsVal("Solar","Body_Data_DAY_PMAX_Value",0))." W<br/>
PV-Eigenverbrauch: ".sprintf("%.1f",ReadingsVal($name,"Eigenverbrauch_Current_SelfConsumption",0))." %<br/>
String-Spannung: ".sprintf("%.0f",ReadingsVal("WR_Fronius_MPPT","Voltage_String1__V",0))." V<br/>
String-Strom: ".sprintf("%.2f",ReadingsVal("WR_Fronius_MPPT","Current_String1__A",0))." A
";}
Wie schaffe ich es jetzt das vorltzte Reading(String-Spannung:) farbig zu gestalten?
Es soll zwischen 0 und 100 rot sein, zwischen 100 und 150 gelb, zwischen 150 und 200 grün und danach wieder gelb.
Für einen Denkanstoss wäre ich sehr dankbar.
MfG
Hi,
schau Dir doch mal dies hier an: https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update
Da werden bestimmte Sachen farbig gestaltet im stateFormat.
Gruß Otto
Zitat von: Gisbert am 08 Mai 2018, 22:48:36
könnte man auch statt "Auswertung der Bedingung ist wahr" ein Reading reinschreiben, welches numerisch ist und sich entsprechend ändern kann?
Hallo,
da würd ich gerne nochmal anknüpfen, statt einen neuen Thread aufzumachen, die Frage ist ja eigentlich noch offen.
Mit pahcolor hab ich mir in den Kopf gesetzt das irgendwie umzusetzen. Habs jetzt soweit nach etlichen Versuchen das ich keine Fehlermeldung mehr bekomme, nix mehr im LogFile steht aber der Wert weiterhin schwarz dargestellt wird.
Wie macht mans den richtig:
<span style='color:{substr(Color::pahColor(0,40,80,ReadingsVal('MQTT2_ebusd_bai','1_Vorlauf',0),0,0),0,6)}>[$name:1_Vorlauf]</span>
Gruß
Thomas
edit:
Ups, jetzt hab ich ja ganz den # vergessen, da muss ich nochmal ran
edit 2:
ändert auch nix
<span style='color:{"#".substr(Color::pahColor(0,40,80,ReadingsVal('MQTT2_ebusd_bai','1_Vorlauf',0),0,0),0,6)}'>[$name:1_Vorlauf]</span>
Hallo nochmal,
Mit
{"#".substr(Color::pahColor(0,40,80,ReadingsVal('MQTT2_ebusd_bai','1_Vorlauf',0),0,0),0,6)}
aus der Befehlszeile bekomme ich
#B9770C zurück und das ist auch korrekt würd ich sagen
Mit
Zitat<span style='color:{"#".substr(Color::pahColor(0,40,80,ReadingsVal('MQTT2_ebusd_ba'i,'1_Vorlauf',0),0,0),0,6)}'>[$name:1_Vorlauf]</span>
in stateformat wird aber scheinbar #B9770C nicht in das Html übergeben, ob color in einfachen oder doppelten Hochkommas ist egal, die Schriftfarbe bleibt schwarz.
Mit
{"style=\"color:\x23".substr(Color::pahColor(0,15,30,ReadingsVal('MQTT2_ebusd_bai','1_Vorlauf',0),0),0,6)."\""}
aus der Befehlszeile bekomme ich
style="color:#B9770C" zurück, auch das ist korrekt bin ich der Meinung.
Mit
Zitat<span {"style=\"color:\x23".substr(Color::pahColor(0,15,30,ReadingsVal($name,'1_Vorlauf',0),0),0,6)."\""}>[$name:1_Vorlauf]</span>
in stateformat wird auch nix nach Html übergeben, zumindest bleibt die Schriftfarbe auch hier schwarz, ob in einfachen oder doppelten Hochkommas ist auch hier egal.
Mit diesen Feststellungen bin ich als Nicht-Programmierer erstmal am Ende angelangt und weiß nicht mehr weiter.
Gruß
Thomas
Was steht denn letztendlich im HTML Code drin? Schau dir den mal an und poste die Zeile.
Danke für die Rückmeldung.
Wenn ich wüsste wo ich sehe was letztendlich im HTML-Code drin steht würd ich vlt. selbst auf die Lösung kommen, darum schreib ich "scheinbar" im 1. Beispiel und im 2. Beispiel "auch nix", weil ich einfach nicht weiss was das Ergebnis genau ist / was übergeben wird / was wo steht, wenn du so fragst.
Wie gesagt es kommen keine Meldungen mehr im FileLog und letztendlich bei attr stateformat ... drücken wird auch kein Fehler mehr moniert.
Du lässt dir das Device in deinem Browser anzeigen und schaust dir dort den HTML Code der Webseite an.
https://www.google.com/search?q=firefox+show+html+code (https://www.google.com/search?q=firefox+show+html+code)
Bei dem 1. Beispiel
<span style='{"color:#".substr(Color::pahColor(0,40,80,ReadingsVal($name,'1_Vorlauf',0),0,0),0,6)}'>[$name:1_Vorlauf]</span>
werden diese Fehler beim öffnen der Konsole direkt angezeigt
HTML1423: Falsch formatierte Startmarkierung. Attribute sollten durch Leerzeichen getrennt werden.
HTML1409: Ungültiges Attributnamenzeichen. Attributnamen sollten nicht ("),('),() oder (=) enthalten.
Weiß sie aber (noch) nicht zu deuten
Im HTML-Code steht:
["MQTT2_ebusd_bai","<span style='{\u0022color:#\u0022.substr(Color::pahColor(0,40,80,ReadingsVal(MQTT2_ebusd_bai,'1_Vorlauf',...(426)
Ich denke der Fehler ist das die Funktion selbst zurückgegeben wird und nicht der Rückgabewert ?
Beim 2. Beispiel
<span '{"style=\'color:\x23".substr(Color::pahColor(0,15,30,ReadingsVal($name,'1_Vorlauf',0),0),0,6)."\'"}'>[$name:1_Vorlauf]</span>
werden diese Fehler beim öffnen der Konsole direkt angezeigt
HTML1409: Ungültiges Attributnamenzeichen. Attributnamen sollten nicht ("),('),() oder (=) enthalten.
HTML1410: Ungültiger Attributwert ohne Anführungszeichen. Die Attributwerte ohne Anführungszeichen sollten nicht ("), ('), (), (=) oder (`) enthalten.
Im HTML-Code steht:
["MQTT2_ebusd_bai","<span '{\u0022style=\u005c'color:\u005cx23\u0022.substr(Color::pahColor(0,15,30,ReadingsVal(MQTT2_ebusd_bai,'1_V...(478)
Auch hier, die Funktion selbst wird übergeben und nicht das was sie zurückgeben soll ?
Ich gehe davon aus, dass Ihr die Dokumentation (https://fhem.de/commandref_modular.html#stateFormat) "If the value of this attribute is enclosed in {}, then it is evaluated." als "if there is {} somewhere in the attribute, then it will be evaluated" interpretiert. Das ist leider nicht der Fall.
Mit Sicherheit steh ich auf dem Schlauch: bei deinem kryptischen (https://forum.fhem.de/index.php/topic,87570.msg800910.html#msg800910) Beispiel ist doch {} somewhere in the attribute too ???
Hier mal mein Beispiel für ein Stateformat, in dem in Abhängigkeit von der Regenmenge der State in verschiedenen Farben angezeigt wird.
{ my $Amount = ReadingsNum($name,"rainAmount",0);
my $string = sprintf("Amnt:%.1fl/m² ",$Amount);
if ($Amount > 1 && $Amount < 7) {
return '<font color="teal"><b>' . $string . '</b></font>'}
elsif ($Amount >= 7 && $Amount < 20 ) {
return '<font color="DeepSkyBlue"> <b>' . $string . '</b></font>'}
elsif ($Amount >= 20 && $Amount < 25 ) {
return '<font color="MediumVioletRed"><b>' . $string . '</b></font>'}
elsif ($Amount >= 25 || $Max >= 2.5) {
return '<font color="BlueViolet"><b>' . $string . '</b></font>'}
else {return $string }
}
ZitatMit Sicherheit steh ich auf dem Schlauch: bei deinem kryptischen (https://forum.fhem.de/index.php/topic,87570.msg800910.html#msg800910) Beispiel ist doch {} somewhere in the attribute too
Stimmt, aber bei kryptischen Loesungen muss man genau aufpassen. Stichwort war dabei SetMagic (https://fhem.de/commandref_modular.html#set), was bei set, setreading, und bei Auswerten von stateFormat verwendet werden kann. Wenn man Perl-Code via SetMagic verwenden will, dann ist {...} nicht ausreichend, es muss schon {(..)} sein, damit (wegen der nachtraeglichen Einfuehrung) Probleme mit alten Werten (wie JSON, etc) vermieden werden.
stateFormat wird so ausgewertet:
- falls der Wert in {} eingeschlossen ist, dann wird es als Perl String ausgewertet
- sonst wird SetMagic angewendet
- falls SetMagic nichts gefunden hat, werden im Text alle ReadingNamen durch deren jeweiligen Wert ersetzt.
Denk ich habs :P
{"<span style=\'color:\x23".substr(Color::pahColor(0,30,60,ReadingsVal($name,'1_Vorlauf',0),0),0,6)."\'>".ReadingsVal($name,'1_Vorlauf',0)."</span>"}
DANKE
Hi,
ich habe ein etwas ähnliches Problem,
ich habe via stateFormat {sprintf("%.1f°",ReadingsVal("DS18B20_PSP_1_01","temperature",0))."C"}
die Ausgabe eine DS18b20 hübsch gemacht.
Dadurch ist "state" variabel also z.B. 32.5°C
Ich möchte nun bei einer Temperatur unter 45 Grad das Icon in Rot und drüber in grün darstellen. Das ganze hätte ich gern über devStateIcon gelöst, aber ohne gleich an einem div herrumzuschrauben.
Mir ist klar das devStateIcon bei einem klar definierten Wert anspringt, aber nach einem Vergleich ist der wert ja klar.
ich habs bereits mit folgendem versucht:
{ReadingsVal("DS18B20_PSP_1_01","temperature",0)<46}:sani_buffer_temp_down@red ReadingsVal("DS18B20_PSP_1_01","temperature",0)>45}:sani_buffer_temp_down@green
<45:security@red >44:security@green
<=45.*:security@red >=44.*:security@green
leider reagiert die Darstellung darauf nicht
Habt ihr einen Tipp für mich?
edit: hier noch ein List von dem Sensor
Internals:
CFGFN FHEM/sensoren.cfg
CHANGED
DEF 28.FFA738011604 60
FUUID 5c66e4d4-f33f-52e2-1b32-2a512342621c1182
IODev ows
LAST_READ_FAILED 0
NAME DS18B20_PSP_1_01
NOTIFYDEV global
NR 230
NTFY_ORDER 50b-DS18B20_PSP_1_01
STATE 32.5°C
TYPE OWDevice
Helper:
DBLOG:
temperature:
myDbLog:
TIME 1581787680.51336
VALUE 32.5
READINGS:
2020-02-15 18:57:00 alarm 0
2020-02-15 18:57:00 state temperature: 32.5 alarm: 0
2020-02-15 18:57:00 temperature 32.5
fhem:
address 28.FFA738011604
alerting 1
bus bus.0
interfaces temperature
interval 60
getters:
address
crc8
family
fasttemp
id
locator
r_address
r_id
r_locator
temperature
temperature10
temperature11
temperature12
temperature9
temphigh
templow
type
polls:
temperature
setters:
temphigh
templow
state:
temperature
Attributes:
DbLogExclude state , alarm
IODev ows
event-min-interval 600
event-on-change-reading temperature.*:0.5
fp_Heizung 416,508,0,DS18B20_SSP_1_01,
icon sani_buffer_temp_down
model DS18B20
resolution 9
room Pufferspeicher
stateFormat {sprintf("%.1f°",ReadingsVal("DS18B20_PSP_1_01","temperature",0))."C"}
In Deinem Codeabschnitt:
Zitatich habs bereits mit folgendem versucht:
stimmt doch quasi nix?!?
Packe den Teil mal in einen Editor und versuche mal allein das
Klammer auf /
Klammer zu Thema zu lösen :)
Gruß Otto
aha, ich hatte also bei
{ReadingsVal("DS18B20_PSP_1_01","temperature",0)<46}:sani_buffer_temp_down@red {ReadingsVal("DS18B20_PSP_1_01","temperature",0)>45}:sani_buffer_temp_down@green
die 2te öffnende klammer vergessen.
Funktionieren tuts deshalb trotzdem nicht. Ist aber auch verständlich, da der Ausdruck zwar ein true oder false zurück gibt aber dann keinen match mit dem aktuellen state darstellt.
Ich werde das Gefühl nicht los das ich die Funktion auslagern muss, aber das macht die Angelegenheit unübersichtlicher. Ich bin ja kein Freund von klickybunti, aber die Wartungsfreundlichkeit für DAU's wird damit doch erheblich verringert.
Ich finde es irrefuehrend und stoerend, devStateIcon Probleme in einem Thema mit stateFormat Ueberschrift zu diskutieren.
devStateIcon selbst hat zwei Formate. Ausschnitt aus dem Commandref (https://fhem.de/commandref_modular.html#devStateIcon):
- space separated list of regexp:icon-name:cmd triples, icon-name and cmd may be empty.
- perl code enclosed in {}. If the code returns undef, then the default icon is used, if it retuns a string enclosed in <>, then it is interpreted as an html string. Else the string is interpreted as a devStateIcon of the first fom, see above.
Eine Variante des ersten Formats, wo regexp durch {} ersetzt werden kann, ist weder dokumentiert, noch implementiert.
Zitat von: rudolfkoenig am 16 Februar 2020, 11:58:44
Ich finde es irrefuehrend und stoerend, devStateIcon Probleme in einem Thema mit stateFormat Ueberschrift zu diskutieren.
danke, mein Problem basierte mit auf dem Inhalt von stateFormat daher wollte ich dafür kein extra Thread aufmachen, in Zukunft bin ich schlauer
Zitat von: rudolfkoenig am 16 Februar 2020, 11:58:44
Eine Variante des ersten Formats, wo regexp durch {} ersetzt werden kann, ist weder dokumentiert, noch implementiert.
Nochmal Danke, ich habe in der Commandref völlig übersehen das es sich um Regex handelt, mit regex kann ich umgehen, das löst auch mein Problem.
Manchmal bedarf es nur eines Trittes in die richtige Richtung
Gruß
... und WIE sieht jetzt die Lösung aus ?
Zitat von: Otto123 am 16 Mai 2018, 17:51:30
[...]
So geht es auch (im FHEMWEB ins attr eintragen):
{
my $val = ReadingsVal("$name",'Summe',''
if ($val <= 0) {
return "<span style='color:#FF0000'>$val</span>";
}
else {
return "<span style='color:#00FF00'>$val</span>";
}
}
[...]
Hallo Otto, welches attr in FHEMWEB wäre das denn?
Gruß, Stefan
es ging hier im Thread immer um das Attribute stateFormat.
IM FHEMWEB - damit meinte ich in der FHEM Standard WEB Oberfläche ... ;)
Ah, ok. Dachte im ersten Moment das wäre eine Art globale Definition.
Aber da fehlt dann noch eine Klammer und ein Strichpunkt, oder?
{
my $val = ReadingsVal("$name",'Summe','');
if ($val <= 0) {
return "<span style='color:#FF0000'>$val</span>";
}
else {
return "<span style='color:#00FF00'>$val</span>";
}
}
Wenn weitere Readings im stateFormat angezeigt werden sollen, wie mache ich das dann in diesem Konstrukt?
So?
{
my $val = ReadingsVal($name,"temperature",3);
my $val2 = ReadingsVal($name,"dewpoint",0);
my $col = "red";
if ($val >= 3) {
$col = "red";
}
else {
$col = "blue";
}
return "<span style='color:".$col."'>Temperatur: ".$val." °C</span><br>Taupunkt: $val2 °C";
}
Wenn ich die geschweiften Klammern mal aufgemacht habe, muss ich da auch alles drin machen, oder geht das einfacher?
Zitat von: thymjan am 06 Dezember 2022, 15:45:40
Aber da fehlt dann noch eine Klammer und ein Strichpunkt, oder?
Ich wüsste jetzt nicht wo ???
das $name in " " steht ist eventuell überflüssig, bin mir aber sicher das probiert zu haben. Manchmal ist das notwendig wenn der Parser zweimal läuft, die erste Runde löst die variable auf und die zweite Runde führt den Code aus. Siehe Rudi sein Konstrukt mit set magic.
Ob dein Vorschlag läuft musst Du einfach testen, ich bin da im Theorietest nicht so sattelfest bei solchen HTML Konstrukten.