SVG schreibt immer "using 1:2" auch wenn im Plotfile was anderer steht

Begonnen von SabineT, 18 Juni 2017, 17:23:54

Vorheriges Thema - Nächstes Thema

SabineT

Hallo!

Ich bin gerade dabei, Plots mittels plotmode gnuplot-scroll zu erstellen (plotmode SVG bietet mir zu wenig Möglichkeiten der Formatierung) mit Daten aus DbLog.
Jetzt will ich unter anderem auch Daten aus dem Reading statRain_total verwenden, da brauche ich aber den 2. Wert. Im Plotfile würde ich dazu dann plot "<IN>" using 1:3 ...verwenden. Das SVG-Modul schickt aber immer "using 1:2" zum gnuplot, dass dann natürlich keine gültigen Daten findet!
Eigentlich bin ich davon ausgegangen, dass nur das "<IN>" durch den temp-filename ersetzt wird!

lg, Sabine

rudolfkoenig

Danke fuer den Hinweis, plotmode=gnuplot* schaut kaputt aus. Wundert mich, da ich in diesem Bereich seit laengerem nichts geaendert habe, nur die Patches aus https://forum.fhem.de/index.php?topic=35129.new;topicseen#new uebernommen. Und da klingt jpl2097 so, als ob es funktionieren wuerde.

rudolfkoenig

Sorry, muss mich entschuldigen fuer die falsche Aussage, gnuplot-scroll tut wie gewuenscht.
FileLog/DbLog generiert die Daten so, dass die einzelnen Spalten als Bloecke hintereinander geschrieben werden. Diese werden dann mit dem plot index Feature angesprochen, und das wird vom FHEM automatisch in die temporaere .gplot Datei eingefuegt als i 0, etc. Mit gewissen Einschraenkungen (Farbauswahl tut nicht und generiert Fehler nach /tmp/gnuplot.err) kann man sogar den SVG-Editor verwenden.

Beispiel: die angehaengte Date nach www/gplot kopieren, folgendes an fhem.cfg.demo dranhaengen:
define SVG_01_gGarden SVG Log.Garden:SVG_01_gGarden:CURRENT
attr SVG_01_gGarden label "Temp: Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_01_gGarden room Sensors
attr SVG_01_gGarden plotmode gnuplot-scroll
attr SVG_01_gGarden startDate 2013-08-13
attr SVG_01_gGarden plotsize 800,360

FHEM starten, und plot im Raum Sensors bewundern (siehe Anhang). Unterschied bei der SVG Datei zum "Original" ist, dass ich die ls Anweisungen entfernt habe, und quadratic nach lines geaendert habe. Achtung: das SVG-Attribut plotmode ist neu, habs gerade eingecheckt, also entweder SVN oder FHEM-update ab morgen verwenden.

SabineT

Im Normalfall passt das ja auch. Mein Problem ist nur, dass es halt auch Readings gibt, die mehrere Werte beinhalten.
DbLog speichert dann z.B. für das READING "statRain_total" dann als VALUE "Hour: 0.0 Day: 0.0 Month: 22.2 Year: 26.4 (since: 2017-05-24 )".

Wenn ich jetzt im gnuplot z.B. den Tageswert verwenden will würde ich plot "<IN>" using 1:5 verwenden. gnuplot interpretiert ja die durch Leerzeichen getrennten Werte als getrennte Daten.
Nur kommt das 1:5 nie beim gnuplot an, weil das im 98_SVG.pm durch 1:2 überschrieben wird.

im sub SVG_DoWhowLog ab Zeil 1130:
    # put in the filename of the temporary data file into the plot file string
    my $i = 0;
    $plot =~ s/\".*?using 1:[^ ]+ /"\"$tmpfile\" i " . $i++ . " using 1:2 "/gse;

    my $gplot_script = SVG_substcfg(0, $wl, $cfg, $plot, $file, $tmpfile);


Mir ist eben nicht klar, warum das 1:2 da fix vorgegeben wird.

Ich werde aber wohl eher ein eigenes Program schreiben, mit dem ich dann die Plots mit den Daten vom DbLog erstelle (z.B. um auch das Multiplot-Feature vom gnuplot verwenden zu können).

rudolfkoenig

#4
ZitatMir ist eben nicht klar, warum das 1:2 da fix vorgegeben wird.
Ist historisch begruendet: ich habe mit plotmode gnuplot angefangen, und da sind etliche .gplot Dateien entstanden, die 1:N verwendet haben (siehe grep using www/gplot/* | grep -v 1:2). Als naechstes kam plotmode gnuplot-scroll, dabei hat gnuplot die Zeilen nicht mehr per awk gefiltert, sondern bekam sie vorgekaut von FileLog, die fuer jede Linie jeweils eine Datei geschrieben hat. Dafuer musste in der .gplot Datei 1:N nach 1:2 konvertiert werden, damit man die gleiche Datei parallel mit plotmode gnuplot verwenden kann. Als naechstes wurde eine Datei geschrieben, und gnuplot hat mit index (i) die Bloecke ausgewertet. Dieses Format hat auch plotmode SVG behalten, dabei wurde aber keine Datei mehr erzeugt, sondern die Daten intern als Array weitergereicht. plotmode gnuplot ist nach mehreren Jahren Nichtbenutzung und deswegen keine Pflege vor ca einem Jahr entfernt worden.

FileLog verfolgt die Filosofie, dass in der Logdatei jede Zeile aus Zeitstempel und irgendetwas besteht. Zum plotten muss der Benutzer die Zeilen per regexp filtern, und die auszuwertende Spalte angeben. Das kann man im SVG-Editor direkt tun.

Dblog verfolgt die Filosofie, dass ein Eintrag in der DB aus jeweils einem Zeitstempel, ReadingName, Wert und Einheit besteht. Was Name, Wert und  Einheit ist, kann ein Modul mit DbLog_splitFn bestimmen. Hier stellt sich die Frage nach der Spalte vor dem Speichern.

Die "richtige" Loesung waere also entweder FileLog zu verwenden, oder deine Daten der DbLog Filosofie anpassen.
Oder irgendwer erstellt mir ein Patch fuer "plotmode gnuplot".

SabineT

Ich verwende FHEM erst seit ein paar Wochen, daher bin ich mit der Historie nicht so bewandert. Aber lass es jetzt mal so, wie es ist.

Ich versuche jetzt mal eigenen Subroutinen in myUtils zu schreiben, mit denen ich die Daten passend aufbereiten kann um sie dann dem bestehenden SVG zur Verfügung zu stellen. Dazu muss ich aber noch einiges lernen, wie ich benötigte Befehle  vom FHEM richtig in Perl aufrufe bzw. wie ich da die Parameter übergeben muss.

lg, Sabine