Rechenfehler bei userreadings addition von readings

Begonnen von laserrichi, 21 November 2017, 20:57:09

Vorheriges Thema - Nächstes Thema

laserrichi

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
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

rudolfkoenig

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.

laserrichi

Danke!!!     jetzt isses klar... und es funktioniert jetzt  wie ich mir das vorstelle :-)
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

SouzA

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
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Otto123

Hi,

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

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

SouzA

Hi,

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

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Wolle02

Kam denn da kein Syntaxfehler? Ich meine da fehlt noch eine schließende runde Klammer.

SouzA

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
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee