Heating on/off switch on the board for an ESP8266 relay next to our office thermostat
Founder of a small logistics startup, not an engineer, so apologies in advance. Our warehouse office has an old wall thermostat for a gas heater. I want to be able to switch the heat on from our Hermetry dashboard before people arrive, and see the office temperature.
What I have so far: a Sonoff Basic R2 (ESP8266) that I flashed with my own Arduino sketch using PubSubClient. It sends a DS18B20 temperature every minute to v1/telemetry and that part works, I can chart it. I added a Switch card on the board, but in the settings under Run a command the command list for the device is empty, and when I tried the raw method box I got “This command is not in the device profile’s catalogue, so it cannot be sent from a board.”
In the sketch I subscribe to v1/rpc/req/+ and toggle GPIO12 when method is heat.set. Also I’m not 100% sure how the Sonoff goes into the thermostat wiring, I was going to put its output across the two thermostat terminals.
Following, I want to do something similar for meeting rooms in our hotel.
Stop before the wiring part. A Sonoff Basic switches mains live through to its output. Thermostat terminals on most gas heaters are a low voltage call-for-heat loop. Putting the Basic’s output across them puts 230 V on the boiler’s control board. What voltage is on those two wires?
Measured it, 24 V AC. So… good thing I asked.
Yep did the same mistake on paper last winter at home. You want a dry contact, so either a relay module that’s volt-free (the Sonoff RE5V1C style board, or any ESP8266 plus a 5 V relay module wired COM/NO) across the thermostat terminals, in parallel with the old thermostat so it still works if your board dies.
The board side was easier than I thought once I found the catalogue. Open the device’s profile, Commands tab, Add command:
Method: heat.set
Label: Heating
Tier: Basic
Parameters: on (Yes / no, required)
Only Basic tier commands from that list show up in the Switch settings. Then in the Switch: Run a command, pick the device and heat.set, value from “The control’s value”. Bind Current state to a telemetry key the board reports, I send heat_on as 0/1 with every reading so the switch shows what the relay is really doing, not what you clicked. For a light or heating you can turn “Ask before running” off. Reply on the same id or the card sits on “Sent; waiting for the device”:
// in callback, topic "v1/rpc/req/17"
String id = String(topic).substring(11);
digitalWrite(RELAY, on ? HIGH : LOW);
mqtt.publish(("v1/rpc/res/" + id).c_str(), "{"ok":true}");
Page I used: Control cards.
Got a volt-free relay board, wired in parallel with the old thermostat, and added heat.set to the profile. Switch works and shows the real state. The bit I was missing in code was the reply, without it every click said no answer after 30 seconds even though the heater came on.
Keep the old thermostat set to something like 12 °C as frost protection in parallel, then if the internet or your board is out the building still won’t freeze.
- You must be logged in to reply to this topic.
Join the conversation
Sign in to ask and answer, like helpful posts and mark the reply that solved your problem. Every contribution earns points and levels.

