Ergebnis einer Berechnung auf 2 Nachkommastellen reduzieren//Mit sprintf "%.2f ?

Begonnen von Jogi, 02 Dezember 2022, 11:49:57

Vorheriges Thema - Nächstes Thema

Jogi

Hallo ich habe folgende Berechnung:
MQTT2_DVES_D75E9F.* {fhem (("set Stromverbrauch_aktuell "). (((ReadingsNum("A_plus","state","0","1")-OldReadingsNum("A_plus","state","0","1"))*1000*12))) }
Leider bekomme ich damit teilweise ein Ergebnis mit etlichen Nachkommastellen. Ich möchte aber maximal 2 Nachkommastellen haben.
Ich habe durch die 4.Variable "1" versucht das Problem zu lösen, was aber nicht funktioniert hat.
Als Ansatz habe ich sprintf "%.2f recherchiert, aber ich weiß nicht, wie ich das einbauen soll.
Für einen Tipp wäre ich sehr dankbar.

Otto123

Ich denke so:
MQTT2_DVES_D75E9F.* {fhem ("set Stromverbrauch_aktuell ". sprintf "%.2f", (ReadingsNum("A_plus","state",0,1) - OldReadingsNum("A_plus","state",0,1)) * 1000 * 12 }
oder so, falls es keinen weiteren Perlcode gibt:
MQTT2_DVES_D75E9F.* set Stromverbrauch_aktuell {( sprintf "%.2f", (ReadingsNum("A_plus","state",0,1) - OldReadingsNum("A_plus","state",0,1)) * 1000 * 12 )}
Wobei das dann doppelt gerundet ist, ich würde dann die Rundung in ReadingsNum weglassen!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Jogi

Zitat von: Otto123 am 02 Dezember 2022, 12:24:25
Ich denke so:
MQTT2_DVES_D75E9F.* {fhem ("set Stromverbrauch_aktuell ". sprintf "%.2f", (ReadingsNum("A_plus","state",0,1) - OldReadingsNum("A_plus","state",0,1)) * 1000 * 12 }
oder so, falls es keinen weiteren Perlcode gibt:
MQTT2_DVES_D75E9F.* set Stromverbrauch_aktuell {( sprintf "%.2f", (ReadingsNum("A_plus","state",0,1) - OldReadingsNum("A_plus","state",0,1)) * 1000 * 12 )}
Wobei das dann doppelt gerundet ist, ich würde dann die Rundung in ReadingsNum weglassen!
Vielen Dank,
ich habe es jetzt so eingebaut und es funktioniert.
MQTT2_DVES_D75E9F.* {fhem (("set Stromverbrauch_aktuell "). sprintf "%.2f",(((ReadingsNum("A_plus","state","0","1")-OldReadingsNum("A_plus","state","0","1"))*1000*12))) }
Wahrscheinlich sind da ein paar Klammern zu viel, aber es funktioniert.

Otto123

 :o
Wenn das ein notify ist: schlechtes Suchmuster / Trigger
zuviele Klammern
zuviele Hochkommas 
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Jogi

Zitat von: Otto123 am 02 Dezember 2022, 13:31:55
:o
Wenn das ein notify ist: schlechtes Suchmuster / Trigger
zuviele Klammern
zuviele Hochkommas
Ja, das ist ein notify.
Dann taste ich mich mal ran und gucke, was ich alles löschen kann, ohne dass es eine Fehlermeldung gibt.
Danke für Deine Tipps!

Otto123

nimm doch einfach so wie ich geschrieben habe? Oder lief das nicht?
Tipp fürs Suchmuster: Eventmonitor auf und den Event markieren der exakt trifft, dann notify modifizieren hier stehts: https://wiki.fhem.de/wiki/Event_monitor

Sieht dann am Ende mind. so aus:
MQTT2_DVES_D75E9F:.*
Wobei ich nicht ganz verstehe: Du triggerst auf Device A und liest Werte von Device B aus. Warum machst Du das Ganze nicht bloß wenn sich A_plus ändert?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz