[gelöst] Problem mit ReadingsNum und führender Null

Begonnen von JWRu, 27 September 2023, 18:10:07

Vorheriges Thema - Nächstes Thema

JWRu

Ich habe ein Problem mit einer führenden Null in einem Reading. Das Reading "raw" hat beispielsweise den Wert "0672.9840".
ReadingsNum (<device>, "raw", -1) liefert nicht "672.9840" wie erwartet, sondern "-1".
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

MadMax-FHEM

#1
Post doch ein list.

Heißt das Reading tatsächlich raw? Nicht irgendwo ein "verstecktes Leerzeichen" o.ä.?

Weil es sieht verdammt danach aus, als würde beim Auslesen etwas nicht funktionieren und dann der "Ersatzwert" (-1) genommen werden.
Schon mal einen anderen "Ersatzwert" probiert?
Kommt dann auch dieser?
-> Auslesen geht schief...

EDIT: eben mit einem dummy getestet -> geht. Also es kommt der Zahlenwert 0672.9840 zurück (wie erwartet/gedacht)...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

JWRu

Hier ist ein Ausschnitt aus dem List:
   READINGS:
     2023-09-27 18:13:17   CPUtemp         50
     2023-09-23 22:53:19   IODev           myMQTT_Server
     2023-09-25 16:33:25   IP              192.168.178.102
     2023-09-25 16:33:25   MAC             A8:42:E3:55:69:84
     2023-09-27 18:13:17   changeabsolut   0.0000
     2023-09-27 18:13:17   connection      connected
     2023-09-27 18:13:17   error           no error
     2023-09-27 18:13:17   freeMem         767123
     2023-09-25 16:33:25   hostname        ESP-08
     2023-09-25 16:33:25   interval        5.0
     2023-09-23 16:58:38   link            <html><a href='http://192.168.178.102'>Sensor</a></html>
     2023-09-27 18:13:17   pre             672.9840
     2023-09-27 18:13:17   rate            0.000000
     2023-09-27 18:13:17   rate_per_digitalization_round 0.0000
     2023-09-27 18:13:17   rate_per_time_unit 0.000000
     2023-09-27 18:13:17   raw             0672.9840
     2023-09-27 18:13:17   status          Flow finished
     2023-09-03 15:45:16   subscriptions   SmartHome/Sensors/WaterMeter/ctrl/flow_start SmartHome/Sensors/WaterMeter/ctrl/set_prevalue
     2023-09-27 18:13:17   timestamp       2023-09-27T18:12:44+0200
     2023-09-27 18:13:17   uptime          178856
     2023-09-27 18:13:17   value           672.9840
     2023-09-27 18:13:17   wifiRSSI        -78

Wenn ich einen anderen Ersatzwert nehme, kommt dieser.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

MadMax-FHEM

Gut kein vollständiges list...

Wie lautet dein Aufruf und bitte nicht "mystifizieren", sondern poste doch den echten Aufruf...

Zitat von: JWRu am 27 September 2023, 18:17:56Wenn ich einen anderen Ersatzwert nehme, kommt dieser.
Deutet ja wie geschrieben darauf hin, dass beim Auslesen etwas nicht passt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

JWRu

#4
Habe Mist gebaut beim Namen - es kommt tatsächlich "0672.9840" zurück.
Das wird aber anscheinend von Perl (trotz "ReadingsNum" statt "ReadingsVal") nicht als Zahl erkannt.
(0672.9840  -  672.9839) liefert z.B. 4429167.0161
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

betateilchen

Zitat von: JWRu am 27 September 2023, 18:28:17Das wird aber anscheinend von Perl (trotz "ReadingsNum" statt "ReadingsVal") nicht als Zahl erkannt.
(0672.9840  -  672.9839) liefert z.B. 4429167.0161

Das hat nix mit ReadingsNum() oder ReadingsVal() zu tun.

Perl erkennt das sehr wohl als "Zahl", aber nicht als Zahl mit der Basis 10, sondern als Oktalzahl mit der Basis 8. Und das wird genau daran erkannt, dass die Zahl mit einer 0 beginnt.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JWRu

Das habe ich auch gerade herausgefunden.
Das heißt wohl, dass ich ReadingsVal verwenden und anschließend die führende Null entfernen muss.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

betateilchen

{my $v = ReadingsVal("bla","blub","0672.9840");; $v=~s/^0//;; return $v}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JWRu

Zitat{my $v = ReadingsVal("bla","blub","0672.9840");; $v=~s/^0//;; return $v}
funktioniert
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JWRu

Wieder mal ein Grund, warum ich mich für Perl nie richtig begeistern werde.
Ich mag Sprachen mit expliziten cast-Operatoren - da kann man viel besser kontrollieren was passiert.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

betateilchen

Dass Zahlen mit 0 am Anfang als Oktalzahlen betrachtet werden, ist aber nicht nur in perl so.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JWRu

Das ist richtig - man kann aber mit entsprechenden Operatoren die Umwandlung String -> Zahl besser kontrollieren.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

fz55

Hast du einen besonderen Grund das Reading raw zu verwenden? Wenn du hier Daten von 'Digitizer - AI on the edge - watermeter' verarbeitest, steht im Reading value der numerische Wert des Wasserzahlers nach der Umwandlung von analog nach digital.

JWRu

ZitatHast du einen besonderen Grund das Reading raw zu verwenden?
Ich benutze das im Fehlerfall - dann wird "value" nicht gefüllt.
Es ist die Wasseruhr. Der analoge Bereich funktioniert prima - der digitale macht manchmal noch Probleme.
Ich werte im Fehlerfall die Differenz zwischen "pre" und "raw" aus. Wenn diese zu groß ist, erhalte ich eine Nachricht.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter