Energie-Visualisierung für zu Hause, Beschreibung siehe hier readme.md.
Für die Benutzung des Programms werden gewisse technische Kenntnisse, wie das erstellen einer Datenbank, sowie das kopieren der Programmdateien auf den Webserver vorrausgesetzt.
Auf PHP-Drittbibliotheken wurde bewußt verzichtet, um die Installation einfach zu halten.
Die Installation erfolgt manuell, es gibt keinen automatischen Installationsmechanismus.
Bei Fehlern auch die install-tips.md beachten. Richtige Bugs können über ein Issue auf Github gemeldet werden.
- Webserversystem mit LAMP-Stack, o.ä.
- PHP 8.3
- Mysql / Maria Datenbank
- Webserver
- Diese Projekdateien in einem Verzeichnis auf dem Rechner lokal herunterladen
- Datenbank beim Provider erstellen und Zugangsdaten für später notieren.
- Schema der Datenbank erstellen, mit einem Datenbanktool.
- Das DB-Skript ist hier zu finden: scripts\sql-scripts\create-table.sql
- Bei späteren Updates auf die Releasehinweise achten.
- Bei der Erfassung von Echtzeitdaten entstehen z.B. im 2 Sekundentakt ca. 1 Million Datensätze pro Monat
- Bitte regelmäßg Datensicherungen durchführen, auf jeden Fall BEVOR Updates installiert werden
- Eine eigene Config-Datei im Ordner config erstellen mit dem Namen: local-config.php
- Als Vorlage die Daten local-config.php.sample benutzen
- Die geforderten Daten eintragen.
- Der hier eingetragene API-Key muss auch bei den Shelly-Skripten verwendet werden. Es kann sich ein beliebiger Schlüssel aus Zahlen und Buchstaben ausgedacht werden.
- Hier können auch eigene Konfigurationen, z.B. zu den gezeigten Chart-Metriken konfiguriert werden.
- Die heruntergeladenen Dateien inkl. der eigenen Config-Datei per SFTP o.ä. auf den Webserver übertragen.
Falls man keine Echtzeitdaten verwendet, kann man die Navigation so anpassen um die Ansichten hierfür zu entfernen.
Navigation
- Datei: views\partials\navigation.phtml
- Für die Variable $pages diese Seiten entfernen: Startseite, Stunden, sowie die Tagesansicht
Startseite
- Datei: index.php
- Hier z.B. die monthsOverview.php eintragen
Für die Erfassung von Echtzeidaten müssen auf jedem Energiemessgerät die Shelly-Skripte installiert werden. Dies sind z.B. der Shelly (pro) 3 EM für den Stromverbrauch des Hauses, sowie Shelly PM oder Smart Plug für die Stromerzeugung. Hat man mehrere Stromerzeuger, können hier auch mehrere benutzt werden. Es ist nicht notwendig einen Shelly 3 EM zu verwenden, man kann auch nur mit der Erzeugungsmessung arbeiten. Einige Auswertungen machen dann aber natürlich keinen Sinn, weil die Hausverbrauchsdaten fehlen.
WICHTIG: Bei jeden Script unbedingt den Hacken bei 'Run on startup' setzen, damit die Scripte automatisch beim Neustart (z.B. Firmware-Update) wieder anlaufen.
Generell sind alle Skripte für die Erfassung der Energiewerte identisch und unterscheiden sich nur durch die Konfiguration im oberen Abschnitt. Die Skripte erkennen automatisch ob sie auf einem Shelly-EM oder Shelly PM laufen.
In dieser Datei install-tips.md sind einige Hinweise, falls die Script nicht auf Anhieb so funktionieren, wie man möchte.
Für die Verbrauchsmessung ist ein Skript vorgesehen, welches den aufsummierten Verbrauch aller 3 Phasen als Summe speichert.
Im oberen Abschnitt sind folgende Parameter anzupassen:
- loggingUrl
- API-Key (wie in der local-config.php angegeben)
Das Skript ist hier zu finden scripts\shelly-scripts\Shelly-Pro3EM-SendToLogger.js
Es ist möglich die Stromerzeugung für jede Phase einzeln zu messen. Hierfür ist für jeden Energiemesser ein Skript anzulegen.
Im oberen Abschnitt sind folgende Parameter anzupassen:
- loggingUrl
- API-Key (wie in der local-config.php angegeben)
- devicePhase (Phase 1-3 zur Unterscheidung in dem Tool, es muss nicht die tatsächliche Phase des Stromkreises sein.)
Das Skript ist hier zu finden scripts\shelly-scripts\Shelly-Plus1PM-SendToLogger.js
Um die Echtzeitdaten für den schnelleren Zugriff aufzusummieren wird ein eigenes Skript benötigt. Dies kann man entweder vom Shelly oder über einen eigenen Cronjob starten. Bei mir läuft es alle 10 Sekunden auf einem Shelly, z.B. dem EM. Die Tasks können auf der Statusübersicht überprüft werden.
Das Skript ist hier zu finden scripts\shelly-scripts\Shelly-Pro3EM-Trigger_TaskRunner.js
Falls ein Zendure-System angeschlossen ist, werden im Taskrunner-Script auch die Zenduredaten lokal ausgelesen und an den PHP-Server geschickt. Hierfür muss man im oberen Abschnitt die lokale IP-Adresse des Zendure-Systems eintragen. Die lokale IP wird z.B. in der Zendure-App unter Gerätedaten angezeigt, oder man liest diese aus der eigenen Routerkonfiguration aus. Es können bis zu 3 Zendure-Systeme angegeben werden.
Zum Test kann man diese URL mit der richtigen IP-Adresse im lokalen Browser aufrufen, fängt meistens mit 192 an: http://[lokale-zendure-ip]/properties/report
Der Taskrunner startet auch andere Tasks. Zum Beispiel kann eine E-Mail versendet werden, wenn über einen Zeitraum, z.B. 5 Minnuten keine Daten empfangen wurden und solange das Problem besteht erneut im konfiguriertem Abstand. Weiterhin wird ein Hinweis rechts in der Navigation eingeblendet.
Diese Funktion kann in der lokalen Konfiguration eingestellt werden, ansonsten ist diese abgeschaltet.
Bei mir kam es vor, das die Shelly-Skripte ab und zu stehen geblieben sind. Für diesen Fall kann auf jedem Energiemessgerät zusätzlich ein Autorestart-Skript angelegt werden.
Im oberen Abschnitt sind folgende Parameter anzupassen:
- targetScriptId (ID des Script auf dem Shelly, kann in der Übersicht auf dem Shelly abgelesen werden.)
Das Skript ist hier zu finden scripts\shelly-scripts\Shelly-AutoRestart.js
Um einen Passwortschutz einzurichten, ist es wichtig, das api-Verzeichnis nicht zu schützen, da die API-Aufrufe sonst nicht funktionieren. Für den API-Schutz ist der API-Key vorgesehen.
Im api-Ordner liegt bereits eine .htaccess-Datei, die den Schutz aufhebt mit der Anweisung:
Require all grantedUm einen Schutz einzurichten, muss im Hauptverzeichnis des Projekts eine Standard .htaccess- und .htpasswd-Datei abgelegt werden.
Vorgehen:
- Verwenden Sie einen Online-Generator für .htpasswd, indem Sie nach 'htpasswd Generator' suchen.
- Hinweis: Der vollständige Pfad zur .htpasswd-Datei muss in der .htaccess-Datei hinterlegt werden. Andernfalls kann ein Internal Server Error auftreten.
Beispiel .htaccess-Datei:
AuthName "Bitte Anmelden"
AuthUserFile /www/htdocs/[pfad]/[zum]/[projekt]/.htpasswd
Require valid-user
Es kann der aktuelle Wert der PV Stromgenerierung und der Akkustand aus dem Zendure-System ausgelesen und mit angezeigt werden. Die Werte werden dann außerdem auf dem Dashboard auch für die Anzeige der gesamten Energieproduktion berücksichtigt. Dies zeigt dann auch die PV-Energie an, welche für das Laden des Akkus verwendet wird. Die Werte werden über die lokale Zendure-API ausgelesen und in der DB zwischengespeichert.
Beim Lesen der Zendure-Werte kann es zu geringfügigen Datenverlusten, insbesondere bei der aktuellen PV-Leistung kommen, wodurch ggfls. die Echtzeitanzeige etwas verfälscht ist. Das Script zum Lesen der Zendure-Daten sollte am besten auf dem ShellyPro3EM laufen, da dieser am meisten Speicherplatz für Scripte besitzt.
Um ein Zendure-System anzubinden, sind folgende Schritt notwendig:
-
lokale IP-Adresse des System in das Shelly-Script für den Taskrunner eintragen. Siehe Beschreibung dort.
-
Folgende Einstellungen können für Zendure vorgenommen werden:
$config->dashboardPage()->setShowZendureOnDashboard(true); // Falls ein Zendure-System benutzt wird, das die Werte auf dem Dashboard angezeigt werden
$config->dashboardPage()->setConsumptionIndicatedAs100Percent(6000); // Max. Wert für 100% Hausverbrauch, z.B. 6000W
$config->dashboardPage()->setMaxEnergyProduction(1600); // Max. Wert für Energieproduktion, z.B. 1600W PV-Panel Leistung