TapHome

Shelly Plus H&T

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 03. 2026
Shelly Plus H&T

Shelly Plus H&T (SNSN-0013A) to bateryjny (4x AA) czujnik temperatury i wilgotności Wi-Fi z wyświetlaczem e-paper. Jest to urządzenie Gen2 (seria Plus), obecnie wycofane z produkcji i zastąpione przez Shelly H&T Gen3, ale nadal szeroko stosowane. TapHome komunikuje się z urządzeniem przez MQTT za pomocą indywidualnych topiców /status/ dla każdego komponentu. Jest to standardowe podejście dla urządzeń Shelly Gen2 — skrypt nasłuchujący subskrybuje <device-id>/# i przetwarza przychodzące wiadomości statusu, gdy czujnik budzi się z głębokiego uśpienia i publikuje dane.

Szablon tworzy jedno urządzenie Czujnik temperatury i wilgotności z 9 atrybutami serwisowymi na poziomie urządzenia obejmującymi baterię, sieć i diagnostykę łączności. W przeciwieństwie do wariantu Gen3 (który używa skonsolidowanych powiadomień events/rpc), ten szablon Gen2 przetwarza indywidualne topice /status/temperature:0, /status/humidity:0, /status/devicepower:0 i inne topice specyficzne dla komponentów.

Konfiguracja

Device ID

Każdy Shelly Plus H&T ma unikalny Device ID w formacie shellyplusht-<MACADDRESS>, gdzie <MACADDRESS> to pełny 12-znakowy adres MAC w szesnastkowym zapisie wielkimi literami (np. shellyplusht-A8032AB12CD3). Ten identyfikator służy również jako prefiks topiców MQTT.

Device ID można znaleźć:

  • Na etykiecie urządzenia (adres MAC)
  • W interfejsie webowym Shelly: SettingsDevice InfoDevice 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 H&T MQTT
  2. Ustaw MQTT Broker IP na adres brokera MQTT
  3. Ustaw Port (domyślnie 1883)
  4. Ustaw parametr importu Device ID na Device ID urządzenia (np. shellyplusht-A8032AB12CD3)

Moduł subskrybuje <device-id>/#, a skrypt nasłuchujący parsuje indywidualne wiadomości JSON /status/ z topiców każdego komponentu.

Upewnij się, że MQTT jest włączone na Shelly Plus H&T i status_ntf (powiadomienia o statusie) jest ustawione na true. Szablon opiera się na indywidualnych topicach statusu (/status/temperature:0, /status/humidity:0 itd.), a nie na skonsolidowanym topicu events/rpc.

Pomiary i raportowanie

Shelly Plus H&T działa różnie w zależności od źródła zasilania:

  • Tryb bateryjny — wybudzenie co 1 minutę na pomiar. Raportuje przez MQTT, jeśli temperatura zmieni się o więcej niż 0,5 °C lub wilgotność o więcej niż 5%. Bezwarunkowy raport statusu jest wysyłany co 2 godziny, jeśli nie zostały wyzwolone raporty progowe. 5-minutowy okres ochronny zapobiega nadmiernym wybudzeniom.
  • Zasilanie USB — wybudzenie co 5 minut na pomiar, aktualizację wyświetlacza i bezwarunkowe raportowanie w każdym cyklu.

Wyświetlacz e-paper aktualizuje się przy zmianie temperatury o więcej niż 0,2 °C lub wilgotności o więcej niż 3%.

Urządzenie jest zasilane bateryjnie i większość czasu spędza w głębokim uśpieniu. TapHome nie może aktywnie odpytywać czujnika — opiera się na tym, że urządzenie samo wysyła status przez MQTT po wybudzeniu. Spodziewaj się przerw między odczytami, szczególnie w trybie bateryjnym. Zasilanie USB Type-C zapewnia częstsze aktualizacje, ale nie ładuje wewnętrznych baterii.

Możliwości urządzenia

Temperatura i wilgotność

Urządzenie czujnikowe odczytuje temperaturę i wilgotność z indywidualnych topiców statusu MQTT:

  • Temperatura — temperatura otoczenia w stopniach Celsjusza, odczytana z tC w topicu /status/temperature:0
  • Wilgotność — wilgotność względna w procentach, odczytana z rh w topicu /status/humidity:0 (skrypt readhumidity dzieli wartość przez 100 w celu konwersji na zakres 0–1 oczekiwany przez TapHome)

Obie wartości są tylko do odczytu i aktualizują się przy każdym wybudzeniu czujnika i publikacji danych.

Próg raportowania temperatury jest konfigurowalny na urządzeniu (domyślnie 0,5 °C, zakres 0,5–5,0 °C). Próg wilgotności domyślnie wynosi 5% (zakres 1–20%). Progi te można dostosować przez interfejs webowy Shelly lub API, aby zrównoważyć częstotliwość raportowania z żywotnością baterii.

Atrybuty serwisowe

Szablon udostępnia 9 atrybutów serwisowych na poziomie urządzenia obejmujących status baterii i diagnostykę urządzenia:

Monitorowanie baterii:

  • Battery — procentowy poziom naładowania baterii z battery.percent w /status/devicepower:0
  • Battery voltage — napięcie baterii w woltach z battery.V w /status/devicepower:0
  • External power — czy zewnętrzne zasilanie USB Type-C jest podłączone, z external.present w /status/devicepower:0

Diagnostyka sieciowa:

  • WiFi — SSID podłączonej sieci WiFi z /status/wifi
  • IP Address — adres IP urządzenia z /status/wifi
  • MAC Address — adres MAC urządzenia z /status/sys

Status łączności:

  • Cloud connected — status połączenia z Shelly Cloud z /status/cloud
  • MQTT connected — status połączenia z brokerem MQTT z /status/mqtt
  • BLE enabled — status Bluetooth Low Energy z /status/ble

Wszystkie atrybuty serwisowe wyświetlają "-", gdy nie odebrano jeszcze żadnych danych (stan początkowy po imporcie szablonu, przed pierwszym wybudzeniem czujnika).

Dodatkowe możliwości

Shelly Plus H&T publikuje również temperaturę w Fahrenheitach (pole tF w /status/temperature:0), siłę sygnału WiFi (RSSI w dBm) i obsługuje komponent HT_UI do konfiguracji jednostki temperatury na wyświetlaczu e-paper (°C/°F). Urządzenie udostępnia również status online/offline przez topic MQTT Last Will and Testament (LWT). Możliwości te mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Czujnik nie raportuje danych
  1. Sprawdź, czy Shelly Plus H&T jest podłączony do Wi-Fi i MQTT jest włączone w ustawieniach urządzenia (SettingsMQTTEnable)
  2. Upewnij się, że status_ntf jest ustawione na true — szablon wymaga indywidualnych powiadomień o statusie na topicach /status/
  3. Potwierdź, że parametr importu Device ID dokładnie odpowiada Device ID urządzenia (np. shellyplusht-A8032AB12CD3)
  4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji <device-id>/# i sprawdź, czy czujnik publikuje wiadomości statusu po wybudzeniu
  5. Sprawdź poziom baterii urządzenia — wyczerpane baterie uniemożliwiają czujnikowi połączenie z Wi-Fi
Odczyt wilgotności wydaje się nieprawidłowy
  1. Szablon TapHome dzieli surową wartość wilgotności przez 100 (np. rh: 55.3 staje się 0.553 w TapHome). To oczekiwane zachowanie — TapHome wewnętrznie używa zakresu 0–1
  2. Czujnik ma konfigurowalny offset wilgotności (Humidity.SetConfigoffset) — sprawdź, czy nie jest ustawiony na nieprawidłową wartość
  3. Zakres operacyjny wilgotności czujnika to 30–70% RH. Odczyty poza tym zakresem mogą być mniej dokładne
Atrybuty serwisowe pokazują “-”
  1. Atrybuty serwisowe wyświetlają "-", dopóki czujnik się nie wybudzi i nie opublikuje danych na odpowiednim topicu statusu
  2. Na zasilaniu bateryjnym urządzenie może potrzebować do 2 godzin na wysłanie pierwszego bezwarunkowego raportu — naciśnij przycisk reset (za tylną pokrywą), aby wywołać natychmiastowy pomiar i raportowanie
  3. Sprawdź, czy broker MQTT odbiera wiadomości na wszystkich oczekiwanych topicach (/status/sys, /status/wifi, /status/cloud, /status/mqtt, /status/ble)
Różnice w porównaniu z Shelly H&T Gen3

Shelly Plus H&T (Gen2) i Shelly H&T Gen3 mają podobne możliwości sensoryczne, ale różnią się w komunikacji MQTT:

  • Gen2 (Plus H&T) używa indywidualnych topiców /status/ na komponent — wymaga status_ntf: true
  • Gen3 (H&T Gen3) używa skonsolidowanego topicu events/rpc ze zdarzeniami JSON-RPC NotifyStatus — wymaga rpc_ntf: true
  • Szablon Gen3 zawiera również wykrywanie offline oparte na znaczniku czasu (>12 godzin ostrzeżenie, >24 godziny błąd), którego szablon Gen2 nie implementuje

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 H&T MQTT Moduł
Zmienne niestandardowe
deviceId (string)Identyfikator urządzenia MQTT używany jako prefiks topiców — format: shellyplusht-{MACADDRESS} (w interfejsie webowym Shelly → Settings → Device Info)
Open http://shellyIpAddress → Settings → Device info → copy Device ID (e.g. shellyplusht-A8032AB12CD3)
Czujnik temperatury i wilgotności Czujnik temperatury Tylko do odczytu

Temperatura otoczenia (°C) i wilgotność względna z indywidualnych topiców /status/ MQTT — wilgotność konwertowana na zakres 0–1 dla TapHome

json Jednostka: °C / %RH json_path
Atrybuty serwisowe
BateriaProcentowy poziom naładowania baterii — wyświetla '-' do pierwszego wybudzenia czujnika
Napięcie bateriiNapięcie baterii w woltach — przydatne do śledzenia degradacji baterii w czasie
Zasilanie zewnętrzneCzy zewnętrzne zasilanie USB Type-C jest podłączone (true/false)
WiFiSSID podłączonej sieci WiFi
Adres IP
Adres MAC
Połączony z chmurąStatus połączenia z Shelly Cloud (true/false)
MQTT połączonyStatus połączenia z brokerem MQTT (true/false)
BLE włączoneStatus Bluetooth Low Energy (true/false)

Czujnik temperatury i wilgotności

Odczyt wilgotności
Hu := listenHum / 100.0;
Nasłuchiwanie
IF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/temperature:0") >= 0)
    Te := PARSEJSON(RECEIVEDMSG.PAYLOAD,"tC", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/humidity:0") >= 0)
    listenHum := PARSEJSON(RECEIVEDMSG.PAYLOAD,"rh", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/devicepower:0") >= 0)
    batteryPerc := PARSEJSON(RECEIVEDMSG.PAYLOAD,"battery.percent", true);
    batteryV := PARSEJSON(RECEIVEDMSG.PAYLOAD,"battery.V", true);
    externalPower := PARSEJSON(RECEIVEDMSG.PAYLOAD,"external.present", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/sys") >= 0)
    macAddress := PARSEJSON(RECEIVEDMSG.PAYLOAD,"mac", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/wifi") >= 0)
    ipaddress := PARSEJSON(RECEIVEDMSG.PAYLOAD,"sta_ip", true);
    wifi := PARSEJSON(RECEIVEDMSG.PAYLOAD,"ssid", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/cloud") >= 0)
    cloudConnected := PARSEJSON(RECEIVEDMSG.PAYLOAD,"connected", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/mqtt") >= 0)
    mqttConnected := PARSEJSON(RECEIVEDMSG.PAYLOAD,"connected", true);
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, deviceid +"/status/ble") >= 0)
    BLEenabled := PARSEJSON(RECEIVEDMSG.PAYLOAD,"enable", true);
END
Atrybuty serwisowe
Battery
IF (ISNAN(batteryPerc), "-", batteryPerc + "%");
Battery voltage
IF (ISNAN(batteryV), "-", batteryV + "V");
External power
IF (LENGTH(externalPower) = 0, "-", externalPower);
WiFi
IF (LENGTH(wifi) = 0, "-", wifi);
IP Address
IF (LENGTH(ipaddress) = 0, "-", ipaddress);
MAC Address
IF (LENGTH(macAddress) = 0, "-", macAddress);
Cloud connected
IF (LENGTH(cloudConnected) = 0, "-", cloudConnected);
MQTT connected
IF (LENGTH(mqttConnected) = 0, "-", mqttConnected);
BLE enabled
IF (LENGTH(BLEenabled) = 0, "-", BLEenabled);
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (5)
  • RPC Event Notifications — Gen3 templates use consolidated events/rpc topic with NotifyFullStatus. This Gen2 template uses individual /status/ topics instead — functionally equivalent.
  • Connection Status (LWT) — Last Will and Testament topic — true on connect, false on disconnect. Not used by template.
  • Temperature in Fahrenheit — Temperature also available in Fahrenheit (tF field in /status/temperature:0). Template uses tC only.
  • E-Paper Display Configuration — Temperature unit (C/F) display setting — display-only configuration, not sensor data.
  • WiFi Signal Strength (RSSI) — WiFi signal strength in dBm. Template reads only SSID and IP, not RSSI.

Źródła