
The Shelly Plus Smoke is a battery-powered (CR123A) Wi-Fi photoelectric smoke alarm certified to DIN EN 14604. TapHome communicates with the device over MQTT using Gen2+ RPC notifications on the events/rpc topic. The device spends most of its time in deep sleep to conserve battery and wakes periodically based on the configured wakeup_period. Smoke alarm events trigger an immediate wake-up and MQTT notification.
The template creates a single Smoke Alarm device (mapped to a Reed Contact) and two module-level Battery service attributes. A connectivity watchdog monitors the wake-up period countdown and raises warnings or errors when the device has not reported for an extended period.
Configuration
MQTT Client ID
Each Shelly Plus Smoke has a unique MQTT Client ID in the format shellyplussmoke-<MAC12>, where <MAC12> is the full 12-character MAC address in uppercase hex (e.g., shellyplussmoke-AABBCCDDEEFF). This ID also serves as the default MQTT topic prefix.
The Client ID can be found:
- On the device label (MAC address)
- In the Shelly web UI: Settings → MQTT → Client ID
- Via API:
GET http://<device-ip>/rpc/Mqtt.GetConfig→client_idfield
Template setup
After importing the template in TapHome:
- Open the Shelly Plus Smoke module
- Set the MQTT Broker IP to the address of the MQTT broker
- Set the Port (default
1883) - Set the MQTT ID import parameter to the device’s Client ID (e.g.,
shellyplussmoke-AABBCCDDEEFF)
The module subscribes to <device-id>/# and the listener script parses NotifyFullStatus and NotifyStatus JSON-RPC events from the events/rpc topic.
MQTT is disabled by default on the Shelly Plus Smoke. Enable it in the device settings: Settings → MQTT → Enable. Ensure
rpc_ntf(RPC notifications) is set totrue(the default). The template relies onevents/rpcnotifications, not individual status topics.
Sleep behavior and reporting
The Shelly Plus Smoke operates in deep sleep mode to maximize battery life:
- Periodic wake-up — the device wakes at intervals defined by
sys.wakeup_periodand publishes aNotifyFullStatusevent containing battery status, smoke alarm state and the current wake-up period - Alarm event — a smoke detection event triggers an immediate wake-up and
NotifyStatusnotification with the alarm state - Between wake cycles — the device is unreachable via HTTP and MQTT
The device is powered by a single CR123A battery with an expected lifespan of up to 5 years. Do not use rechargeable batteries — the manufacturer explicitly warns against this.
The device is battery-operated and not permanently connected to the MQTT broker. Between wake-up cycles, no communication is possible. If the sensor location has weak Wi-Fi signal, frequent reconnection attempts on wake-up can significantly reduce battery life.
Device capabilities
Smoke alarm
The template maps the smoke alarm state to a Reed Contact device (DeviceType 1030). The listener script parses NotifyStatus events on the events/rpc topic and reads params['smoke:0'].alarm:
- ON (alarm active) — smoke detected, the device’s built-in buzzer sounds at >85 dB
- OFF (alarm clear) — no smoke detected, normal operation
The alarm state is read-only and updates immediately when smoke is detected. The device triggers an immediate MQTT notification on alarm events regardless of the sleep schedule.
Battery monitoring
The module exposes two Battery service attributes that read from NotifyFullStatus events:
- Battery [%] — battery charge percentage from
params['devicepower:0'].battery.percent. A low battery warning is triggered when the level drops below 30% - Battery [V] — battery voltage in Volts from
params['devicepower:0'].battery.V. Nominal voltage is 3V for the CR123A battery
Both values return NaN before the first measurement is received (i.e., when the cached value is still 0). Battery data updates with every periodic wake-up.
Connectivity watchdog
The template monitors device connectivity using a countdown-based mechanism. On each NotifyFullStatus event, the listener script stores the sys.wakeup_period value in the wakeup_period custom variable. The read script then decrements this counter by 60 every poll cycle (60-second interval):
- Counter reaches 0 — the device did not wake up as expected. The counter is set to -1 and a WARNING is raised: “Update not received”
- Counter reaches -86400 — the device has been silent for 48 hours. An ERROR is raised: “Update not received in last 48h”
When the device wakes up and sends a new NotifyFullStatus, the counter is reset to the fresh wakeup_period value, clearing any warnings.
Additional capabilities
The Shelly Plus Smoke also supports a mute function (Smoke.Mute RPC method) to suppress the alarm sound, smoke alarm test events triggered by the physical button, and Wi-Fi RSSI signal strength diagnostics. The device publishes individual component status topics when status_ntf is enabled. These capabilities can be added in a future template update.
Troubleshooting
Smoke alarm not reporting events
- Verify the Shelly Plus Smoke is connected to Wi-Fi and MQTT is enabled in the device settings (Settings → MQTT → Enable)
- Check that
rpc_ntfis set totrue(default) — the template requires RPC notifications onevents/rpc - Confirm the MQTT ID import parameter matches the device’s Client ID exactly (e.g.,
shellyplussmoke-AABBCCDDEEFF) - Use an MQTT client (e.g., MQTT Explorer) to subscribe to
<device-id>/#and verify the device publishesNotifyFullStatuson wake-up - Check the device battery — a depleted CR123A battery prevents the device from connecting to Wi-Fi
Connectivity watchdog shows false warnings
- The watchdog compares the countdown against the expected wake-up period. If the TapHome Core clock is significantly off, false warnings may appear
- On battery power, the device wakes only at the configured
wakeup_periodinterval — gaps between reports are expected - If the sensor is in a location with intermittent Wi-Fi, it may fail to connect on some wake-up cycles. Verify Wi-Fi signal strength at the sensor location
- After a fresh battery replacement, the device may take one full wake-up cycle before the watchdog counter is properly initialized
Device shows as Reed Contact instead of smoke alarm
The TapHome template uses the PacketParserReedContact device type (DeviceType 1030) to represent the smoke alarm. This is the correct mapping — ON state means “Emergency Alarm” (smoke detected) and OFF state means “OK” (no smoke). The device name in TapHome is “Shelly Plus Smoke” to clearly indicate its function.