Stromzähler/Smartmeter via ModBus und Raspberry Pi auslesen, die Werte in einer Datenbank speichern und mit Grafana visualisieren
- Verwendeter Stromzähler: SDM530 von bg-etech
Ebenso möglich ist der Typ DDS353B, SDM230, SDM630 (Danke für die Integration an rpi-joe aus dem deutschen Raspberry Pi Forum)
-
Raspberry Pi mit Zubehör
-
USB ModBus Adapter: z.B. hier
Gibts auch billiger, aber da war mir die Wartezeit im Verhältnis zum Preis zu hoch
-
geschirmtes Buskabel (lt. Anleitung vom Stromzähler)
-
2x 120Ohm 1/4Watt Abschlusswiderstand
Einbau des Stromzählers nur durch Elektrofachpersonal! Angaben ohne Gewähr! Besser nochmals nach Anleitung prüfen
- Python 3.7 oder höher
- Grafana zur Visualisierung
Direkte Verbindung zu
- sqlite3
- mySQL
- PostgreSQL (optional mit timescale)
Für PostgreSQL gibt es noch eine weitere Möglichkeit der Datenübertragung:
Postgrest ermöglicht die Datenübertragung über eine Web-API (muss vom Server natürlich bereitgestellt werden)
- Toml
- Peewee
- serial
- minimalmodbus
Installation dieser:
Apt Installation erfordert ggf. root Rechte! Paketquellen zuvor updaten. (apt update)
apt install build-essential libssl-dev libffi-dev python3-dev libpq5 git
git clone https://github.com/liyanic/smartmeter-multi.git /home/pi/smartmeter-multi
cd /home/pi/smartmeter-multi
pip3 install --user -r requirements.txt
git submodule init && git submodule update
Wird als Datenbank mysql/mariadb verwendet, so muss noch folgendes Paket installiert werden
pip3 install --user PyMySQL
Wird als Datenbank PostgreSQL, so muss noch folgendes Paket installiert werden
pip3 install --user psycopg2
Für sqlite3 ist keine weitere Installation notwendig.
cd configs
cp example.toml yourlikedname.toml
Anschliessend die yourlikedname.toml
anpassen.
Die Konfigurationsdatei muss im configs
Ordner sein und der Name kann beliebig gewählt werden.
Für mehrere Zähler:
Einfach im configs Ordner weiter config.toml
Dateien anlegen. (Mit unterschiedlichen Namen)
!!Alle Configdateien im configs
Ordner werden ausgeführt!!
Bei der Anpassung sind < >
zu entfernen - " "
müssen stehen bleiben.
python3 smartmeter.py
ausführen
Wenn dieser erfolgreich verläuft, erhält man folgende Meldung:
18.03.2021 10:27:45 INFO: Durchlaufintervall in Config aktualisiert
Programm wird beendet. Bitte neu starten
Bevor nun das Programm neu gestartet wird, nochmals die Konfigurationsdatei öffnen und die Einträge bei
Durchlaufintervall prüfen und den eigenen Wünschen anpassen.
Soll ein Parameter nie gemessen werden, so ist der Wert auf false
zu stellen.
Ansonsten angeben, beim wievielten Durchlauf der entsprechenden Wert jeweils ausgelesen und gespeichert werden soll.
Nun das Programm erneut starten, erscheint anschliessend keine Fehlermeldung, so kann eine Service Unit für den Autostart erstellt werden.
Ausführung erfordert root Rechte
nano /etc/systemd/system/smartmeter.service
# Pfad zum speichern: /etc/systemd/system/smartmeter.service
[Unit]
Description=ServiceUnit zum Starten des Smartmeters
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/smartmeter/smartmeter.py
User=pi
[Install]
WantedBy=multi-user.target
systemctl start smartmeter.service
Kontrolle ob Skript nun wieder aktiv ist, wenn ja automatische Ausführung anlegen:
systemctl enable smartmeter.service
Die Visualisierung findet in Grafana statt, auf nähere Ausführungen wird hier jedoch verzichtet, natürlich können die Messwerte auch mit anderen Tools visualsiert werden.