Venus OS - MQTT-Broker (lokal und VRM) - Geräte per MQTT emulieren
Wie Du eventuell weißt, ist MQTT eins meiner absoluten Lieblings-Protokolle. Fast alle Daten im Haus werden über MQTT ausgetauscht. Sei es zu meinem Energie-Dashboard, InfluxDB oder von Tasmota-Geräten. Umso mehr freut es mich, dass auch Venus OS direkt mit einem MQTT-Broker ausgestattet ist und man diesen nutzen kann. Normalerweise würde es mir reichen, wenn Venus OS nur ein MQTT-Client wäre. Aber am Ende kann man damit trotzdem alles realisieren. Mehr dazu im Video.
Video
Wichtige Info
Aktuell gibt es noch das Paket dbus-mqtt. Dieses Paket nutzt Mosquitto als MQTT-Broker, aber soll wohl (bald, angeblich VenusOS 3.20+) durch einen anderen MQTT-Broker abgelöst werden. Geplant ist die Umstellung auf FlashMQ. Das neue Paket heißt dbus-flashmq.
Cloud-Verbindung (VRM)
Auch für die VRM-Kommunikation mit den Victron-Cloud-Servern wird MQTT verwendet (wie bei vielen anderen Cloud-Diensten auch). Die Konfiguration steht (bei dbus-mqtt
) in der folgenden Datei: /data/conf/mosquitto.d/vrm_bridge.conf
Mit der Software MQTT-Explorer kannst Du dich gegen den Victron VRM Cloud-Server verbinden
- Host:
mqtt72.victronenergy.com:443
(Server-ID anpassen! Kann man auch errechnen - siehe unten) - Port:
8883
- TLS aktivieren
- User: Dein VRM Benutzer (E-Mail)
- Passwort: Dein VRM-Passwort
Die ID des Cloud-Servers errechnet sich, indem man die ASCII-Codes der jeweiligen Zeichen in der VRM ID addiert durch 128 teilt - der Rest ist Eure Server-ID. Am einfachsten geht das per Modulo. Hier ein Beispiel in JavaScript / NodeJS:
function getServerID(val) {
const id = val.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0) % 128;
return `mqtt${id}.victronenergy.com`;
}
Lokale Verbindung
Um sich mit dem MQTT-Broker unter Venus OS zu verbinden, muss unter “Services” der Zugriff für MQTT freigeschaltet werden. Dies ändert aber nichts ander Konfiguration des MQTT-Brokers, sondern ändert die Firewall-Regeln! Ausgeschaltet sehen die Regeln so aus:
-A new-conn -p tcp -m tcp --dport 1883 -j REJECT --reject-with icmp-port-unreachable
-A new-conn -p tcp -m tcp --dport 8883 -j REJECT --reject-with icmp-port-unreachable
-A new-conn -p tcp -m tcp --dport 9001 -j REJECT --reject-with icmp-port-unreachable
Und wenn man die Verbindung (auch Plain Text / ohne TLS) aktiviert, dann so:
-A new-conn -p tcp -m tcp --dport 8883 -j ACCEPT
-A new-conn -p tcp -m tcp --dport 1883 -j ACCEPT
-A new-conn -p tcp -m tcp --dport 9001 -j ACCEPT
Zusatzpaket für MQTT-Geräte
Mit dem Paket dbus-mqtt-devices können recht einfach per MQTT neue Geräte erstellt werden. Dies kann z.B. ein einfacher ESP32 mit Temperatur-Sensoren sein, ein ioBroker oder auch Home Assistant. Alles, was MQTT spricht eben. Ich verwende jetzt das Node-RED aus dem Large-Image von Venus OS, um meinen MQTT-Broker mit dem MQTT-Broker von Venus OS zu verknüpfen.
“Dazwischen” kann ich dann die Daten noch umrechnen, weil bei mir z.B. ein negativer Wert vom Netz-Zähler bedeutet, dass ich etwas beziehe (= negativ für mich). Venus OS möchte aber für den Export / die Einspeisung negative Werte sehen. Entsprechend rechne ich meine Werte einfach mit Node-RED um. Alle Details dazu im Video weiter oben.
»Venus OS MQTT Devices«
Bekannte Probleme
Nach diesem Video habe ich folgende Probleme festgestellt:
- Das Grid-Meter (Netz) wird als AC Input dargestellt und nicht als Grid/Netz
- Die Darstellung / das Schema in der Remote Console ist falsch. Normalerweise müssten die AC-Loads direkt mit dem Netz verbunden sein. Dort sollte dann auch der Inverter dran hängen
»Falsche Darstellung in der Remote Console«
Falls jemand weiß, woran das liegt: Gerne eine kurze Info dazu!
Alternativen von mr-manuel
wget -P /tmp https://github.com/mr-manuel/venus-os_dbus-mqtt-grid/archive/refs/tags/v0.1.4.zip
unzip /tmp/v0.1.4.zip -d /tmp/
rm /tmp/v0.1.4.zip
mv /tmp/venus-os_dbus-mqtt-grid-0.1.4/dbus-mqtt-grid/ /data/etc/
cp /data/etc/dbus-mqtt-grid/config.sample.ini /data/etc/dbus-mqtt-grid/config.ini
nano /data/etc/dbus-mqtt-grid/config.ini
Konfiguration:
broker_address = localhost
topic = mqtt-grid/meter
Installation:
bash /data/etc/dbus-mqtt-grid/install.sh
Test-Payload an mqtt-grid/meter
:
{
"grid": {
"power": 600,
"voltage": 230,
"current": 6,
"energy_forward": 1000,
"energy_reverse": 2000,
"L1": {
"power": 100,
"voltage": 231,
"current": 1,
"frequency": 50,
"energy_forward": 200,
"energy_reverse": 1200
},
"L2": {
"power": 200,
"voltage": 232,
"current": 2,
"frequency": 50,
"energy_forward": 300,
"energy_reverse": 500
},
"L3": {
"power": 300,
"voltage": 233,
"current": 3,
"frequency": 50,
"energy_forward": 400,
"energy_reverse": 300
}
}
}