Home Home Automation Retrofitting smart heating with Google Assistant & Alexa

Retrofitting smart heating with Google Assistant & Alexa

A year later the project finally comes with Google Home integration

The temperature dropped below 0°C for the first time today, so it is time to revisit my $5 Nest alike thermostat. For some time, I have been looking into integrating Google Assistant into the mix. After discovering gBridge, I can do it properly! Oh, Alexa users read on, as if you used my older project, this one has been redesigned.

Feel free to read on, but I have redesigned this project and an updated tutorial is available here: DIY Smart Heating.

EDIT 07/02/2020: gBridge is shutting down on 15th March, so please check this post for possible alternatives for Google Home.

Smart heating on the budget, a very tight budget

Not So Smart!

This project originally worked with Amazon Echo devices and NodeRED so I have not shared it with any Google communities. Let’s start with a short recap.


  • Complete Google Home integration
  • Google Assistant integration
  • Web UI with Nest alike interface
  • Amazon Alexa compatible
  • Google Calendar support (coming soon)
  • Android Notification support (coming soon)
  • Tasker integration (coming soon)
  • A new thermostat box (coming soon)

My thermostat is 30 years old and comes without any features, the goal was to keep the thermostat operational and add the smart controls on the cheap. At the heart of the system, I have a sonoff basic ($4.99), flashed with Tasmota firmware, which has been coupled with DHT11 Temp & Humidity sensor ($1).

The details of how to wire it has been explained in the main post. So if you want to know the details, read the hardware section of that post. The sonoff works in parallel with thermostat, so you can actually use both at the same time should you encounter any issues.

I’m running a NodeRED server (You can run it on Raspberry Pi Zero ($5) which is responsible for processing all the data. As you can see you could put it all together for about $11!

What do you need?

To “smart-up” your old thermostat, you will need a couple of things:

In this write-up, I used the flow which enables Alexa and Google Assistant, but in the download section below, you will find versions for Alexa and Google Assistant only. Just pick the file you want to use in your setup.

Buy Sonoff Basic R3

Buy it using these links to support NotEnoughTech.

What has changed?

If you an Alexa user, you should update your flow too. Especially this one has been simplified, updated to NodeRED 1.0 and ready for future updates. It’s worth paying attention to this part so you would know what’s what.

NEST dashboard

Updating the original widget, needed 5 payloads. I have modified the template, so I can feed this just once. It will reduce the number of cycles needed, free the CPU a little and makes it easy to update.

The modified update node gathers all information and pushes it to the dashboard as one payload:

Function Node: Update
var targetTemp  = flow.get('TempTarget');
var ambientTemp = flow.get('TempAmbient');
var state = flow.get('heatingState');
var leaf = flow.get('leaf');
var hvac = flow.get('hvac');
var away = flow.get('away');
var heatswitch = flow.get('heatingSwitch');
var ecoLOW = flow.get('ecoLOW');
var ecoHIGH = flow.get('ecoHIGH');

// update the heating state

if(msg.topic === "update"){
if (ambientTemp < targetTemp){ flow.set('heatingState', "heating"); flow.set('heatingSwitch', "ON"); } if (ambientTemp >= targetTemp){
flow.set('heatingState', "off");
flow.set('heatingSwitch', "OFF");

// display the leaf
if (ambientTemp > ecoLOW && ambientTemp < ecoHIGH){ flow.set('leaf', true); } //away if (away === true){ flow.set('hvac', "off"); flow.set('heatingSwitch', "OFF"); flow.set('heatingState', "off"); flow.set('TempTarget', 6); } } //Alexa if (msg.command === "SetTargetTemperatureRequest") { flow.set('away', false); flow.set('TempTarget', msg.payload); } if (msg.command === "GetTemperatureReadingRequest"){} //slider if (msg.topic === "slider") { flow.set('away', false); flow.set('TempTarget', msg.payload); msg.topic = "setValues"; msg.ambient = ambientTemp; msg.target = targetTemp; msg.hvac = state; msg.leaf = leaf; msg.away = away; return msg; } msg.topic = "setValues"; msg.ambient = ambientTemp; msg.target = targetTemp; msg.hvac = state; msg.leaf = leaf; msg.away = away; return msg;

You notice, that I push all my data to flow variables. I can update these from different sources and I'm able to access the latest data set this way. It should reduce any issues.

Google Home & Google Assistant support

You will notice more MQTT nodes in this flow. This is because gBridge uses MQTT to integrate your devices with Google Home and Google Assistant. You can register a free account (up to 4 devices) and create a virtual device that uses ON|OFF and Temp Control traits.

  1. Update the target temp set by Google Home or Google Assistant
  2. Update the status of the heating from Google Home widget
  3. Update the status of the heating from Google Assistant voice command
  4. Pass state of the heating to Google Home (On|OFF)
  5. Update Google with the ambient humidity
  6. Update Google with the ambient temperature

You should read this post if you want to understand how these work, as some editing (topics) needs to be done! Changes made in Google Home app, or via voice commands will sync with Alexa and the Web GUI and the other way around.

The only quirk, for now, is the voice commands:

Turn "Heating" on         has no effect
Set "Heating" on|off      works

The rest of the commands like Set "Heating" to 20°C works without any issues.

Changes in Temp and Humidity updates

Google requires you to pass data as a float with a single decimal value. I needed to hunt the values around and make sure it's not passed as a string. I also used a function node to convert the value:

var humid = msg.payload.DHT11.Humidity;
 var x = humid.toFixed(1);
 flow.set('HumidAmbient',x );
 msg.payload = x;
 msg.topic = "Humidity";
 return msg;

var temp = msg.payload.DHT11.Temperature;
 var x = temp.toFixed(1);
 flow.set('TempAmbient',x );
 msg.payload = x;
 msg.topic = "Temperature";
 return msg;

var target = msg.target;
 var x = target.toFixed(1);
 msg.payload = x;
 return msg;
Sonoff controls

Lastly, I have duplicated the sonoff controller, as the payloads delivered by Google via gBridge are different. It was easier to set an extra output and duplicate the node than try to combine this.

Function Node

var defaultTemp = flow.get("defaultTemp");
//msg1 = OFF|ON
//Mmsg2 = off|heat
//coming frrom alexa
if (msg.command === "TurnOffRequest"){
flow.set("heatingState", "off");
flow.set('away', true);
var msg1 = { payload:"OFF" };
var msg2 = { payload:"off" };
return [msg1, msg2];
if (msg.command === "TurnOnRequest"){
flow.set('TempTarget', defaultTemp);
flow.set("heatingState", "heating");
flow.set('away', false);
msg1 = { payload:"ON" };
msg2 = { payload:"heat" };
return [msg1, msg2];
//coming from an update node
if (msg.topic === "update"){
var z = flow.get('heatingState');
if(z === "heating"){
msg1 = { payload: "ON"};
msg2 = { payload:"heat" };
return [msg1, msg2];
if(z === "off"){
msg1 = { payload: "OFF"};
msg2 = { payload:"off" };
return [msg1, msg2];

var defaultTemp = flow.get("defaultTemp");
//msg1 = OFF|ON
//Mmsg2 = off|heat
if (msg.payload === "off" || msg.payload === "0"){
msg.payload = "off";
flow.set('away', true);
flow.set('hvac', "off");
var msg1 = { payload:"OFF" };
var msg2 = { payload:"off" };
return [msg1, msg2];
if (msg.payload === "heat" || msg.payload === "1"){
flow.set('TempTarget', defaultTemp);
flow.set('away', false);
flow.set('hvac', "on");
var msg1 = { payload:"ON" };
var msg2 = { payload:"heat" };
return [msg1, msg2];
return msg;

Settings in NodeRED 1.0

NodeRed 1.0 comes with new features, so I wanted to streamline the way you set the parameters. In this case, there are 3 values you need to set:

  • default temp - preset temp value to set your thermostat when you say set "heating" on without temperature specified
  • ecoLow - define the low end of the temp where the "eco" leaf shows up
  • ecoHigh - define the low end of the temp where the "eco" leaf shows up


For now, I'm keeping the existing dashboard. You can access it via any web browser providing you can open up the 1880 port. I have added a 72h chart, just in case, you would like to see the heating trends. You can also include the target temp (add a unique topic msg.topic = "Target";) to trace the heating behaviours.

Note about hysteresis

This is a less self-balancing system. The temperature updates are sent every 5 minutes with a mean value taken from 15 readings. This and the fact that the radiators keep warm for some time after being turned off seems to be balancing system well and I have not noticed any issues.

I actually added a function node so you could check how often the heating is on:

var state = msg.hvac;
 if(state == "heating"){
    var x = 5; 
 if(state === "off"){
     var x = 0; 
 msg.payload = x;
 msg.topic = "Hysteresis";
 return msg;

If the system is on, the graph will draw a green line at the 5th position otherwise 0.

Things to come

It's a great opportunity to follow me on social media, as I will be adding extra features (including a much more pleasing to eye thermostat). If you want to time your thermostat, use Google Home and Alexa Routines for now, but soon you should be able to set a Google Calendar to control the heating patterns.

Android device will get a designated app and persistent notification controls so you could control the heating from the notification shade as well as fancy WebUI.

Lastly, there will be a proper (probably ESP32) based box with per room controls! Yes, I'm planning valve controls and per room temperature setting. Try this with your NEST!


I'm ready for the winter ahead. I have used this system for a year now and it has been great. I had a single failure (self-inflicted, issues with another project) which was resolved by an automatic reboot policy at 4 am (just in case) so whether you are in the Alexa team or Google Home you have now access to cheap as chips NEST alike thermostat.

If you are like me, you will also like the fact that this flow simply lets you use all 3 systems *(Amazon Echo, Google Home and NodeRED) and they all integrate well! Finally! If you have any questions about the project, leave it in this Reddit thread.

Project Download

Download project files here. Bear in mind that Patreon supporters have early access to project files and videos.


Nothing says "Thank you" better than keeping my coffee jar topped up!


Support me on Patreon and get an early access to tutorial files and videos.


Bitcoin (BTC)

Use this QR to keep me caffeinated with BTC: 1FwFqqh71mUTENcRe9q4s9AWFgoc8BA9ZU

Smart Ideas with

Automate your space in with these ecosystems and integrate it with other automation services

Learn NodeRED

NodeRED for beginners: 1. Why do you need a NodeRED server?

To server or not to server? That's a very silly question!

Best Automation Projects

Sonoff R3 DIY mode & why it sucks

Long awaited Sonoff R3 DIY mode is even worse than I expected.

NEST your old thermostat under $5

Nest-ing up your older thermostat under $5

IKEA TRADFRI Wireless dimmer in NodeRED

Thanks to NodeRED you can use IKEA TRADFRI Wireless Dimmer to interact with everything

Alexa and NodeRED integration

Hey Alexa, turn the lights on!

Smart Home

M5Paper – the “Kindle” of development and automation

M5Paper combines a brilliant multitouch e-ink display with power of ESP32 to create the most unique programming board

A seriously connected relay! Netio 4PZ

Netio 4PZ could be called a jack of all trades, as it brings multiple functions to a single device. I'm sure some of you will be quick to point out that it doesn't have PoE or it doesn't make your morning toasts. You might...

Strip time! Sonoff L1 Lite RGB LED

New product from ITEAD - Sonoff L1 Lite - budget friendly connected RGB LED strip with a microphone

DIY Smart Heating v3.0

Anyone looking for Smart Heating in 2021 is spoiled for choice, providing money isn't an issue. My home has 30-year-old heating installed, but that didn't stop me from adding "smart" component to it for less than $5. In 3 years time, I had a...

A comprehensive guide to Grafana & InfluxDB

How to use Grafana and InfluxDB on Raspberry Pi for IoT sensors in home automation