FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rih am 08 März 2019, 21:22:12

Titel: sprintf funktioniert nicht
Beitrag von: rih am 08 März 2019, 21:22:12
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?
Titel: Antw:sprintf funktioniert nicht
Beitrag von: Otto123 am 08 März 2019, 22:58:45
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
Titel: Antw:sprintf funktioniert nicht
Beitrag von: Christoph Morrison am 08 März 2019, 23:07:11
Hast du WaterCalculator (https://fhem.de/commandref_DE.html#WaterCalculator) gesehen?