zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog

Solaranlagen-Logfiles auswerten mit gnuplot

veröffentlicht am 12.10.2016 mit 1128 Worten - Lesezeit: 6 Minute(n)

Mein Solarregler schreibt ein Protokoll über seine Aktivitäten, d. h. er schreibt Datum, Uhrzeit und die zugehörigen Werte für Spannung und Strom am Eingang, also von der Solarzelle, sowie Ausgang, also zur Batterie, in ein Textfile, das er auf einer SD-Karte abspeichert.
Hier soll gezeigt werden, wie diese Daten als Grafik ausgewertet werden können - standardisiert und ohne viel Handarbeit.

Die Daten

Wie bereits erwähnt liegen die Daten als Textfile SOLARLOG.TXT vor, das Format sieht folgendermaßen aus:

   DATE      TIME    U1   I1   Us   Is
----------------------------------------
2015.11.01 11:15:57 12.8 02.3 21.1 01.4 
2015.11.01 11:16:09 12.8 02.3 21.4 01.5 
2015.11.01 11:16:20 12.8 02.3 21.4 01.5 
2015.11.01 11:16:31 12.8 02.3 21.0 01.5 
2015.11.01 11:16:43 12.8 02.3 21.4 01.5 
2015.11.01 11:16:54 12.8 02.3 21.4 01.4 
2015.11.01 11:17:05 12.8 02.3 21.6 01.5 
2015.11.01 11:17:17 12.8 02.3 21.6 01.5 
2015.11.01 11:17:28 12.7 02.3 21.4 01.4 
2015.11.01 11:17:39 12.7 02.4 21.4 01.5 
2015.11.01 11:17:51 12.7 02.4 21.1 01.5 
2015.11.01 11:18:02 12.6 02.4 21.1 01.5 
2015.11.01 11:18:13 12.5 02.4 21.1 01.5 
2015.11.01 11:18:25 12.5 02.4 21.0 02.0 
2015.11.01 11:18:36 12.5 02.4 21.0 01.5 
2015.11.01 11:18:47 12.5 02.4 20.9 01.5 
2015.11.01 11:18:59 12.6 02.4 20.9 01.5 
2015.11.01 11:19:10 12.6 02.4 20.9 01.4 
2015.11.01 11:19:21 12.6 02.4 21.0 01.4 
2015.11.01 11:19:33 12.7 02.4 21.0 01.5 
2015.11.01 11:19:44 12.7 02.4 21.1 01.4 

Die Spalten sind jeweils durch ein Leerzeichen getrennt, die Spannungs- und Stromwerte liegen als Dezimalwerte mit einem Dezimalpunkt vor. Das Logfile speichert fortlaufend die Meßwerte des Solarreglers, über Tage/Wochen/Monate …, bis die Datei von der SD-Karte auf den Rechner verschoben (damit auf der Karte gelöscht) wird und folglich ein neues File geöffnet wird und das Spiel von vorn beginnt.

Die Auswertung

Die Software ‘gnuplot’

Gnuplot (Eigenschreibweise: gnuplot) ist ein skript- bzw. kommandozeilengesteuertes Computerprogramm zur grafischen Darstellung von Messdaten und mathematischen Funktionen (Funktionenplotter). Das Projekt Gnuplot wird seit 1986 kontinuierlich von einem internationalen Team ehrenamtlicher Entwickler vorangetrieben. Gnuplot stammt aus der Unix-Welt, läuft aber auf allen gängigen Betriebssystemen. Es besitzt keine eigene grafische Benutzeroberfläche, sondern wird von der Kommandozeile aus bedient oder über Skripte gesteuert.
Es kann sowohl mathematische Funktionen aus Formeln grafisch darstellen als auch tabellarisch vorliegende Werte, z. B. Meßwerte, als Diagramm anzeigen. Letzteres wird hier genutzt und beschrieben.
Dabei greift es direkt auf die Originaldaten zu, ohne diese zu verändern. Ein Import wie z. B. in üblichen Tabellenkalkulationsprogrammen entfällt.

Das Plotfile

Das Plotfile enthält alle Anweisungen an gnuplot, wie die vorliegenden Messdaten zu interpretieren und die Diagramme zu formatieren sind. Ich gebe hier den Inhalt dieser Datei abschnittsweise mit Erklärungen wieder:

reset
# Parameter
datenfile = "SOLARLOG.TXT"
datum_start = "2016.09.14 04:00:00"
datum_stop = "2016.09.14 22:00:00"
bildbreite = 800
bildhoehe = 600

Gnuplot wird zunächst in den Ausgangszustand zurückgesetzt (reset).
Als nächstes definiere ich einige Variablen. Das hat den Hintergrund, daß ich Werte, die sich ändern können, gerne am Anfang eines Files oder scripts zusammengefaßt stehen habe, weil das übersichtlicher ist.

# Diagramm
 set title "Ladekurven ".datum_start
 set xlabel "Uhrzeit (MEZ)" font "courier"
 set xtics rotate font "courier" font "courier"
 set mxtics
 set ytics nomirror font "courier" font "courier"
 set mytics
 set y2tics nomirror font "courier" font "courier"
 set my2tics
 set nologscale x
 set xdata time
 set timefmt "%Y.%m.%d %H:%M:%S"
 set format x "%H"
 set grid
 set border
 set key inside right top

In diesem Abschnitt wird bestimmt, wie das Diagramm aussieht:

Im nächsten Abschnitt werden Anfangs-und Endwert der x-Achse gesetzt sowie die Bildausgabe festgelegt: es wird eine PNG-Bilddatei erzeugt und deren Größe (in Pixeln) gesetzt.

set xrange [datum_start:datum_stop]     #Zeitangabe in "" setzen als Wertebereich für x-Achse    
set term png size bildbreite, bildhoehe     #Graph als png-Datei ausgeben mit Diagrammgröße lt. Parameter

auch hier wird auf die anfangs gesetzten Variablen zurückgegriffen.

# Diagramm 1:
set yrange [12:15]      #Wertebereich der linken y-Achse
set y2range [0:12]      #Wertebereich der rechten y-Achse

 set ylabel "Batteriespannung (V)" font "courier"
 set y2label "Ladestrom (A)" font "courier"
 set out datum_start."_solar1_batterie.png"
 plot datenfile using 1:3 title 'Spannung' with lines,\
 datenfile using 1:4 title 'Strom' axis x1y2 with lines

Das erste Diagramm wird beschrieben:

werden festgelegt.
In den letzten beiden Zeilen wird dann angegeben, daß die Spannungswerte an die erste y-Achse dargestellt werden und dazu auf die Werte der Spalten 1 (x-Wert) und 3 (y-Wert) zugegriffen wird, die Spannungswerte werden aus der Spalte 4 entnommen und auf die y2-Achse bezogen. Bei beiden Graphen werden die Meßwerte durch Linien zu geschlossenen Kurven verbunden.

Anmerkung: Obwohl hier als x-Wert die Spalten 1 und 2 zusammengefaßt (Datum UND Zeit) verwendet werden, wird die Spaltenzählung für die Folgespalten mit den Meßwerten weiter so behandelt, als wären diese Spalten getrennt.

# Diagramm 2:
set yrange [0:30]
set y2range [0:10]

 set ylabel "Solarspannung (V)"
 set y2label "Solarstrom (A)"
 set out datum_start."_solar2_zellen.png"
 plot datenfile using 1:5 title 'Spannung' with lines,\
 datenfile using 1:6 title 'Strom' axis x1y2 with lines

# Diagramm 3:
set yrange [0:200]
set y2range [0:200]

 set ylabel "Ladeleistung (W)" font "courier"
 set y2label "Solarleistung (W)" font "courier"
 set out datum_start."_solar3_leistung.png"
 plot datenfile using 1:($5*$6) title 'Solarleistung' axis x1y2 with lines,\
 datenfile using 1:($3*$4) title 'Ladeleistung' with lines          #Ladeleistung in zweiter Zeile legt deren Graph ÜBER den Graphen der Solarleistung

Diagramm 2 und 3 werden in derselben Weise definiert wie Diagramm 1. In Diagramm 3 wird für die Leistung als y-Wert aber auf das Produkt zweier Spalten zurückgegriffen, dazu werden die Spaltennummern mit vorangestelltem $-Zeichen angegeben, also z. B. ($5*$6).

Das fertige Plotfile speichere ich z. B. als solar.plt und lege es zusammen mit dem Datenfile SOLARLOG.TXT in einem gemeinsamen Verzeichnis ab.

Ausführung und Ergebnis

gnuplot aufrufen

Im Terminal wird in das Verzeichnis gewechselt (cd /Pfad/zum/script), in dem die beiden Files SOLARLOG.TXT (Messdaten) und solar.plt (Plotfile) liegen. Der Befehl

~/Pfad/zum/script $ gnuplot solar.plt

startet gnuplot und veranlaßt es, das Plotfile abzuarbeiten und die Ergebnisse (Diagramme) im selben Verzeichnis abzulegen:

Beispiel-Diagramme zum obigen Plotfile

Schlußbemerkung

Die Beschreibung bezieht sich auf Linux. Gnuplot steht aber auch für Windows und MacOS zur Verfügung, sodaß dieses Verfahren, möglicherweise unter Anpassung des Plotfiles (insbesondere der Pfade), auch dort einsetzbar sein dürfte.