Seit dem Aufbau meines Balkonkraftwerks, möchte ich schon eine eigene Visualisierung erstellen, doch dazu musste zunächst einmal der neue Heimserver eingerichtet werden. Da dieser nun schon einige Zeit problemlos läuft, ist es an der Zeit alle nötigen Komponenten für eine Visualisierung zu installieren. In den Voraussetzungen sind die von mir installierten Komponenten, die als Basis für diese Anleitung dienen.

Voraussetzungen

  • Installation der LX Container auf dem Heimserver (Proxmox)

    • InfluxDB v2 + Telegraf
    • Alpine-Grafana
    • MQTT
  • Hilfreiche Tools:

    • MQTT Explorer (Strukturierte Übersicht aller MQTT Topics im Netzwerk und sehr gut zum Testen)

Installation

Alle LX Container habe ich mithilfe der Skripte von ttek auf meinem Proxmox Server installiert. Als Tipp kann ich empfehlen zusätzlich den File Browser per ttek-Skript auf dem InfluxDB Container zu installieren. Das erleichtert einem das spätere Bearbeiten der Datei “telegraf.conf” für die Telegraf Konfiguration.

Basiskonfiguration

  1. Als Erstes habe ich MQQT konfiguriert, da man hierfür im Container zunächst die Utility “mosquitto_passwd” aufrufen muss, über die man den User und das Passwort festlegt.
  2. Die User- und Passworteinstellungen für Grafana und InfluxDB erfolgen beim ersten Aufruf der jeweiligen Weboberflächen.
  3. In der Shelly Pro 3EM Weboberfläche wurden die Cloud deaktiviert und die Einstellungen für MQTT eingerichtet

  1. Für die Basiskonfiguration von Grafana, InfluxDB + Telegraf und MQTT, bin ich der Anleitung in diesem Video von Daniel Medic gefolgt: “Shelly Full Guide mit InfluxDB und MQTT sowie Telegraf in Grafana visualisieren”

  2. Telegraf Konfiguration: Das Wichtigste in der “telegraf.conf” sind das Topic und das Datenformat (“data_format = “json””), um Daten korrekt aus dem Shelly zu erhalten. Das Topic habe ich mithilfe des MQTT Explorers ermittelt - es setzt sich zusammen aus dem Shelly MQTT Präfix (aus der Shelly Konfiguration) und einem Zusatz: “SHELLY-MQQT-PREFIX/status/em:0”. Über den MQTT Explorer werden mir noch zwei weitere Topics angezeigt, die ich ebenfalls in meine Konfiguration eingetragen habe:

  • “SHELLY-MQQT-PREFIX/status/emdata:0”
  • “SHELLY-MQQT-PREFIX/status/switch:100”
# Bitlager Configuration for telegraf agent
[agent]
  ## Default data collection interval for all inputs
  interval = "10s"
  
  ## GEKÜRZTE FASSUNG: enthält nur die von mir angepassten Werte!
  ## SHORT VERSION: contains only the values adjusted by me!
  
[[outputs.influxdb_v2]]
  ## The URLs of the InfluxDB cluster nodes.
  urls = ["http://IP-ADDRESS-INFLUXDB:8086"]

  ## Token for authentication.
  token = "INFLUXDB TOKEN"

  ## Organization is the name of the organization you wish to write to; must exist.
  organization = "ORG-NAME"

  ## Destination bucket to write into.
  bucket = "BUCKET-NAME"

[[inputs.mqtt_consumer]]
  ## Broker URLs for the MQTT server or cluster.  To connect to multiple
  servers = ["tcp://IP-ADDRESS-MQTT-BROKER:1883"]

  ## Topics that will be subscribed to.
  topics = [
    "SHELLY-MQQT-PREFIX/status/em:0",
    "SHELLY-MQQT-PREFIX/status/emdata:0",
    "SHELLY-MQQT-PREFIX/status/switch:100",
  ]

  ## Username and password to connect MQTT server.
  username = "USERNAME"
  password = "SUPER-SAFE-PASSWORD-123"

  ## Data format to consume.
  data_format = "json"

Testen der Telegraf Konfiguration

In Proxmox lässt sich die Funktionalität der Telegraf Konfiguration über die InfluxDB LXC Konsole einfach testen. Dazu gibt man den Befehl “telegraf –config /etc/telegraf/telegraf.conf –debug” ein. Wenn alles richtig eingestellt ist, sollten keine Fehlermeldungen erscheinen. Nach kurzer Zeit werden dann auch die Ergebnisse (Outputs) sichtbar:

telegraf --config /etc/telegraf/telegraf.conf --debug 
Loading config: /etc/telegraf/telegraf.conf
Starting Telegraf 1.28.5 brought to you by InfluxData the makers of InfluxDB
Available plugins: 240 inputs, 9 aggregators, 29 processors, 24 parsers, 59 outputs, 5 secret-stores
Loaded inputs: mqtt_consumer
Loaded aggregators: 
Loaded processors: 
Loaded secretstores: 
Loaded outputs: influxdb_v2
Tags enabled: host=influxdb
[agent] Config: Interval:10s, Quiet:false, Hostname:"influxdb", Flush Interval:10s
[agent] Initializing plugins
[agent] Connecting outputs
[agent] Attempting connection to [outputs.influxdb_v2]
[agent] Successfully connected to outputs.influxdb_v2
[agent] Starting service inputs
[inputs.mqtt_consumer] Connected [tcp://IP-ADDRESS-MQTT-BROKER:1883]
[outputs.influxdb_v2] Wrote batch of 11 metrics in 6.982767ms
[outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics

Grafana Dashboard - erstes einfaches Diagramm

Wenn alle Basiskonfigurationen erledigt sind, kann man dazu übergehen das erste Diagramm in Grafana anzulegen. Für einen simplen Test habe ich dazu im InfluxDB Data Explorer eine Query angelegt, die mir die Daten zur Gesamtleistung aller drei Phasen aus dem Shelly anzeigt. Diese Query lässt sich im Query Builder der InfluxDB einfach zusammenklicken. Um daraus in Grafana ein Diagramm zu erstellen, kopiert man den Inhalt des Script Editors und fügt diesen in das Grafana Query-Feld ein.

from(bucket: "BUCKET-NAME")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["host"] == "influxdb")
  |> filter(fn: (r) => r["topic"] == "SHELLY-MQQT-PREFIX/status/em:0")
  |> filter(fn: (r) => r["_field"] == "total_act_power")
  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
  |> yield(name: "last")

Für die Gestaltung der Anzeige bietet Grafana eine Menge an Einstellungsmöglichkeiten. Im Diagramm über die letzten 6h, kann man die Grundlast der Wohnung und den periodisch einsetzenden Kühlschrank gut erkennen. Auf der rechten Seite des Bildes sieht man den Strombedarf der eingeschalteten Kaffeemaschine am frühen Morgen.