Autor Thema: [gelöst] gplot mit FileLog '+' "ausschneiden"  (Gelesen 1221 mal)

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 12723
  • NIVEAu ist keine Creme...
[gelöst] gplot mit FileLog '+' "ausschneiden"
« am: 13 August 2022, 22:15:26 »
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
« Letzte Änderung: 14 August 2022, 01:45:19 von MadMax-FHEM »
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)

Offline OdfFhem

  • Hero Member
  • *****
  • Beiträge: 1158
Antw:gplot mit FileLog '+' "ausschneiden"
« Antwort #1 am: 14 August 2022, 00:55:38 »
@MadMax-FHEM

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

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

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 12723
  • NIVEAu ist keine Creme...
Antw:gplot mit FileLog '+' "ausschneiden"
« Antwort #2 am: 14 August 2022, 01:04:54 »
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)

Offline frank

  • Hero Member
  • *****
  • Beiträge: 11149
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

Offline OdfFhem

  • Hero Member
  • *****
  • Beiträge: 1158
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}

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 12723
  • NIVEAu ist keine Creme...
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)

 

decade-submarginal