RG mit Berechnung und Formatierung

Begonnen von astrastudio, 10 August 2020, 18:06:18

Vorheriges Thema - Nächstes Thema

astrastudio

Hi

ich möchte in meiner RG gerne die Batteriespannung von mV in V umrechnen und dann noch hübsch formatieren.
Das valueFormat funktioniert an der Stelle vermutlich nicht mehr, weil ja in der definition der Wert mit <{ReadingsVal($DEVICE,"voltage","0")/1000.0}@voltage> umgerechnet wird.
Wie könnte ich das am schönsten lösen?

Danke und schönen Gruß Sascha


defmod RauchmelderReadingsGroupZigbee readingsGroup <%secur_smoke_detector>,<Alarm>,<Batterie Status>,<Batterie Spannung>,<Rauchdichte>,<letzter Heartbeat>,<vergangene Zeit> model&zigbee2mqtt_smokeDetector:smoke,battery,<{ReadingsVal($DEVICE,"voltage","0")/1000.0}@voltage>,smoke_density,<{ReadingsTimestamp($DEVICE,"smoke","")}@smoke>,<{int(time()-time_str2num(ReadingsTimestamp($DEVICE,"smoke","0")))}@smoke>
attr RauchmelderReadingsGroupZigbee valueFormat {'voltage' => "%0.1f V", 'smoke.false' => "kein Alarm", 'smoke.true' => "ALARM"}
attr RauchmelderReadingsGroupZigbee valueIcon {'battery.100' => 'measure_battery_100@green', 'battery.low' => 'measure_battery_25@red'}

amenomade

Wenn {ReadingsVal($DEVICE,"voltage","0")/1000.0}funktioniert, warum machst Du nicht die gesamte Formattierung im gleichen Perl Code-Stück, z.B.:
{sprintf("%0.1f V", ReadingsVal($DEVICE,"voltage","0")/1000.0)}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

astrastudio

defmod RauchmelderReadingsGroupZigbee readingsGroup <%secur_smoke_detector>,<Alarm>,<Batterie Status>,<Batterie Spannung>,<Rauchdichte>,<letzter Heartbeat>,<vergangene Zeit> model&zigbee2mqtt_smokeDetector:smoke,battery,<{sprintf("%0.1f V", ReadingsVal($DEVICE,"voltage","0")/1000.0)}@voltage>,smoke_density,<{ReadingsTimestamp($DEVICE,"smoke","")}@smoke>,<{int(time()-time_str2num(ReadingsTimestamp($DEVICE,"smoke","0")))}@smoke>

Mit sprintf funktioniert das leider nicht und wirft diese Fehlermeldung im Log:
2020.08.14 23:30:06 3: RauchmelderReadingsGroupZigbee: ReadingsVal($DEVICE,"voltage","0")/1000.0)}@voltage>,smoke_density,<{ReadingsTimestamp($DEVICE,"smoke","")}@smoke>,<{int(time()-time_str2num(ReadingsTimestamp($DEVICE,"smoke","0")))}@smoke>: Unmatched ) in regex; marked by <-- HERE in m/^ReadingsVal($DEVICE,"voltage","0")/1000.0) <-- HERE }@voltage>,smoke_density,<{ReadingsTimestamp($DEVICE,"smoke","")}@smoke>,<{int(time()-time_str2num(ReadingsTimestamp($DEVICE,"smoke","0")))}@smoke>$/ at ./FHEM/33_readingsGroup.pm line 154.

Da bin ich nun überfragt woran er sich da stört.

amenomade

Zitat von: wikiDa im {...} Teil des <reading>@<device> Arguments keine Leerzeichen oder Kommas vorkommen dürfen ist es in der Regel das Einfachste die Funktionalität wie in diesem Beispiel in eine eigene Routine auszulagern.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus