geschrieben am 20.08.2021

Datenvisualisierung und Statistik der Leistung eines Balkonkraftwerkes

Einleitung

Ein Balkonkraftwerk kann sich jeder aufstellen, der ein bisschen Fläche zur Verfügung hat. Ich habe das auch gemacht und mich für eine 660 Watt-Anlage entschieden.

Aus Sicherheitsgründen habe mich für die Einspeisung ins heimische Stromnetz für die Wieland-Steckdose mit WLAN-Strommessung entschieden. Das Teil nennt sich 'Gridbox-WLAN für MINI PV Anlagen', die Anleitung zur Installation gibt es im Netz unter

http://www.sebotec.eu/.cm4all/mediadb/Dokumente/Anleitungen/Einspeisesteckdose_WLAN.pdf

In der Gridbox ist ein Sonoff Pow R2 verbaut. Dabei handelt es sich um einen kabellosen Smart-Power-Schalter (EIN/AUS) mit integrierter Strom-Verbrauchsüberwachung, die übers WLAN bedient werden kann und ist nicht spezifisch auf PV-Anlagen ausgerichtet. Hier wird es nur verwendet, um die eingespeiste Energie abzufragen.

Die Software, die auf dem Sonoff läuft, nennt sich Tasmota und ist Open-Source (https://github.com/arendst/Tasmota).

Ist alles gemäß der Installationsanleitung von Sebotec eingerichtet, dann kann man übers WLAN die Leistung, die die Anlage aktuell liefert, im Browser ablesen. Zusätzlich zeigt die Seite die erzeugte Energie von heute, gestern und insgesamt an. Bei mir sieht das so aus:

Das funktioniert bei mir ganz prima. Schöner wäre es allerdings, wenn man die Daten im Tagesverlauf und auch die täglich erzeugte Energie in einem Diagramm ansehen könnte. Dazu braucht man eine Möglichkeit, die Daten regelmäßig abzuspeichern, um so eine Statistik aufstellen zu können. In dieser Anleitung möchte ich euch zeigen, wie ich das gemacht habe.

Sicherlich gibt es auch andere Lösungen, aber da ich mich mit Flashen oder Ähnlichem nicht auskenne, habe ich mich für folgenden Weg entschieden.

Voraussetzungen

Ich gehe davon aus, dass Ihr die Seite in eurem Browser im internen WLAN mit Angabe der von euch gewählten IP-Adresse aufrufen könnt (z. B. http://192.168.178.20/?).

Was braucht man?

Man braucht einen Rechner, der ständig läuft und die Daten regelmäßig abfragt und abspeichert. Das kann natürlich nur ein Raspberry Pi mit integriertem WLAN-Chip sein. Der verbraucht unter 1 W Strom, kostet um die 30 Euro und ist kleiner als eine Zigarettenschachtel. Bestellt habe ich: Zusätzlich braucht man evtl. noch einen Ladeadapter mit USB-Anschluss, wie man es auch zum Laden von Android-Smartphones kennt. Bei mir wird das Teil jedoch über eine USB-Buchse meiner FritzBox mit Strom versorgt, die ja ohnehin ständig angeschaltet ist. In diesem Fall braucht man also nur ein entsprechendes Ladekabel:

Nach Erhalt des Raspi muss man zunächst auf die Speicherkarte mithilfe eines Windows- oder Linux-PC's oder Mac das Betriebssystem (Raspberry Pi OS with desktop and recommended software) für den Raspi installieren. Das geht also ohne Monitor und andere Hardware, ihr braucht aber neben dem PC einen SD-Karten-Schreiber. Dazu gibt es mehrere Wege. Anleitungen dazu gibt es genügend im Netz.

Eine gute Anleitung, wie ihr das Raspi-OS auf die Speicherkarte bringt und zusätzlich dafür sorgt, dass sich das gestartete Betriebssystem mit eurem WLAN verbindet, findet ihr hier:

https://braspi.de/blogs/braspi-blog/raspberry-pi-ersteinrichtung-ohne-monitor-und-tastatur

Wie im obigen Link beschrieben, musst Du mit dem Raspberry Pi Imager das Raspi-OS auf Deine Speicherkarte schreiben und anschließend zwei Dateien "ssh" und "wpa_supplicant.conf" im boot-Verzeichnis erstellen. Wenn Du das mit Windows machst, dann achte darauf, dass die Dateien wirklich genu so heißen und nicht etwa automatsch ein ".txt" angehängt wird. Das erreichst Du, wenn Du beim Abspeichern im Editor als Dateityp "Alle Dateien" auswählst. Unter Windos 10 musst Du die Eingabeaufforderung starten (Windows-System -> Eingabeaufforderung), in der Du dann ssh starten kannst.

Führe alle Schritte wie im obigen Link beschrieben aus, einschließlich Update / Upgrade.

Raspi für Fernzugriff einrichten

Bisher hast Du mit ssh die Kommandozeile des Raspi bedient. Jetzt musst Du noch dafür sorgen, dass Du die grafische Oberfläche des Raspberry Pi auf Deinem PC anzeigen kannst. Damit kannst Du den Raspi in einem Fenster auf Deinem Monitor sehen und mit Deinem Rechner bedienen. Das Ganze nennt sich VNC (Virtual Network Computing).

Als ersten Schritt musst Du den VNC-Server auf Deinem Raspi aktivieren. Installiert ist der nämlich schon. Logge Dich also wieder mit ssh auf dem Raspi ein und starte wieder das Konfigurationsprogramm des Raspi:

sudo raspi-config

Unter Interface Options -> VNC kannst Du den VNC-Server anschalten (auf "enabled" schalten), also mit der Tab-Taste auf "yes" gehen und Enter drücken.

Was Du noch brauchst, ist die IP-Adresse, mit der sich der Raspi in Deinem WLAN angemeldet hat. Das kannst ganz einfach mit dem Befehl

hostname -I

abfragen. Schreib Dir die IP-Adresse auf.

Vonseiten des Raspi wars das schon. Jetzt musst Du nur noch den Client - also das Programm, das auf Deinem PC läuft - für Dein Betriebssystem installieren. Es nennt sich VNC Viewer - herunterladen und installieren kannst Du es hier:

https://www.realvnc.com/de/connect/download/viewer/

Wenn Du das Programm installiert hast und startest, dann sieht das ungefähr so aus:

Gebe nun die IP-Adresse in der oberen Zeile ein. Anschließend wirst Du nach den Login-Daten gefragt:

Das sind die Login-Daten, mit denen Du Dich im Raspi anmeldest, also im Normalfall Benutzername "pi" und Passwort "raspberry" bzw. was Du neu vergeben hattest. Jetzt noch "Kennwort speichern" anklicken und Ok drücken. Wenn alles geklappt hat, dann bist Du jetzt auf der Benutzeroberfläche Deines Raspi:

Oben links sind bereits in der Schnellstartleiste Browser, Terminal und Dateiverwaltung aufgeführt.

Was Du jetzt noch tun solltest, ist Deinen Raspi zu lokalisieren, insbesondere die für Deinen Standort gültige Uhrzeit einzustellen, damit nachher die Daten mit der richtigen Zeit abgespeichert werden. Das machst Du mit mittels Menü (Himbeere oben links) -> Preferences -> Raspberry Pi Configuration -> Localisation:

Nimm die entsprechenden Einstellungen unter "Set Locale", "Set Timezone" und "Set keyboard" vor. Als "Character Set" solltest Du "UTF-8" wählen.

Nachdem Du die Einstellungen vorgenommen und den Raspi neu gestartet hast, ist er jetzt fertig, um ihn für die Datenerfassung einzurichten.

Raspi für Datenerfassung einrichten

So, nun hast Du ein laufendes Betreibssystem, auf das Du jederzeit mit Deinem PC per VNC-Viewer zugreifen kannst. Nun musst Du den Raspi für die Datenerfassung einrichten. Wenn Du Schwierigkeiten hast, die Erläuterungen im folgenden Absatz zu verstehen, dann sage ich: Das macht nichts, das ist eher was für Interessierte. Du kannst den Absatz daher auch überspringen und musst nur Schritt für Schritt den nachfolgenden Anweisungen folgen.

Zur Datenafrage nutzt Du die Statusinformationen von Tasmota, auf die Du mit dem http-Protokoll Zugriff hast. Die Daten werden mittels wget abgefragt und in eine Datei (im JSON-Format) umgeleitet. Ein PHP-Skript nimmt die Daten auf und speichert sie in einer Datenbank (mysql bzw. mariadb). Dies wird wird automatisch alle 30 Minuten durchgeführt, sodass Du die entsprechenden Daten für jede halbe Stunde ansehen kannst (kannst Du aber ändern). Zusätzlich geschieht das Gleiche, nur einmal am Tag, um die Daten "Energie gestern" einzulesen und abzuspeichern. Für das Ganze wird ein cronjob eingerichtet. Um die Daten dann anzusehen, kannst Du im Browser die Statistikseite aufrufen. Als Statistiksoftware wird die freie Skriptsammlung Chart.js verwendet. Was brauchst Du an Software? Als Erstes Apache - das ist ein Webserver, der Dir den lokalen Zugriff auf Webseiten per http zur Verfügung stellt. Dann brauchst Du die Datenbank Mariadb/Mysql, in die Du die eingelesenen Daten abspeicherst. Dann brauchst Du noch PHP, eine Skriptsprache, mit der Du zum Einen die Tasmota-Daten einliest und zum Anderen eine dynamische Webseite erzeugst, die Dir die Statistik anzeigt.

Als erstes musst Du die benötigte Software installieren. Dafür musst Du natürlich mit dem Internet verbunden sein. Am besten, Du startest auf dem Raspi den Browser Chromium und rufst diese Seite auf - dann kannst Du nämlich die Befehle markieren, mit Strg-C in die Zwischenablage kopieren und dann zum LX-Terminal wechseln und mittels Bearbeiten -> Einfügen einfügen:

sudo apt-get install apache2 libapache2-mod-php php php-mysql mariadb-server mariadb-client

Nach der Installation (die eine Weile dauert) kannst Du in Chromium ein neues Tab aufmachen und "localhost" eingeben. Wenn die Installation von apache geklappt hat, dann solltest Du eine Seite mit "It works" sehen. Die korrekte Installation von PHP kannst Du mit "sudo php --version" überprüfen.

Als nächstes musst Du die mariadb-Datenbank konfigurieren. Als Erstes dafür sorgen, dass der Dienst beim Reboot auch automatisch gestartet wird:

sudo systemctl start mariadb

und in den Autostart legen:

sudo systemctl enable mariadb

Als nächstes richtest Du die Sicherheitseinstellungen des Datenbankservers ein:

sudo mysql_secure_installation

Es folgen ein paar Fragen, die Du folgendermaßen beantworten kannst (statt "Dein-sicheres-mysql-root-Passwort" gibst Du natürlich ein starkes Passwort ein. Merke Dir das Passwort gut):

Als nächstes solltest Du einen neuen Benutzer "admin" für die Datenbank anlegen. Das kannst Du ganz einfach, indem Du Dich in die Datenbank einloggst und die entsprechenden Befehle eingibst:

Enloggen und Passworteingabe (Dein-sicheres-mysql-root-Passwort):

sudo mysql --user=root --password

In MariaDB gibts Du dann ein:

create user admin@localhost identified by 'Dein-sicheres-mysql-admin-Passwort';

Statt "Dein-sicheres-mysql-admin-Passwort" wählst Du natürlich ein entsprechendes sicheres Passwort für den user "admin"

grant all privileges on *.* to admin@localhost;

FLUSH PRIVILEGES;

exit;

Das Ganze sollte ungefähr so aussehen:

Skripte für Balkonkraftwerk installieren

So, jetzt hast Du ein laufendes Beriebssystem mit allem, was Du brauchst. Jetzt kannst Du die notwendigen Datenbanktabellen erzeugen und die notwendigen Skripte installieren.

Erzeuge als Erstes ein Verzeichnis "bin", in dem Du die Skripte ablegen kannst:

mkdir /home/pi/bin

Nun kannst Du die Skripte unter http://www.udem.de/bkw/bkw.zip herunterladen. Die zip-Datei wird im Ordner /home/pi/Downloads abgelegt. Jetzt ins bin-Verzeichnis entpacken:

unzip /home/pi/Downloads/bkw.zip -d /home/pi/bin

Skripte anpassen

Die Skripte musst Du nun anpassen, d. h. mit Deinen Passwörtern bzw. Deiner IP-Adresse versehen (alles andere genau so lassen, wie es ist!). Dafür öffnest Du die Datei mit dem Texteditor "mousepad", änderst den Eintrag und speicherst ihn ab:

bkw: in zwei Zeilen die IP-Adresse "192.168.178.20" durch Deine Tasmota-IP-Adresse ersetzen - also NICHT diejenige, mit der Du mit Deinem Raspi ins WLAN gehst, sondern die von Deinem Sonoff Pow R2 Modul:

mousepad /home/pi/bin/bkw

bkw_kwh: auch hier die IP-Adresse "192.168.178.20" durch Deine Tasmota-IP-Adresse ersetzen

mousepad /home/pi/bin/bkw_kwh

Dann die PHP-Dateien. Bei folgenden musst Du "Dein-sicheres-mysql-admin-Passwort" durch Dein eigenes ersetzen:

mousepad /home/pi/bin/parsen.php

mousepad /home/pi/bin/parsen_kwh.php

mousepad /home/pi/bin/statistik.php

Ein paar PHP-Dateien sind jetzt noch im falschen Verzeichnis. Mit dem folgenden Befehl kopierst Du sie ins Verzeichnis /var/www/html. Das ist das Verzeichnis, in dem sich auch die apache-Testdatei ("It works!") befindet.

sudo cp /home/pi/bin/erzeuge-tabellen.php /home/pi/bin/erzeuge-tabellen_action.php /home/pi/bin/statistik.php /var/www/html

Tabellen erzeugen

Um die Tabellen, die Du brauchst, zu erzeugen, habe ich ein kleines PHP-Skript geschrieben, das nur nur ein einziges Mal aufrufen musst. Öffne im Browser http://localhost/erzeuge-tabellen.php und gebe Dein-sicheres-mysql-admin-Passwort ein. Dann werden die entsprechenden Tabellen erzeugt.

Cronjob einrichten

Die beiden Dateien bkw und bkw_kwh lesen die aktuellen Daten von Tasmota ein und speichern sie in den Tabellen ab. Diese müssen also regelmäßig ausgeführt werden. Die entsprechende crontabelle rufst Du auf mit

sudo mousepad /etc/crontab

Gehe mit dem Cursor nach ganz unten und gebe am Ende folgende beide Zeilen ein:

0,30 * * * * pi /home/pi/bin/bkw
15 9 * * * pi /home/pi/bin/bkw_kwh

Wichtig: Am Ende der letzten Zeile musst Du noch einmal eine Leerzeile erzeugen, also noch einmal Enter drücken. Diese letzte Zeile sollte leer sein, also auch kein Leerzeichen enthalten.

Was bedeuten die Einträge? Das Skript "bkw" wird an jedem Tag und zu jeder vollen Stunde jeweils um xx:00 Uhr und xx:30 Uhr ausgeführt. Wenn Dir das zu wenig ist und die Werte z. B. alle 15 Minuten haben willst, dann gibst Du statt "0,30" ein: "0,15,30,45". Das Skript "bkw_kwh" wird nur einmal am Tag um 09:15 Uhr ausgeführt. Es speichert den Wert für "Energie gestern" ab. Damit ist Dein System jetzt am Laufen.

Verzeichnis absichern

Die folgenden Befehle sind nicht unbedingt notwendig, werden aber empfohlen, um Deine Skripte nach außen abzusichern. Mit dem ersten Befehl änderst Du den Ordner, Inhalt und alle Unterordner von "/var/www/html" auf den Besitzer "pi" und die Gruppe auf "www-data". Mit dem zweiten änderst Du die Zugriffsrechte: Benutzer und Gruppe darf lesen, schreiben und ausführen, alle anderen gar nichts:

sudo chown -R pi:www-data /var/www/html/
sudo chmod -R 770 /var/www/html/

Statistik ansehen

So, Dein Raspi ist jetzt fertig eingerichtet.

Ansehen kannst Du Deine Statistiken auf der Seite http://localhost/statistik.php. Am Anfang siehst Du natürlich noch nichts, erst mal müssen ein paar Daten zusammenkommen. Das Ganze sieht dann ungefähr so aus:

In dem Skript kannst Du die anzuzeigenden Parameter und den anzuzeigenden Zeitraum einstellen. Der Parameter "ison" kann nur 0 oder 1 annehmen und zeigt an, ob die Tasmota-Seite "ON" anzeigt (1) oder nicht (0). Die Statistik-Skripte werden automatisch aus dem Netz geladen. Du musst also mit dem Internet verbunden sein.

Weitere Möglichkeiten

Wenn Du eine eigene Domain mit PHP und MySQL hast und Dich damit ein bisschen auskennst, dann kannst Du natürlich auch die Daten auf den dortigen Server hochladen. Das hat den Vorteil, dass Du von überall aus Deine Statistik ansehen kannst. Und der Seitenaufbau ist auch entsprechend schneller.

Ich habe das auch gemacht, das Ergebis siehst Du hier: statistik.php
Dazu ein Hinweis: Wenn du wissen willst, was eine 660-W-Anlage so bringt, dann ist diese Statistik dafür gänzlich ungeeignet. Die Module sind vormittags und ab späten Nachmittag verschattet. Bei besserer Ausleuchtung wären wesentlich bessere Werte zu erwarten. Die Lücken in der Statistik haben damit zu tun, dass mein WLAN ab und zu schlappmacht. Das hat mit den Skripten nichts zu tun.

Du musst die Schritte entsprechend abändern:




Dann viel Spaß beim Basteln! Bei Fragen kannst Du mir eine Mail schreiben oder einen Kommentar hinterlassen!



Weiterführende Links:

Stromverbrauch eines Raspi und wie man ihn weiter reduzieren kann:
https://elektro.turanis.de/html/prj298/index.html

Sehr gute Anleitung zu Installation von MariaDB/MySQL, PHP und Apache auf einem Raspberry Pi, von dem ich ein paar Anregungen übernommen habe:
https://www.chefblogger.me/2021/02/02/raspberry-pi-wie-installiere-ich-einen-webserver-mit-php-und-einer-datenbank/


✘ Die Verbindung zur Datenbank ist fehlgeschlagen!

SQLSTATE[HY000] [2002] Connection timed out