Regex in gplot Datei

Begonnen von Shadow3561, 20 April 2020, 07:34:11

Vorheriges Thema - Nächstes Thema

Shadow3561

Moin,


ich bekomme seit einer Änderung einer Gplot Datei folgende Meldungen im Log.

2020.04.20 07:26:25.236 1: PERL WARNING: Use of uninitialized value $1 in substitution (s///) at (eval 453151) line 1.
2020.04.20 07:26:25.236 1: PERL WARNING: Use of uninitialized value $1 in substitution (s///) at (eval 453152) line 1.
2020.04.20 07:26:25.347 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1570.
2020.04.20 07:26:25.407 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 2173.
2020.04.20 07:26:25.410 1: PERL WARNING: Argument "" isn't numeric in sprintf at ./FHEM/98_SVG.pm line 2265.



Mein Gplot sieht so aus.

#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/([\d.]*).*/$1/eg
#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/^[0-9]{1,4}/$1/eg
#logdb WR_Fronius:Power_Site__W
#logdb WR_Fronius_Meter:Hausverbrauch

plot "<IN>" using 1:2 axes x1y2 title 'Netzbezug' ls l0fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Einspeisung' ls l1fill lw 0.5 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'PV Leistung' ls l3fill lw 0.2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Hausverbrauch' ls l7 lw 1 with lines


Das WR_Fronius_Meter:Power_total_W kann ein positiver oder negativer Wert sein.
Damit das Plot einen farblichen Unterschied zwischen Bezug (positiver Werte) und Einspeisung (negative Werte) anzeigt habe ich ein Regex eingefügt der laut RegexTester auch funktioniert.

Warum habe ich jetzt diese Meldungen im Log?

MfG

rudolfkoenig

Die ersten zwei Meldungen kommen wg. dem zweiten Regexp: wo kein (), da kein $1, und das duerfte auch im Regex-Tester auffallen.
Die letzten drei Meldungen sind Folgefehler, die Quelle hat keine Zahlen geliefert, auch zu sehen in der SVG Detailansicht, mit "Show preprocessed input"

Zu welchem Zweck wird das e Regexp-Modifier verwendet?
Das im ersten Regexp im ersten () verwendete * (statt +) fuehrt zu unbeabsichtigten Mehrfach-Ersetzungen mit nichts.
Ich empfehle $val=~s/[^\d.]//g, ist einfacher zu verstehen, und auch etwa doppelt so schnell.


Shadow3561

Danke für deine Hilfe.

Das Regexp wird verwendet um bei einem Device gelieferte Zahlen zu filtern.
Wie Oben beschrieben liefert das Device positive Zahlen für den Netzbezug (Strom) und negative für die Einspeisung. Dies alles im selben Reading.

Um es in einem Plot hübsch darzustellen dient die Regexp.

#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/(-[\d.]+)//g
#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/(^[\d.]+)//g


Ich hoffe so ist es jetzt richtig.


Shadow3561

Habe es noch einmal überarbeitet.
Wenn eine Zahl jetzt entfernt wird, wird diese durch 0 ersetzt.

Jetzt sind auch die Perl Warnings PERL WARNING: Argument "" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1570. weg



#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/(-[\d.]+)/0/g
#logdb WR_Fronius_Meter:Power_total__W:::$val=~s/(^[\d.]+)/0/g