Hauptmenü

sprintf funktioniert nicht

Begonnen von rih, 08 März 2019, 21:22:12

Vorheriges Thema - Nächstes Thema

rih

Hallo,

ich habe einen Wasserzähler mit Reedkontakt (10l/Impuls). Die Impulse kommen in FHEM jede Minute als Ganzzahl an und werden mit folgendem Userreading gespeichert und zur Anzeige vorbereitet:

Wasserverbrauch_Total:Total.* monotonic {sprintf("%.2f",(ReadingsVal($name,"Total",0)/100+3))}

Zur Erklärung: geteilt durch 100 weil ich 2 Nachkommastellen darstellen will, die +3 sind ein Offset, weil beim Einbau der neuen Uhr schon 3 m³ verbraucht waren.
Immer wieder habe ich nun das Problem, dass wie z.B. heute wieder statt 7.43 m³ der Wert 7.4299999 m³ dargestellt wird. Meistens ist die Anzeige aber korrekt mit nur 2 Nachkommastellen.
Sprintf sollte doch eigentlich auf nur zwei Nachkommastellen formatieren und aufrunden, oder?

Hat jemand eine Idee, was da sporadisch schief läuft bzw. sprintf nicht greift? Ist das Userreading falsch?

Otto123

Hi,

also ich würde sagen, Du machst das einfach falsch. Du formatierst einen Wert schickst ihn aber anschließend als Gleitkommazahl in eine Berechnung (monotonic) dabei kann es wieder zu anderen Stellenwerten kommen.
Ich würde die Werte erstmal so wie sie sind aufsummieren und in einem zweiten Reading diesen Wert formatieren.

Gruß Otto
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

Christoph Morrison