OT Thing - An OpenTherm-WiFi Gateway with integrated OT master & slave

I built my own OpenTherm gateway with a compact singleboard design:

Features:

  • ESP32-C3 CPU
  • OpenTherm master & slave
  • Bypass relay
  • Terminal screws for 1wire sensors & digital input
  • Reset & configuration button
  • USB-C connector for supply, flashing & interface
  • 4 status LEDs
  • Compact enclosure

Project-homepage (german):

4 Likes

Hello Stefan,

I have a boiler:
Geminox THRi 1-10 and a QAA73 thermostat.

I would like to connect them to Home Assistant and analyze the data and also manage the temperature and other parameters remotely.

I would like to ask if this board will also allow me to keep the original thermostat QAA73. Currently, my thermostat is connected to the boiler via two cables and there is 25V on them. (thermostat is supposed to be powered through an opentherm wires).

thx for answer

Miro

Hi Miro,

your equipment seems to use opentherm for its communication. You can setup the otthing in gatewaymode between your boiler and your roomunit and let the roomunit still control the boiler while otthing is monitoring all data and sending it to homeassistant. In gatewaymode you can also override the ch &dhw temperatures from homeassitant.

Kind regards
Stefan

2 Likes

Brilliant! A nice piece of hardware, exactly what I was looking for.

I have some questions on the software. Is OTThing your own development? Is the code available? Can you run OTGateway on this hardware, and if so, would that replace OTThing?

Hello Stefan,
I’m trying to order and it won’t ship to Slovakia.
When I choose another country, like the Czech Republic, everything is OK and shipping is 7EUR

  • Es wurde keine Versandart ausgewählt. Bitte überprüfe deine Adresse oder kontaktiere uns, wenn du Hilfe benötigst.

Hi,

I fixed the shipping settings.

Kind regards,
Stefan

Hi,

The firmware of the OTThing is open, you can find it here:

Can you send a link of the firmware you mean?

Kind regards
Stefan

Hi Stefan,

Thank you! I’m referring to GitHub - Laxilef/OTGateway: OTGateway is a powerful open-source solution for controlling OpenTherm-compatible boilers, turning your heating system into a smart one. Set the perfect temperature, save on energy bills, and eliminate unnecessary hassle — integration with Home Assistant makes heating management simple and automated.

Hello! Nice work! Very interesting!
I have a Baxi Luna in plus boiler. I have an outside temperature sensor (siemens qac34) that is connected to the boiler.
Στιγμιότυπο από 2025-02-01 08-53-33

Can this data been read it and used?
Also i have sonoff temperature sensors inside and also outside the house connected with HA also. Can this data used as input for outside temperature and room temperature (instead of wiring room-unit)

As mirino75 wrote now on boiler is wired the “keypad unit” that must used opentherm protocol. It has to be unwired or on the same clamp the same time can connect both?

Στιγμιότυπο από 2025-02-01 08-55-29

Sorry for the many photos

Yes, this (by the way greate!) firmware can be used, see Add support board "OT Thing" by Phunkafizer · Pull Request #123 · Laxilef/OTGateway · GitHub
But it does not support the OpenTherm slaveinterface on the OT Thing, so a connected roomunit will not work.

Greetings,
Stefan

1 Like

Hi,

you will have to cut the two wires from your boiler to the roomunit and connect all 4 wires the OTThing between:

If you disconnect power from OT Thing the relay on the board will reconnect the wires as it was before.

If you have the outsidetemperature available in homeassistant you can send it with an automation to OTThing, here is an example:

alias: OTThing outside temperature
description: ""
trigger:
  - platform: time_pattern
    seconds: /30
condition: []
action:
  - service: mqtt.publish
    metadata: {}
    data:
      qos: "0"
      retain: false
      payload: "{{ state_attr(\"weather.home\", \"temperature\") }}"
      topic: otthing/31F374/outsideTemp/set
    enabled: true
mode: single

This will sent the outside temperature from HA’s weather integration every 30 s to the OT Thing.

I think that also the outsidetemperature sensor connected to the boiler could be used if the boiler makes it available over the opentherm interface. If needed I could add this to the firmware so that it can be selected as the source for outsidetemperature. The current roomtemperature is not used by the OT Thing as it calculates the needed flow temperature from the outsidetemperature.

Kind regards
Stefan

1 Like

So it uses outside temperature to “decide” the temperature of the heated water that circulates?
I thought usually that on OT protocol the inside temperature sensor was communicating with the boiler
And depending on the “rate” of changing of the inside home temperature it could control the heating water temperature in order to have a smooth result.

There are different “concepts” how to control the flow temperature of the heating. It depends heavily on the setup (how many rooms, thermostat on the heating elements, …) which way to choose. In my setup I have the room unit located in the living room, but in this room there is also a wood ofen. When I fire the wood ofen the thermostat would think the room is warm enough, lowering the flow temperature, causing all other rooms to become too cold. Or: If I do not need my living room warm with the thermostat in it by turning down the valves in this room the thermostat always wood demand a higher flowtemperature than needed.
In general, what you want to have is the flowtemperature as low as needed and the valves of the heating elements wide open in order to have low loss off energy. There is a vid on youtube (unfortunately in german) which explains this very good:

In order to keep the rooms on a constant temperature, you have to feed in the same amount of energy which is going out of the rooms; the amount of energy going out of the rooms depends on the outside temperature, the amount of energy going in the rooms depends on the flowtemperature.

Yes i understand what are you saying.
Can it be modified in order to have a graph that you it has boiler temp and inside temp? so you can modify your curve as you like etc?

Hi Nikolaos,

it does not make sense to calculate the boiler temp just from the current inside temp; say your roomsetpoint is set to 21 C°, the required boiler temperature is complety different for an outside temperature of -5 C° or +10 C°. But anyway you could simply write an automation in homeassistant in order to set the boiler temperature you want.

Kind regards
Stefan

1 Like

Meanwhile OT Thing supports roomtemperature compensation. The higher the difference betweens room set temperature and current room temperature, the higher the flow temperature. The sources of both room set point and current room temperature can be configured. Source of room set point can be OT roomunit or MQTT / Home Assistant, current room temperature can be OT roomunit MQTT / Home Assistant, or 1wire.

It could learn how quickly the room temperature is increasing and from that calculate the flow temperature required to heat the room to the target temperature within a given time.

Outside temperature is a suboptimal proxy for heat loss as that’s also affected by other factors such as insulation and amount of ventilation (inherent or manual). With this method, you’d estimate heat loss directly and hence come closer to the ideal heating curve without having to guess parameters.

Hi Robert,

thank you very much for your idea. I think that this method would only work good if you only have 1 room and if there are no further influences like venting or additional heating (chimney, …) which would affect all other rooms. Also this room would have to be heated all the time while learning the control parameters. In my case I have 8 rooms, every room additionally has it’s own programmable valves which go on and off and certain times when the rooms are in use.
Outside temperature is the most important and dynamic value for getting the amount of lost energy in a given timeperiod:
dQ/dt = C * (Troom - Toutside)
Of course it is heavily dependent of the given physical setup like insulation; this is why the heating curve has to be adjusted, all constant physical properties result in the constant adjustable parameters (gradient, offset) of the heating curve.

Hi Sstefan,

OT Thing is updated with firmware version 2.0 now.
Starting in “repeater mode” the thermostat is frozen, as discussed before.
Now I investigate if it is ok for me to use OT Thing in “master mode”. Therefore, let me explain the configuration of my heating system.
In my case I have 6 rooms, every room has floor heating and temperature sensors. A central unit with valves to controle 8 zone’s depending on the setpoint temperature of the Livingroom. For every room temperature there is a compensation to realise e.g. a lower temperature for the bedroom.

Now I’m looking for a, good as possible, stable temperature in the Livingroom.

Can you gif any advice.

Log:

MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.7ode":1,"ipsta":"192.168.188.34","mac":"9C:9E:6E:31:F4:68","hostname":"otthing","sta_ssid":"AllFindOn","rssi":-64},"mqtt":{"connected":true,"basetopic":"otthing/31F468"},"boiler":{"connected":true,"txCount":0,"rxCount":0},"thermostat":{},"outsideTemp":12.7,"heatercircuit":[{"roomsetpoint":13.51,"roomtemp":21.1},{}]}verable=falseshellyplug-4D3DDDlocal
MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.78.34
MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.68.34
MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.6_http_tcplocal
MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.6ode":1,"ipsta":"192.168.188.34","mac":"9C:9E:6E:31:F4:68","hostname":"otthing","sta_ssid":"AllFindOn","rssi":-66},"mqtt":{"connected":true,"basetopic":"otthing/31F468"},"boiler":{"connected":true,"txCount":0,"rxCount":0},"thermostat":{},"outsideTemp":12.6,"heatercircuit":[{"roomsetpoint":13.51,"roomtemp":21.1},{}]}2tpv3:1
MQTT: otthing/31F468/roomTemp1/set 21.1
MQTT: otthing/31F468/outsideTemp/set 12.6ode":1,"ipsta":"192.168.188.34","mac":"9C:9E:6E:31:F4:68","hostname":"otthing","sta_ssid":"AllFindOn","rssi":-65},"mqtt":{"connected":true,"basetopic":"otthing/31F468"},"boiler":{"connected":true,"txCount":0,"rxCount":0},"thermostat":{},"outsideTemp":12.6,"heatercircuit":[{"roomsetpoint":13.51,"roomtemp":21.1},{}]}w_id=20230913-114008/v1.14.0-gcb84623discoverable=falseshellydimmer2-CC7B5C5274D6local

Hello Joop,

first of all, can you try the “Test” mode, maybe with your boiler switched of, and wait some minutes if the thermostat is working with it? What does the label “smartpower” on the status page show?

For your setup I think you should simply control your boilers flow temperature from outside temperature in order to have the lowest possible flow temperature. The surface exponent for floorheatings is 1,1, gradient and offset can be adjusted in the surse of time. The OT thing needs the outside temperature, you can build an automation in HA in order to send the outside temperature to OT thing frequenty.
And for every room you could setup a dedicated control loop in home assistant controlling every valve depending of set point and measured temperature per room.