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
}
}
}
Transparenz-Hinweis (Level 1)
An diesem Beitrag ist kein Hersteller beteiligt! Sämtliche Produkte habe ich selbst gekauft und trage die kompletten Kosten für diesen Beitrag alleine! Die Inhalte wurden somit von niemandem gesehen oder abgestimmt. Es handelt sich zu 100% um meine persönliche Meinung und Erfahrung!