TapHome

Shelly Plus Smoke

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 03. 2026
Shelly Plus Smoke

Shelly Plus Smoke to bateryjny (CR123A) fotoelektryczny alarm dymu Wi-Fi certyfikowany według DIN EN 14604. TapHome komunikuje się z urządzeniem przez MQTT za pomocą powiadomień RPC Gen2+ na topicu events/rpc. Urządzenie większość czasu spędza w głębokim uśpieniu w celu oszczędzania baterii i okresowo budzi się zgodnie z skonfigurowanym wakeup_period. Zdarzenia alarmu dymu wyzwalają natychmiastowe wybudzenie i powiadomienie MQTT.

Szablon tworzy jedno urządzenie Alarm dymu (zmapowane na Reed Contact) i dwa atrybuty serwisowe Bateria na poziomie modułu. Watchdog łączności monitoruje odliczanie okresu wybudzania i generuje ostrzeżenia lub błędy, gdy urządzenie nie raportowało przez dłuższy okres.

Konfiguracja

MQTT Client ID

Każdy Shelly Plus Smoke ma unikalny MQTT Client ID w formacie shellyplussmoke-<MAC12>, gdzie <MAC12> to pełny 12-znakowy adres MAC w szesnastkowym zapisie wielkimi literami (np. shellyplussmoke-AABBCCDDEEFF). Ten identyfikator służy również jako domyślny prefiks topiców MQTT.

Client ID można znaleźć:

  • Na etykiecie urządzenia (adres MAC)
  • W interfejsie webowym Shelly: SettingsMQTTClient ID
  • Przez API: GET http://<device-ip>/rpc/Mqtt.GetConfig → pole client_id
Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome:

  1. Otwórz moduł Shelly Plus Smoke
  2. Ustaw MQTT Broker IP na adres brokera MQTT
  3. Ustaw Port (domyślnie 1883)
  4. Ustaw parametr importu MQTT ID na Client ID urządzenia (np. shellyplussmoke-AABBCCDDEEFF)

Moduł subskrybuje <device-id>/#, a skrypt nasłuchujący parsuje zdarzenia JSON-RPC NotifyFullStatus i NotifyStatus z topicu events/rpc.

MQTT jest domyślnie wyłączone na Shelly Plus Smoke. Włącz go w ustawieniach urządzenia: SettingsMQTTEnable. Upewnij się, że rpc_ntf (powiadomienia RPC) jest ustawione na true (domyślnie). Szablon opiera się na powiadomieniach events/rpc, a nie na indywidualnych topicach statusu.

Zachowanie uśpienia i raportowania

Shelly Plus Smoke działa w trybie głębokiego uśpienia w celu maksymalizacji żywotności baterii:

  • Okresowe wybudzenie — urządzenie budzi się w interwałach zdefiniowanych przez sys.wakeup_period i publikuje zdarzenie NotifyFullStatus zawierające status baterii, stan alarmu dymu i aktualny okres wybudzania
  • Zdarzenie alarmowe — wykrycie dymu wyzwala natychmiastowe wybudzenie i powiadomienie NotifyStatus ze stanem alarmu
  • Między cyklami wybudzania — urządzenie jest nieosiągalne przez HTTP i MQTT

Urządzenie jest zasilane pojedynczą baterią CR123A z oczekiwaną żywotnością do 5 lat. Nie używaj akumulatorów — producent wyraźnie przed tym ostrzega.

Urządzenie jest zasilane bateryjnie i nie jest stale podłączone do brokera MQTT. Między cyklami wybudzania żadna komunikacja nie jest możliwa. Jeśli lokalizacja czujnika ma słaby sygnał Wi-Fi, częste próby ponownego połączenia przy wybudzeniu mogą znacząco skrócić żywotność baterii.

Możliwości urządzenia

Alarm dymu

Szablon mapuje stan alarmu dymu na urządzenie Reed Contact (DeviceType 1030). Skrypt nasłuchujący parsuje zdarzenia NotifyStatus na topicu events/rpc i odczytuje params['smoke:0'].alarm:

  • ON (alarm aktywny) — wykryto dym, wbudowany brzęczyk urządzenia brzmi na >85 dB
  • OFF (alarm wyczyszczony) — brak dymu, normalna praca

Stan alarmu jest tylko do odczytu i aktualizuje się natychmiast po wykryciu dymu. Urządzenie wyzwala natychmiastowe powiadomienie MQTT przy zdarzeniach alarmowych niezależnie od harmonogramu uśpienia.

Monitorowanie baterii

Moduł udostępnia dwa atrybuty serwisowe Bateria, które odczytują ze zdarzeń NotifyFullStatus:

  • Bateria [%] — procentowy poziom naładowania z params['devicepower:0'].battery.percent. Ostrzeżenie o niskim poziomie baterii poniżej 30%
  • Bateria [V] — napięcie baterii w woltach z params['devicepower:0'].battery.V. Napięcie nominalne 3V dla baterii CR123A

Obie wartości zwracają NaN przed odebraniem pierwszego pomiaru (tj. gdy zapisana wartość wynosi nadal 0). Dane baterii aktualizują się przy każdym okresowym wybudzeniu.

Watchdog łączności

Szablon monitoruje łączność urządzenia za pomocą mechanizmu opartego na odliczaniu. Przy każdym zdarzeniu NotifyFullStatus skrypt nasłuchujący zapisuje wartość sys.wakeup_period w zmiennej niestandardowej wakeup_period. Skrypt odczytu następnie zmniejsza ten licznik o 60 w każdym cyklu pollingu (interwał 60-sekundowy):

  • Licznik osiąga 0 — urządzenie nie wybudziło się zgodnie z oczekiwaniami. Licznik ustawiany jest na -1 i generowane jest WARNING: “Update not received”
  • Licznik osiąga -86400 — urządzenie milczy od 48 godzin. Generowane jest ERROR: “Update not received in last 48h”

Gdy urządzenie się wybudzi i wyśle nowy NotifyFullStatus, licznik resetuje się do świeżej wartości wakeup_period, kasując wszystkie ostrzeżenia.

Dodatkowe możliwości

Shelly Plus Smoke obsługuje również funkcję wyciszenia (Smoke.Mute metoda RPC) do tłumienia dźwięku alarmu, zdarzenia testowe alarmu dymu wyzwalane przyciskiem fizycznym i diagnostykę siły sygnału WiFi (RSSI). Urządzenie publikuje indywidualne topice statusu komponentów gdy status_ntf jest włączone. Możliwości te mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Alarm dymu nie raportuje zdarzeń
  1. Sprawdź, czy Shelly Plus Smoke jest podłączony do Wi-Fi i MQTT jest włączone w ustawieniach urządzenia (SettingsMQTTEnable)
  2. Upewnij się, że rpc_ntf jest ustawione na true (domyślnie) — szablon wymaga powiadomień RPC na events/rpc
  3. Potwierdź, że parametr importu MQTT ID dokładnie odpowiada Client ID urządzenia (np. shellyplussmoke-AABBCCDDEEFF)
  4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji <device-id>/# i sprawdź, czy urządzenie publikuje NotifyFullStatus po wybudzeniu
  5. Sprawdź baterię urządzenia — wyczerpana bateria CR123A uniemożliwia urządzeniu połączenie z Wi-Fi
Watchdog łączności pokazuje fałszywe ostrzeżenia
  1. Watchdog porównuje odliczanie z oczekiwanym okresem wybudzania. Jeśli zegar TapHome Core jest znacząco przesunięty, mogą pojawiać się fałszywe ostrzeżenia
  2. Na zasilaniu bateryjnym urządzenie budzi się tylko w skonfigurowanym interwale wakeup_period — przerwy między raportami są oczekiwane
  3. Jeśli czujnik znajduje się w miejscu z niestabilnym Wi-Fi, może nie udać się połączyć w niektórych cyklach. Sprawdź siłę sygnału Wi-Fi
  4. Po wymianie baterii urządzenie może potrzebować jednego pełnego cyklu wybudzania, zanim licznik watchdoga prawidłowo się zainicjalizuje
Urządzenie wyświetla się jako Reed Contact zamiast alarmu dymu

Szablon TapHome używa typu urządzenia PacketParserReedContact (DeviceType 1030) do reprezentacji alarmu dymu. To prawidłowe mapowanie — stan ON oznacza “Alarm awaryjny” (wykryto dym), a stan OFF oznacza “OK” (brak dymu). Nazwa urządzenia w TapHome to “Shelly Plus Smoke” dla jasnego wskazania jego funkcji.

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly połączone z Wi-Fi (jeśli jeszcze nie, zobacz przewodnik po połączeniu HTTP)
  • Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
  • TapHome CCU w tej samej sieci co broker

Na urządzeniach Gen1 włączenie MQTT wyłącza Shelly Cloud. Oba nie mogą działać jednocześnie. Na urządzeniach Gen2/Plus to ograniczenie nie obowiązuje.

Krok 1 — Włącz MQTT na urządzeniu Shelly

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

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do Internet & SecurityAdvanced — MQTT
  3. Włącz MQTT
  4. Ustaw MQTT Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Opcjonalnie ustaw MQTT User i MQTT Password, jeśli broker wymaga uwierzytelniania
  6. Kliknij Save — urządzenie zrestartuje się i połączy z brokerem

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

  1. Otwórz interfejs webowy Shelly: http://<device-ip>/
  2. Przejdź do SettingsMQTT
  3. Włącz MQTT
  4. Ustaw Server: <broker-ip>:<port> (np. 192.168.1.10:1883)
  5. Client ID jest wstępnie wypełnione identyfikatorem urządzenia (np. shellyplus1pm-AABBCCDDEE) — pozostaw bez zmian, chyba że masz konkretny powód do zmiany
  6. Kliknij Save i zrestartuj urządzenie

Aby sprawdzić, czy MQTT działa, użyj klienta MQTT (np. MQTT Explorer) i zasubskrybuj shellies/# (Gen1) lub <device-id>/# (Gen2). Powinieneś zobaczyć komunikaty o stanie z urządzenia.

Krok 2 — Znajdź Device ID / MQTT Client ID

Niektóre szablony wymagają parametru Device ID lub MQTT Client ID. Jest to unikalny identyfikator używany w topikach MQTT.

  • Gen1: znajduje się na etykiecie jako adres MAC (np. AABBCCDDEE). Device ID = shelly<model>-<mac>, np. shelly1pm-AABBCCDDEE
  • Gen2/Plus: znajduje się w interfejsie webowym Shelly w sekcji SettingsDevice InfoDevice ID lub na etykiecie urządzenia

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (MQTT)
  2. IP Address: wprowadź adres IP brokera MQTT (np. 192.168.1.10)
  3. Port: 1883 (domyślny; użyj 8883 dla TLS)
  4. Device ID / MQTT Client ID: wprowadź wartość z kroku 2 (jeśli wymagane przez szablon)
  5. Zaimportuj szablon — TapHome automatycznie zasubskrybuje topiki urządzenia

Dostępne urządzenia

Shelly Plus Smoke Moduł
Zmienne niestandardowe
deviceid (string)Identyfikator urządzenia MQTT używany jako prefiks topiców — format: shellyplussmoke-{MACADDRESS} (w interfejsie webowym Shelly → Settings → MQTT → Client ID)
Alarm dymu Kontakt reed Tylko do odczytu

Stan fotoelektrycznego alarmu dymu — ON = Alarm awaryjny (wykryto dym), OFF = OK (brak dymu). Alarm wyzwala natychmiastowe powiadomienie MQTT z brzęczykiem >85 dB.

boolean JSON-RPC (NotifyStatus → params.smoke:0.alarm)
Atrybuty serwisowe
Bateria [%]Procentowy poziom naładowania baterii — ostrzeżenie poniżej 30%. Bateria CR123A, żywotność do 5 lat.
Bateria [V]Napięcie baterii w woltach — nominalne 3V dla baterii CR123A

Alarm dymu

Odczyt (moduł)
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
Nasłuchiwanie
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
Atrybuty serwisowe
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
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (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.

Źródła