TapHome

Shelly Plus Smoke

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Shelly Plus Smoke

Der Shelly Plus Smoke ist ein batteriebetriebener (CR123A) Wi-Fi photoelektrischer Rauchalarm, zertifiziert nach DIN EN 14604. TapHome kommuniziert mit dem Gerät über MQTT mittels Gen2+ RPC-Benachrichtigungen auf dem Topic events/rpc. Das Gerät verbringt die meiste Zeit im Tiefschlaf zur Batterieschonung und wacht periodisch basierend auf dem konfigurierten wakeup_period auf. Rauchalarm-Ereignisse lösen ein sofortiges Aufwachen und eine MQTT-Benachrichtigung aus.

Die Vorlage erstellt ein einzelnes Rauchalarm-Gerät (auf einen Reed-Kontakt abgebildet) und zwei Batterie-Serviceattribute auf Modulebene. Ein Konnektivitäts-Watchdog überwacht den Aufwach-Countdown und gibt Warnungen oder Fehler aus, wenn das Gerät längere Zeit nicht gemeldet hat.

Konfiguration

MQTT Client ID

Jeder Shelly Plus Smoke hat eine eindeutige MQTT Client ID im Format shellyplussmoke-<MAC12>, wobei <MAC12> die vollständige 12-stellige MAC-Adresse in hexadezimaler Großschreibung ist (z.B. shellyplussmoke-AABBCCDDEEFF). Diese ID dient auch als Standard-MQTT-Topic-Präfix.

Die Client ID finden Sie:

  • Auf dem Gerätelabel (MAC-Adresse)
  • In der Shelly Web-UI: SettingsMQTTClient ID
  • Über API: GET http://<device-ip>/rpc/Mqtt.GetConfig → Feld client_id
Vorlageneinrichtung

Nach dem Import der Vorlage in TapHome:

  1. Öffnen Sie das Modul Shelly Plus Smoke
  2. Setzen Sie die MQTT Broker IP auf die Adresse des MQTT-Brokers
  3. Setzen Sie den Port (Standard 1883)
  4. Setzen Sie den Import-Parameter MQTT ID auf die Client ID des Geräts (z.B. shellyplussmoke-AABBCCDDEEFF)

Das Modul abonniert <device-id>/# und das Listener-Skript parst NotifyFullStatus- und NotifyStatus-JSON-RPC-Ereignisse vom Topic events/rpc.

MQTT ist beim Shelly Plus Smoke standardmäßig deaktiviert. Aktivieren Sie es in den Geräteeinstellungen: SettingsMQTTEnable. Stellen Sie sicher, dass rpc_ntf (RPC-Benachrichtigungen) auf true gesetzt ist (Standard). Die Vorlage basiert auf events/rpc-Benachrichtigungen, nicht auf einzelnen Status-Topics.

Schlaf- und Meldeverhalten

Der Shelly Plus Smoke arbeitet im Tiefschlafmodus zur Maximierung der Batterielebensdauer:

  • Periodisches Aufwachen — das Gerät wacht in Intervallen auf, die durch sys.wakeup_period definiert sind, und veröffentlicht ein NotifyFullStatus-Ereignis mit Batteriestatus, Rauchalarmzustand und aktuellem Aufwachintervall
  • Alarmereignis — ein Raucherkennungsereignis löst sofortiges Aufwachen und eine NotifyStatus-Benachrichtigung mit dem Alarmzustand aus
  • Zwischen Aufwachzyklen — das Gerät ist über HTTP und MQTT nicht erreichbar

Das Gerät wird von einer einzelnen CR123A-Batterie betrieben mit einer erwarteten Lebensdauer von bis zu 5 Jahren. Verwenden Sie keine wiederaufladbaren Batterien — der Hersteller warnt ausdrücklich davor.

Das Gerät ist batteriebetrieben und nicht dauerhaft mit dem MQTT-Broker verbunden. Zwischen Aufwachzyklen ist keine Kommunikation möglich. Bei schwachem Wi-Fi-Signal am Sensorstandort können häufige Wiederverbindungsversuche beim Aufwachen die Batterielebensdauer erheblich verkürzen.

Gerätefähigkeiten

Rauchalarm

Die Vorlage bildet den Rauchalarmzustand auf ein Reed-Kontakt-Gerät ab (DeviceType 1030). Das Listener-Skript parst NotifyStatus-Ereignisse auf dem Topic events/rpc und liest params['smoke:0'].alarm:

  • ON (Alarm aktiv) — Rauch erkannt, der eingebaute Signalgeber des Geräts ertönt mit >85 dB
  • OFF (Alarm gelöscht) — kein Rauch, Normalbetrieb

Der Alarmzustand ist schreibgeschützt und aktualisiert sich sofort bei Raucherkennung. Das Gerät löst unabhängig vom Schlafplan eine sofortige MQTT-Benachrichtigung bei Alarmereignissen aus.

Batterieüberwachung

Das Modul stellt zwei Batterie-Serviceattribute bereit, die aus NotifyFullStatus-Ereignissen lesen:

  • Batterie [%] — prozentualer Ladestand aus params['devicepower:0'].battery.percent. Eine Warnung wird ausgelöst, wenn der Pegel unter 30 % fällt
  • Batterie [V] — Batteriespannung in Volt aus params['devicepower:0'].battery.V. Nennspannung ist 3V für die CR123A-Batterie

Beide Werte geben NaN zurück, bevor die erste Messung empfangen wurde (d.h. wenn der gecachte Wert noch 0 ist). Batteriedaten aktualisieren sich bei jedem periodischen Aufwachen.

Konnektivitäts-Watchdog

Die Vorlage überwacht die Gerätekonnektivität mittels eines Countdown-Mechanismus. Bei jedem NotifyFullStatus-Ereignis speichert das Listener-Skript den sys.wakeup_period-Wert in der Custom-Variable wakeup_period. Das Lese-Skript dekrementiert dann diesen Zähler um 60 in jedem Abfragezyklus (60-Sekunden-Intervall):

  • Zähler erreicht 0 — das Gerät ist nicht wie erwartet aufgewacht. Der Zähler wird auf -1 gesetzt und ein WARNING ausgelöst: “Update not received”
  • Zähler erreicht -86400 — das Gerät war 48 Stunden still. Ein ERROR wird ausgelöst: “Update not received in last 48h”

Wenn das Gerät aufwacht und einen neuen NotifyFullStatus sendet, wird der Zähler auf den frischen wakeup_period-Wert zurückgesetzt und alle Warnungen gelöscht.

Weitere Fähigkeiten

Der Shelly Plus Smoke unterstützt auch eine Stummschaltfunktion (Smoke.Mute RPC-Methode) zum Unterdrücken des Alarmtons, Rauchalarm-Testereignisse ausgelöst durch die physische Taste und WiFi-Signalstärkediagnose (RSSI). Das Gerät veröffentlicht individuelle Komponenten-Status-Topics bei aktiviertem status_ntf. Diese Fähigkeiten können in einer zukünftigen Vorlagenaktualisierung hinzugefügt werden.

Fehlerbehebung

Rauchalarm meldet keine Ereignisse
  1. Überprüfen Sie, dass der Shelly Plus Smoke mit Wi-Fi verbunden ist und MQTT in den Geräteeinstellungen aktiviert ist (SettingsMQTTEnable)
  2. Prüfen Sie, dass rpc_ntf auf true gesetzt ist (Standard) — die Vorlage erfordert RPC-Benachrichtigungen auf events/rpc
  3. Bestätigen Sie, dass der Import-Parameter MQTT ID exakt mit der Client ID des Geräts übereinstimmt (z.B. shellyplussmoke-AABBCCDDEEFF)
  4. Verwenden Sie einen MQTT-Client (z.B. MQTT Explorer) zum Abonnieren von <device-id>/# und überprüfen Sie, ob das Gerät NotifyFullStatus beim Aufwachen veröffentlicht
  5. Prüfen Sie die Gerätebatterie — eine entladene CR123A-Batterie verhindert, dass sich das Gerät mit Wi-Fi verbindet
Konnektivitäts-Watchdog zeigt falsche Warnungen
  1. Der Watchdog vergleicht den Countdown mit dem erwarteten Aufwachintervall. Wenn die TapHome Core-Uhr erheblich abweicht, können falsche Warnungen erscheinen
  2. Im Batteriebetrieb wacht das Gerät nur im konfigurierten wakeup_period-Intervall auf — Lücken zwischen Meldungen sind erwartet
  3. Bei instabilem Wi-Fi am Sensorstandort kann sich das Gerät bei einigen Aufwachzyklen nicht verbinden. Überprüfen Sie die Wi-Fi-Signalstärke
  4. Nach einem Batteriewechsel kann es einen kompletten Aufwachzyklus dauern, bis der Watchdog-Zähler korrekt initialisiert ist
Gerät wird als Reed-Kontakt statt Rauchalarm angezeigt

Die TapHome-Vorlage verwendet den Gerätetyp PacketParserReedContact (DeviceType 1030) zur Darstellung des Rauchalarms. Dies ist die korrekte Zuordnung — ON bedeutet “Notfallalarm” (Rauch erkannt) und OFF bedeutet “OK” (kein Rauch). Der Gerätename in TapHome ist “Shelly Plus Smoke” zur eindeutigen Kennzeichnung der Funktion.

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät mit Wi-Fi verbunden (siehe HTTP-Verbindungsanleitung, falls noch nicht geschehen)
  • MQTT-Broker in Ihrem lokalen Netzwerk aktiv (z. B. Mosquitto, Home Assistant oder der integrierte TapHome-Broker)
  • TapHome CCU im selben Netzwerk wie der Broker

Auf Gen1-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden. Auf Gen2/Plus-Geräten gilt diese Einschränkung nicht.

Schritt 1 — MQTT auf dem Shelly-Gerät aktivieren

Gen1-Geräte (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu Internet & SecurityAdvanced — MQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie MQTT Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Optional setzen Sie MQTT User und MQTT Password, falls Ihr Broker eine Authentifizierung erfordert
  6. Klicken Sie auf Save — das Gerät startet neu und verbindet sich mit dem Broker

Gen2 / Plus-Geräte (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu SettingsMQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Die Client ID ist mit der Geräte-ID vorausgefüllt (z. B. shellyplus1pm-AABBCCDDEE) — belassen Sie sie so, es sei denn, Sie haben einen bestimmten Grund zur Änderung
  6. Klicken Sie auf Save und starten Sie das Gerät neu

Um zu überprüfen, ob MQTT funktioniert, verwenden Sie einen MQTT-Client (z. B. MQTT Explorer) und abonnieren Sie shellies/# (Gen1) oder <device-id>/# (Gen2). Sie sollten Statusnachrichten vom Gerät sehen.

Schritt 2 — Device ID / MQTT Client ID ermitteln

Einige Vorlagen erfordern einen Parameter Device ID oder MQTT Client ID. Dies ist die eindeutige Kennung, die in MQTT-Topics verwendet wird.

  • Gen1: auf dem Etikett als MAC-Adresse zu finden (z. B. AABBCCDDEE). Device ID = shelly<model>-<mac>, z. B. shelly1pm-AABBCCDDEE
  • Gen2/Plus: in der Shelly-Weboberfläche unter SettingsDevice InfoDevice ID zu finden, oder auf dem Geräteetikett

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (MQTT) hinzu
  2. IP Address: Geben Sie die IP-Adresse des MQTT-Brokers ein (z. B. 192.168.1.10)
  3. Port: 1883 (Standard; verwenden Sie 8883 für TLS)
  4. Device ID / MQTT Client ID: Geben Sie den Wert aus Schritt 2 ein (falls von der Vorlage benötigt)
  5. Importieren Sie die Vorlage — TapHome abonniert automatisch die Geräte-Topics

Verfügbare Geräte

Shelly Plus Smoke Modul
Benutzerdefinierte Variablen
deviceid (string)MQTT-Geräte-ID als Topic-Präfix — Format: shellyplussmoke-{MACADDRESS} (in der Shelly Web-UI → Settings → MQTT → Client ID)
Rauchalarm Reed-Kontakt Nur lesen

Photoelektrischer Rauchalarmzustand — ON = Notfallalarm (Rauch erkannt), OFF = OK (kein Rauch). Alarm löst sofortige MQTT-Benachrichtigung mit >85 dB Signalgeber aus.

boolean JSON-RPC (NotifyStatus → params.smoke:0.alarm)
Serviceattribute
Batterie [%]Prozentualer Ladestand — Warnung bei unter 30 %. CR123A-Batterie, bis zu 5 Jahre Lebensdauer.
Batterie [V]Batteriespannung in Volt — Nennspannung 3V für CR123A-Batterie

Rauchalarm

Lesen (Modul)
if wakeup_period = 0
	# after init
else
	wakeup_period := wakeup_period - 60;
	if wakeup_period = 0
		wakeup_period := -1;
	end
end

if wakeup_period < 0
	ADDWARNING("Update not received");
end

if wakeup_period < -86400
	ADDERROR("Update not received in last 48h");
end
Listener
if RECEIVEDMSG.TOPIC = deviceid + "/events/rpc"
	var method := parsejson(RECEIVEDMSG.PAYLOAD, "method", true); 
	var params := parsejson(RECEIVEDMSG.PAYLOAD, "params", true);
	if method = "NotifyFullStatus"
		wakeup_period := parsejson(params, "sys.wakeup_period");
		battery_V := parsejson(params, "devicepower:0.battery.V");
		battery_percent := parsejson(params, "devicepower:0.battery.percent");
	end
	if method = "NotifyStatus" and !ISNULL(parsejson(params, "smoke:0", true))
		var alarm := parsejson(params, "smoke:0.alarm", true);
		if !ISNULL(alarm)
			Rc := alarm;
		end
	end
end

if battery_percent < 30
	ADDWARNING("Low battery");
end
Serviceattribute
Battery [%]
if battery_percent != 0
	return(battery_percent);
else
	return(NaN);
end
Battery [V]
if battery_V != 0
	return(battery_V);
else
	return(NaN);
end
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (4)
  • Smoke Mute State — smoke:0.mute — true when alarm sound is suppressed via Smoke.Mute RPC. Could show muted status in TapHome.
  • External Power Status — devicepower:0.external.present — always false for Plus Smoke (battery-only device), but available in API.
  • WiFi RSSI — sys.wifi.rssi — signal strength in dBm. Could be used for placement diagnostics.
  • Smoke Alarm Test Event — smoke.alarm_test webhook event — triggered when user presses test button. Not captured by current template.

Quellen