TapHome

Shelly Plus Smoke

Packet Parser → MQTT
Inviato da
Ultimo aggiornamento: 03. 2026
Shelly Plus Smoke

Lo Shelly Plus Smoke è un allarme fumo fotoelettrico Wi-Fi alimentato a batteria (CR123A), certificato DIN EN 14604. TapHome comunica con il dispositivo tramite MQTT utilizzando le notifiche RPC Gen2+ sul topic events/rpc. Il dispositivo trascorre la maggior parte del tempo in sonno profondo per risparmiare batteria e si sveglia periodicamente in base al wakeup_period configurato. Gli eventi di allarme fumo attivano un risveglio immediato e una notifica MQTT.

Il template crea un singolo dispositivo Allarme fumo (mappato su un Reed Contact) e due attributi di servizio Batteria a livello di modulo. Un watchdog di connettività monitora il conto alla rovescia del periodo di risveglio e genera avvisi o errori quando il dispositivo non ha comunicato per un periodo prolungato.

Configurazione

MQTT Client ID

Ogni Shelly Plus Smoke ha un MQTT Client ID univoco nel formato shellyplussmoke-<MAC12>, dove <MAC12> è l’indirizzo MAC completo a 12 caratteri in esadecimale maiuscolo (es. shellyplussmoke-AABBCCDDEEFF). Questo ID serve anche come prefisso predefinito dei topic MQTT.

Il Client ID si trova:

  • Sull’etichetta del dispositivo (indirizzo MAC)
  • Nell’interfaccia web Shelly: SettingsMQTTClient ID
  • Tramite API: GET http://<device-ip>/rpc/Mqtt.GetConfig → campo client_id
Configurazione del template

Dopo l’importazione del template in TapHome:

  1. Apri il modulo Shelly Plus Smoke
  2. Imposta l’MQTT Broker IP sull’indirizzo del broker MQTT
  3. Imposta la Port (predefinita 1883)
  4. Imposta il parametro di importazione MQTT ID sul Client ID del dispositivo (es. shellyplussmoke-AABBCCDDEEFF)

Il modulo si iscrive a <device-id>/# e lo script listener analizza gli eventi JSON-RPC NotifyFullStatus e NotifyStatus dal topic events/rpc.

MQTT è disabilitato per impostazione predefinita sullo Shelly Plus Smoke. Abilitalo nelle impostazioni del dispositivo: SettingsMQTTEnable. Assicurati che rpc_ntf (notifiche RPC) sia impostato su true (predefinito). Il template si basa sulle notifiche events/rpc, non sui singoli topic di stato.

Comportamento di sonno e segnalazione

Lo Shelly Plus Smoke opera in modalità sonno profondo per massimizzare la durata della batteria:

  • Risveglio periodico — il dispositivo si sveglia a intervalli definiti da sys.wakeup_period e pubblica un evento NotifyFullStatus contenente lo stato della batteria, lo stato dell’allarme fumo e il periodo di risveglio corrente
  • Evento allarme — un evento di rilevamento fumo attiva un risveglio immediato e una notifica NotifyStatus con lo stato dell’allarme
  • Tra i cicli di risveglio — il dispositivo non è raggiungibile via HTTP e MQTT

Il dispositivo è alimentato da una singola batteria CR123A con una durata prevista fino a 5 anni. Non utilizzare batterie ricaricabili — il produttore avverte esplicitamente contro questo.

Il dispositivo è alimentato a batteria e non è permanentemente connesso al broker MQTT. Tra i cicli di risveglio, nessuna comunicazione è possibile. Se la posizione del sensore ha un segnale Wi-Fi debole, frequenti tentativi di riconnessione al risveglio possono ridurre significativamente la durata della batteria.

Capacità del dispositivo

Allarme fumo

Il template mappa lo stato dell’allarme fumo su un dispositivo Reed Contact (DeviceType 1030). Lo script listener analizza gli eventi NotifyStatus sul topic events/rpc e legge params['smoke:0'].alarm:

  • ON (allarme attivo) — fumo rilevato, il cicalino integrato del dispositivo suona a >85 dB
  • OFF (allarme cancellato) — nessun fumo, funzionamento normale

Lo stato dell’allarme è in sola lettura e si aggiorna immediatamente al rilevamento del fumo. Il dispositivo attiva una notifica MQTT immediata per gli eventi di allarme indipendentemente dalla programmazione del sonno.

Monitoraggio batteria

Il modulo espone due attributi di servizio Batteria che leggono dagli eventi NotifyFullStatus:

  • Batteria [%] — percentuale di carica dalla params['devicepower:0'].battery.percent. Avviso di batteria scarica sotto il 30%
  • Batteria [V] — tensione batteria in Volt da params['devicepower:0'].battery.V. Tensione nominale 3V per batteria CR123A

Entrambi i valori restituiscono NaN prima della ricezione della prima misurazione (ovvero quando il valore memorizzato è ancora 0). I dati della batteria si aggiornano ad ogni risveglio periodico.

Watchdog di connettività

Il template monitora la connettività del dispositivo tramite un meccanismo basato su conto alla rovescia. Ad ogni evento NotifyFullStatus, lo script listener memorizza il valore sys.wakeup_period nella variabile personalizzata wakeup_period. Lo script di lettura decrementa questo contatore di 60 ad ogni ciclo di polling (intervallo di 60 secondi):

  • Contatore raggiunge 0 — il dispositivo non si è svegliato come previsto. Il contatore viene impostato a -1 e viene generato un WARNING: “Update not received”
  • Contatore raggiunge -86400 — il dispositivo è silenzioso da 48 ore. Viene generato un ERROR: “Update not received in last 48h”

Quando il dispositivo si sveglia e invia un nuovo NotifyFullStatus, il contatore viene ripristinato al valore wakeup_period aggiornato, cancellando tutti gli avvisi.

Capacità aggiuntive

Lo Shelly Plus Smoke supporta anche una funzione di silenziamento (Smoke.Mute metodo RPC) per sopprimere il suono dell’allarme, eventi di test dell’allarme fumo attivati dal pulsante fisico e diagnostica della potenza del segnale WiFi (RSSI). Il dispositivo pubblica topic di stato individuali dei componenti quando status_ntf è abilitato. Queste capacità possono essere aggiunte in un futuro aggiornamento del template.

Risoluzione dei problemi

L’allarme fumo non segnala eventi
  1. Verifica che lo Shelly Plus Smoke sia connesso al Wi-Fi e che MQTT sia abilitato nelle impostazioni del dispositivo (SettingsMQTTEnable)
  2. Controlla che rpc_ntf sia impostato su true (predefinito) — il template richiede notifiche RPC su events/rpc
  3. Conferma che il parametro di importazione MQTT ID corrisponda esattamente al Client ID del dispositivo (es. shellyplussmoke-AABBCCDDEEFF)
  4. Usa un client MQTT (es. MQTT Explorer) per iscriverti a <device-id>/# e verifica che il dispositivo pubblichi NotifyFullStatus al risveglio
  5. Controlla la batteria del dispositivo — una batteria CR123A scarica impedisce al dispositivo di connettersi al Wi-Fi
Il watchdog di connettività mostra falsi avvisi
  1. Il watchdog confronta il conto alla rovescia con il periodo di risveglio previsto. Se l’orologio del TapHome Core è significativamente sfasato, possono apparire falsi avvisi
  2. Con alimentazione a batteria, il dispositivo si sveglia solo all’intervallo wakeup_period configurato — intervalli tra le segnalazioni sono previsti
  3. Se il sensore si trova in una posizione con Wi-Fi intermittente, potrebbe non riuscire a connettersi in alcuni cicli. Verifica la potenza del segnale Wi-Fi
  4. Dopo la sostituzione della batteria, il dispositivo potrebbe necessitare di un ciclo di risveglio completo prima che il contatore del watchdog si inizializzi correttamente
Il dispositivo appare come Reed Contact invece di allarme fumo

Il template TapHome utilizza il tipo dispositivo PacketParserReedContact (DeviceType 1030) per rappresentare l’allarme fumo. Questa è la mappatura corretta — lo stato ON significa “Allarme emergenza” (fumo rilevato) e lo stato OFF significa “OK” (nessun fumo). Il nome del dispositivo in TapHome è “Shelly Plus Smoke” per indicare chiaramente la sua funzione.

Come installare in TapHome

Prerequisiti

  • Dispositivo Shelly connesso al Wi-Fi (vedi la guida alla connessione HTTP se non ancora fatto)
  • Broker MQTT attivo sulla rete locale (es. Mosquitto, Home Assistant o il broker integrato di TapHome)
  • TapHome CCU sulla stessa rete del broker

Sui dispositivi Gen1, l’attivazione di MQTT disabilita Shelly Cloud. Entrambi non possono funzionare contemporaneamente. Sui dispositivi Gen2/Plus questa limitazione non si applica.

Passaggio 1 — Abilitare MQTT sul dispositivo Shelly

Dispositivi Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Apri l’interfaccia web Shelly: http://<device-ip>/
  2. Vai su Internet & SecurityAdvanced — MQTT
  3. Abilita MQTT
  4. Imposta MQTT Server: <broker-ip>:<port> (es. 192.168.1.10:1883)
  5. Opzionalmente imposta MQTT User e MQTT Password se il broker richiede l’autenticazione
  6. Clicca su Save — il dispositivo si riavvierà e si connetterà al broker

Dispositivi Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Apri l’interfaccia web Shelly: http://<device-ip>/
  2. Vai su SettingsMQTT
  3. Abilita MQTT
  4. Imposta Server: <broker-ip>:<port> (es. 192.168.1.10:1883)
  5. Il Client ID è precompilato con l’ID del dispositivo (es. shellyplus1pm-AABBCCDDEE) — lascialo così a meno che tu non abbia un motivo specifico per cambiarlo
  6. Clicca su Save e riavvia il dispositivo

Per verificare che MQTT funzioni, usa un client MQTT (es. MQTT Explorer) e sottoscrivi shellies/# (Gen1) o <device-id>/# (Gen2). Dovresti vedere i messaggi di stato dal dispositivo.

Passaggio 2 — Trovare il Device ID / MQTT Client ID

Alcuni template richiedono un parametro Device ID o MQTT Client ID. Questo è l’identificatore univoco utilizzato nei topic MQTT.

  • Gen1: si trova sull’etichetta come indirizzo MAC (es. AABBCCDDEE). Device ID = shelly<model>-<mac>, es. shelly1pm-AABBCCDDEE
  • Gen2/Plus: si trova nell’interfaccia web Shelly sotto SettingsDevice InfoDevice ID, oppure sull’etichetta del dispositivo

Passaggio 3 — Configurazione in TapHome

  1. In TapHome, aggiungi un nuovo modulo Packet Parser (MQTT)
  2. IP Address: inserisci l’IP del broker MQTT (es. 192.168.1.10)
  3. Port: 1883 (predefinito; usa 8883 per TLS)
  4. Device ID / MQTT Client ID: inserisci il valore dal passaggio 2 (se richiesto dal template)
  5. Importa il template — TapHome si sottoscriverà automaticamente ai topic del dispositivo

Dispositivi disponibili

Shelly Plus Smoke Modulo
Variabili personalizzate
deviceid (string)ID dispositivo MQTT usato come prefisso topic — formato: shellyplussmoke-{MACADDRESS} (nell'interfaccia web Shelly → Settings → MQTT → Client ID)
Allarme fumo Contatto reed Solo lettura

Stato allarme fumo fotoelettrico — ON = Allarme emergenza (fumo rilevato), OFF = OK (nessun fumo). L'allarme attiva notifica MQTT immediata con cicalino >85 dB.

boolean JSON-RPC (NotifyStatus → params.smoke:0.alarm)
Attributi di servizio
Batteria [%]Percentuale di carica della batteria — avviso batteria scarica sotto il 30%. Batteria CR123A, durata fino a 5 anni.
Batteria [V]Tensione batteria in Volt — nominale 3V per batteria CR123A

Allarme fumo

Lettura (modulo)
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
Attributi di servizio
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
Connessione: Packet Parser → MQTT
Possibili miglioramenti (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.

Fonti