View on GitHub

smartmeter-docker

Smartmeter für EVN-Kunden auf Docker

Smartmeter Installation

Einleitung

Die hier beschriebene Applikation ermöglicht Kunden im Versorgungsgebiet der EVN ihren aktuellen Stromverbrauch aus dem Smartmeter auszulesen. Aufbauend auf der hervorragenden Arbeit von Michael Reitbauer habe ich dafür eine Installationsanleitung für den Rasperry Pi basierend auf Docker erstellt. Die Docker-Lösung wurde gewählt, da damit eine sichere Migration zwischen verschiedenen Rechnern möglich ist.

Ich empfehle als Betriebssystem DietPi da es wesentlich ressourcensparender ist. Siehe: DietPi vs Raspberry Pi OS Lite

DietPi hat auch den Vorteil, installationsfertige Images für eine große Anzahl von Alternativen zum RasPi4 anbieten zu können. So z.B. der Odroid C4/HC4, der zu einem Peis von wesentlich unter € 100,– lieferbar ist.

Sollte jedoch Smartmeter auf ein bereits vorhandenes laufendes System aufgesetzt werden, lese zuerst den Absatz Smartmeter Installation ohne DietPi und fahre dann mit Absatz Docker fort.

DietPi

DietPi ist eine auf Debian basierende Linux-Distribution, die für Single-Board Computer, wie Raspberry Pi, ODROID, ROCK Pi, PINE64, NanoPi und ASUS Tinker Board entwickelt wurde. DietPi unterstützt ebenso PCs und Virtuelle Maschinen. Das Projekt besitzt eine aktive Community und erzeugte über 200 Releases. Aktuell gibt es weltweit über ca. 120 000 laufende DietPi-Systeme.

Meine erste Installation erfolgte auf einem Pi4. Da ich eine Reihe von Pi1 noch in der Sammlung hatte, war mein Bestreben Smartmeter auch auf einem leistungsschwächeren System auszuprobieren. Dies stellte sich jedoch auch mit DietPi als nicht praktikabel heraus. Für die vorliegende Konfiguration auf Docker ist mindestens ein Pi3 nötig.

Image erstellen

Basis-Installation

Manuelle Installation (nicht empfohlen)

Automatische Basis-Installation

Tipp: Einschalten von farbiger Anzeige von “ls” im Terminal

nano ~/.bashrc

Auskommentiere folgende Zeilen (Entferne das #)

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
eval "$(dircolors)"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

Tipp: Parametrierung von Nano - Einschalten Zeilennummern und Tabspace 4 für Programmierung von Python

Öffne nano:

nano 

Editiere folgende Zeilen

# Recommended nano editor configuration for Python programming
# (~/.nanorc file)

set linenumbers
set autoindent
set tabspace 4
set tabstospaces

Speichere das File unter .nanorc

Tipp: Sicherheitsabfrage bei relevanten Systemcommandos

Es empfiehlt sich die darunter befindlichen Zeilen ebenfalls durch entfernen des # zu aktivieren. Dadurch werden die Befehle rm (Löschen), cp (Kopieren) und mv (Umbenennen) durch die Bildung eines Alias mit -i durch eine Rückfrage vor dem Ausführen gesichert.

# Some more alias to avoid making mistakes:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Speichere die Datei mit Strg+O und schließe mit Strg+X und anschließend Raspi neu booten:

dietpi@Smartmeter:~$ sudo reboot

Danach wird das Listing von “ls” farbig dargestellt. Verzeichnisse z.B. sind blau. Die Eingabe von “l” liefert den Output von ls -lA. Die Befehle remove (rm), copy (cp) und move (mv) werden erst nach Rückfrage ausgeführt.

Hinweis: Die Setzung der Alias muss für jeden User einzeln vorgenommen werden! (dietpi, root)

Docker

Hinweis: Sollte Smartmeter nicht auf DietPi aufgesetzt werden, bitte zuerst weiter unten das Kapitel: Smartmeter Installation ohne DietPi lesen!

Durch die nun vorgenommene Installation von DietPi sind die notwendigen Programme für Docker bereits installiert.

Docker-compose

docker-compose ist ein Automatisierungstool von Docker das die Bedienung wesentlich erleichtert. Gesteuert wird es durch die Datei docker-compose.yaml.

Smartmeter ist in der docker-compose.yaml konfiguriert. Mittels docker-compose werden die jeweiligen Docker-Container gebaut und gestartet. Danach ist Smartmeter in Betrieb. Die gesammelten Daten werden in den Docker-Volumes persistiert (dauerhaft gespeichert).

Speicherplatz der Dockervolumes

Alle Dateien von smartmeter-docker befinden sich außerhalb der Docker-Container hier: /mnt/dietpi_userdata/docker-data/volumes

Bei Änderungen in der docker-compose.yaml und wiederholtem Neustart von docker-compose werden neue Container geschrieben, aber die Daten bleiben davon unberührt.

Portainer

Portainer ist ein nützliches Verwaltungstool für Docker. In DietPi ist es bereits durch die Konfigurationsdatei dietpi.txt automatisch installiert.

URL: http://10.0.0.10:9002 bzw. IP des jeweiligen Rechners

Menü links: Container - zeigt alle Container und ihren jeweiligen Status an

Influxdb Datenbank

Wikipedia

Alle 5 Sekunden werden die Daten von Python-Programm ausgelesen und in der Influx-Datenbank gespeichert.

Influx commandline tool in Docker aufrufen

  1. Laufende Container anzeigen mit docker ps
dietpi@Smartmeter:~/smartmeter$ docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                                                                                                             NAMES
290c24e84b86   influxdb:1.8             "/entrypoint.sh infl…"   12 minutes ago   Up 12 minutes   0.0.0.0:8082->8082/tcp, :::8082->8082/tcp, 0.0.0.0:8086->8086/tcp, :::8086->8086/tcp, 0.0.0.0:8089->8089/tcp, :::8089->8089/tcp   influxdb
08b73d393d9a   portainer/portainer-ce   "/portainer"             4 weeks ago      Up 2 days       8000/tcp, 9443/tcp, 0.0.0.0:9002->9000/tcp, :::9002->9000/tcp                                                                     portainer
  1. Den bereits laufenden Dockercontainer unter seinem Namen influxdb aufrufen und auf die Shell aufrufen (/bin/sh). Damit gelangt man auf die Befehlsebene des Dockercontainers. Die angezeigte Nummer ist die ID des Containers. Mit ls kann man alle Verzeichnisse innerhalb des Containers anzeigen:
dietpi@Smartmeter:~/smartmeter$ docker exec -it influxdb bash

root@5ad42861c09f:/# ls
bin  boot  dev  entrypoint.sh  etc  home  init-influxdb.sh  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@5ad42861c09f:/# 
  1. Influx starten. Der Influx-Prompt ist >
root@5ad42861c09f:/# influx

Connected to http://localhost:8086 version 1.8.10

InfluxDB shell version: 1.8.10

> 
  1. Anmeldung, User und Passwort wie in docker-compose.yaml angegeben:
> auth

username: admin
password:

  1. Influx-Datenbanken anzeigen:
> show databases

name: databases
name
----
smartmeter
_internal
> 
  1. Datenbank auswählen:
> use smartmeter
Using database smartmeter
  1. Measurements

Measurements sind in Influxdb das Äquivalent zu den Tabellen in einer SQL-Datenbank. Sie sind die erste Selektionsebene. In der Smartmeter-DB sind die Measurements z.B.:

usw.

Node Red - Weiterleitung der Daten

Wikipedia

Mit Node Red können die vom Python-Programm ausgelesenen und per MQTT gesendeten Daten an die Influx-Datenbank weitergeleitet werden.

Einrichtung von Node-RED

in Browser aufrufen URL: http://IP-Deines-Raspi:1880

Port: siehe docker-compose.yaml 1880

Influx Datenbank verbinden

Tipp: mit STRG + auf die Arbeitsfläche klicken öffnet ein Menü

Tutorial

Auf dem Blog von Michael Reitbauer findes sich ein sehr informatives Tutorial dazu: MQTT Nachrichten in Datenbank speichern

Grafana - Anzeige des Stromverbrauchs

Mit Grafana kann ein Dashboard zur Visualisierung der Stromdaten gestaltet werden. Dank an Michael Reitbauer für das informative Grafana-Tutorial.

Smartmeter Installation ohne DietPi

Docker Installation und Version überprüfen:

root@Smartmeter:~# docker --version
Docker version 23.0.2, build 569dd73

Docker Installation

Sollte Docker noch nicht installiert sein:

apt update && apt upgrade

curl -fsSL https://get.docker.com -o get-docker.sh

sh get-docker.sh

[Für mehr Information zur Docker-Installation]{https://phoenixnap.com/kb/docker-on-raspberry-pi}

Portainer Installation

Portainer ist ein nützliches Verwaltungstool für Docker. In DietPi ist es bereits durch die Konfigurationsdatei dietpi.txt automatisch installiert.

Installation von Portainer für andere Linux-Versionen