Anbindung von SolarView über MQTT

Anfragen zum Erstellen von Modulen, Fragen zu Modulen
Antworten
openwb-user
Beiträge: 46
Registriert: Di Sep 03, 2019 6:03 am

Anbindung von SolarView über MQTT

Beitrag von openwb-user »

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.
  • 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
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:
  • WR0 ist die Gesamtmenge aller Wechselrichter
  • WR21 ist die D0-Einspeisung
  • WR22 ist der D0-Bezug
Weitere Details können der aktuellen SolarView-Dokumentation entnommen werden.


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
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

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"
:!: Hinweis: 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"
Datei data/conf.json

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"}
    }
  ]
}
Für den Betrieb verwendet man folgende Kommandos:
  • Starten des Service im Hintergrund: docker-compose up -d
  • Stoppen des Service: docker-compose down
  • Logs ansehen: docker-compose logs -f
Falls der ausführende Benutzer nicht Mitglied der Gruppe docker ist, muss allen Befehlen ein sudo vorangestellt werden.

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.
Antworten