FHEM Forum

FHEM => Sonstiges => Thema gestartet von: friedleif am 22 September 2018, 14:12:35

Titel: stateFormat und Perl
Beitrag von: friedleif am 22 September 2018, 14:12:35
Hallo,

ich habe bei meinen Hm Geräten ein Reading 0.LOWBAT das je nach Zustand no oder yes annimmt.

Das stateFormat sieht nach meinen bisherigen Versuchen in Perl so aus:
{ sprintf "T: %s H: %s S: %s D: %s B: %s",ReadingsVal($name,"1.TEMPERATURE",0),ReadingsVal($name,"1.HUMIDITY",0),ReadingsVal($name,"2.SET_TEMPERATURE",0),ReadingsVal($name,"DEWPOINT",0),ReadingsVal($name,"0.LOWBAT",0) }

Das Reading wird also angezeigt, ist so aber noch nicht so toll.

Wäre schon wenn das Reading nur angezeigt wird wenn der Zustand yes ist (Batterie tauschen in rot oder so), aber nicht wenn alles ok ist.

Leider bekomm ich da keine Bedingung rein ohne auf Fehlermeldungen zu stoßen. Liegt natürlich an meinen überragenden Fähigkeiten in Perl  ::)

Jemand eine Idee wie man das hinbekommt?
Titel: Antw:stateFormat und Perl
Beitrag von: Ellert am 22 September 2018, 14:59:29
Statt ReadingsVal($name,"0.LOWBAT",0)
dies
(ReadingsVal($name,"0.LOWBAT",0) eq "yes"?ReadingsVal($name,"0.LOWBAT",0):" ")
versuchen, s. https://perldoc.perl.org/perlop.html#Conditional-Operator
Titel: Antw:stateFormat und Perl
Beitrag von: friedleif am 22 September 2018, 15:19:57
Das schaut gut aus, danke!
Der Status no wird jetzt nicht mehr angezeigt und es kommt auch keine Fehlermeldung.

Lässt sich das yes auch noch durch einen anderen Ausdruck ersetzen, damit statt "yes" z.B. "Batterie leer" im Status steht?

Oder müsste ich da mit substitute das Reading ändern?

Edit:
Hab es jetzt so:
{ sprintf "T: %s H: %s S: %s D: %s %s",ReadingsVal($name,"1.TEMPERATURE",0),ReadingsVal($name,"1.HUMIDITY",0),ReadingsVal($name,"2.SET_TEMPERATURE",0),ReadingsVal($name,"DEWPOINT",0),(ReadingsVal($name,"0.LOWBAT",0) eq "yes"?"<span style='color:#FF0000'>Batterie leer!</span>":" ") }

Test mit setreading war erfolgreich