Autor Thema: RG mit Berechnung und Formatierung  (Gelesen 969 mal)

Offline astrastudio

  • New Member
  • *
  • Beiträge: 8
RG mit Berechnung und Formatierung
« 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'}

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7449
Antw:RG mit Berechnung und Formatierung
« Antwort #1 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)}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Offline astrastudio

  • New Member
  • *
  • Beiträge: 8
Antw:RG mit Berechnung und Formatierung
« Antwort #2 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.

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7449
Antw:RG mit Berechnung und Formatierung
« Antwort #3 am: 15 August 2020, 00:24:23 »
Zitat von: wiki
Da 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

 

decade-submarginal