Guides

SONOFF TRV Gen2 (TRV-ZBT) in Home Assistant: setup, calibration and ZHA vs Zigbee2MQTT

Short answer: the SONOFF TRV Gen2 (TRV-ZBT) is well supported in Zigbee2MQTT 2.12.1+, and zha-quirks 2.4.0 added a basic ZHA quirk. Pairing, calibration, room sensors.

On this page
  1. TRV Gen2 versus the first-generation TRVZB
  2. Pairing with Zigbee2MQTT
  3. Pairing with ZHA, and where support stands
  4. Valve calibration
  5. Using an external room temperature sensor
  6. Batteries and power
  7. What stays local
  8. Who should buy it

Amazon links are affiliate links: as an Amazon Associate I earn from qualifying purchases, at no extra cost to you. Links to makers' own stores and other retailers are plain links that earn me nothing.

The SONOFF TRV Gen2, model TRV-ZBT, is SONOFF’s second Zigbee radiator valve: a battery head that screws onto an M30 x 1.5mm hydronic radiator valve and joins your own Zigbee coordinator.

Short answer: on Zigbee2MQTT it’s well supported. Version 2.12.1 or later exposes its three heating plans, valve calibration, an external-sensor input and its stored heating history, all locally. On ZHA the picture changed the day after this page went up: a stopgap quirk merged on October 27, 2026 and shipped in zha-quirks 2.4.0 on October 28, so the valve’s model string is now matched to the existing TRVZB handler instead of falling through to a bare climate entity. The fuller quirk is still an open pull request, and SONOFF still hands you a custom quirk file for the features it adds. Zigbee2MQTT users can buy the TRV Gen2. ZHA users are no longer waiting on nothing, but check which zha-quirks version your Home Assistant release bundles, and the first-generation TRVZB is still the safe buy if you want the schedules without a custom file.

This is a research piece. I run Zigbee2MQTT at home, but I haven’t run either SONOFF valve, so everything below comes from SONOFF’s store page, manual and help center, the Zigbee2MQTT device page and the ZHA pull requests, all read on October 27. For the launch itself, see my news brief on the TRV Gen2.

Updated October 30, 2026: the stopgap ZHA quirk, pull request #5472, merged on October 27 and shipped in zha-quirks 2.4.0 on October 28, one day after this page was written. The ZHA sections below have been corrected. The full quirk, #5234, is still open.

TRV Gen2 versus the first-generation TRVZB

The TRV Gen2 doesn’t retire anything: SONOFF still sells the older TRVZB, so this is a choice between two current valves, not an upgrade path. The two spec tables, plus what each Home Assistant stack does with them:

TRV Gen2 (TRV-ZBT)TRVZB (first generation)
RadioZigbee (IEEE 802.15.4), plus Bluetooth for SONOFF’s appZigbee 3.0
Batteries2 x AA alkaline3 x AA alkaline
Setpoint range5-30°C4-35°C
Size50 x 50 x 82.9mm59.4 x 59.4 x 95mm
Weight169 g with batteries154 g
Working temperature-10°C to 50°C0°C to 60°C
ScreenIPS colour, rotates in 90° stepsNot listed in SONOFF’s spec table
Schedules3 switchable plans, up to 12 periods a dayUp to 6 transitions a day (Zigbee2MQTT)
Valve fittingM30 x 1.5mm, adapters in the boxM30 x 1.5mm, adapters in the box
Zigbee2MQTTAdded in 2.11.0; full feature set from 2.12.1Supported, with OTA updates
ZHAStopgap quirk in zha-quirks 2.4.0; the full quirk is still openExisting SONOFF TRVZB quirk
Price, October 27$34.90 at SONOFF US (sold out) and ITEAD$27.90 at SONOFF US, $26.90 at ITEAD

SONOFF says the new body is 38% smaller by volume. The two dimension rows work out to 38.2%, so the claim matches its own spec sheets. The Gen2’s schedule groups, calibration status, fault status and history graph have no equivalent on the TRVZB’s Zigbee2MQTT page.

Will it fit your radiator?

Both valves fit M30 x 1.5mm valve bodies directly, and SONOFF points everyone else at its TRV compatibility guide to pick an adapter. These are hydronic radiator valves only. If your house runs forced air or electric baseboards, neither one does anything for you; my local-control thermostats guide covers those.

SONOFF’s help center also says Philips, IKEA and Fritzbox gateways are not supported. A Home Assistant coordinator such as the Connect ZBT-2 is the normal path.

Pairing with Zigbee2MQTT

SONOFF asks for Zigbee2MQTT 2.12.1 or later for full support. That release went out on July 1, and the current release is 2.14.2 from October 1, which also carried a converter change titled “improve controls” for this valve. If you’re on anything from the summer onward, you’re past the floor.

  1. Install the battery base on the radiator valve, using an adapter if yours isn’t M30 x 1.5mm. Turn the metal nut, not the valve body.
  2. Pull the battery tab. The screen shows “Setup”, then “Ready”. Clip the head onto the base and turn it until it locks.
  3. Press the middle button. The screen plays a “Calibrate” animation while the valve finds its travel, then shows the room temperature.
  4. In Zigbee2MQTT, turn on permit join.
  5. On the valve, switch to Manual mode, turn the knob down past 5°C until the screen reads “OFF”, then hold the middle button for 2 seconds. The pairing icon flashes. The valve drops out of pairing mode after 3 minutes if nothing picks it up.

Once it joins, the device page shows a climate entity (setpoint 5-30°C, modes off, auto and heat) plus the extras: schedule groups 1-3 with a weekly schedule per day, child lock, frost protection temperature, open-window detection, heating and idle valve positions, temperature accuracy, a PID “smart temperature control” switch, low-battery valve state, and valve travel calibration.

Zigbee2MQTT schedules use a plain text format per day: up to 12 transitions written as HH:mm/temperature, the first starting at 00:00, temperatures 5-30°C in 0.5°C steps. So 00:00/17 06:30/20 22:00/17 is a normal day. If typing those is a chore, SONOFF’s answer is its eWeLink app over Bluetooth, which I cover under what stays local below.

Pairing with ZHA, and where support stands

ZHA will pair the valve with the same button sequence (Settings, Devices and services, ZHA, Add device). What you get afterwards depends on a quirk that hasn’t shipped.

ItemState on October 27, 2026
Pull request #5234, the full TRV-ZBT quirkOpen since August 7, carrying the bot labels “needs changes” and “needs maintainer”. Last activity October 22
Pull request #5472, a stopgapMerged on October 27, opened October 19. Points the existing TRVZB quirk at the TRV-ZBT model string
Latest zha-quirks release2.4.0, October 28. It carries the stopgap, and not the full quirk
SONOFF’s workaroundA custom quirk file, TRV-ZBT.py, from the SONOFF help center

What stock ZHA shows

The stopgap’s author says the TRV-ZBT reports its model as “TRV-ZBT” rather than “TRVZB”, which is why nothing matched it before zha-quirks 2.4.0 and ZHA exposed only the bare climate entity. That is still what an older zha-quirks gives you, and it is the case SONOFF’s own feature table describes. For ZHA without the script, it ticks the three operating modes, temperature calibration, battery level and the on-device child lock and screen rotation, and crosses out schedules, the external temperature source, valve opening ratio, temperature accuracy, boost duration, low-battery valve state and OTA updates.

That is a usable radiator thermostat, but not much more than a Zigbee setpoint.

Installing SONOFF’s quirk file

SONOFF’s download is a zip with one Python file and an install sheet; the files inside are dated August 4. The sheet’s steps, in short:

  1. Make a zha_quirks folder in your Home Assistant config directory and put TRV-ZBT.py in it.
  2. Add this to configuration.yaml:
zha:
  enable_quirks: true
  custom_quirks_path: /config/zha_quirks/
  1. Restart Home Assistant, then pair the valve through ZHA.

Pull request #5234 was validated by its author on Home Assistant Core 2026.8.0 with valve firmware 1.1.0. Testers in that thread report the schedules working, along with open issues: one saw errors logged at startup and an odd system_mode value on the climate entity, and another posted fixes for repeated command warnings. I’d treat a custom quirk as something to re-check after every Home Assistant update and to delete once the official one lands, so you don’t end up with two quirks matching the same model.

If you’d rather not run custom code, this is the strongest argument in the whole page for Zigbee2MQTT. My Zigbee2MQTT and ZHA comparison covers what a move costs.

Valve calibration

The valve has to learn how far its pin travels on your particular radiator valve and adapter. SONOFF says it calibrates after every power-on, which is the “Calibrate” animation you see after pressing the middle button.

When calibration fails

A “valve calibration failed” icon means the head isn’t seated properly. SONOFF’s checklist: the metal nut fully tight, the right adapter, enough battery, and no touching the valve while it runs. You don’t have to re-pair to retry. On this generation, calibration can be re-run from software:

WhereHow
Zigbee2MQTTSet valve_travel_calibration to calibrate, then watch motor_travel_calibration_status
ZHABefore zha-quirks 2.4.0, only with SONOFF’s quirk file or the #5234 quirk, and stock ZHA exposed no calibration entity. The valve calibrates itself on power-up either way
eWeLink over BluetoothDevice settings, Valve Calibration

Re-run it after changing an adapter or moving the valve to another radiator.

The Monday “Calibrate” screen

Every Monday at 12:00 noon the valve runs a maintenance cycle to stop scale building up, and the screen shows “Calibrate” while it does. That’s the anti-calcification run, not a fault.

Firmware 1.1.0

SONOFF’s help center says older firmware “may cause repeated calibration prompts in rare cases”, fixed in version 1.1.0. That image, file version 0x00001100, was merged into zigpy’s OTA repository on October 14. One tester in the ZHA thread was on 0x00001009 in September. Zigbee2MQTT lists OTA support for the valve, and SONOFF also offers a Bluetooth update through eWeLink (Profile, Studio, Bluetooth OTA).

Using an external room temperature sensor

A valve sensor sitting next to a hot radiator reads warm. Both stacks let you feed it a room reading instead, through a Home Assistant automation. SONOFF’s own tutorial says any sensor that reports temperature correctly in Home Assistant will do, so the Aqara temperature and humidity sensor I already run would work as well as a SONOFF SNZB-02P.

StepZigbee2MQTTZHA (with a quirk)
Pick the sourceSet the temperature sensor select to the remote option (remote_temperature on the Zigbee2MQTT page)Turn on the External temperature sensor switch
Entity to writenumber.<valve>_external_temperature_inputnumber.<valve>_external_temperature_sensor_value

The two-hour rule

This is the part SONOFF’s tutorial skips. The #5234 author, answering a tester on September 29, said the valve needs a fresh external value at least once every two hours, even when the temperature hasn’t changed. Miss that window and it falls back to its own sensor. Zigbee2MQTT’s page shows the same fallback as a third state, remote_source_offline.

SONOFF’s tutorial and its blueprint both fire when the room sensor reports a change (the blueprint also fires when you switch the external source on), and I couldn’t find a periodic refresh in the blueprint file. A stable room can go quiet for longer than two hours. So I’d add a timed trigger:

alias: Sync bedroom temperature to TRV Gen2
mode: restart
triggers:
  - trigger: state
    entity_id: sensor.bedroom_temperature
  - trigger: time_pattern
    minutes: "/30"
conditions:
  - condition: template
    value_template: "{{ is_number(states('sensor.bedroom_temperature')) }}"
actions:
  - action: number.set_value
    target:
      entity_id: number.bedroom_trv_external_temperature_input
    data:
      value: "{{ states('sensor.bedroom_temperature') | float | round(1) }}"

Swap in your own entity IDs, and on ZHA use the external_temperature_sensor_value entity. SONOFF warns the Zigbee2MQTT entity may show up named just “Temperature”, so check the full entity ID under Developer tools, States.

One side effect: once the external source is on, the valve reports the room reading as its current temperature, and its own sensor reading is no longer available separately. The #5234 author confirmed that is how the current firmware works.

Open-window detection

Built-in detection stops heating when the valve sees a drop of more than 1.5°C within 5 minutes. SONOFF’s sensor-linked version, where a contact sensor such as the SNZB-04P stops heating directly, needs the sensor on the same SONOFF gateway. Under ZHA the #5234 author says the protocol can’t take an open-window state from an outside contact sensor. In Home Assistant, the usual route is an automation that turns the valve off when the window sensor opens.

Batteries and power

ItemWhat SONOFF says
Cells2 x 1.5V LR6 alkaline AA (2,000 mAh each in SONOFF’s example)
Life”Up to 6 months”, shorter with frequent valve moves, cheap cells, cold rooms or a weak Zigbee signal
RechargeablesDiscouraged. Two 1.2V NiMH cells sit just above the minimum voltage and won’t last
Low batteryReplace within a week of the warning
Valve at low batteryYour choice: closed, or 30% open (low_battery_valve_state in Zigbee2MQTT)

Zigbee2MQTT notes the battery percentage can take up to 24 hours to report, so a blank reading on day one isn’t a fault. The network-stability caveat matters more than it sounds: SONOFF says a valve that keeps searching for its network drains faster, so a router near the radiator is worth having.

What stays local

PathLocal?Notes
Zigbee2MQTT or ZHAYesYour coordinator, no SONOFF account, works with the internet down
Bluetooth to eWeLinkPhone to valveOptional side channel for schedules and firmware. SONOFF says it doesn’t remove the valve from Zigbee or clear its settings. I couldn’t find anywhere that says whether eWeLink needs an account for it
Alexa, Google HomeDependsSONOFF lists Echo models with a built-in Zigbee hub for basic control. A store-page footnote says some third-party functions need its own gateway and eWeLink cloud-to-cloud sync; I couldn’t find which ones
Apple HomeVia a bridgeOnly through a SONOFF Matter bridge (Bridge-M, ZBBridge-U, iHost, or Cube OS with a SONOFF Zigbee dongle). The valve itself has no Matter or Thread

The “Thread Connection” row on SONOFF’s spec table is the M30 x 1.5mm pipe thread, not the Thread radio protocol.

The only certifications SONOFF lists are CE and RoHS, and the manual carries an EU declaration with no FCC statement. I couldn’t find anywhere that says whether the TRV Gen2 is FCC-certified for US sale, or when the US store will have it back in stock. I couldn’t find a US Amazon listing I could confirm is this model either.

Who should buy it

  • Zigbee2MQTT and M30 radiator valves. Buy the TRV Gen2. You get the smaller body, the three schedule plans and software calibration, all exposed locally today. ITEAD had it in stock when I checked; SONOFF’s US store showed it sold out.
  • ZHA, and happy to drop in a quirk file. The TRV Gen2 works with SONOFF’s file. #5472 has already merged and shipped in zha-quirks 2.4.0, so remove the file once your Home Assistant release carries that version, rather than running two quirks that match the same model.
  • ZHA, and you want it working stock. zha-quirks 2.4.0 names the TRV-ZBT, so check which version your Home Assistant release bundles. If you want the weekly schedules without a custom file, the full quirk is still pending and the first-generation TRVZB remains the safe buy.
  • On a budget. The TRVZB is $26.90-$27.90 against $34.90, works in both stacks, and takes room-sensor input the same way. Its card on this page is the first-generation valve.
  • Forced air, baseboard heat or a Matter-only house. Neither SONOFF valve is for you.

I’ll update this page when the full ZHA quirk merges and when SONOFF’s US store restocks.

Keep going

All articles →
Article

SONOFF TRV Gen2: what changes for a Zigbee heating setup

SONOFF's second-generation Zigbee radiator valve is smaller, costs more, and is supported in Zigbee2MQTT. A stopgap ZHA quirk shipped in zha-quirks 2.4.0.

Read article →
Article

Aqara vs Shelly vs Sonoff: which ecosystem for local-first smart homes?

Short answer: Shelly for Wi-Fi relays with a local API, Sonoff for the cheapest Zigbee, Aqara for the best sensors. Where each one falls short, and what I run.

Read article →
Article

Best Zigbee coordinators for Home Assistant

Short answer: the Connect ZBT-2 for most people (I run one), the SONOFF ZBDongle-P to save money, and the SLZB-06 PoE when it must sit away from the server.

Read article →
New guides and product notes, no inbox required. Follow via RSS →