DIY OpenTherm Thermostat?

I wanted to make integrating an OpenTherm device a little easier in Home Assistant, so I started a collection of drop-in templates for ESPHome for people that want to control their OpenTherm device from Home Assistant.
The goal is to make it easy for people that want to go this route and remove some of the friction that currently exists. Let me know what you think of this, and feel free to submit other models if you have them available. I’ll try to increase the supported models this week as I have a few more friends that want this.

3 Likes

Does anybody know how to send the outdoor temperature to the opentherm adapter? I have a sensor outside and I would prefer to use that instead of the sensor of the boiler.

Secondly, did anybody try this system with the average room temperature and average target temperature in case of multizone heating. By using the coldest room the boiler will always change his target temperature when the active zone is changing.

I am capable of changing my central heating water temp from home assistant. I would like to make that dependent of the outdoor temperature. I know there is modulation, but on days that the outdoor temperature is higher than -1 I can perfectly heat with max 40 degrees. On colder days I need 45 or even 50.

This is my automation:

- id: '1617292479611'
  alias: ot outside
  description: ''
  trigger:
  - platform: time_pattern
    minutes: /5
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: OTGW/set/otgw-<REDACTED>/command
      retain: true
      payload_template: OT={{ state_attr('weather.<REDACTED>', 'temperature') | float(0)
        }}
  mode: single

Assuming you have a opentherm gateway.

I have the diyless gateway. Does this work on that?

Ii’ve got a opentherm gateway by Nodo-shop and use mqtt to do this.
But if you use the opentherm gateway intergration then you should be able to do the same with the service opentherm_gw.set_outside_temperature.
You can find an example here.

1 Like

Anyone has found that the Home Assistant.12 update breaks the thermostat integration? Reading boiler temp and target temps no longer work unless I roll back to 11.5.

I’m planning to do the same. My idea was to just use an automation in home assistant and publish a new high temp to the topic ‘BASE_TOPIC + "high-temperature/set’. I tested it allready and it works. You can even use it for setting different max water temperature for different rooms.
For example if the boiler is heating for a smaller room, you could lower the max temperature. If the boiler is working for the living room, you could make it a bit higher.
But i have the impression the algorithm is determining the temperatures and heating my rooms quite good allready, it is not too aggressive and still heats enough. For example when it has to heat up a bigger room 2 degrees i goes to the maximum temperature i set (60degrees), but once heated up, and to just keep it at that temperature uses 45-50 degrees. For smaller rooms 50 degrees for maximum temperature is allready enough.
At the moment i’m playing a bit with the high temp override topic trough an input number in home assistant. I’m surprised how low i can set this temperature under some circumstances.

I think the mqtt stuff changed recently. I got an error when trying to add the sensors as well. I got it working using the following code (both sensors and climate). Note that I added all the sensors that I could find in the arduino code, even though my boiler doesn’t support all these. I’m still fiddling with everything. I might have misinterpreted some of the sensors as well so maybe double check my sensors with the arduino sketch.

mqtt:
  sensor:
    - state_topic: "opentherm-thermostat/current-temperature/get"
      name: "OT Current temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/high-temperature/get"
      name: "OT Boiler High temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/low-temperature/get"
      name: "OT Boiler Low temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer  
      
    - state_topic: "opentherm-thermostat/setpoint-temperature/get"
      name: "OT Current Setpoint temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/mode/get"
      name: "OT Current mode"
      value_template: "{{ value }}"
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/boiler-temperature/get"
      name: "OT Boiler temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/boiler-target-temperature/get"
      name: "OT Boiler target temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/integral-error/get"
      name: "OT integral error"
      value_template: "{{ value }}"
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/flame-status/get"
      name: "OT flame status"
      value_template: "{{ value }}"
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/flame-level/get"
      name: "OT flame level"
      value_template: "{{ value }}"
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/dhw-temperature/get"
      name: "OT DHW temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/dhw-actual-temperature/get"
      name: "OT DHW actual temperature"
      value_template: "{{ value }}"
      unit_of_measurement: '°C'	
      icon: mdi:thermometer
      
    - state_topic: "opentherm-thermostat/dhw-state/get"
      name: "OT DHW state"
      value_template: "{{ value }}"
      icon: mdi:thermometer

    - state_topic: "opentherm-thermostat/cv-modulation/get"
      name: "OT modulation status"
      value_template: "{{ value }}"
      icon: mdi:thermometer      
    
  climate:
    modes:
      - "off"
      - "heat"
    name: "OT Climate"
    current_temperature_topic: "opentherm-thermostat/current-temperature/get"
    mode_command_topic: "opentherm-thermostat/mode/set"
    mode_state_topic: "opentherm-thermostat/mode/get"
    temperature_command_topic: "opentherm-thermostat/setpoint-temperature/set"
    temperature_state_topic: "opentherm-thermostat/setpoint-temperature/get"
    min_temp: 12
    max_temp: 23
    value_template: "{{ value }}"
    temp_step: 0.5    
1 Like

To improve the WAF, I’d love to be able to use the slave shield so we can also use our OG wall thermostat. The DIYless guy has a sketch for the slave shield, but there’s no sketch for master+slave+home assistant support. I don’t have the programming skills to combine the two. Has anyone else figured this out yet?

I’ve bought the OpenTherm Thermostat combo (ESP8266/ESP32 Thermostat Shield + WeMos D1 Mini ESP32 + Xiaomi Thermometer LYWSD03MMC) but stay receiving “OT Conn Loss” after some time, any idea on what could cause this? My boiler is an Vaillant HRsolide plus 24-28/3-5 With Opentherm Module, it works fine with just an modulating thermostat on the OT connection.

Is it working at the start and does it stop working later, or does it not talk to the boiler at all?

With Opentherm Module, it works fine

You mean master shield?

It works in the beginning, even getting it to heat works, but after some time it (10-15 minutes) it stops working (OT conn loss). Was using the thermostats original wiring at first (close to 12-15m length) and tried it temporarily with a new cable (1m length) because i tried to rule it out that it was the cable, but gave the same result

Sorry for double posting, but i ment that my boiler has an optional OpenTherm module, which works fine with the original thermostat

hi all,

just installed the opentherm module and wanted to ask if this was normal behavior. I don’t know a lot about opentherm and i’m still in the learning curve. I have a daalderop cube duo with floorheating.
max watertemp is set to 55 and low is i think 20 bot not sure. Room temperature is set to 18 degrees and it’s now 19.7.
the system is now running for approximately 4 hours. let me now if you see some anomaly or something i need to pay attention to.

Hi there,

Could Opentherm monitor whether the warm water tap sensor is trigger t on a Intergas HRE? My current HoneyWell cant read that sensor and It’s needed for a current energy/money saving project. I don’t have the hardware jet, but if Opentherm can read this sensor I might prioritise this project.

Thanks in advance

I’m heading in the same direction for my setup. My Intergas HRE boiler can have 2 zones. So here’s my plan:

  • Zone 1 - This is my living room, with floor heating, and it has a thermostat that uses OpenTherm to regulate the boiler.
  • Zone 2 - The boiler can only have an on/off thermostat in this zone, so theoretically all I need is to send an ON signal when it should turn on, and OFF when off. I can use HA to determine when it needs to be on (when at least one of my TRVs are below the target temperature).

Question is, what signal does an on/off thermostat send to the boiler? Is it a signal, or is it just a circuit that’s completed. Anyone know?

If it’s just a circuit, I can use any smart switch. If it’s a signal, I’m going to need a board I guess.

Tips? Ideas?

Some boilers with basic thermostat need a live feed to turn on. Others need a loop closed (dry contact). You’ll have to check the type of boiler.

I found this which may help as it explains the difference between the two types in a smartphone sort of way (and how to mangle a sonoff into a dry contact smart relay)

1 Like

Seems the second thermostat connection in my boiler requires (0,1A-24Vdc), and it has to be an on/off thermostat (not OpenTherm). I’m no expert at electronics, but does this mean it MUST have 24V or it MAY have 24V? I still interpret it as if closing the circuit would be enough to work though. The manual doesn’t say much more than the above.