Heating is one of the biggest energy costs in most homes, and a thermostat that only knows the temperature right next to it on the wall is not always the best judge of how warm a room really is. That is why I was curious when the SONOFF TP-WGZBA landed on my bench. SONOFF calls it a Smart Thermostat Core, and the idea is that it can sit at the centre of your heating control, take its temperature reading from a sensor somewhere else in the room, and react to things like an open window.
It is a Zigbee device, so instead of using the SONOFF app I connected it to Zigbee2MQTT. That way it can be used in Home Assistant or any other system that talks MQTT. In this article I go through what comes in the box, how the wiring terminals work, how to pair it, every setting it exposes, and a few safety points you should keep in mind before you put one on your wall.
Use coupon code "TasteTheCode" for 10% dicount on any purchase
What the Box Promises
The box claims that the thermostat works with pretty much everything. It supports the eWeLink app from SONOFF, and it also works with Samsung SmartThings, Alexa and Google Home.
The reason it is called a "core" is that it does not have to rely on its own temperature reading. It can read the temperature from an external sensor and use that as the base for its control. It can also take a signal from a window sensor, so when a window is opened, it stops heating to save some energy.
On the side of the box the list goes on. There is remote temperature source support, open window detection, NTC overheat protection, a radar that wakes up the display, remote control, energy saving, smart schedules, and support for hydronic underfloor heating or boiler control. Hydronic means the floor is heated with warm water running through pipes, not with electric heating cables, and that difference becomes important later.
Unboxing the Thermostat
The Back Plate and Wiring Terminals
When I opened the box, the first thing I saw was the two halves of the thermostat. The first half is the back plate, which is the part you screw onto the wall. It is fairly wide, so you need a box in the wall behind it to hold the wiring.
The wiring terminals are where things get interesting. On the far left there are terminals for neutral and live, along with a switched live output that can drive a load of up to 3 amps directly. Next to those there is a dry contact with a common and a normally open terminal. A dry contact is just a relay switch that is not connected to any power inside the thermostat. It closes and opens, and it is up to you what flows through it. On this thermostat it is rated for 12 to 48 volts at up to 3 amps, which is what you would typically use to tell a boiler to start or stop.
On the far right there is a connection for a 10K NTC thermistor. This is a small temperature probe you can place somewhere else, for example in the floor. As far as I could tell, the probe is not included in the box. All of the terminals are tightened with screws at the bottom of the plate.
The Front Plate and Accessories
The second half is the front plate, which holds the display and the knob. It comes in a clean white case, and on the back of it there is a serial number you can use to add the thermostat to the eWeLink app, along with the specifications. There is also a connector that joins the two halves together once the back plate is on the wall.
In the box there are also M3 and M4 screws for mounting, a link to an instructional video, and a full manual. Once the back plate is secured to the wall, you just press the front plate on top of it until it clicks in, and the whole thing becomes one unit that is firmly attached to the wall.
The Specifications on the Website
Before wiring anything, I went through the product page. The thermostat has dual outputs, which matches what I saw on the back plate, so you get both the 3 amp load and the dry contact. It can be controlled with independent plans and schedules, and since it can use an external temperature sensor, it can control the temperature of the room more accurately than a thermostat that only measures itself.
It can control a hydronic floor heating system through the active load output, or a boiler through the dry contact. There is a sensor on the front that wakes up the screen when you approach it, which is a nice touch since the display is not on all the time. It can also record history, and everything runs over Zigbee 3.0.
One thing the product page is clear about is that this thermostat is not compatible with electric underfloor heating. Electric floor heating draws a lot of current, far more than the 3 amps this thermostat can handle, so for that you need something else.
The thermostat can also detect an open window on its own, without a window sensor. If the temperature drops quickly, it assumes a window is open, and you can adjust how sensitive this detection is. The temperature can be set with the knob on the front, from the app, or from Home Assistant.
Powering It Up on the Bench
To try it out, I wired it to an extension cable and connected only the live and neutral. When I plugged it in, the screen came on right away. The output was on, and the thermostat was trying to pair, but I had not set my Zigbee network to accept new devices yet.
The display looks quite nice, but I found it a bit dim. In normal lighting it looked fine, but under my bright bench lights it was harder to see.
The Knob and the Buttons
Turning the knob changes the set point, which is the temperature you want the room to be. When I set it to 17 degrees, the output switched off right away, because the temperature it was measuring was close to 34 degrees. Under my lights the bench gets warm.
There is a button in the middle of the knob and a home button. Before pairing, I could not figure out what the mode button did, but pressing and holding it activated the child lock, so nothing could be changed from the front. Pressing and holding it again for a few seconds released the lock. At this point the knob only gave me manual control, so for anything more advanced I needed to connect it to the app or, in my case, to Zigbee2MQTT.
The screen is supposed to turn on when you move in front of it, but out of the box this did not happen. The display turned off after a few seconds and only came back when I pressed the button or turned the knob. As it turned out, the radar was simply disabled, which I fixed later.
Connecting It to Zigbee2MQTT
Pairing Mode
To put the thermostat into pairing mode, you turn the temperature all the way down until it shows off, and then press and hold the button for a few seconds. I then allowed devices to join in Zigbee2MQTT, and it showed up almost right away as the TP-WGZBA, with its address and everything it exposes.
There is one catch here. Since this is a fairly new product, you need a recent version of Zigbee2MQTT for it to be recognised. I was running version 2.14.3, and I believe you need at least 2.10.0 so that the definition for this thermostat is included.
Every Setting It Exposes
The Exposes tab in Zigbee2MQTT shows all the values the thermostat reports and all the settings you can change. The first one is the set point. I moved the slider to 24 and the thermostat changed to 24. When I raised it to 27, the output indicator came on immediately.
Below that there is temperature calibration, which lets you correct the reading if it is off compared to another thermometer. Then there is the child lock, the open window detection, and the frost protection temperature, which is the minimum the thermostat will keep the room at. Mine was set to 5 degrees. There are also settings for which schedule group is active.
There is a temporary mode where you can pick a timer or a boost. Boost runs the heating at a high target for a set time so the room warms up quickly, and you can set the duration and the target temperature.
The next setting decides where the thermostat reads its temperature from: the local sensor or a remote source. This is the part that makes it a "core". In the SONOFF app you can link a remote sensor directly, but in Home Assistant you have to set this up yourself and send the temperature from your remote sensor to the thermostat. After that, you can choose if the relay is normally open or normally closed, and if you have an NTC probe connected, its reading and adjustment show up here too.
Waking the Display with Radar
The radar detection was disabled, which explained why the screen did not wake up earlier. When I enabled it, the display turned on straight away. I lowered the sensitivity first so it would not keep detecting me at the bench, waited for the screen to turn off, and then moved my hand in front of it. The screen came back on by itself, which is exactly what I wanted to see.
There are separate brightness settings for when the thermostat is active and when it is idle. I set the active brightness to maximum and the standby brightness to two, and in standby I could still faintly see the numbers. There is also a night mode with its own time period and brightness. The thermostat apparently supports Bluetooth too, which is probably used for pairing with the app. At the bottom you get the link quality and an option for a factory reset.
Seeing It on a Dashboard
Once the thermostat is on your MQTT server, every property you see in Zigbee2MQTT shows up on your dashboard. I use my own system, ding.mk, and all the states and settings appeared there. In the State tab in Zigbee2MQTT you can see the exact MQTT payload the thermostat sends. That payload is what you edit to control it, and it is what your smart home system uses behind the scenes.
Modes and Heating Schedules
Because I had been setting the temperature with the knob, the thermostat was in manual mode. Once it was connected to Zigbee, pressing the button in the middle of the knob switched the mode, and in Zigbee2MQTT I could see it change to auto. Heat is the default mode, where the thermostat follows the temperature you set by hand. Auto makes it follow the schedules.
The default schedule keeps the temperature fairly low. From midnight until 6 in the morning it holds 16 degrees, then 19 degrees until 9, then 16 degrees again until 4 in the afternoon, then 19 degrees until 10 at night, and back to 16 until midnight.
You can set up to 12 transitions per day, each with an hour, a minute and a target temperature, and you can do this for each day of the week starting from Sunday. On top of that there are three separate schedule groups, so switching to another group lets you edit a completely different set of times. That makes the thermostat quite customisable on its own, even without something like Home Assistant controlling it.
Wiring It Safely
If you are going to use the switched live output, make sure the live wire goes to the terminal marked as live. With the thermostat in manual mode and the output on, the status light came on and the output terminal was live. When I lowered the temperature, the light turned off and the output was no longer live, while the incoming live was still there.
If you swap live and neutral, the thermostat will still work, but it will be switching the neutral wire instead. That means your load stays connected to live all the time, even when it looks like it is off, and that is a real safety problem if someone touches it.
Keep the display in mind too. With my bench lights back on, I could barely see the output indicator on camera, although I could see it clearly with my own eyes. If you plan to mount this in a very bright room, you may have trouble reading the screen.
The dry contact is only rated for up to 48 volts and 3 amps. Before you connect a boiler, check how your boiler's thermostat input works so you do not push more voltage or current through the relay than it can take, because you can easily damage it. If you need to switch anything over 3 amps, like electric underfloor heating, I recommend using the thermostat to control a contactor. A contactor is a heavy-duty relay, and depending on its rating it can switch basically any load you need. That is the safest option.
Conclusion
The SONOFF TP-WGZBA packs a lot into a small white box. It has two kinds of output, support for a remote temperature sensor, open window detection, a radar that wakes the display, and schedules flexible enough to run on their own. It paired with Zigbee2MQTT without any trouble once I was on a recent version, and every setting I could think of was available there.
I do not have a setup where I can connect it to the eWeLink app right now, so I could not show that side of it. But every setting I changed through Zigbee2MQTT should also be available through Home Assistant or the eWeLink app. My main notes are to watch the display brightness in bright rooms and to be careful with the wiring. I am also curious to try some of the other SONOFF devices, so let me know if you want to see them.
If you want to see more reviews and smart home builds like this one, subscribe to my YouTube channel so you catch the next one.
Links And Resources
- SONOFF TP-WGZBA Smart Thermostat Core
- 10K NTC Thermistor Probe
- Other SONOFF Zigbee Devices
- Zigbee Temperature And Humidity Sensor | SNZB-02DR2
- Zigbee Smart Switch | BASIC-ZB1GSP
- Outdoor Smart Security Camera Hub | CAM-C44HE
- CC2674P10 Zigbee/Thread PoE Dongle | Dongle-MP10
- Zigbee Smart Water Valve
- SONOFF iHost Smart Home Hub
- ding.mk Smart Home Dashboard
- Contactor for High Current Loads: https://s.click.aliexpress.com/e/_c3fBrPUf
- Bench Power Supply: https://s.click.aliexpress.com/e/_c2xzT5bH
- Soldering Station: https://s.click.aliexpress.com/e/_c3jVkdXd
- Microscope: https://s.click.aliexpress.com/e/_c4OEdH2j