stateFormat und Perl

Begonnen von friedleif, 22 September 2018, 14:12:35

Vorheriges Thema - Nächstes Thema

friedleif

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?

Ellert

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

friedleif

#2
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