Mal wieder RegEx für User Readings

Begonnen von dougie, 28 Februar 2023, 12:13:47

Vorheriges Thema - Nächstes Thema

dougie

....ich steh mal wieder auf dem Schaluch....

Der Lesekopf meines Stromzählers im Keller liefert mir immer brave meine Daten via MQTT

Das Sensor Reading sieht so aus:

Sensor
{"Time":"2023-02-28T11:56:15","MT175":{"Total_in":43218.095,"Power_cur":-890,"Meter_id":"090149534b000437e46d"}}


Mein UserReading soll daraus die aktuelle Leistung (Power) und den absoluten Zählerstand (Total) extrahieren.

userReadings
Power:Sensor.* { my $strg = ReadingsVal($name,'Sensor',''); $strg =~ m,"Power_cur":([0-9.]+), ? $1 : undef }, Total:Sensor.* { my $strg = ReadingsVal($name,'Sensor',''); $strg =~ m,"Total_in":([0-9.]+), ? $1 : undef }


Problem: ich hab im Winter meine Solaranlage erweitert und die liefert nun manchmal mehr Leistung als ich verbrauche. D.h. wegen des dann vorangestelltem Minusszeichen im Sensor Reading, bekomme ich dann keine Daten mehr.

Frage: wie muss ich das RegEx ändern, das mir das Minus richtig mitgenommen wird?

VG
Ralf


PS: hat sich schon erledigt!

Hab mal rumprobiert... so scheint es zu gehen.

userReadings
Power:Sensor.* { my $strg = ReadingsVal($name,'Sensor',''); $strg =~ m,"Power_cur":([-0-9.]+), ? $1 : undef }, Total:Sensor.* { my $strg = ReadingsVal($name,'Sensor',''); $strg =~ m,"Total_in":([0-9.]+), ? $1 : undef }


betateilchen


my $text = ReadingsVal($name,"Sensor","");
my ($powercur,$totalin) = $text =~ m/([-\d.]+),/g;
fhem("setreading $name Power $powercur");
fhem("setreading $name Total $totalin");

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

dougie


Sehr elegant!!! (Wie immer).

Dankeschön!!!!