Wie verbinde ich Modbus mit MQTT?

Direkt geht es nicht: Modbus ist ein Frage-Antwort-Protokoll mit Master und Slave, MQTT ist Publish/Subscribe über einen Broker. Du brauchst dazwischen ein Gateway, das die Register pollt und die Werte als Nachricht auf ein Topic schreibt — als kleines Skript auf einem Raspberry Pi, als Node-RED-Flow oder als fertiges Hardware-Gateway.
Modbus kennt keinen Broker und pusht nichts von selbst — ein Master fragt, das Gerät antwortet. MQTT kennt keine Register, sondern nur Topics und Payloads. Das Gateway ist die Übersetzung: Es ist Modbus-Master gegenüber dem Gerät (Zähler, Wechselrichter, SPS) und gleichzeitig MQTT-Client gegenüber dem Broker. Es fragt zyklisch die Register ab, rechnet Rohwerte in physikalische Größen um und publiziert sie, typischerweise als JSON. Bei uns läuft genau das auf Raspberry Pis vor Ort: Modbus rein, MQTT raus zum Broker, von dort in die Datenbank.

1) Zugang klären: Modbus TCP über Ethernet (Standard-Port 502) oder Modbus RTU über RS485 mit USB-Adapter. 2) Registerliste aus dem Handbuch holen — Adresse, Funktionscode, Datentyp, Skalierung, Einheit. 3) Verbindung testen, bevor du irgendetwas baust: mit pymodbus oder mbpoll ein paar Holding Register lesen und prüfen, ob plausible Zahlen kommen. 4) Gateway konfigurieren: Poll-Intervall, Register-Mapping, Topic-Struktur. 5) Auf dem Broker mitlauschen (z. B. mosquitto_sub) und die Werte gegen das Display des Geräts gegenprüfen. Erst wenn Schritt 3 sauber läuft, lohnt sich der Rest — 90 % der Probleme sind Verkabelung, Slave-ID oder Baudrate.

Modbus TCP läuft über das normale Netzwerk, du brauchst IP-Adresse, Port (meist 502) und die Unit-ID. Das ist der einfachere Fall. Modbus RTU läuft seriell über RS485: Hier musst du zusätzlich Baudrate, Datenbits, Parität und Stoppbits treffen — die serielle Modbus-Spezifikation nennt 19200 Baud mit 8E1 als Default, viele Geräte sind aber ab Werk auf 9600 gestellt. Dazu kommen die RS485-Klassiker: A und B nicht vertauschen, alle Geräte auf einer Linie (kein Stern), Abschlusswiderstände an den beiden Enden, gemeinsames Bezugspotenzial. Adressen 1 bis 247 sind für Slaves, die 0 ist Broadcast. Zwei Geräte mit derselben Adresse am selben Bus = Datensalat.

Ein Modbus-Register ist 16 Bit, mehr nicht. Alles andere ist Vereinbarung. Prüfe vier Dinge: Funktionscode (FC03 Holding Register, FC04 Input Register, FC01/FC02 für Bits), Vorzeichen (signed vs. unsigned — sonst wird aus Rückspeisung plötzlich 65.000), Wortreihenfolge bei 32-Bit-Werten und Floats über zwei Register (Big Endian vs. Word Swap), und den Skalierungsfaktor aus dem Handbuch. Zweiter Stolperstein: die Adress-Zählung. Manche Handbücher zählen ab 1 oder nutzen die 4xxxx-Schreibweise, die Bibliothek zählt ab 0 — dann liest du konsequent das Nachbarregister. Faustregel: Wenn ein Wert um genau 1 Register oder um Faktor 10/100 danebenliegt, ist es keine Störung, sondern das Mapping.

Bau den Topic-Baum hierarchisch und stabil, z. B. kunde/anlage/geraet/json — so kannst du später mit Wildcards ganze Ebenen abonnieren, ohne die Konfiguration anzufassen. Publiziere pro Gerät ein JSON-Objekt mit allen Messwerten und einem Zeitstempel statt 30 Einzel-Topics; das spart Nachrichten und du weißt, welche Werte zusammengehören. QoS 0 reicht für laufende Messwerte, QoS 1 für Zustände und Befehle, die nicht verloren gehen dürfen. Setze ein Last Will Testament, damit der Broker meldet, wenn das Gateway wegbricht — sonst siehst du eingefrorene Werte und hältst sie für echt. Verschlüsselt läuft MQTT über Port 8883, unverschlüsselt über 1883; über das Internet nur mit TLS und Zugangsdaten.
Umgekehrt geht es auch: Das Gateway abonniert ein Befehls-Topic und schreibt den Wert per FC06 (ein Register) oder FC16 (mehrere Register) ins Gerät — so drosseln wir zum Beispiel Wechselrichter über eine Sollwert-Vorgabe. Drei Regeln dafür: Erstens Grenzwerte im Gateway hart begrenzen, damit ein fehlerhafter MQTT-Befehl keine unzulässige Stellgröße erzeugt. Zweitens jeden Schreibvorgang lokal protokollieren und den ausgeführten Wert als Bestätigung zurückpublizieren — sonst weißt du nie, ob der Befehl angekommen ist. Drittens: Schreib-Topics getrennt von Mess-Topics halten und den Zugriff auf dem Broker einschränken. Und Modbus-Ports gehören nie ungeschützt ins offene Internet — Modbus selbst kennt weder Authentifizierung noch Verschlüsselung.
- Warum fast jede Stromabrechnung 2026 falsch ist
- Blind- & Scheinleistung auf der Rechnung
- Lohnt sich ein Batteriespeicher (BESS)?
- Negative Strompreise 2026 automatisch abregeln
- Lastspitzen vermeiden (Flex)
- §51-Schaden berechnen