Wanted to share my project since i’ve been looking for this quite some time, didn’t find the solution I was looking for and decided to make it myself. Maybe there is someone here looking for the same, or I can inspire some to make this. Sorry for the long post in advanced
Some background info:
I heat my house with a electric heatpump from Vaillant, this heats the water to around 30/35 degrees. On the groundfloor In have heating in the floor but in the rest of the house its from radiators. When I bought the place I installed the Jaga DBH radiators. These have fans that increase the airflow so the low water temperature isn’t a downside in heatdispersion. These radiators can be controlled with a 0-10v command. I had some Danfoss LC13 valve’s but im no big fan of those, they eat batteries and are sometimes very slow to react on changes. When the batteries go dead the valves opens making the room a private sauna if you’re not carefull. This, with the unstopable urge to connect everything with a powercord, my hunt began.
I had some demands that needed to be in the project:
- Instant respons on changes
- Control over the valve
- Control (in speed) over the fans
- Temperature measurment
- Everything had to be hidden (no extra wires or anything)
The DBH module runs on 24Vdc and there is a 230Vac wallsocket behind every radiator, this was a major win because I had already 2 types of power hidden from sight. I have some ESPHome devices running and am very happy with the easyness of setup and the way they operate. This was my starting point.
I made a scrap setup with a stepdown module to get the 24Vdc to 5vdc. I connected a relais and a PWM to 0-10v module, 2 temperature sensors and Frankenstein was born:
The basics was working, but I didn’t get the 0-10v working… In the meantime (I was very inpatient) I designed a PCB on JLCPCB that could fit al the items:
When the PCB’s arived I found out that the PWM module I bought was actualy for 5v PWM, not 3.3V so I had te buy others, but the footprint was different so I needed some adaptation to fix it (didn’t want to redesign the PCB’s).
Finaly is solderd everything and the results are nice:
I had my 3D printer running to make the cases i designed to make it al hidden from sight:
The hardware part was done. I flashed the ESPHome on the ESP8266’s and installed the boxes in the radiators. Don’t forget to change the little dial (don’t now the name) on the Jaga DBH module to position 5.
The software part was quit easy because ESPHome has a dedicated Climate and Thermostat function, really nice.
The code I used for this (although still in tweaking mode) is the following:
dallas:
- pin: D4
update_interval: 30s
sensor:
- platform: dallas
address: 0x643ca10457e41e28
name: "Input temperatuur"
id: Temp1
- platform: dallas
address: 0x613c5f04574f8828
name: "Output temperatuur"
id: Temp2
output:
- platform: esp8266_pwm
pin: D2
frequency: 1000 Hz
id: ventilatie_output
fan:
- platform: speed
output: ventilatie_output
name: "Ventilatie"
id: fan_1
switch:
- platform: gpio
name: "Klep"
pin: D6
id: klep
inverted: True
climate:
- platform: thermostat
name: "Thermostaat"
sensor: Temp1
min_cooling_off_time: 300s
min_cooling_run_time: 300s
min_fanning_off_time: 300s
min_fanning_run_time: 300s
min_heating_off_time: 300s
min_heating_run_time: 300s
min_fan_mode_switching_time: 0s
min_idle_time: 30s
cool_overrun: 1
heat_overrun: 1
#Climate actions
cool_action:
- switch.turn_on: klep
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 40%
heat_action:
- switch.turn_on: klep
- delay: 180s
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 40%
off_mode:
- switch.turn_off: klep
- fan.turn_off: fan_1
idle_action:
- switch.turn_off: klep
- delay: 180s
- fan.turn_off: fan_1
fan_only_action:
- fan.turn_on: fan_1
- switch.turn_off: klep
- output.set_level:
id: ventilatie_output
level: 50%
#Ventilatie niveau's
fan_mode_on_action:
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 40%
fan_mode_off_action:
- fan.turn_off: fan_1
fan_mode_low_action:
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 20%
fan_mode_medium_action:
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 50%
fan_mode_high_action:
- fan.turn_on: fan_1
- output.set_level:
id: ventilatie_output
level: 100%
#Preset levels
default_preset: Auto
preset:
- name: Auto
default_target_temperature_low: 18 °C
default_target_temperature_high: 24 °C
fan_mode: LOW
mode: HEAT_COOL
- name: Eco
default_target_temperature_low: 14 °C
default_target_temperature_high: 26 °C
fan_mode: LOW
mode: HEAT_COOL
- name: Sleep
default_target_temperature_low: 13 °C
default_target_temperature_high: 26 °C
fan_mode: LOW
mode: HEAT_COOL
- name: Comfort
default_target_temperature_low: 19 °C
default_target_temperature_high: 24 °C
fan_mode: MEDIUM
mode: HEAT_COOL
- name: Away
default_target_temperature_low: 10 °C
default_target_temperature_high: 30 °C
fan_mode: 'OFF'
mode: 'OFF'
captive_portal:
Now I can control the radiators from HA and have a direct response. It works super nice and I’m very happy with the result. My dashboard card’s are like this:
The top is from the Fibaro Motionsensors I have in the room.