TapHome

Tuya TS0201 Temperature & Humidity Sensor

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 06. 2026
Tuya TS0201 Temperature & Humidity Sensor

Tuya TS0201 to tani czujnik Zigbee temperatury i wilgotności zasilany z baterii, z małym wyświetlaczem LCD. Ten sam sprzęt jest również sprzedawany pod marką BlitzWolf BW-IS4 (white label). Urządzenie jest popularne jako tani czujnik klimatu pomieszczenia w kategorii cenowej wstępnej.

TapHome komunikuje się z TS0201 pośrednio — czujnik paruje się z koordynatorem Zigbee (np. Sonoff ZBDongle-P/E, stick oparty na CC2652, CC2531), który jest zarządzany przez bramkę Zigbee2MQTT. Zigbee2MQTT tłumaczy wiadomości Zigbee na payloady JSON na topikach MQTT. TapHome subskrybuje te topiki przez moduł PacketParser MQTT i mapuje wartości na usługi temperatury/wilgotności z atrybutami baterii i jakości połączenia.

Wymagania

Aby używać TS0201 z TapHome, wymagane są następujące komponenty:

  • Koordynator Zigbee — USB stick oparty na CC2652P/CC2652R lub CC2531, na przykład Sonoff ZBDongle-P lub Sonoff ZBDongle-E
  • Bramka Zigbee2MQTT — działająca na dedykowanym hoście (Raspberry Pi, NUC, NAS) lub jako kontener obok brokera MQTT
  • Broker MQTT — zalecana jest Mosquitto; musi być osiągalna zarówno z hosta Zigbee2MQTT, jak i z TapHome CCU
  • TapHome CCU z obsługą PacketParser (model PacketParserCCU)

Sam TS0201 nie łączy się z Wi-Fi ani Ethernet — cała komunikacja sieciowa IP odbywa się między brokerem MQTT a TapHome CCU.

Parowanie

Przed importem szablonu TapHome należy sparować TS0201 z koordynatorem Zigbee2MQTT:

  1. Otwórz interfejs webowy Zigbee2MQTT i włącz tryb parowania (Permit join)
  2. Na TS0201 przytrzymaj przycisk reset przez około pięć sekund, aż wskaźnik sieci w górnej części wyświetlacza zacznie migać
  3. Urządzenie automatycznie dołącza do sieci Zigbee i pojawia się na liście urządzeń Zigbee2MQTT z adresem IEEE (np. 0xa4c1388f85d9eca2)
  4. Opcjonalnie zmień nazwę urządzenia i przypisz czytelny friendly name (np. sypialnia_klimat) w interfejsie webowym Zigbee2MQTT

Procent baterii po sparowaniu może pojawić się nawet po 24 godzinach — czujnik raportuje wartość baterii tylko okresowo.

Konfiguracja

Parametry importu

Podczas importu szablonu w TapHome podaj adres brokera MQTT:

ParametrOpisWartość domyślna
Mqtt Broker ipAddressAdres IP lub hostname brokera MQTT192.168.0.1
Mqtt Broker portPort TCP brokera MQTT1883
Zmienna modułu

Po imporcie szablonu ustaw zmienną niestandardową TS0201, która identyfikuje urządzenie na brokerze MQTT:

ZmiennaOpisJak uzyskaćPrzykład
TS0201Friendly name Zigbee2MQTT lub adres IEEE czujnikaZigbee2MQTT web UI → Devices → znajdź TS0201 → skopiuj Friendly name lub adres IEEE0xa4c1388f85d9eca2

Zmienna jest używana jako sufiks topiku MQTT — skrypt listener subskrybuje zigbee2mqtt/{TS0201} i parsuje payload stanu JSON.

Użycie friendly name (np. sypialnia_klimat) zamiast adresu IEEE sprawia, że konfiguracja TapHome jest bardziej czytelna. Friendly name można zmienić w interfejsie webowym Zigbee2MQTT w ustawieniach urządzenia.

Możliwości urządzenia

Szablon mapuje TS0201 jako urządzenie typu Temperature Sensor w TapHome i oprócz temperatury udostępnia również wilgotność wraz z atrybutami baterii i sygnału.

Temperatura i wilgotność

Temperatura (°C) i wilgotność względna (%) są parsowane z topiku stanu JSON zigbee2mqtt/{TS0201}. Czujnik raportuje nowe wartości za każdym razem, gdy zmienia się mierzona wielkość, lub zgodnie z okresowym harmonogramem zarządzanym przez bramkę Zigbee2MQTT.

Przykładowy payload publikowany przez Zigbee2MQTT:

1
2
3
4
5
6
7
{
  "battery": 95,
  "humidity": 54.2,
  "linkquality": 132,
  "temperature": 21.7,
  "voltage": 3000
}
Monitorowanie baterii i sygnału

Urządzenie oprócz głównych wartości temperatury i wilgotności udostępnia trzy atrybuty usług:

  • Battery — pozostały procent baterii (0–100 %) z payloadu stanu JSON. Pierwsza wartość może pojawić się nawet 24 godziny po sparowaniu.
  • Battery Voltage — surowe napięcie baterii w miliwoltach z payloadu stanu JSON.
  • LinkQuality — wskaźnik jakości sygnału Zigbee (LQI) z payloadu stanu JSON, w zakresie od 0 (najgorszy) do 255 (najlepszy).

Wszystkie atrybuty wyświetlają "-" dopóki nie dotrze pierwsza wiadomość z urządzenia.

Znane problemy

Wartość wilgotności dzielona przez 100

Obecny skrypt listener w szablonie dzieli payload wilgotności przez 100 (Hu := payloadHum/100). Zigbee2MQTT publikuje jednak wilgotność bezpośrednio jako procent (np. 54.2 oznacza 54,2 %), więc zastosowanie /100 daje 0.542 % zamiast oczekiwanych 54.2 %.

Sprawdź raportowaną wilgotność na żywym sprzęcie. Jeśli wartość jest wyraźnie przesunięta o dwa miejsca dziesiętne, dostosuj skrypt listener na Hu := payloadHum; (bez dzielenia /100).

Nie stosuj aktualizacji firmware OTA

Najnowiej opublikowany obraz firmware TS0201 unieruchamia urządzenie i czyni je całkowicie nieużywalnym. Zigbee2MQTT udostępnia aktualizacje OTA dla tego urządzenia, ale nie mogą być stosowane, dopóki upstream nie opublikuje bezpiecznego obrazu. Szczegóły w Zigbee2MQTT GitHub issue #25207.

NIE uruchamiaj aktualizacji OTA dla TS0201 z interfejsu webowego Zigbee2MQTT. Obecny obraz jest znany z unieruchamiania czujnika.

Rozwiązywanie problemów

Brak otrzymywanych danych
  1. Sprawdź, czy TS0201 pojawia się na liście urządzeń Zigbee2MQTT z niedawnym znacznikiem czasu “Last seen”
  2. Sprawdź, czy zmienna niestandardowa TS0201 w TapHome dokładnie pasuje do friendly name lub adresu IEEE urządzenia — dopasowanie rozróżnia wielkość liter
  3. Użyj klienta MQTT (np. MQTT Explorer), aby zasubskrybować zigbee2mqtt/# i potwierdzić, że payloady JSON przychodzą na zigbee2mqtt/{friendly_name}
  4. Potwierdź, że IP i port brokera MQTT w parametrach importu TapHome odpowiadają brokerowi osiągalnemu z CCU
Urządzenie pokazuje się jako offline w Zigbee2MQTT
  1. TS0201 to urządzenie końcowe zasilane bateryjnie — śpi między raportami, aby oszczędzać energię. “Offline” może po prostu oznaczać, że urządzenie nie transmitowało ostatnio; poczekaj na następny zaplanowany raport lub krótko naciśnij przycisk reset, aby wymusić zameldowanie.
  2. Jeśli urządzenie nigdy nie wraca online, łącze Zigbee może być zerwane z powodu odległości od koordynatora. Przenieś czujnik bliżej lub dodaj router Zigbee (urządzenie Zigbee zasilane z sieci) w celu rozszerzenia mesh.
  3. Sprawdź atrybut LinkQuality — wartości poniżej ~30 lqi wskazują na słaby sygnał.
Nieaktualne wartości baterii lub jakości połączenia
  1. Bateria i napięcie są aktualizowane tylko wtedy, gdy czujnik się budzi i raportuje — może to być raz na kilka godzin
  2. Jeśli wartości pokazują "-", jeszcze nie otrzymano żadnej wiadomości MQTT; poczekaj na następny raport lub sparuj urządzenie ponownie
  3. Po ponownym sparowaniu bateria może pozostać "-" nawet przez 24 godziny, zanim zostanie opublikowana pierwsza wartość

Dostępne urządzenia

Tuya TS0201 Moduł
Zmienne niestandardowe
TS0201 (string) = 0xa4c1388f85d9eca2Friendly name Zigbee2MQTT lub adres IEEE czujnika TS0201 — używany jako sufiks topiku MQTT (zigbee2mqtt/{friendly_name})
Open Zigbee2MQTT web UI → Devices → find the TS0201 → copy the Friendly name (or use the IEEE address, e.g. 0xa4c1388f85d9eca2)
Czujnik temperatury i wilgotności Czujnik temperatury Tylko do odczytu

Temperatura (°C) i wilgotność względna (%) parsowane z payloadu stanu JSON Zigbee2MQTT

JSON Jednostka: °C / % json_path
Atrybuty serwisowe
BateriaPozostały procent baterii (0–100 %); pierwsza wartość może pojawić się nawet 24 godziny po sparowaniu
Napięcie bateriiSurowe napięcie baterii w miliwoltach (mV) parsowane z payloadu stanu JSON
LinkQualityWskaźnik jakości sygnału Zigbee (LQI) — 0 (najgorszy) do 255 (najlepszy)

Czujnik temperatury i wilgotności

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
#
# 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
#
# 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
if RECEIVEDMSG.TOPIC = "zigbee2mqtt/"+ TS0201 
   VAR payloadTemp := PARSEJSON(RECEIVEDMSG.PAYLOAD, "temperature");
   Te := payloadTemp;
   VAR payloadHum := PARSEJSON(RECEIVEDMSG.PAYLOAD, "humidity");
   Hu := payloadHum/100;
   battery := PARSEJSON(RECEIVEDMSG.PAYLOAD,"battery", true);
   voltage := PARSEJSON(RECEIVEDMSG.PAYLOAD,"voltage", true);
   link := PARSEJSON(RECEIVEDMSG.PAYLOAD,"linkquality", true);
end
Atrybuty serwisowe
Battery
IF(ISNAN(battery),"-",battery+"%");
Battery Voltage
IF(ISNAN(voltage),"-",voltage+"mV");
LinkQuality
IF(ISNAN(link),"-",link+"lqi");
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (5)
  • Temperature calibration (absolute offset) — Configurable via Zigbee2MQTT devices.yaml or frontend UI — not exposed via TapHome template. Applied at Z2M layer.
  • Temperature precision (decimal digits 0-3) — Configured at the Z2M layer, not in TapHome template.
  • Humidity calibration (absolute offset) — Configured at the Z2M layer, not in TapHome template.
  • Humidity precision (decimal digits 0-3) — Configured at the Z2M layer, not in TapHome template.
  • Availability status — Online/offline availability topic — could detect unreachable devices. Not subscribed by the current template.

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Zweryfikowane przez TapHome

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu