[gelöst] gplot mit FileLog '+' "ausschneiden"

Begonnen von MadMax-FHEM, 13 August 2022, 22:15:26

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Hallo,

ich stehe ja mit RegEx eh etwas auf Kriegsfuss, gebe ich zu.

Aber ich bekomme es im RegEx-Tester hin und auch in FhemWeb aber ich weiß nicht, wie ich das in die gplot-Datei eingeben muss... :-\

Folgendes Problem:

ich habe in einem FileLog Tendency-Werte, die stehen wie folgt drin (hier mal nur die tendency Werte):

2022-08-13_00:59:55 Aussenthermometer statTemperatureTendency1h: -0.8
2022-08-13_01:59:55 Aussenthermometer statTemperatureTendency1h: +0.2
2022-08-13_02:59:55 Aussenthermometer statTemperatureTendency1h: -1.8
2022-08-13_03:59:55 Aussenthermometer statTemperatureTendency1h: -1.0
2022-08-13_04:59:55 Aussenthermometer statTemperatureTendency1h: -0.8
2022-08-13_05:59:55 Aussenthermometer statTemperatureTendency1h: -0.8
2022-08-13_06:59:55 Aussenthermometer statTemperatureTendency1h: -0.3
2022-08-13_07:59:55 Aussenthermometer statTemperatureTendency1h: +0.5
2022-08-13_08:59:55 Aussenthermometer statTemperatureTendency1h: +1.0
2022-08-13_09:59:55 Aussenthermometer statTemperatureTendency1h: +2.6
2022-08-13_10:59:55 Aussenthermometer statTemperatureTendency1h: +2.6
2022-08-13_11:59:55 Aussenthermometer statTemperatureTendency1h: +1.4
2022-08-13_12:59:55 Aussenthermometer statTemperatureTendency1h: +0.4
2022-08-13_13:59:55 Aussenthermometer statTemperatureTendency1h: +1.1
2022-08-13_14:59:55 Aussenthermometer statTemperatureTendency1h: +0.7
2022-08-13_15:59:55 Aussenthermometer statTemperatureTendency1h: +0.6
2022-08-13_16:59:55 Aussenthermometer statTemperatureTendency1h: -0.1
2022-08-13_17:59:55 Aussenthermometer statTemperatureTendency1h: -0.1
2022-08-13_18:59:55 Aussenthermometer statTemperatureTendency1h: -0.5
2022-08-13_19:34:55 Aussenthermometer statTemperatureTendency1h: +1.5
2022-08-13_19:35:03 Aussenthermometer statTemperatureTendency1h: +1.3
2022-08-13_19:36:43 Aussenthermometer statTemperatureTendency1h: 1.3
2022-08-13_19:59:55 Aussenthermometer statTemperatureTendency1h: -1.0
2022-08-13_20:59:55 Aussenthermometer statTemperatureTendency1h: -0.9


Der Eintrag mit dem Wert 1.3 ist manuell erfolgt, wollte nur sehen, ob es tatsächlich an dem '+' liegt, tut es wohl.

Die Werte mit dem '+' werden nicht geplottet (siehe Bild, es ist dort nur ein langer Strich zu sehen).
Gut hat lange gedauert, bevor ich wusste/vermutete, dass das '+' "Schuld" ist.

Dann dachte ich mir: RegEx das doch weg ;)

Habe lange gesucht und viel probiert und wie gesagt im RegEx-Tester und in FhemWeb alles wunderbar ABER: wie gebe ich das in der gplot-Datei an, da scheitere ich :-\

So sieht meine gplot aus ohne RegEx usw.:


# Created by FHEM/98_SVG.pm, 2022-08-13 11:54:27

set terminal png transparent size <SIZE> crop

set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set y3tics
set title '<TL>'
set grid xtics y2tics
set ylabel "Humidity"
set y2label "Temperature"
set y3label "Heat/Cool"
set yrange [30:90]
set y2range [-20:40]
set y3range [-5:5]

#FileLog 4:.*humidity\x3a::
#FileLog 4:.*temperature\x3a::
#FileLog 4:.*statTemperatureTendency1h\x3a::

plot "<IN>" using 1:2 axes x1y1 title 'Luftfeuchte' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Ist-Temperatur' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y3 title 'heat/cool' ls l3 lw 1 with lines


Das funktioniert in FhemWeb:

{my $val="+1.5";; $val=~s/\+//g;; return $val}

-> 1.5

ebenso:

{my $val="-1.5";; $val=~s/\+//g;; return $val}

-> -1.5

Würde also passen.
Aber egal wie ich das in die gplot-Datei eingebe, hier ein Beispiel:

#FileLog 4:.*statTemperatureTendency1h::$fld[3]=~s/\+//g


Es kommt (immer) folgendes bei Preprocessed Data raus:

2022-08-13_01:59:55 1
2022-08-13_07:59:55 1
2022-08-13_08:59:55 1
2022-08-13_09:59:55 1
2022-08-13_10:59:55 1
2022-08-13_11:59:55 1
2022-08-13_12:59:55 1
2022-08-13_13:59:55 1
2022-08-13_14:59:55 1
2022-08-13_15:59:55 1
2022-08-13_19:34:55 1
2022-08-13_19:35:03 1
#4:.*statTemperatureTendency1h\x3a::$fld[3]=~s/\+//g


Und wie geschrieben habe ich für das RegEx dort schon alles was mir eingefallen ist und ich so gefunden habe ausprobiert, auch schon mit $val=$fld[3]=~s/\+//g und auch $fld[3]=$fld[3]=~s/\+//g auch ohne \x3a: usw.

Was geht, also irgendwas muss ja passen:

#FileLog 4:.*statTemperatureTendency1h::$fld[3]=$fld[3]+2


Dann kommt bei prepeocessed:

2022-08-13_00:59:55 1.2
2022-08-13_01:59:55 2.2
2022-08-13_02:59:55 0.2
2022-08-13_03:59:55 1
2022-08-13_04:59:55 1.2
2022-08-13_05:59:55 1.2
2022-08-13_06:59:55 1.7
2022-08-13_07:59:55 2.5
2022-08-13_08:59:55 3
2022-08-13_09:59:55 4.6
2022-08-13_10:59:55 4.6
2022-08-13_11:59:55 3.4
2022-08-13_12:59:55 2.4
2022-08-13_13:59:55 3.1
2022-08-13_14:59:55 2.7
2022-08-13_15:59:55 2.6
2022-08-13_16:59:55 1.9
2022-08-13_17:59:55 1.9
2022-08-13_18:59:55 1.5
2022-08-13_19:34:55 3.5
2022-08-13_19:35:03 3.3
2022-08-13_19:36:43 3.3
2022-08-13_19:59:55 1
2022-08-13_20:59:55 1.1
2022-08-13_21:59:55 1.2
#4:.*statTemperatureTendency1h::$fld[3]=$fld[3]+2


Passt ja irgendwie.
Aber "nur" das '+' krieg ich nicht weg...

Hier noch RawDef des SVG-Devices:

defmod SVG_FileLog_Aussen_Climate SVG FileLog_Aussen_Climate:SVG_FileLog_Aussen_Climate:CURRENT
attr SVG_FileLog_Aussen_Climate nrAxis 1,2
attr SVG_FileLog_Aussen_Climate room Balkon
attr SVG_FileLog_Aussen_Climate sortby 02
attr SVG_FileLog_Aussen_Climate title "Klimawerte aussen"


Und des FileLog:

defmod FileLog_Aussen_Climate FileLog ./log/Aussen_Climate-%Y.log Aussenthermometer:temperature.*|Aussenthermometer:humidity.*|Aussenthermometer:statTemperatureHourAvg.*|Aussenthermometer:statTemperatureTendency.h.*
attr FileLog_Aussen_Climate logtype text
attr FileLog_Aussen_Climate room Logs

setstate FileLog_Aussen_Climate active
setstate FileLog_Aussen_Climate 2022-08-13 22:13:19 linesInTheFile 257230


Jetzt bin ich ja mal gespannt.
(klar: userReadings und dann dort das '+' wegmachen ginge fände ich aber "doof" ;)  )

Vielen Dank schon mal, 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)

OdfFhem

@MadMax-FHEM


{my $val="+1.5";; $val=~s/\+//g;;}

liefert 1


{my $val="+1.5";; $val=~s/\+//gr;;}

liefert 1.5

MadMax-FHEM

Danke, mit gr klappt es :)

Allerdings warum geht z.B.:


#FileLog 4:.*statTemperatureTendency1h::$fld[3]=$fld[3]=~s/\+//g


oder auch ohne g (oder muss das g? Es gibt ja nur ein '+'?)...

Weil das ja in der FhemWeb-Zeile auch geht, also zuweisen und dann ausgeben...

Wo kann man nachlesen, wie fn in gplot geht?

Wo gibt es eine Seite die RegEx wirklich erklärt, am besten so, dass es eben in fhem auch funktioniert?
Bzw. wo kann man die fhem-Sonderdinge (oder was auch immer) nachlesen?

Ich habe mich ja wirklich wund gesucht und zwar RegEx die gehen gefunden aber dann beim Übertragen nach fhem eben nicht mehr und ich habe nicht verstanden warum...

Naja, es geht jetzt ja :)

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)

frank

die genaue beschreibung der regex implementation sollte bei der perl doku zu deiner perlversion zu finden sein.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

OdfFhem

https://perldoc.perl.org/perlrequick ... Search and replace
Zitat
If there is a match, s/// returns the number of substitutions made; otherwise it returns false.
...
The non-destructive modifier s///r causes the result of the substitution to be returned


Der "search operator" ist quasi eine Erweiterung vom "match operator"

{my $val="+1.5";; $val=~m/\+([\d.]*)/;;return $1}

MadMax-FHEM

Hmm, ok.

Mit match hatte ich auch schon "rumgespielt"...
...hat aber auch nicht so gewollt: unvermögen halt ;)

Danke, werde ich mir mal ansehen und hoffentlich auch (irgendwann) mal verstehen 8)

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)