FHEM Forum

FHEM => Automatisierung => Thema gestartet von: laserrichi am 21 November 2017, 20:57:09

Titel: Rechenfehler bei userreadings addition von readings
Beitrag von: laserrichi am 21 November 2017, 20:57:09
heute nacht habe ich einen seltsamen Rechenfehler erhalten.

Randbedingung: mit ESPEASY zähle ich vom Gaszähler die Impulse. Ein Impuls entspricht 0,1m³ Gas.
Damit ich den aktuellen Zählerstand habe, definierte ich ein userreading das immer die Gaspulse dazuaddiert.

Folgendes Ergebniss ist dabei rausgekommen:

2017-11-21_00:34:31 ESPEasy_ESPSensor_GasZaehler Zaehlerstand: 4211.3
2017-11-21_00:44:32 ESPEasy_ESPSensor_GasZaehler Gaspulse: 0.0
2017-11-21_00:54:33 ESPEasy_ESPSensor_GasZaehler Gaspulse: 0.1
2017-11-21_00:54:33 ESPEasy_ESPSensor_GasZaehler Zaehlerstand: 4211.40000000001

Gaspulse ist das was der ESPEASY schickt,  dort ist eingerichtet %value%/10  mit 1 dezimalstelle
Zaehlerstand ist das userreading das ich vom aktuellen Zählerstand einfach hochzählen lasse, und hier die userreading:

Zaehlerstand:Gaspulse.* {return ReadingsVal("ESPEasy_ESPSensor_GasZaehler","Zaehlerstand",0) + ReadingsVal("ESPEasy_ESPSensor_GasZaehler","Gaspulse",0)}

nach zurücksetzen des Zaehlerstand  auf den richtigen Wert läuft es wieder weiter, wer rechnet da falsch ? Ist doch nur eine Addition von + 0,1
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: rudolfkoenig am 22 November 2017, 00:36:17
Leider rechnet Perl mit float/double auf Binaerbasis und nicht mit BCD, und deswegen sind solche Ergebnisse natuerlich.
Man muss halt runden, z.Bsp. mit sprintf("%0.f", <wert>), oder round(value, digits), was wiederum auch sprintf aufruft.
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: laserrichi am 22 November 2017, 20:08:00
Danke!!!     jetzt isses klar... und es funktioniert jetzt  wie ich mir das vorstelle :-)
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: SouzA am 09 Januar 2023, 09:49:39
Hallo liebe Kollegen,

ich komme bei der Addition von zwei Readings auch nicht weiter.
Mein Device nefit_thermostat erstellt u.a. zwei Readings, welche den Verbrauch in kwh für Zentralheizung und Heißwasser darstellen:
yesterday_consumption_ch
und
yesterday_consumption_hw

Diese beiden Werte möchte ich in einem Reading gerne addieren:
attr nefit_thermostat userReadings yesterday_consumption_total {sprintf("%.2f" ,return ReadingsVal("nefit_thermostat","yesterday_consumption_hw",0) + ReadingsVal("nefit_thermostat","yesterday_consumption_ch",0)}

Allerdings passiert genau gar nichts...
Auch nicht, wenn ich mit setreading eines der beiden oben genannten Readings ändere und/oder aktualisiere.

Was mache ich falsch?

thx und bis denn
SouzA
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: Otto123 am 09 Januar 2023, 10:25:14
Hi,

ich meine das return ist zuviel.
Es passiert "gar nichts" kann auch noch an verhinderten Events liegen.

Gruß Otto
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: SouzA am 09 Januar 2023, 10:40:35
Hi,

danke für die Rückmeldung.
Habe das return rausgenommen...
Funktioniert jetzt.
Danke! :D

Bis denn
SouzA
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: Wolle02 am 09 Januar 2023, 14:49:53
Kam denn da kein Syntaxfehler? Ich meine da fehlt noch eine schließende runde Klammer.
Titel: Antw:Rechenfehler bei userreadings addition von readings
Beitrag von: SouzA am 09 Januar 2023, 14:52:31
Hmm,

irgendwie nich...
Hab das aber auch so oft verändert, da weiß ich nicht mehr wann jetzt was kam... ^^

Läuft ja jetzt ;)

Bis denn
SouzA