logo elektroda
logo elektroda
X
logo elektroda

[BK7231N / CB3S] TH11 Temperature and humidity sensor (IP65/WiFi)

tplewa  7 1512 Cool? (+1)
📢 Listen (AI):
White temperature and humidity sensor with strap and thermometer icon

This is another WiFi temperature sensor that works with the Tuya/Smart Life system as standard. It is an IP65-rated version for outdoor placement. The sensor is powered by two AAA batteries and is based on the CB3S module and the TuyaMCU microcontroller - here, as usual, the sensor was purchased to convert to OpenBK, i.e. to work with Home Assistant bypassing the Tuya cloud.

What we get in the box

Here, without much surprise, a short instruction manual, the sensor itself + pendant and the mounting tape and magnetic tape.

TH11 temperature and humidity sensor with manual and mounting accessories Close-up of the back of a TH11 temperature and humidity sensor with technical details Opened housing of a sensor showing dual AAA battery slots

User manual for TH11 temperature and humidity sensor, showing specifications and instructions Tuya temperature and humidity sensor manual with installation and feature guide


Interior sensor

Here, as expected, there is not much :) That is, what was mentioned the module CB3S with BK7231N chip, TuyaMCU that is an unknown microcontroller, transistor Q1 controlled by TuyaMCU chip (U3) whose task is to cut the ground from the CB3S module. As a temperature/humidity sensor, a chip Sensylink CHT8310 communicating with TuyaMCU via I2C bus was used. Plus one button, an LED and some RC passive components....

PCB view with CB3S WiFi module and temperature sensor components WiFi temperature sensor casing opened, showing compartment for two AAA batteries

TuyaMCU connection to CB3S module

TuyaMCU (U3)
TuyaMCU (U3) CB3S (M1)
GPIO (Pin 7) RST (Pin 1)
UART TX (Pin 9) RXD1 (Pin 15)
UART RX (Pin 10) TXD1 (Pin 16)


In order to upload OpenBK, all I had to do was lift/disconnect the RX and TX legs of the TuyaMCU and power the CB3S module directly....


Image in the Tuya app and data from the Tuya Developer Platform service

Basically, like most temperature/humidity sensors there is not much in the app i.e. data visualisation and simple settings.

Tuya app screen showing 30.8°C temperature and 23% humidity readings Sensor settings screen in Tuya app with alarm and calibration options

Data from the Tuya Developer Platform looks as follows.

Screenshot of Tuya Developer Platform interface displaying sensor data

Standard Instruction Set

temp_unit_convert	Enum	

{
  "range": [
    "c",
    "f"
  ]
}
Standard Instruction Set

temp_unit_convert	Enum	

{
  "range": [
    "c",
    "f"
  ]
}


Standard Status Set

va_temperature	Integer	

{
  "unit": "℃",
  "min": -200,
  "max": 600,
  "scale": 1,
  "step": 1
}

va_humidity	Integer	

{
  "unit": "%",
  "min": 0,
  "max": 100,
  "scale": 0,
  "step": 1
}

battery_state	Enum	

{
  "range": [
    "low",
    "middle",
    "high"
  ]
}

temp_unit_convert	Enum	

{
  "range": [
    "c",
    "f"
  ]
}
Standard Status Set

va_temperature	Integer	

{
  "unit": "℃",
  "min": -200,
  "max": 600,
  "scale": 1,
  "step": 1
}

va_humidity	Integer	

{
  "unit": "%",
  "min": 0,
  "max": 100,
  "scale": 0,
  "step": 1
}

battery_state	Enum	

{
  "range": [
    "low",
    "middle",
    "high"
  ]
}

temp_unit_convert	Enum	

{
  "range": [
    "c",
    "f"
  ]
}


Additional JSON extracted from original firmware
Code: JSON
Log in, to see the code



Logs of TuyaMCU communication with CB3S module

Sensor added to Tuya cloud

Sent by WiFi module:
55 AA	00	01		00 00		00	
HEADER	VER=00	Product		LEN		CHK	

Received by WiFi module:
55 AA	00	01		00 24	7B2270223A226A33666A616A66327830617073716770222C2276223A22312E302E30227D	A3	
HEADER	VER=00	Product		LEN	{"p":"j3fjajf2x0apsqgp","v":"1.0.0"}	CHK	

Received by WiFi module:
55 AA	00	02		00 00		01	
HEADER	VER=00	McuConf		LEN		CHK	

Sent by WiFi module:
55 AA	00	02		00 01	04	06	
HEADER	VER=00	McuConf		LEN	04	CHK	

Received by WiFi module:
55 AA	00	10		00 04	03091718	4E	
HEADER	VER=00	ObtainDPcache		LEN			CHK	

Received by WiFi module:
55 AA	00	0B		00 00		0A	
HEADER	VER=00	Unk		LEN		CHK	

Sent by WiFi module:
55 AA	00	10		00 02	0100	12	
HEADER	VER=00	ObtainDPcache		LEN			CHK	

Sent by WiFi module:
55 AA	00	0B		00 02	013C	49	
HEADER	VER=00	Unk		LEN	013C	CHK	

Received by WiFi module:
55 AA	00	05		00 15	090400010017020004000000001802000400000000	62	
HEADER	VER=00	Unk		LEN	dpId=9 Enum V=0,dpId=23 Val V=0,dpId=24 Val V=0		CHK	

Sent by WiFi module:
55 AA	00	05		00 01	00	05	
HEADER	VER=00	Unk		LEN			CHK	

Received by WiFi module:
55 AA	00	05		00 15	010200040000013402020004000000170304000102	7E	
HEADER	VER=00	Unk		LEN	dpId=1 Val V=308,dpId=2 Val V=23,dpId=3 Enum V=2		CHK	

Sent by WiFi module:
55 AA	00	05		00 01	00	05	
HEADER	VER=00	Unk		LEN			CHK	


Sensor not connected to the Tuya cloud

Received by WiFi module:
55 AA	00	01		00 24	7B2270223A226A33666A616A66327830617073716770222C2276223A22312E302E30227D	A3	
HEADER	VER=00	Product		LEN	{"p":"j3fjajf2x0apsqgp","v":"1.0.0"}	CHK	

Sent by WiFi module:
55 AA	00	01		00 00		00	
HEADER	VER=00	Product		LEN		CHK	

Sent by WiFi module:
55 AA	00	02		00 01	03	05	
HEADER	VER=00	McuConf		LEN	03	CHK	

Received by WiFi module:
55 AA	00	02		00 00		01	
HEADER	VER=00	McuConf		LEN		CHK	



OpenBK configuration

Here looking in the logs there is not much ;)

Set flags: 2 10 19 37 51

autoexec.bat

startDriver TuyaMCU
startDriver tmSensor

setChannelType 1 temperature_div10
linkTuyaMCUOutputToChannel 1 val 1

setChannelType 2 Humidity
linkTuyaMCUOutputToChannel 2 val 2

setChannelLabel 3 Battery
setChannelType 3 ReadOnlyLowMidHigh
linkTuyaMCUOutputToChannel 3 val 3


Log of TuyaMCU communication with CB3S module with OpenBK firmware

Sent by WiFi module:
55 AA	00	01		00 00		00	
HEADER	VER=00	Product		LEN		CHK	

Received by WiFi module:
55 AA	00	01		00 24	7B2270223A226A33666A616A66327830617073716770222C2276223A22312E302E30227D	A3	
HEADER	VER=00	Product		LEN	{"p":"j3fjajf2x0apsqgp","v":"1.0.0"}	CHK	

Received by WiFi module:
55 AA	00	02		00 00		01	
HEADER	VER=00	McuConf		LEN		CHK	

Sent by WiFi module:
55 AA	00	02		00 01	03	05	
HEADER	VER=00	McuConf		LEN	03	CHK	

Received by WiFi module:
55 AA	00	02		00 00		01	
HEADER	VER=00	McuConf		LEN		CHK	

Sent by WiFi module:
55 AA	00	02		00 01	04	06	
HEADER	VER=00	McuConf		LEN	04	CHK	

Received by WiFi module:
55 AA	00	10		00 04	03091718	4E	
HEADER	VER=00	ObtainDPcache		LEN			CHK	

Sent by WiFi module:
55 AA	00	10		00 02	0100	12	
HEADER	VER=00	ObtainDPcache		LEN			CHK	

Received by WiFi module:
55 AA	00	0B		00 00		0A	
HEADER	VER=00	Unk		LEN		CHK	

Sent by WiFi module:
55 AA	00	0B		00 02	0150	5D	
HEADER	VER=00	Unk		LEN	0150	CHK	

Received by WiFi module:
55 AA	00	05		00 15	090400010017020004000000001802000400000000	62	
HEADER	VER=00	Unk		LEN	dpId=9 Enum V=0,dpId=23 Val V=0,dpId=24 Val V=0		CHK	

Sent by WiFi module:
55 AA	00	05		00 01	00	05	
HEADER	VER=00	Unk		LEN			CHK	

Received by WiFi module:
55 AA	00	05		00 15	010200040000012D02020004000000190304000102	79	
HEADER	VER=00	Unk		LEN	dpId=1 Val V=301,dpId=2 Val V=25,dpId=3 Enum V=2		CHK	

Sent by WiFi module:
55 AA	00	05		00 01	00	05	
HEADER	VER=00	Unk		LEN			CHK	


Well, that's pretty much it - you can still future-proof the handling of id 9, 23, 24 - i.e. the sensor settings....


Additional moisture protection

Theoretically the sensor is IP65 rated but after uploading the firmware I decided to additionally protect the electronics with a silicone coating (MG Chemicals 422C)

MG Chemicals silicone coating bottle and sensor PCB with electronics

Here, care must be taken that the preparation does not get into the "window" in the temperature/humidity sensor. Likewise, I do not recommend coating the antenna circuit on the CB3S module with silicone....

About Author
tplewa
tplewa wrote 6727 posts with rating 988 , helped 222 times. Live in city Warszawa. Been with us since 2003 year.

Comments

p.kaczmarek2 26 Jan 2026 09:47

You hit on a slightly better model, not everyone has the settings (ObtainDPcache). From what I remember, we presented with @dedamraz their setting here: [CB3S/BK7231N] Temperature/humidity sensor with... [Read more]

tplewa 26 Jan 2026 12:58

@pkaczmarek2 Yes this functionality depends on the functionality of the IoT device and I guess all temperature sensors have this (they have some kind of setting whether correction or otherwise). In the... [Read more]

p.kaczmarek2 26 Jan 2026 13:44

Thanks for your interest. I'd be happy to help figure it out, but I have quite limited time (huge number of projects - you can see for yourself on the forum), so it has to be done cleverly. On Windows... [Read more]

tplewa 26 Jan 2026 23:35

@pkaczmarek2 Well with this timing I think it's always the case. Likewise with me, just as many hobby and commercial projects.... hard to reconcile it all he he As far as I can see this is a... [Read more]

ACCel 26 Jan 2026 23:41

The most important thing about these sensors is whether they report negative temperatures, many do not. I don't know if this is a limitation of Tuya or the electronics. [Read more]

tplewa 29 Jan 2026 09:33

Good I can answer. This one at least finally showed a negative temperature ;) https://obrazki.elektroda.pl/7685650900_1769675562_thumb.jpg https://obrazki.elektroda.pl/4812708900_1769675733_thumb.jpg... [Read more]

puchalak 04 Feb 2026 12:23

Unfortunately wifi based battery sensors don't make sense. I have (more had, as I don't use it anymore) probably exactly this one and the battery life is about 14 days. Poor. I also noticed its strange... [Read more]

FAQ

TL;DR: TH11 (CB3S/BK7231N) reports temperature on a −20.0 to 60.0°C scale and humidity 0–100%; “The sensor is powered by two AAA batteries and is based on the CB3S module.” [Elektroda, tplewa, post #21819906]

Why it matters: This FAQ helps DIY users flash OpenBeken, integrate with Home Assistant, and tune TuyaMCU settings without cloud lock‑in.

Quick Facts

What is the TH11 sensor and what’s inside?

TH11 is an IP65 Wi‑Fi temperature/humidity probe for Tuya/Smart Life. Inside: CB3S module with BK7231N, a TuyaMCU coprocessor, and a Sensylink CHT8310 temp/RH sensor. It runs on two AAA batteries and includes a button, LED, and basic passives. [Elektroda, tplewa, post #21819906]

Does TH11 support negative temperatures?

Yes. The firmware exposes va_temperature with min −200 and scale 1, meaning −20.0°C. Max is 60.0°C (600/10). Negative readings within this range are valid. Example telemetry shows values like 301, which equals 30.1°C after scale. [Elektroda, tplewa, post #21819906]

How often does it report—fixed interval or on change?

Behavior suggests event‑driven reporting when thresholds change rather than a fixed interval. The CHT8310 can assert its ALERT pin to wake the MCU/Wi‑Fi module for updates. "There is no need to do polling." [Elektroda, p.kaczmarek2, post #21820252]

How do I flash OpenBeken (OpenBK) onto the CB3S in TH11?

How‑To (hardware):
  1. Lift or disconnect TuyaMCU RX/TX legs and power CB3S directly.
  2. Flash OpenBK to CB3S via UART.
  3. Reconnect and configure TuyaMCU↔channel links in autoexec. This avoids TuyaMCU interference during flashing. [Elektroda, tplewa, post #21819906]

What OpenBeken autoexec settings work for TH11?

Example: startDriver TuyaMCU and tmSensor, set channel types, and link DPs:
  • ch1 temperature_div10 ↔ DP1
  • ch2 Humidity ↔ DP2
  • ch3 ReadOnlyLowMidHigh (Battery) ↔ DP3 Flags: 2 10 19 37 51. This yields temperature, humidity, and battery status in HA. [Elektroda, tplewa, post #21819906]

What do the Tuya DPs mean (units and offsets)?

DP1 temperature uses scale 1 (tenths °C). DP2 humidity uses scale 0 (percent). DP3 is battery enum: low/middle/high. DP9 switches °C/°F. DP23 is temperature correction −2.0…+2.0 (scale 1). DP24 is humidity correction −10…+10. [Elektroda, tplewa, post #21819906]

How do I handle the 0x90 “Get cached DP” / ObtainDPcache behavior with OBK?

TuyaMCU issues 0x90; OBK should reply 55 AA 00 90 00 02 01 00 92 when no data. A temporary workaround sends that hex via uartSendHex after a short delay, though it’s timing‑sensitive. Logs and exact frames are provided. [Elektroda, tplewa, post #21820891]

What is TuyaMCU and why disconnect its RX/TX for flashing?

TuyaMCU is a microcontroller that mediates sensors and the Wi‑Fi module. It can hold the CB3S UART busy. Lifting/disconnecting its RX/TX isolates CB3S for clean flashing and direct power. Reconnect after flashing. [Elektroda, tplewa, post #21819906]

What is OpenBeken (OpenBK) and why use it with Home Assistant?

OpenBeken is alternative firmware for BK7231 devices. It enables local control and Home Assistant integration without Tuya cloud. Developers note OpenBK also supports DeepSleep on non‑TuyaMCU builds for better battery life. [Elektroda, p.kaczmarek2, post #21819998]

Can the CHT8310 ALERT pin reduce power usage?

Yes. Configure CHT8310’s ALERT to trigger on threshold changes and wake the MCU for reporting. This avoids constant polling. "There is no need to do polling." This suits battery‑powered outdoor nodes. [Elektroda, p.kaczmarek2, post #21820252]

How should I protect the PCB against moisture?

Apply a silicone conformal coating (e.g., MG Chemicals 422C) to the PCB. Do not coat the CHT8310 sensing window. Avoid the CB3S antenna area to preserve RF performance. The unit is IP65, but extra protection helps outdoors. [Elektroda, tplewa, post #21819906]

What do the battery levels actually indicate?

Battery is an enum from the device: low, middle, high (DP id 3). It is not a voltage reading. Use it as a coarse indicator for battery replacement planning. Surface it as a read‑only channel in OpenBK. [Elektroda, tplewa, post #21819906]

Do some Tuya sensors fail to show negative temperatures?

Yes, community reports note some models do not expose negatives. TH11’s DP range includes negatives (−20.0°C), but other Tuya devices may limit firmware. Check your DP schema. [Elektroda, ACCel, post #21820895]

How can I surface ObtainDPcache-based settings in Home Assistant?

The device exposes ObtainDPcache and extra DPs (e.g., DP9, 23, 24). OpenBK maps DPs to channels, but HA UI binding for these settings may need custom integration until OBK improves DP cache handling. [Elektroda, tplewa, post #21820206]

What do the example hex logs tell me about scaling and units?

Frames like dpId=1 Val V=301 mean 30.1°C after applying scale 1. Humidity uses integers (e.g., 25 → 25%). Battery reports as enum 0–2 for low/middle/high. These map cleanly in OpenBK channels. [Elektroda, tplewa, post #21819906]

Is there a non‑TuyaMCU OpenBK path with better sleep support?

Yes. Contributors prefer converting to a build without TuyaMCU for native DeepSleep in OpenBK. This can extend battery life compared with a TuyaMCU‑mediated design. [Elektroda, p.kaczmarek2, post #21819998]
Generated by the language model.
%}