NEWS
Parser-Adapter: Rundungsfehler bei Zahlen?
-
Ich habe gerade bei mir im Parser -Adapter ein interessantes Verhalten festgestellt.
Bei manchen Temperaturen, die ich von einem DS10B20 1-Wire-Thermometer lese, erhalte ich sehr krumme Werte.
Der DS18B20 liefert Meldungen der Art
00 4b 46 ff ff 01 10 ad : crc=ad YES 4d 00 4b 46 ff ff 01 10 ad t=38887
wobei 38,887 (mit Komma) die Temperatur ist.
Wenn ich nun mit dem regulären Ausdruck
t=(-?\d{3}) ````(also nur die ersten drei Ziffern mit Vorzeichen) den ich auf diese Rückmeldungen losgehe, dann erhalte ich mit einem Korrekturfaktor von ****0.1**** einen sehr krummen Wert von ****38.800000000000004**** Das kann auch ganz einfach in der Konfiguration des Parsers getestet werden. Natürlich (sonst wäre es zu einfach) passiert dies nicht bei allen Werten:
t=38887 -> 38.800000000000004
t=38787 -> 38,7
t=38687 -> 38,6
t=38587 -> 38,5
t=38487 -> 38.400000000000006Bug oder Feature? Oder gar Fehler vor dem Bildschirm? Hier noch die gesamte Konfig dieses Parser-Objekts >! { >! "from": "system.adapter.admin.0", >! "ts": 1517232565264, >! "common": { >! "name": "Temp_1", >! "unit": "", >! "type": "number", >! "role": "value", >! "write": false, >! "read": true, >! "custom": { >! "history.0": { >! "enabled": true, >! "changesOnly": true, >! "debounce": 1000, >! "maxLength": 960, >! "retention": 31536000, >! "changesRelogInterval": 0, >! "changesMinDelta": 0 >! } >! } >! }, >! "native": { >! "link": "/sys/bus/w1/devices/10-0008XXXXXX/w1_slave", >! "regex": "t=(-?\\d{3})", >! "interval": "", >! "substitute": "", >! "offset": 0, >! "factor": 0.1, >! "item": 0, >! "comma": true, >! "substituteOld": false >! }, >! "acl": { >! "object": 1638, >! "owner": "system.user.admin", >! "ownerGroup": "system.group.administrator", >! "state": 1638 >! }, >! "_id": "parser.0.Temp_1", >! "type": "state" >! }
-
Sowas kann beim Rechnen mit Gleitkommazahlen passieren …
-
Die Frage hatte ich hier: http://forum.iobroker.net/viewtopic.php … 154#p89154
auch schon mal gestellt. Bluefox hat dann einen Link mit der passenden Erklärung gepostet.
Gruß
Matze