TapHome

Tuya TS0201 Temperature & Humidity Sensor

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 06. 2026
Tuya TS0201 Temperature & Humidity Sensor

Der Tuya TS0201 ist ein günstiger batteriebetriebener Zigbee-Temperatur- und Feuchtigkeitssensor mit kleinem LCD-Display. Die gleiche Hardware wird auch unter dem Label BlitzWolf BW-IS4 (White Label) verkauft. Das Gerät ist als günstiger Raumklimasensor im Einstiegspreissegment beliebt.

TapHome kommuniziert mit dem TS0201 indirekt — der Sensor wird mit einem Zigbee-Koordinator (z. B. Sonoff ZBDongle-P/E, CC2652-basierter Stick, CC2531) gekoppelt, der von einer Zigbee2MQTT-Bridge verwaltet wird. Zigbee2MQTT übersetzt Zigbee-Nachrichten in JSON-Payloads auf MQTT-Topics. TapHome abonniert diese Topics über ein PacketParser-MQTT-Modul und bildet die Werte auf Temperatur-/Feuchtigkeitsdienste mit Batterie- und Link-Quality-Attributen ab.

Voraussetzungen

Für den Einsatz des TS0201 mit TapHome werden folgende Komponenten benötigt:

  • Zigbee-Koordinator — USB-Stick basierend auf CC2652P/CC2652R oder CC2531, z. B. Sonoff ZBDongle-P oder Sonoff ZBDongle-E
  • Zigbee2MQTT-Bridge — läuft auf einem dedizierten Host (Raspberry Pi, NUC, NAS) oder als Container neben dem MQTT-Broker
  • MQTT-Broker — Mosquitto wird empfohlen; muss sowohl vom Zigbee2MQTT-Host als auch von der TapHome-CCU erreichbar sein
  • TapHome-CCU mit PacketParser-Unterstützung (Modell PacketParserCCU)

Der TS0201 selbst verbindet sich nicht mit WLAN oder Ethernet — die gesamte IP-Kommunikation läuft zwischen MQTT-Broker und TapHome-CCU.

Kopplung

Vor dem Import der TapHome-Vorlage muss der TS0201 mit dem Zigbee2MQTT-Koordinator gekoppelt werden:

  1. Öffnen Sie die Zigbee2MQTT-Weboberfläche und aktivieren Sie den Kopplungsmodus (Permit join)
  2. Halten Sie am TS0201 die Reset-Taste etwa fünf Sekunden lang gedrückt, bis die Netzwerkanzeige oben am Display zu blinken beginnt
  3. Das Gerät tritt automatisch dem Zigbee-Netzwerk bei und erscheint in der Zigbee2MQTT-Geräteliste mit einer IEEE-Adresse (z. B. 0xa4c1388f85d9eca2)
  4. Optional können Sie das Gerät umbenennen und einen lesbaren Friendly Name vergeben (z. B. schlafzimmer_klima) in der Zigbee2MQTT-Weboberfläche

Der Batterieprozentsatz kann nach der Kopplung bis zu 24 Stunden dauern, bis er erscheint — der Sensor meldet den Batteriewert nur periodisch.

Konfiguration

Import-Parameter

Geben Sie beim Import der Vorlage in TapHome die Adresse des MQTT-Brokers an:

ParameterBeschreibungStandardwert
Mqtt Broker ipAddressIP-Adresse oder Hostname des MQTT-Brokers192.168.0.1
Mqtt Broker portTCP-Port des MQTT-Brokers1883
Modul-Variable

Setzen Sie nach dem Import der Vorlage die benutzerdefinierte Variable TS0201, um das Gerät am MQTT-Broker zu identifizieren:

VariableBeschreibungWie ermittelnBeispiel
TS0201Zigbee2MQTT Friendly Name oder IEEE-Adresse des SensorsZigbee2MQTT Web-UI → Devices → TS0201 suchen → Friendly Name oder IEEE-Adresse kopieren0xa4c1388f85d9eca2

Die Variable wird als Suffix des MQTT-Topics verwendet — das Listener-Skript abonniert zigbee2mqtt/{TS0201} und parst das JSON-State-Payload.

Die Verwendung eines Friendly Name (z. B. schlafzimmer_klima) anstelle der IEEE-Adresse macht die TapHome-Konfiguration lesbarer. Der Friendly Name lässt sich in der Zigbee2MQTT-Weboberfläche in den Geräte-Einstellungen ändern.

Gerätefunktionen

Die Vorlage bildet den TS0201 in TapHome als Temperature-Sensor-Gerät ab und stellt neben der Temperatur auch Feuchtigkeit sowie Batterie- und Signalattribute bereit.

Temperatur und Feuchtigkeit

Temperatur (°C) und relative Feuchtigkeit (%) werden aus dem JSON-State-Topic zigbee2mqtt/{TS0201} geparst. Der Sensor meldet neue Werte bei jeder Änderung einer Messgröße oder periodisch nach dem Zeitplan der Zigbee2MQTT-Bridge.

Beispiel-Payload, das von Zigbee2MQTT veröffentlicht wird:

1
2
3
4
5
6
7
{
  "battery": 95,
  "humidity": 54.2,
  "linkquality": 132,
  "temperature": 21.7,
  "voltage": 3000
}
Batterie- und Signalüberwachung

Neben den primären Werten für Temperatur und Feuchtigkeit stellt das Gerät drei Service-Attribute bereit:

  • Battery — verbleibender Batterieprozentsatz (0–100 %) aus dem JSON-State-Payload. Der erste Wert kann bis zu 24 Stunden nach der Kopplung dauern.
  • Battery Voltage — rohe Batteriespannung in Millivolt aus dem JSON-State-Payload.
  • LinkQuality — Zigbee-Signalqualitätsindikator (LQI) aus dem JSON-State-Payload, im Bereich von 0 (schlechteste) bis 255 (beste).

Alle Attribute zeigen "-" an, bis die erste Nachricht vom Gerät empfangen wird.

Bekannte Probleme

Feuchtigkeitswert durch 100 geteilt

Das aktuelle Listener-Skript in der Vorlage teilt das Feuchtigkeits-Payload durch 100 (Hu := payloadHum/100). Zigbee2MQTT veröffentlicht die Feuchtigkeit jedoch direkt als Prozentsatz (z. B. bedeutet 54.2 54,2 %), sodass durch die Anwendung von /100 0.542 % statt der erwarteten 54.2 % entstehen.

Überprüfen Sie die gemeldete Feuchtigkeit auf der Live-Hardware. Wenn der Wert offensichtlich um zwei Dezimalstellen verschoben ist, passen Sie das Listener-Skript auf Hu := payloadHum; an (ohne die Division durch /100).

Keine OTA-Firmware-Updates anwenden

Das zuletzt veröffentlichte Firmware-Image des TS0201 macht das Gerät unbrauchbar. Zigbee2MQTT bietet OTA-Updates für dieses Gerät an, diese dürfen jedoch nicht angewendet werden, bis Upstream ein sicheres Image veröffentlicht. Details im Zigbee2MQTT GitHub Issue #25207.

Lösen Sie KEIN OTA-Update für den TS0201 aus der Zigbee2MQTT-Weboberfläche aus. Das aktuelle Image macht den Sensor bekanntermaßen unbrauchbar.

Fehlerbehebung

Keine Daten empfangen
  1. Prüfen Sie, dass der TS0201 in der Zigbee2MQTT-Geräteliste mit einem aktuellen “Last seen”-Zeitstempel erscheint
  2. Prüfen Sie, dass die benutzerdefinierte Variable TS0201 in TapHome exakt mit dem Friendly Name oder der IEEE-Adresse des Geräts übereinstimmt — die Übereinstimmung ist case-sensitiv
  3. Abonnieren Sie mit einem MQTT-Client (z. B. MQTT Explorer) zigbee2mqtt/# und bestätigen Sie, dass JSON-Payloads auf zigbee2mqtt/{friendly_name} eintreffen
  4. Prüfen Sie, dass IP und Port des MQTT-Brokers in den TapHome-Import-Parametern mit dem vom CCU erreichbaren Broker übereinstimmen
Gerät wird in Zigbee2MQTT als offline angezeigt
  1. Der TS0201 ist ein batteriebetriebenes End-Gerät — zwischen Reports schläft es, um Strom zu sparen. “Offline” kann einfach bedeuten, dass das Gerät zuletzt nicht gesendet hat; warten Sie auf den nächsten geplanten Report oder drücken Sie kurz die Reset-Taste, um eine Anmeldung zu erzwingen.
  2. Kommt das Gerät nie wieder online, kann die Zigbee-Verbindung aufgrund der Entfernung zum Koordinator unterbrochen sein. Platzieren Sie den Sensor näher oder fügen Sie einen Zigbee-Router (netzbetriebenes Zigbee-Gerät) hinzu, um das Mesh zu erweitern.
  3. Prüfen Sie das LinkQuality-Attribut — Werte unter ~30 lqi deuten auf ein schwaches Signal hin.
Veraltete Batterie- oder Signalwerte
  1. Batterie und Spannung werden nur aktualisiert, wenn der Sensor aufwacht und einen Report sendet — das kann einmal alle paar Stunden sein
  2. Wenn "-" angezeigt wird, ist noch keine MQTT-Nachricht eingegangen; warten Sie auf den nächsten Report oder koppeln Sie das Gerät erneut
  3. Nach erneuter Kopplung kann die Batterie bis zu 24 Stunden "-" bleiben, bevor der erste Wert veröffentlicht wird

Verfügbare Geräte

Tuya TS0201 Modul
Benutzerdefinierte Variablen
TS0201 (string) = 0xa4c1388f85d9eca2Zigbee2MQTT Friendly Name oder IEEE-Adresse des TS0201-Sensors — wird als Suffix des MQTT-Topics verwendet (zigbee2mqtt/{friendly_name})
Open Zigbee2MQTT web UI → Devices → find the TS0201 → copy the Friendly name (or use the IEEE address, e.g. 0xa4c1388f85d9eca2)
Temperatur- und Feuchtigkeitssensor Temperatursensor Nur lesen

Temperatur (°C) und relative Feuchtigkeit (%) aus dem Zigbee2MQTT JSON-State-Payload geparst

JSON Einheit: °C / % json_path
Serviceattribute
BatterieVerbleibender Batterieprozentsatz (0–100 %); der erste Wert kann bis zu 24 Stunden nach der Kopplung dauern
BatteriespannungRohe Batteriespannung in Millivolt (mV) aus dem JSON-State-Payload geparst
LinkQualityZigbee-Signalqualitätsindikator (LQI) — 0 (schlechteste) bis 255 (beste)

Temperatur- und Feuchtigkeitssensor

Luftfeuchtigkeit lesen
# 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");
Temperatur lesen
# 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");
Listener
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
Serviceattribute
Battery
IF(ISNAN(battery),"-",battery+"%");
Battery Voltage
IF(ISNAN(voltage),"-",voltage+"mV");
LinkQuality
IF(ISNAN(link),"-",link+"lqi");
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (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.

Quellen

Haben Sie ein Problem mit dieser Gerätevorlage gefunden?

Sagen Sie uns, was nicht funktioniert, was fehlt oder wie sich die Vorlage verhalten sollte. Ihr Feedback hilft uns, den Katalog genau zu halten.

Von TapHome verifiziert

Möchtest du das in deinem TapHome Core verwenden?

Öffne diese Vorlage im Kundenportal, um sie auf eine deiner Wohnungen anzuwenden, oder entwirf eine Anpassung und reiche sie an den Katalog ein.

Im Portal öffnen