Shelly-Geräte lassen sich nicht nur über RPC-Kommandos und HTTP-Requests steuern, sondern auch über das MQTT-Protokoll. Dafür benötigst du zusätzlich einen sogenannten MQTT-Broker, der die Nachrichten zwischen den beteiligten Geräten und Anwendungen vermittelt.
Wie MQTT grundsätzlich funktioniert und warum sich das Protokoll besonders gut für IoT- und Smart-Home-Projekte eignet, habe ich dir bereits im Beitrag „MQTT einfach erklärt: Was ist MQTT und warum ist es perfekt für IoT?“ ausführlich erklärt.
In diesem Beitrag zeige ich dir nun Schritt für Schritt, wie du MQTT auf deinem smarten Shelly-Schalter aktivierst, die Verbindung zu einem MQTT-Broker einrichtest und anschließend die ersten Befehle sendest. Außerdem schauen wir uns an, welche Statusmeldungen der Shelly automatisch über MQTT veröffentlicht.
MQTT auf dem Shelly aktivieren
Die MQTT-Schnittstelle ist auf einem Shelly standardmäßig deaktiviert und muss zunächst über die lokale Weboberfläche eingeschaltet werden.
Rufe dazu die IP-Adresse deines Shelly-Geräts im Browser auf. Die IP-Adresse wurde dem Gerät von deinem Router zugewiesen und kann beispielsweise in der Geräteliste deines Routers oder in der Shelly Smart Control App eingesehen werden.



Navigiere anschließend in der Weboberfläche zu: Settings → MQTT
Aktiviere dort zunächst die Option „Enable MQTT network“.
Im Feld für den MQTT-Server trägst du die IP-Adresse oder den Hostnamen deines MQTT-Brokers ein. Direkt dahinter folgt, durch einen Doppelpunkt getrennt, der verwendete MQTT-Port.
Ein möglicher Eintrag sieht beispielsweise so aus: 192.168.178.186:1883
Dabei ist 192.168.178.186 die IP-Adresse des MQTT-Brokers und 1883 der standardmäßig verwendete Port für eine unverschlüsselte MQTT-Verbindung.
Die Client ID ist bereits mit einer eindeutigen Bezeichnung vorbelegt. Du kannst diesen Wert übernehmen oder nach deinen eigenen Vorstellungen anpassen. Wichtig ist lediglich, dass jede Client ID innerhalb des MQTT-Brokers nur einmal verwendet wird.
Speichere anschließend die Einstellungen. Damit die MQTT-Verbindung aktiviert und die neue Konfiguration vollständig übernommen wird, muss der Shelly neu gestartet werden.

MQTT-Verbindung mit dem MQTT Explorer testen
Für einen ersten Test benötigst du ein Programm, mit dem du MQTT-Topics abonnieren und eigene Nachrichten veröffentlichen kannst. Dafür eignet sich der kostenlose MQTT Explorer, den du unter mqtt-explorer.com herunterladen kannst.
Nach der Installation richtest du im MQTT Explorer eine neue Verbindung zu deinem MQTT-Broker ein. Dafür benötigst du mindestens die IP-Adresse oder den Hostnamen des Brokers sowie den verwendeten Port. Falls dein Broker durch einen Benutzernamen und ein Passwort geschützt ist, müssen diese Zugangsdaten ebenfalls eingetragen werden.

Nach dem Aufbau der Verbindung zeigt dir der MQTT Explorer alle Topics an, die auf dem Broker veröffentlicht werden. Sobald dein Shelly erfolgreich mit dem MQTT-Broker verbunden ist, sollten dort auch die vom Gerät gesendeten Topics und Statusmeldungen erscheinen.
Zusätzlich kannst du mit dem MQTT Explorer eigene Nachrichten veröffentlichen. Dadurch lässt sich direkt überprüfen, ob sich der Ausgang des Shellys über MQTT ein- und ausschalten lässt.
Ausgang des Shelly über MQTT steuern
Nachdem der Shelly mit dem MQTT-Broker verbunden ist, können wir seinen Ausgang über ein MQTT-Topic steuern. Öffne dazu im MQTT Explorer den Bereich zum Veröffentlichen einer neuen Nachricht.
Das benötigte Topic setzt sich aus der Geräte-ID des Shellys und dem angesprochenen Ausgang zusammen:
<Geräte-ID>/command/switch:0
Bei meinem Shelly 1PM Gen3 lautet das Topic beispielsweise:
shelly1pmg3-3030f9e95140/command/switch:0
Der Bestandteil switch:0 steht für den ersten Ausgang des Geräts. Bei Shelly-Geräten mit mehreren Ausgängen werden diese entsprechend mit switch:0, switch:1 und so weiter angesprochen.
Als Payload wird lediglich der gewünschte Befehl gesendet. Ein zusätzliches JSON-Objekt ist für diese einfache Steuerung nicht notwendig.
| Payload | Funktion |
|---|---|
on | Ausgang einschalten |
off | Ausgang ausschalten |
toggle | Aktuellen Zustand umschalten |
on,10 | Ausgang einschalten und nach 10 Sekunden wieder ausschalten |
off,10 | Ausgang ausschalten und nach 10 Sekunden wieder einschalten |
status_update | Aktuellen Status des Ausgangs anfordern |
Ausgang einschalten
Trage im MQTT Explorer zunächst das Topic des Ausgangs ein: shelly1pmg3-3030f9e95140/command/switch:0
Als Payload verwendest du: on
Nachdem du die Nachricht veröffentlicht hast, schaltet der Shelly den Ausgang ein.
Ausgang ausschalten
Zum Ausschalten verwendest du dasselbe Topic und sendest die folgende Payload: off
Ausgang umschalten
Mit dem Befehl toggle wird der aktuelle Zustand des Ausgangs umgekehrt: toggle
Ist der Ausgang ausgeschaltet, wird er eingeschaltet. Ist er bereits eingeschaltet, wird er ausgeschaltet.
Ausgang zeitgesteuert schalten
Optional kannst du hinter dem Schaltbefehl eine Zeit in Sekunden angeben. Mit der folgenden Payload wird der Ausgang eingeschaltet und nach zehn Sekunden automatisch wieder ausgeschaltet: on,10
Auch die umgekehrte Variante ist möglich: off,10
In diesem Fall wird der Ausgang zunächst ausgeschaltet und nach zehn Sekunden wieder eingeschaltet.
Status des Ausgangs abfragen
Mit dem Befehl status_update
forderst du den vollständigen Status des Ausgangs an. Der Shelly veröffentlicht die Antwort anschließend unter folgendem Topic:
shelly1pmg3-3030f9e95140/status/switch:0
Die Antwort enthält abhängig vom verwendeten Shelly unter anderem den Schaltzustand sowie Werte zur Leistung, Spannung und zum Stromverbrauch.
Automatische Statusmeldungen empfangen
Der Shelly kann nicht nur Befehle über MQTT empfangen, sondern veröffentlicht auch selbstständig Statusänderungen. Bei meinem Shelly 1PM Gen3 wird ungefähr einmal pro Minute eine neue Meldung mit den aktualisierten Energiewerten an den MQTT-Broker gesendet.
Die Meldungen werden über das folgende Topic veröffentlicht: shelly1pmg3-3030f9e95140/events/rpc
Im MQTT Explorer wird beispielsweise die folgende Nachricht angezeigt:
{
"src": "shelly1pmg3-3030f9e95140",
"dst": "shelly1pmg3-3030f9e95140/events",
"method": "NotifyStatus",
"params": {
"ts": 1782207060,
"switch:0": {
"id": 0,
"aenergy": {
"by_minute": [
0,
202.254,
0
],
"minute_ts": 1782207060,
"total": 14.36
},
"ret_aenergy": {
"by_minute": [
0,
0,
0
],
"minute_ts": 1782207060,
"total": 0
}
}
}
}
An der Eigenschaft method lässt sich erkennen, dass es sich um eine automatische Statusänderung handelt:
"method": "NotifyStatus"
Unter switch:0 befinden sich die Daten des ersten Ausgangs. Der Bereich aenergy enthält die vom angeschlossenen Verbraucher bezogene Energie.
Der Wert total gibt den bisher gemessenen Gesamtverbrauch in Wattstunden an:
"total": 14.36
Das entspricht einem bisherigen Energieverbrauch von:
14,36 Wh beziehungsweise 0,01436 kWh
Das Array by_minute enthält die Energieverbräuche der letzten drei vollständig abgeschlossenen Minuten. Die Werte werden dabei in Milliwattstunden angegeben:
"by_minute": [ 0, 202.254, 0 ]
Der Bereich ret_aenergy enthält die in die entgegengesetzte Richtung gemessene beziehungsweise zurückgespeiste Energie. Da in diesem Beispiel keine Energie zurückgespeist wurde, beträgt der Wert total hier 0.
Für das Empfangen dieser Meldungen ist kein eigener Befehl notwendig. Sobald MQTT aktiviert und der Shelly mit dem Broker verbunden ist, erscheinen die Statusänderungen automatisch im MQTT Explorer.
Häufige Fragen zu Shelly und MQTT
Benötige ich für Shelly MQTT die Shelly Cloud?
Nein. Die Kommunikation über MQTT erfolgt direkt zwischen dem Shelly und deinem MQTT-Broker. Eine aktive Verbindung zur Shelly Cloud ist dafür nicht erforderlich. Der Shelly, der MQTT-Broker und das verwendete Programm müssen sich jedoch gegenseitig über das Netzwerk erreichen können.
Welchen MQTT-Broker kann ich verwenden?
Du kannst grundsätzlich jeden kompatiblen MQTT-Broker verwenden. Eine häufig eingesetzte Lösung ist Eclipse Mosquitto, der beispielsweise auf einem Raspberry Pi, einem Server, in Docker oder als Erweiterung in Home Assistant betrieben werden kann.
Welchen Port verwendet MQTT?
Für eine unverschlüsselte MQTT-Verbindung wird üblicherweise der Port 1883 verwendet. Verschlüsselte MQTT-Verbindungen verwenden häufig den Port 8883. Entscheidend ist jedoch, welcher Port auf deinem MQTT-Broker konfiguriert wurde.
Warum verbindet sich mein Shelly nicht mit dem MQTT-Broker?
Überprüfe zunächst die IP-Adresse beziehungsweise den Hostnamen des Brokers und den eingetragenen Port. Falls dein MQTT-Broker eine Anmeldung verlangt, müssen außerdem Benutzername und Passwort korrekt hinterlegt sein. Nach einer Änderung der MQTT-Konfiguration muss der Shelly neu gestartet werden.
Kann ich den Shelly gleichzeitig über MQTT und die Shelly-App verwenden?
Ja. Die Aktivierung von MQTT verhindert nicht automatisch die Verwendung der lokalen Weboberfläche oder der Shelly Smart Control App. Der Shelly kann weiterhin über mehrere unterstützte Schnittstellen gesteuert werden.
Wie lautet das MQTT-Topic zum Schalten des Ausgangs?
Das Topic setzt sich standardmäßig aus der Geräte-ID und dem angesprochenen Ausgang zusammen: /command/switch:0
Bei meinem Shelly 1PM Gen3 lautet es beispielsweise: shelly1pmg3-3030f9e95140/command/switch:0
Mit den Payloads on, off und toggle kannst du den Ausgang ein-, ausschalten oder seinen aktuellen Zustand umkehren.
Warum enthält eine automatische Statusmeldung nicht alle Gerätedaten?
Bei den Nachrichten unter events/rpc handelt es sich häufig um NotifyStatus-Meldungen. Diese enthalten nur die Werte, die sich geändert haben. In meinem Beispiel wurden die Energiewerte aktualisiert, weshalb die Nachricht hauptsächlich aenergy und ret_aenergy enthält.
Den vollständigen Status des Ausgangs kannst du mit der Payload status_update anfordern. Die Antwort wird anschließend unter dem Topic <Geräte-ID>/status/switch:0 veröffentlicht.
Kann ich die Geräte-ID oder den MQTT-Topic-Präfix ändern?
Die Client-ID und der MQTT-Topic-Präfix können in der MQTT-Konfiguration angepasst werden. Ohne einen eigenen Topic-Präfix verwendet der Shelly standardmäßig seine Geräte-ID. Nach einer Änderung musst du die verwendeten Topics im MQTT Explorer oder in deiner Anwendung entsprechend anpassen.
Quellen und weiterführende Informationen
Die technischen Angaben zu den MQTT-Topics, Konfigurationsmöglichkeiten und Statusmeldungen basieren auf der offiziellen Shelly-Dokumentation:
- Shelly Technical Documentation – MQTT
- Shelly Technical Documentation – Switch
- Shelly Technical Documentation – Notifications
Weitere Informationen zur grundsätzlichen Funktionsweise von MQTT findest du in meinem Beitrag:
Das Programm für den praktischen Verbindungstest kannst du auf der offiziellen Projektseite herunterladen:
Fazit und Ausblick
MQTT lässt sich auf einem Shelly mit wenigen Schritten aktivieren und bietet eine einfache Möglichkeit, das Gerät lokal zu steuern. Für grundlegende Schaltvorgänge sind keine umfangreichen JSON-Nachrichten notwendig. Über ein passendes MQTT-Topic und einfache Payloads wie on, off oder toggle lässt sich der Ausgang direkt schalten.
Darüber hinaus stellt der Shelly über MQTT auch Statusinformationen zur Verfügung. Mit status_update kann der aktuelle Zustand des Ausgangs gezielt abgefragt werden. Zusätzlich veröffentlicht der Shelly selbstständig Statusänderungen, beispielsweise aktualisierte Energiewerte eines Shelly 1PM Gen3. Damit eignet sich MQTT nicht nur zum Steuern, sondern auch zum Erfassen und Weiterverarbeiten von Messwerten.
Der MQTT Explorer ist für den Einstieg ein praktisches Werkzeug, um Topics und Payloads auszuprobieren. Für eine dauerhafte Automatisierung ist es jedoch wenig komfortabel, jeden Befehl manuell zu veröffentlichen.
Im nächsten Beitrag kommt deshalb Node-RED ins Spiel. Dort werden wir den Shelly über MQTT bequem mit einem einfachen Flow steuern. Außerdem empfangen wir die Statusmeldungen des Geräts und zerlegen die enthaltenen JSON-Daten, sodass sich beispielsweise Schaltzustand, Leistung und Energieverbrauch einzeln auslesen und weiterverarbeiten lassen.
Letzte Aktualisierung am: 23. Juni 2026
