FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: astrastudio am 10 August 2020, 18:06:18

Titel: RG mit Berechnung und Formatierung
Beitrag von: astrastudio am 10 August 2020, 18:06:18
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'}
Titel: Antw:RG mit Berechnung und Formatierung
Beitrag von: amenomade am 10 August 2020, 22:12:13
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)}
Titel: Antw:RG mit Berechnung und Formatierung
Beitrag von: astrastudio am 14 August 2020, 23:35:03
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.
Titel: Antw:RG mit Berechnung und Formatierung
Beitrag von: amenomade am 15 August 2020, 00:24:23
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.