I’ve published two unofficial Home Assistant integrations for Inkbird thermometers.
These projects were built from real hardware, reverse-engineered, cleaned up and released as HACS custom repositories.
GitHub profile:
Inkbird INT-14 / INT-14-BW
Repo:
This is the bigger one.
The INT-14 is a nice thermometer station, but Home Assistant support has been basically missing, fragmented or stuck behind vendor app / Tuya / cloud limitations.
Current scope:
local BLE discovery, snapshots and explicit commands
local Tuya LAN polling and writes when host, device_id and local_key are supplied
optional read-only Inkbird cloud history for DP109 temperature history
no cloud live updates
no cloud writes
HACS custom repository
tested with real INT-14 hardware
The goal is to make the INT-14 usable in Home Assistant in a practical, local-first way, while keeping cloud usage optional and limited.
Inkbird IHT-2PB
Repo:
This one is simpler and cleaner: BLE-only, local-only.
Current scope:
local BLE only
no Inkbird cloud
no Tuya cloud
no MQTT bridge required
optional ESPHome Bluetooth Proxy as a remote BLE radio
exposes probe temperatures, alarm/fault/hold state, target/calibration values, battery raw level, backlight, unit and freshness
HACS custom repository
tested with real IHT-2PB hardware
Notes
Both projects are unofficial and not affiliated with Inkbird.
The public repositories are sanitized: no private MAC addresses, LAN IPs, local keys, tokens, app dumps or raw captures.
I’m looking for feedback from other real devices, especially:
different INT-14 / INT-14-BW firmware versions
different IHT-2PB firmware versions
different probe combinations
different Bluetooth adapters
ESPHome Bluetooth Proxy setups
Tuya LAN / local_key configurations
reconnect and BLE range behavior
If you own one of these thermometers and want proper Home Assistant support instead of depending only on the vendor app, feel free to test the repositories and open issues with compatibility reports.
I had to do the annoying reverse-engineering work for my own setup anyway, so I decided to publish it properly instead of leaving it buried in a private Home Assistant config.
The main change is that the integration now separates physical probes from temperature channels.
This matters for newer Inkbird INT thermometers such as INT-31-BW, INT-14S-BW, INT-12E-BW, INT-33-BW and INT-11S-B, where one physical probe can expose multiple internal temperature sensors.
Current status:
INT-14-BW remains the tested baseline.
INT-14-BW exposes 4 physical probes and 8 live mapped temperature channels.
INT-31-BW is cataloged as 1 physical probe / 5 expected channels.
INT-14S-BW is cataloged as 4 physical probes / 20 expected channels.
INT-12E-BW is cataloged as 2 physical probes / 10 expected channels.
INT-33-BW is cataloged as 3 physical probes / 13 expected channels.
INT-11S-B is cataloged as 1 physical probe / 5 expected channels.
Important: cataloged does not mean live support yet.
The integration now knows the expected probe/channel layout, but it does not create fake temperature entities, enable writes or enable live transports for those models until real hardware reports confirm the payload mapping.
v0.2.1 was smoke-tested on my real INT-14-BW before release:
existing config entry/device remained stable
8/8 live temperature channels populated
BLE snapshot/write passed
Tuya LAN polling/write validated with the integration LAN module
Validation thread:
If you have one of these newer INT models, especially INT-31-BW, INT-14S-BW, INT-12E-BW, INT-33-BW or INT-11S-B, clean validation reports are very welcome.
Name: INT-11I-B
Address: AA:BB:CC:DD:EE:FF
RSSI: about -60 dBm
Manufacturer data:
17544: 196a6588c938c1a42100236400640000
Service UUIDs:
0000ff00-0000-1000-8000-00805f9b34fb
Connectable: true
Result:
BLE connection/status is detected.
Battery/charge information is detected.
Temperature entities stay unavailable/unknown.
Expected result:
The probe temperature should be populated from GATT characteristic:
Service UUID: 0000ff00-0000-1000-8000-00805f9b34fb
Temperature UUID: 0000ff01-0000-1000-8000-00805f9b34fb
Battery UUID: 00002a19-0000-1000-8000-00805f9b34fb
The working ESPHome decoder for this model reads temperature from ff01 as:
raw = int.from_bytes(x[0:2], "little")
fahrenheit = raw / 100.0
celsius = (fahrenheit - 32.0) * 5.0 / 9.0
This seems consistent with the merged Bluetooth-Devices/inkbird-ble INT-11I-B support, where this model is handled as a connectable GATT-poll device rather than an advertisement-only decoder.
So the current int11i_b profile in ha-inkbird-int14 appears to connect and read battery/status, but does not yet populate the probe temperature from ff01.
Thanks Dmitry, this was exactly the missing piece.
I pushed experimental INT-11I-B GATT-poll support to main:
ff01 temperature as little-endian Fahrenheit hundredths
2a19 battery as base/booster + probe battery
writes disabled for now
INT-11I-B profile reduced to 1 physical probe / 1 live temperature channel
Could you test current main before I cut v0.2.2?
Expected result: probe temperature should populate in BLE only mode, battery should still populate, and no write controls should be exposed for INT-11I-B.
Great, thanks Dmitry. I’ll mark the current BLE read path as community-validated.
Writes are intentionally disabled in the current release, but they are planned. The Inkbird app contains a separate ff02 write protocol for alarm targets and device settings.
Would you be willing to test an experimental build? We would start with a harmless setting with readback, such as display brightness or temperature unit, and then validate high/low temperature alarm targets.
Awesome, thanks Rob — INT-14S-BW would be a really useful one to validate.
I already added an INT-14S-BW profile, but it is intentionally marked as cataloged/experimental for now. From the app/model data it looks like a different multi-sensor layout than the tested INT-14-BW: 4 physical probes, probably multiple temperature channels per probe.
So when yours arrives, the first useful test would be very simple:
install the latest release
add “Inkbird INT”
select the INT-14S-BW profile
check whether Home Assistant discovers it over BLE
check what diagnostics/battery/state entities appear
compare the HA entities with what the official Inkbird app shows
Temperature channels may not populate yet, and that’s expected. I didn’t want to fake live support until someone with real hardware can confirm the payloads.
If you’re happy to share redacted logs/screenshots when it arrives, that would be perfect. The most useful bits are: app screen showing the probe/channel layout, HA debug logs, BLE advertisement/service data if available, and which channel changes when you heat each probe/sensor area.
No need to test writes at the beginning — read-only validation first is already very helpful.
Small update after quite a few late-night debugging sessions
The INT integration has grown beyond the original INT-14-BW implementation, so I have now reorganized and updated the repository, documentation and wiki to better reflect the current status of the supported and experimental models.
Recent work includes improved BLE reconnect handling for the INT-14-BW, experimental support for additional INT-family thermometers, and community-validated read support for the INT-11I-B and INT-14S-BW.
The current v0.2.6 beta is still being tested, but the latest feedback has been very encouraging: even though some stations intentionally terminate their BLE connection after roughly 30 seconds, the integration now reconnects automatically and continues updating normally.
There are still a few details to polish, including the relationship between the configured polling interval and notification-driven temperature updates, but overall it is becoming considerably more stable.
Updated repository and documentation:
A big thank you to everyone testing real hardware and sending detailed reports. They have been extremely useful in finding behaviours that would have been almost impossible to reproduce with only my own device.