Anbindung von SolarView über MQTT
Verfasst: Sa Mai 01, 2021 1:56 pm
Ich habe vor einiger Zeit die Anbindung von SolarView beigesteuert. Kurz danach erschien SolarView in Version 2.25, die u.a. um eine MQTT-Schnittstelle erweitert wurde. Damit gibt es nun einen zweiten Weg, SolarView anzubinden. In diesem Beitrag möchte ich kurz beschreiben, wie die Anbindung von SolarView per MQTT eingerichtet werden kann.
SolarView
Die MQTT-Konfiguration von SolarView erfolgt über die Datei solarview_cfg.txt im SolarView-Verzeichnis, die folgenden Angaben benötigt:
In diesem Beispiel wird der in openWB integrierte MQTT-Broker verwendet. Es ist auch möglich, einen anderen Broker zu verwenden, der dann z.B. über die Konfiguration einer MQTT-Bridge mit dem openWB-Broker verbunden wird.
Bedeutung der Angabe MQTTWR:
MQTT-Adapter
Der MQTT-Adapter abonniert die Topics von SolarView, wandelt das Datenformat um und sendet sie an die von openWB erwarteten Topics. Diese Aufgabe kann prinzipiell durch jede beliebige Software übernommen werden.
Ich beschreibe hier die Verwendung eines kleinen Tools namens mqtt-transformer, das über docker-compose gestartet wird. Voraussetzung dafür ist ein Linux-Rechner (z.B. Raspberry Pi) mit Docker und docker-compose. Auf Debian-basierten Systemen lassen sich diese Anwendungen bei Bedarf wie folgt installieren:
Die Installation und Einrichtung von mqtt-transformer besteht dann noch im Anlegen von zwei Dateien in einem beliebigen Verzeichnis auf dem Dateisystem des Linux-Rechners, z.B. /opt/docker/mqtt-transformer.
Datei docker-compose.yml
Für den Betrieb verwendet man folgende Kommandos:
Bei Problemen kann man durch Setzen der Umgebungsvariable IS_VERBOSE=true in der docker-compose.yml das Logging erhöhen.
openWB
In den Modulen EVU und PV ist die Auswahl MQTT zu treffen, hier ist keine weitere Konfiguration notwendig.
- Vorteil 1: SolarView kann ohne TCP-Server betrieben werden. Für die bisherigen Module muss SolarView mit dem integrierten TCP-Server gestartet werden (standardmäßig auf Port 15000).
- Vorteil 2: Die SolarView-Integration von openWB wird nicht benötigt, muss also nicht gepflegt und gewartet werden.
- Nachteil: Man benötigt einen Adapter, der die MQTT-Nachrichten von SolarView für openWB übersetzt.
SolarView
Die MQTT-Konfiguration von SolarView erfolgt über die Datei solarview_cfg.txt im SolarView-Verzeichnis, die folgenden Angaben benötigt:
Code: Alles auswählen
MQTTHost=openwb
MQTTPort=1883
MQTTTopic=solarview
MQTTWR=WR0,WR21,WR22
MQTTPublishVals=PAC,UDC,IDC,UL1,IL1,KDY,KMT,KYR,KT0,DPAC,BKDY,BKMT,BKYR,BKT0,GKDY,GKMT,GKYR,GKT0
Bedeutung der Angabe MQTTWR:
- WR0 ist die Gesamtmenge aller Wechselrichter
- WR21 ist die D0-Einspeisung
- WR22 ist der D0-Bezug
MQTT-Adapter
Der MQTT-Adapter abonniert die Topics von SolarView, wandelt das Datenformat um und sendet sie an die von openWB erwarteten Topics. Diese Aufgabe kann prinzipiell durch jede beliebige Software übernommen werden.
Ich beschreibe hier die Verwendung eines kleinen Tools namens mqtt-transformer, das über docker-compose gestartet wird. Voraussetzung dafür ist ein Linux-Rechner (z.B. Raspberry Pi) mit Docker und docker-compose. Auf Debian-basierten Systemen lassen sich diese Anwendungen bei Bedarf wie folgt installieren:
Code: Alles auswählen
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
sudo apt-get install docker-compose
Datei docker-compose.yml
Code: Alles auswählen
---
version: '2.4'
services:
mqtt-transformer:
image: ghcr.io/tg44/mqtt-transformer
init: true
restart: unless-stopped
volumes:
- ./data:/home/node/app/conf
environment:
- "MQTT_URL=mqtt://openwb:1883"
- "IS_VERBOSE=false"
Datei data/conf.jsonHinweis: Falls mqtt-transformer auf demselben Linux-Rechner betrieben wird wie der MQTT-Broker (im oberen Beispiel: Hostname openwb), ist eine weitere Angabe host-gateway notwendig, damit Anfragen des MQTT-Adapters an den MQTT-Broker-Container weitergeleitet werden. Beispiel:
Code: Alles auswählen
services: mqtt-transformer: [...] extra_hosts: - "openwb:host-gateway"
Code: Alles auswählen
{
"transforms": [
{
"fromTopic": "solarview/D0/DPAC",
"toTopic": "openWB/set/evu/W",
"emitType": "map",
"wrapper": "power",
"template": {"$eval": "-power"}
},
{
"fromTopic": "solarview/D0/BKT0",
"toTopic": "openWB/set/evu/WhImported",
"emitType": "map",
"wrapper": "energy",
"template": {"$eval": "energy * 1000"}
},
{
"fromTopic": "solarview/D0/GKT0",
"toTopic": "openWB/set/evu/WhExported",
"emitType": "map",
"wrapper": "energy",
"template": {"$eval": "energy * 1000"}
},
{
"fromTopic": "solarview/WR0/PAC",
"toTopic": "openWB/set/pv/1/W",
"emitType": "map",
"wrapper": "power",
"template": {"$eval": "-power"}
},
{
"fromTopic": "solarview/WR0/KT0",
"toTopic": "openWB/set/pv/1/WhCounter",
"emitType": "map",
"wrapper": "energy",
"template": {"$eval": "energy * 1000"}
}
]
}
- Starten des Service im Hintergrund: docker-compose up -d
- Stoppen des Service: docker-compose down
- Logs ansehen: docker-compose logs -f
Bei Problemen kann man durch Setzen der Umgebungsvariable IS_VERBOSE=true in der docker-compose.yml das Logging erhöhen.
openWB
In den Modulen EVU und PV ist die Auswahl MQTT zu treffen, hier ist keine weitere Konfiguration notwendig.