DBBridge – Datenbank und Webanwendung

In meinem Artikel ‘DBBridge – Ein Bluetti Kompanion‘ habe ich Euch meine kaufbare Entwicklung DBBridge vorgestellt. Neben ‘SOC control’ und ‘Grid feed’ ist eine der Kernfunktionen das Loggen der Daten eines Bluetti Energiespeichers in eine Datenbank! In diesem Artikel geht es darum wie man eine solche Datenbank aufsetzen und was man mit den Daten machen kann. Denn ich habe festgestellt, dass das für viele User nicht so einfach ist, wie ich mir das vorgestellt habe.

Als ich mir im Sommer 2022 eine Bluetti EP500 Pro gekauft hatte, wurde mir schnell bewusst, dass diese mir keine Möglichkeit gab, statistische Daten automatisch zu erfassen und zu verarbeiten. Eine damalige Recherche im Internet ergab auch keine Lösungsmöglichkeit für dieses Problem. Darum setzte ich mich im Spätsommer 2022 hin und versuchte die Bluetooth Schnittstelle mit einem ESP32 abzufragen. Als ich das schließlich hinbekommen hatte und die dabei abgefragten Daten in einer MySQL Datenbank (uralte Version 5.5.62) speichern konnte, habe ich mich sehr gefreut.

Nun konnte ich mit dem MySQL Query Browser, den ich seit vielen Jahren verwende, die minütlich geloggten Daten betrachten. Das war schon einmal nicht schlecht und wer von Euch Entwickler ist, der kann sicher nachvollziehen, wie sehr ich mich gefreut habe.

Andererseits wird bei einem Blick auf diese Datenwüste schnell klar, dass das nicht alles sein kann. Darum habe ich anschließend begonnen eine Webanwendung zu programmieren, die aus diesen Daten eine ansehnliche Grafik erzeugen, die mir einen schnellen Überblick über meine Bluetti EP500 Pro verschaffen.

Die Webanwendung und die Installation eines LAMP oder XAMPP Systems gehören nicht zum Lieferumfang von DBBridge!!! Es besteht kein Anspruch darauf und auch nicht darauf dass die Webanwendung einwandfrei funktioniert! Es ist eine freiwillige Zugabe von mir, anhand derer man die unzähligen Möglichkeiten der Datenbank Daten ausprobieren kann. Mehr nicht!

Achtung: Wer diese Webseiten nutzen möchte, benötigt irgendwo einen geeigneten Webserver der auch PHP unterstützt!!! Aus diesem Grunde kann es für Euch interessant sein zu wissen, dass es seit vielen Jahren ein Paket gibt, welches eine MySQL Datenbank samt PHP-unterstützenden Webserver beinhaltet und diese Sachen in einem Rutsch installiert! Früher hieß das Paket LAMP (Linux, Apache, MySQL, PHP) und mittlerweile XAMPP (Cross-platform, Apache, MariaDB, Perl, PHP).

Der mögliche Anwenderbereich von DBBridge ist groß. Manche von Euch sind total fit in der IT und haben keine Probleme die notwendigen Installations- und Einrichtungsarbeiten aufgrund von ein paar Informationsbrocken durchzuführen. Für andere ist das alles ein Buch mit 7 Siegeln und ihnen graut davor. Wie sagt man so schön: ‘Es ist keine Raketentechnik!’. Und ich denke jeder kann es hinbekommen.

Womit sich diese Anleitung in 2 Bereiche aufteilt. Mit dem ersten Teil zeige ich Euch wie man eine Datenbank für DBBridge aufsetzt. Damit ist dann alles getan um DBBridge in dem von mir vorgesehenen Sinn einzusetzen. Der zweite Teil beschreibt die Installation der für ein LAMP System zusätzlich notwendigen Arbeiten und ist eine kostenlose Zugabe von mir. Meine Webseiten sind auch nicht perfekt und bedürfen weiterer Überarbeitung. Ich denke für die PHP Entwickler unter Euch tun sich damit viele weitere Möglichkeiten auf.

Übersicht der Datenbankeinrichtung

DBBridge benötigt zum Loggen eine MySQL kompatible Datenbank, es geht also auch MariaDB. Die muss auf irgendeinem Rechner installiert und im Heimnetzwerk ansprechbar sein. Das Schema muss ‘dbbridge’ heißen und mindestens eine Tabelle ‘bluetti’ enthalten! Damit der ESP32 darauf zugreifen kann, muss in der Datenbank ein User eingerichtet sein, der von einem fernen Rechner aus Schreibrechte auf die eben genannte Datenbank und Tabelle hat. DBBridge verwendet standardmäßig den Port 3306. Ganz wichtig: In der Konfigurationsdatei der verwendeten Datenbank muss der Zugriff von extern (bind-address = 0.0.0.0) erlaubt sein!

Diese kurze Beschreibung bedeutet auch, dass es eine Vielzahl von Möglichkeiten gibt einen Datenbankserver für DBBridge aufzusetzen und viele von Euch vielleicht auch schon irgendwo einen am Laufen haben, den sie zum Loggen einsetzen können. Es sind viele verschiedene Versionen von MySQL verfügbar, aber auch die Alternative MariaDB kann eingesetzt werden. Ebenso können auch viele verschiedene Computer und Betriebssysteme wie Windows oder Linux verwendet werden. Das macht es für mich sehr schwierig eine einfache und immer perfekt funktionierende Anleitung zu schreiben. Aber ich versuche es.

Und jetzt im Detail

Wie Ihr oben habt lesen können, habe ich eine sehr alte Version von MySQL in Verwendung. Die funktioniert also auch noch. Für die Veröffentlichung von DBBridge habe ich aber auch andere Versionen ausprobiert. Ich habe die aktuelle MySQL Version 8.0.32 unter Windows 10 und MariaDB Version 10.0 unter dem aktuellen Linux für den Raspberry Pi ausprobiert. Diese allerdings gezwungenermaßen, denn scheinbar gibt es bei dem neuesten Raspberry Pi Betriebssystem standardmäßig kein MySQL mehr!

Wer ganz neu in der Materie ist und auch noch keinen extra Computer zum Loggen hat, dem würde ich aus meiner Sicht folgendes empfehlen. Kauft oder besorgt Euch einen Raspberry Pi, denn dieser ist klein und sparsam und kann so rund um die Uhr laufen. Es kann auch ein älteres Modell sein. Installiert auf einer SD Karte gemäß der Original Anleitung der Raspberry Pi Organisation das aktuelle offizielle Betriebsystem für den Raspberry Pi. Wenn das geklappt hat steckt die SD Karte in den Raspberry Pi.

Dann geht es in Kurzform in etwa so weiter: Schließt den Raspberry Pi an einen passenden (HDMI) Monitor an und steckt eine Tastatur, eine Maus und einen WiFi-Stick in die USB Buchsen. Versorgt den Raspberry Pi mit Strom. Nun müsst Ihr die Einrichtung der Installation abschließen und idealerweise den Raspberry Pi mit Eurem Router über WLAN verbinden. Es geht natürlich auch ein Kabelanschluss. Zum Abschluss müsst Ihr den Zugriff auf SSH frei schalten! Dazu öffnet Ihr ein Terminal und gebt ‘sudo raspi-config’ ein. Es öffnet sich eine Anwendungsoberfläche. Geht jetzt gemäß den Bildern vor.

Hier ist die Einstellung für SSH:

 

Damit könnt Ihr jetzt den Raspberry Pi herunter fahren, Tastatur und Maus entfernen und nach erneutem Hochfahren mit Putty und der richtigen IP (Findet Ihr zum Beispiel bei einer Fritzbox unter Heimnetz->Netzwerk, oder einfach auf dem Raspberry Pi mit ‘hostname -I’) auf ihm arbeiten!

Angenommen Ihr habt über Putty Zugriff auf Euren Raspberry Pi, dann bekommt Ihr mit den nachfolgenden Befehlen ratzfatz einen Datenbank Server für DBBridge inklusive der notwendigen Datenbank und dem notwendigen User. Los geht’s:

Befehl Erklärung
wget https://www.steinlaus.de/bluetti/database.sql Damit holt Ihr mein Datenbankscript direkt aus dem Internet.
sudo apt install mariadb-server [Enter] Installation von MariaDB. Das dauert ein bisschen und Ihr müsst eine oder zwei Fragen mit ‘Y’ beantworten.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf [Enter] Damit ruft Ihr den Nano Editor auf und könnt die Konfigurationsdatei von MariaDB ändern.
Jetzt seid Ihr im Nano Editor. Sucht dort die Zeile mit ‘bind-address’ und ändert dort ‘127.0.0.1’ in ‘0.0.0.0’. In der Konfigurationsdatei von MarioDB muss ‘bind-address’ auf 0.0.0.0 geändert werden. Das erlaubt den Zugriff auf MariaDB auch von entfernten Computern aus.
Fügt außerdem unter ‘[mysqld]’ die Zeile ‘event_scheduler = ON’ ein. Für die automatische stündliche Berechnung der Tageswerte muss beim Start von MariaDB der ‘Event scheduler’ gestartet werden.
Fügt außerdem unter ‘[mariadb]’ die Zeile ‘interactive_timeout = 90’ ein. Damit werden eventuell nicht geschlossene Datenbankverbindungen nach 90 Sekunden automatisch gelöscht.
Drückt die Tastenkombination ‘Ctrl-O’ und bestätigt den Dateinamen mit [Enter]. Speichern Eurer Änderungen.
Drückt die Tastenkombination ‘Ctrl-X’. Verlassen des Editors.
sudo mysql -u root -p [Enter] Den MariaDB Client aufrufen.
Gebt Euer Raspbian Passwort an und bestätigt mit [Enter]. Euer Raspberry Pi Admin Passwort angeben.
Jetzt seid Ihr im Datenbank Client und könnt dem Server Befehle erteilen!  
source database.sql; [Enter] Damit ruft Ihr das anfangs heruntergeladene Datenbankscript von mir auf. Achtung: Wenn Ihr ein anderes Passwort als ‘publictraffic’ verwenden wollt, müsst Ihr das vorher in der Datei ändern!
flush privileges; [Enter] Aktivieren des neuen Users.
exit [Enter] Den Datenbank Client beenden.
sudo /etc/init.d/mariadb restart [Enter] MariaDB neu starten.

Das war’s. Jetzt habt Ihr einen Raspberry Pi mit Datenbank für DBBridge! Ich habe das heute, am 23.02.2022 ausprobiert und es hat alles funktioniert! Wenn diese Datenbank genau so, inklusive User und Passwort angelegt wurde, dann könnt Ihr sie von DBBridge aus mit folgenden Einstellungen:

IP from database Die IP Eures Raspberry Pi
Database user name dbbridge
Database user password publictraffic

erreichen.

Grundsätzlich funktioniert das immer ähnlich. Unter Windows und der aktuellen MySQL Version 8.0.32 könnt Ihr es Euch mit der MySQL Workbench 8.0 CE unter Umständen etwas leichter machen, da es dort einen Eingabebereich für Scripts gibt, bei dem Euch für jeden Befehl vom ‘database.sql’ Script eine Bestätigungs- oder Fehlermeldung angezeigt wird.

Ansonsten gibt es unzählige Anleitungen im Internet zu diesen Themen. Bitte seht bei Problemen auch dort nach! Zum Beispiel diese hier:

Install Raspberry Pi OS, Set Up Wi-Fi, Enable and Connect with SSH

Ein LAMP System einrichten

Auch ein LAMP System muss nicht zwingend auf dem Raspberry Pi installiert werden! Ihr könnt es zum Beispiel auch einfach auf Eurem Windows PC mit einem der Installer von XAMPP installieren und dann in der Konfigurationsdatei (bluetti.ini) meiner Webanwendung auf die Datenbank im Raspberry Pi verweisen! Zum Ansehen der Grafiken reicht dass völlig aus. Wenn Ihr die Webanwendung allerdings bei Euch im Netzwerk von überall her aufrufen wollt und das rund um die Uhr, so ist es wahrscheinlich schon besser, es auch auf dem Raspberry Pi zu installieren. Oder auf einem Webserver im Internet. 🙂

Ein gutes Tutorial gibt es hier:

Raspberry Pi: Install Apache + MySQL + PHP (LAMP Server)

Im oben gezeigten Tutorial wird auch die Datenbank noch einmal behandelt. Wenn Ihr aber diese Seite bis hierher durchgearbeitet habt, könnt Ihr diesen Schritt natürlich überspringen. Auch ‘phpMyAdmin’ wird nicht zwingend benötigt, kann Euch aber bei Experimenten und der Weiterentwicklung der Datenbank später von Nutzen sein.

Nachfolgend alle Anweisungen um den Webserver und PHP samt MySQL Unterstützung zu installieren:

sudo apt install apache2 [Enter] Installation des Apache Webservers.
sudo apt install php [Enter] Installation von PHP.
sudo apt install php-mysql [Enter] Installation der MySQL Unterstützung für PHP.
sudo phpenmod mysqli [Enter] MySQL Unterstützung aktivieren.
sudo service apache2 restart [Enter] Den Webserver neu starten.
sudo chown -R pi:www-data /var/www/html/ [Enter] Für ‘pi’ müsst Ihr den bei der ersten Inbetriebnahme Eures Raspberry Pi angelegten Benutzers verwenden.
sudo chmod -R 770 /var/www/html/ [Enter] Dateirechte bestimmen.

Wenn die Installation beendet ist, könnt Ihr direkt ‘http://’ und die IP von eurem Raspberry Pi in einen Browser tippen und es müsste in etwas folgendes zu sehen sein:

Jetzt könnt Ihr meine Webanwendung für die grafische Darstellung der Daten einrichten.

cd /var/www/html [Enter] In das Wurzelverzeichnis der zu veröffentlichen Webseiten gehen.
sudo mkdir bluetti [Enter] Ein neues Verzeichnis ‘bluetti’ anlegen.
cd bluetti [Enter] In das Verzeichnis ‘bluetti’ hinein gehen.
sudo wget https://www.steinlaus.de/bluetti/bluetti.zip [Enter] Von meinem Webserver die ZIP Datei mit der Webanwendung holen.
sudo unzip bluetti.zip [Enter] Die ZIP Datei entpacken.

Jetzt sollte sich die Webanwendung über ‘http://Eure.Raspberry.Pi.IP/bluetti/bluetti.html’ aufrufen lassen. Für eine öffentliche Anwendung auf einem öffentlichen Webserver und nicht in Eurem Heimnetz ist es aber besser, wenn Ihr die INI-Datei ‘bluetti.ini’ in einem Verzeichnis außerhalb des öffentlichen Webverzeichnisses speichert. Ich habe das zwei Ebenen höher in einem eigenen Verzeichnis ‘inis’ gemacht. Dann muss aber der Zugriff auf die INI-Datei in der Datei ‘bluetti.php’ angepasst werden (‘../../inis/bluetti.ini’). Ihr solltet das auch machen, wenn Ihr in Eurem Router den Port 80 des Raspberry Pi für die weite Welt frei gegeben habt!

6 Kommentare

  1. Servus! Ich wäre an dem Bluetti Kompanion interessiert. Derzeit verwende ich eine AC200Max mit einem Tie Grid Converter. Allerding würde ich gerne den DC Ausgang automatisch bei einem bestimmten Ladezustand deaktivieren. Bitte um Kontaktaufnahme. Gruß, Sigi.

  2. Hallo zusammen!
    Leider will die DBBridge nicht so, wie ich.
    Vielleicht ist jemand in der Lage mir einen Tipp zu geben, was ich falsch mache?!
    Bei mir geht es rein um den AC Ausgang.
    Es ist dort ein Heizstab angeschlossen, der im Zweifel die Akkus auf Null zieht, was ja nicht so gut sein soll. Außerdem hätte ich gern eine Reserve als Blackoutschutz.
    Aus diesem Grunde hätte ich gern folgendes verwirklicht:
    1. Ausschalten des AC-Ausgangs bei ca. 20% Restakkus
    2. Einschalten des AC-Ausgang bei ca. 60% Akkuladung
    3. Einschalten des AC-Ausgangs bei auch im Bereich 20% bis 60% bei einer PV-Leistung von über 1500W

    Ich habe folgende Einstellungen vorgenommen:
    AC control:
    Time control and suplus
    Capacity start in %: 60
    Surplus in Watt: 1500
    Time start: 00:01
    Time end: 23:59

    Minimum SOC value: 22

    Ansonsten habe ich mittlerweile alle Schieberegler aus, also DC grid feed, Sun forecast, SOC control und Forecast, wobei ich die Funktionen eigentlich auch spannend finde. Diese sind für meine persönlichen Zwecke aber nicht kriegsentscheidend.

    Die Einstellungen bewirken bei mir zur Zeit lediglich, dass die untere Grenze eingehalten wird. … schon mal super.
    Allerdings schaltet sich der AC-Ausgang bei Erreichung von 21% Akkusleistung wieder ein, was natürlich bedeutet, dass er AC-Ausgang und somit auch mein Heizstab ständig an und wieder ausgeschaltet wird.

    Kann mir jemand sagen, was ich falsch mache?
    Viele Grüße,
    Hendrik

    1. Hallo Hendrik,
      da gab es in der Tat noch ein Problem mit ‘AC control’. Ich habe es geändert und eine neue Firmware zur Verfügung gestellt! Einfach über die in DBBridge eingebaute Funktion updaten.
      Thomas

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert