[gelöst] Fehler bei der Ersetzung im .gplot File bei plotmode gnuplot-scroll?

Begonnen von SabineT, 21 Juni 2017, 19:14:21

Vorheriges Thema - Nächstes Thema

SabineT

Ich wollte heute mal mit den statistics vom gnuplot experimentieren und bin dabei auf einen möglichen Fehler beim Ersetzen von "<IN>".

Hier ein Auszug aus einer .gplot Datei:
set output '<OUT>.png'
:
stats "<IN>" using 1
:
plot "<IN>" using 1:2

Eigentlich sollte man annehmen, dass alle <IN> Tags durch den Temp-Filenamen mit den Daten ersetzt werden. Tatsächlich wird aber das <IN> in der stats Zeile durch CURRENT ersetzt. Wenn ich stattdessen stats "<OUT>" ... verwende, dann wird dieses <OUT> durch den Filenamen ersetzt, der auch für das <IN> in der plot Zeile genommen wird.

Da ich jetzt aber stats ohnehin nicht für meinen Anwendungsfall verwenden kann hab ich jetzt erst mal kein Problem damit, aber ich denke, dass das trotzdem bei Gelegenheit geändert werden sollte.

lg, Sabine

SabineT

interessant ist übrigens auch, dass die plot-Zeile(n) 2x an gnuplot gesendet werden, wobei vor der Wiederholung noch ein "set xrange" dazu ausgegeben wird, das aber vom gnuplot nicht verwendet wird.
set ytics out
set y2tics out


plot "/tmp/file.3811" i 0 using 1:2 axes x1y2 smooth unique title 'Wind: Mittel' lc rgb 'blue' lw 1 with lines,\
     "/tmp/file.3811" i 1 using 1:2 axes x1y2 smooth unique title 'Spitze' lc rgb 'coral' with circles

set xrange ["2017-06-20_21:00:00":"2017-06-21_21:00:01"]
plot "/tmp/file.3811" i 0 using 1:2 axes x1y2 smooth unique title 'Wind: Mittel' lc rgb 'blue' lw 1 with lines,\
     "/tmp/file.3811" i 1 using 1:2 axes x1y2 smooth unique title 'Spitze' lc rgb 'coral' with circles


der dazugehörige Teil der .gplot-Datei schaut so aus:
set ytics out
set y2tics out

#lp DbLog:Wetterdaten:WH1080:windSpeed:::$val=($val*3.6)
#lp DbLog:Wetterdaten:WH1080:windGust:::$val=($val*3.6)

plot "<IN>" using 1:2 axes x1y2 smooth unique title 'Wind: Mittel' lc rgb 'blue' lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 smooth unique title 'Spitze' lc rgb 'coral' with circles

rudolfkoenig

<IN> Ersetzung: Kann ich bestaetigen, wird ersetzt durch $inputdevicehash->{LOGDEVICE}. Fuer FileLog gibts eine Sonderbehandlung: CURRENT wird ersetzt durch den Dateinamen (ohne Pfad). Ich habe fuer gnuplot-scroll jetzt ein <TMPFILE> eingefuegt, das wird durch die temporaere Datei ersetzt. stat beschwert sich jetzt bei mir mit "line 0: Stats command not available in timedata mode", was fuer mich ok ist.

plot-Zeile(n) 2x: habs gefixt, bitte testen.

SabineT

Zitat von: rudolfkoenig am 23 Juni 2017, 20:09:13
<IN> Ersetzung: Kann ich bestaetigen, wird ersetzt durch $inputdevicehash->{LOGDEVICE}. Fuer FileLog gibts eine Sonderbehandlung: CURRENT wird ersetzt durch den Dateinamen (ohne Pfad). Ich habe fuer gnuplot-scroll jetzt ein <TMPFILE> eingefuegt, das wird durch die temporaere Datei ersetzt. stat beschwert sich jetzt bei mir mit "line 0: Stats command not available in timedata mode", was fuer mich ok ist.

plot-Zeile(n) 2x: habs gefixt, bitte testen.
Ich teste das, sobald ich deine neue Version übers Update bekomme, oder kann ich die wo runterladen?

Zum anschaun, was FHEM da an gnuplot schickt, hab ich mir übrigens ein kleine Shellscript geschrieben:
#!/bin/sh
cat <&0 | tee /tmp/gnuplot.cmd | /usr/bin/gnuplot

gespeichert unter /usr/local/bin/gnuplot (/usr/local/bin steht bei mir in der PATH Variable vor /usr/bin )

rudolfkoenig

ZitatIch teste das, sobald ich deine neue Version übers Update bekomme, oder kann ich die wo runterladen?
Siehe https://svn.fhem.de/ bzw. https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/98_SVG.pm

Wg. dem Script: kannst du mir bitte sagen, welche Rolle "cat <&0" spielt?
Bin nach einer Google Suche verwirrter, als vorher. Selbst strace hat mich in Stich gelassen.

SabineT

Zitat von: rudolfkoenig am 24 Juni 2017, 13:15:58
Siehe https://svn.fhem.de/ bzw. https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/98_SVG.pm

Wg. dem Script: kannst du mir bitte sagen, welche Rolle "cat <&0" spielt?
Bin nach einer Google Suche verwirrter, als vorher. Selbst strace hat mich in Stich gelassen.
So, hab jetzt ein Update gemacht und deine Änderungen getestet. Danke! So schaut das jetzt gut aus. Vorallem wird jetzt auch das "set xrange ..." vom gnuplot verwendet, das du im SVG.pm dann einfügst, davor kam das ja erst nach den ersten plot-Zeilen.
Speziell die Kombination dblog + delta-h + gnuplot hatte bisher immer einen zu großen Zeitraum geliefert (ab 0 Uhr des Vortages, auch bei endplot now).

Zu meinem Script: das "cat <&0" hab ich von Dr. Google. Hatte einfach nur danach gesucht, wie ich stdin im shellscript weiter verwenden kann. Im SVG.pm werden die Daten ja über die Pipe an gnuplot geschickt:
    open(FH, "|gnuplot >> $errfile 2>&1");# feed it to gnuplot
Um jetzt das, was SVG.pm an gnuplot schickt zusätzlich in eine Datei zu schreiben schiebe ich das "tee" dazwischen. Im Script wird als mit dem "cat <&0" stdin an cat geschickt und an tee geschickt.
Vermutlich würde es auch einfacher gehen, hab da aber nicht mehr weiter herumprobiert nachdem das so funktioniert.
Evtl. könnte es auch mit "tee <&0 /tmp/gnuplot.cmd | /usr/bin/gnuplot" gehen.

lg, Sabine

SabineT

es geht noch einfacher:
#!/bin/sh
tee /tmp/gnuplot.cmd | /usr/bin/gnuplot

hatte nicht daran gedacht, dass das erste im shellscript aufgerufene Programm dann stdin bekomm...