TapHome

Shelly H&T

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

Shelly H&T to bateryjny (CR123A) czujnik temperatury i wilgotności Wi-Fi z linii produktów Shelly Gen1. TapHome komunikuje się z urządzeniem przez MQTT — zalecany protokół dla bateryjnych czujników Shelly, ponieważ urządzenie śpi między pomiarami i wysyła dane tylko po przebudzeniu.

Szablon tworzy jedno urządzenie Czujnik temperatury z atrybutem serwisowym Wilgotność, śledzące zarówno temperaturę otoczenia, jak i wilgotność względną z jednej jednostki Shelly H&T.

Konfiguracja

Device ID

Shelly H&T używa MQTT Device ID w formacie shellyht-<MAC6>, gdzie <MAC6> to ostatnie 6 znaków adresu MAC w małych literach szesnastkowych (np. shellyht-112233).

Device ID można znaleźć:

  • Na etykiecie urządzenia (adres MAC)
  • W interfejsie webowym Shelly: SettingsDevice Info
  • Przez API: GET http://<device-ip>/settings → pole mqtt.id
Konfiguracja szablonu

Po zaimportowaniu szablonu w TapHome:

  1. Otwórz moduł Shelly H&T MQTT
  2. Ustaw MQTT Broker IP i Port (domyślnie 1883)
  3. Ustaw zmienną deviceId na Device ID Twojego Shelly H&T (np. 112233 — ostatnie 6 znaków hex adresu MAC)

Moduł subskrybuje shellies/#, a skrypt listener filtruje wiadomości według skonfigurowanego Device ID.

Na urządzeniach Shelly Gen1 włączenie MQTT wyłącza Shelly Cloud — oba nie mogą działać jednocześnie. Włącz MQTT w interfejsie webowym Shelly w sekcji Internet & SecurityAdvanced - Developer Settings.

Domyślny okres uśpienia to 60 sekund. Dla częstszych aktualizacji dostępny jest opcjonalny adapter USB — przy zasilaniu zewnętrznym tryb uśpienia jest wyłączony, a czujnik mierzy ciągle.

Możliwości urządzenia

Monitorowanie temperatury i wilgotności

Szablon udostępnia jedno urządzenie Czujnik temperatury, które odczytuje temperaturę otoczenia z topicu MQTT shellies/shellyht-{deviceId}/sensor/temperature. Wartości są publikowane jako liczba zmiennoprzecinkowa w stopniach Celsjusza.

Atrybut serwisowy Wilgotność odczytuje wilgotność względną z shellies/shellyht-{deviceId}/sensor/humidity. Payload MQTT jest publikowany w zakresie 0–100%, ale szablon konwertuje go wewnętrznie na zakres 0–1 (np. wartość MQTT 45.2 jest przechowywana w TapHome jako 0.452).

Oba odczyty aktualizują się przy każdym przebudzeniu czujnika z trybu uśpienia — domyślnie co 60 sekund lub ciągle przy zasilaniu USB.

Dodatkowe możliwości

Shelly H&T publikuje również poziom baterii (0–100%, CR123A), status online/offline przez MQTT Last Will and Testament oraz komunikat z informacjami o urządzeniu zawierający model, MAC, IP i wersję firmware (firmware >=1.6.0). Te możliwości mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Czujnik nie wysyła danych
  1. Sprawdź, czy Shelly H&T jest podłączony do Wi-Fi i MQTT jest włączony w ustawieniach urządzenia (Internet & SecurityAdvanced - Developer Settings)
  2. Sprawdź, czy adres i port brokera MQTT są poprawne zarówno w interfejsie webowym Shelly, jak i w ustawieniach modułu TapHome
  3. Potwierdź, że zmienna deviceId dokładnie odpowiada Device ID (ostatnie 6 znaków hex MAC, np. 112233)
  4. Użyj klienta MQTT (np. MQTT Explorer), aby zasubskrybować shellies/shellyht-# i sprawdzić, czy czujnik publikuje wiadomości po przebudzeniu
Wartość wilgotności wydaje się nieprawidłowa

Szablon dzieli wartość wilgotności z MQTT przez 100 — wilgotność 45,2% jest przechowywana w TapHome jako 0,452. To oczekiwane zachowanie, ponieważ TapHome używa zakresu 0–1 dla wartości wilgotności. Interfejs TapHome wyświetla wartość poprawnie jako procent.

Bateria szybko się rozładowuje
  1. Shelly H&T jest zaprojektowany na żywotność baterii do 18 miesięcy przy domyślnym 60-sekundowym okresie uśpienia
  2. Częste ponowne łączenie z Wi-Fi (słaby sygnał, zmiana kanałów) znacząco zwiększa zużycie energii
  3. Zapewnij silny sygnał Wi-Fi w lokalizacji czujnika — urządzenie ma zasięg około 30 m wewnątrz budynku

Urządzenia Shelly Gen1 nie obsługują MQTT przez TLS. Komunikacja między czujnikiem a brokerem MQTT nie jest szyfrowana (plain MQTT, port 1883). Upewnij się, że broker MQTT znajduje się w zaufanej sieci lokalnej.

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 H&T MQTT Moduł
Zmienne niestandardowe
deviceId (string)MQTT Device ID urządzenia Shelly H&T — ostatnie 6 znaków hex adresu MAC (np. 112233)
Czujnik temperatury Czujnik temperatury Tylko do odczytu

Temperatura otoczenia i wilgotność — odczyt °C z MQTT, wilgotność konwertowana z 0–100% na zakres 0–1

float Jednostka: °C

Czujnik temperatury

Odczyt wilgotności
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
Hu := listenHum;
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Odczyt temperatury
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
te := listenTemp;
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Nasłuchiwanie
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellyht-"+ deviceId +"/sensor/temperature")
 listenTemp := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
IF(RECEIVEDMSG.TOPIC = "shellies/shellyht-"+ deviceId +"/sensor/humidity")
 listenHum := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/100;
END
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (3)
  • Battery Level — Battery percentage (0–100%, CR123A). Available via MQTT but not parsed in template listener script.
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline sensor.
  • Device Announcement — JSON payload with device model, MAC, IP, firmware version. Published on connect (FW ≥1.6.0).

Źródła