@serhii-ha
But I donât know your heating system, so there may well be special features.
However, I am concerned about whether the boiler might end up wasting gas when all rooms have reached the desired temperature, and all valves are closed.
No, because the Boiler will stop heating, because the return temperature is the same as the forward temperature.
If the return water temperature is not very cold, will it reduce its heating?
Yes, but based on the heating curve (Main Settings heater)
I am also considering the option of automating the thermostat temperature change in the Gateway S32 âŠ
No i would not do this, because the heater controller can do this better, because this is programmed with the heater controller. Otherwise this will not work in simple Houses.
It took me almost a heating season on my system (Iâm just a user and not a heating expert) to find the best setting (simple heating):
The temperature on the RC310 (gas boiler) is only used to adjust the heating curve; there is no room measurement. The heating curve describes the flow temperature and temperature spread, taking into account the building structure and the heating requirement and was set when the heating system was installed. At first I had less settings and found that the system modulates very strongly (heater on/off, heat pump on/off) and it works best for me at 25°C.
For the radiators I had normal hydraulic valves and adjusted them to the heating requirement depending on the room. That didnât work well, so I switched to Zigbee thermostats. These measure the room temperature and, depending on this, the heat requirement of the radiator is regulated.
Therefore, I no longer need to control the heating system, because controlling it using the average temperature of the house only results in greater gas consumption and is also not economical.
To monitor the whole thing, I use the EMS-ESP32, temperature sensors on the flow and return, the Zigbee thermostats and Zigbee Aqara temperature, humidity and pressure sensors in each room. Evaluated in Homeassistant and Grafana.
Calendar function is only displayed in the Homeassistant; I set the summer, winter and vacation times either on the heating (RC310) or with ESP32-EMS. An exception is the vacation settings, which I do with a home assistant automation based on the calendar entries.
In summary, the gas boiler must be correctly configured according to the buildingâs heating needs. Then find the right gas boiler temperature setting and regulate the room temperature using heating thermostats.
heating_thermostate_set_temp_pack:
# -------------------------
# inputs
# -------------------------
input_boolean:
heating_thermostat_enabled:
name: Heizungssteuerung Thermostate Temperatur aktiveren
icon: mdi:home-thermometer
holiday_enabled:
name: Urlaubstag Heizungssteuerung ein
icon: mdi:beach
input_number:
thermostat_zentralheizung:
name: Heizung RC310 Solltemeratur
min: 12
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_bad:
name: Bad Solltemperatur
min: 20
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_office:
name: BĂŒro Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_wc:
name: GĂ€ste WC Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_wohnzimmer1:
name: Wohnzimmer Nord Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_wohnzimmer2:
name: Wohnzimmer SĂŒd Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_kitchen:
name: KĂŒche Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_kinderzimmer1:
name: Zimmer Tina Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_kinderzimmer2:
name: GĂ€stezimmer Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_schlafzimmer:
name: Schlafzimmer Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_fitnessraum:
name: Fitnessraum Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
thermostat_eingang:
name: Eingang Solltemperatur
min: 16
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:heating-coil
heating_day_temp:
name: Tagestemperatur
min: 1
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:thermometer
# initial: 24.00
heating_night_temp:
name: Nachtemperatur
min: 1
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:thermometer
# initial: 19.5
heating_min_temp:
name: Min. Temperatur
min: 1
max: 30
step: 0.5
mode: slider
unit_of_measurement: "°C"
icon: mdi:thermometer
# initial: 12.00
# ---------------------
automation:
# ---------------------
- id: check_calendar_holiday
alias: Kalender Urlaub Eintrag
description: PrĂŒft den Start / Ende des Urlaubes im Kalender
initial_state: false
mode: queued
trigger:
- platform: calendar
event: start
entity_id: calendar.urlaubsplaner
- platform: calendar
event: end
entity_id: calendar.urlaubsplaner
condition:
alias: "Thermostatsteuerung prĂŒfen - heating_thermostat_enabled"
condition: state
entity_id: input_boolean.heating_thermostat_enabled
state: "on"
action:
- choose:
- conditions: >
{{ trigger.event == 'start' }}
sequence:
- service: input_boolean.turn_on
alias: "Urlaubsmodus Heizung aktiviert"
target:
entity_id: input_boolean.holiday_enabled
- service: script.infomessagegotify
alias: "Send info message to gotify"
data:
title: "{{'ZEUSUS: Urlaubsplanung'}}"
message: Start des Urlaubes {{ trigger.calendar_event.summary }} @{{ trigger.calendar_event.start }}
- conditions: >
{{ trigger.event == 'end' }}
sequence:
- service: input_boolean.turn_off
alias: "Urlaubsmodus Heizung aus"
target:
entity_id: input_boolean.holiday_enabled
- service: script.infomessagegotify
alias: "Send info message to gotify"
data:
title: "{{'ZEUSUS: Urlaubsplanung'}}"
message: Ende des Urlaubes {{ trigger.calendar_event.summary }} @{{ trigger.calendar_event.start }}
default:
- service: input_boolean.turn_off
alias: "Urlaubsmodus Heizung aus"
target:
entity_id: input_boolean.holiday_enabled
- service: script.infomessagegotify
alias: "Send info message to gotify"
data:
title: "{{'ZEUSUS: Reset Heizungstermostate'}}"
message: "Einstellung Normalbetrieb, kein Urlaub"
- id: setHeatingThermostat
alias: "Heizungsthermostate einstellen"
description: "Setzen der Thermostate Urlaub, Sommer- oder Winterbetrieb"
initial_state: false
mode: queued
trigger:
- platform: time
alias: "Check time at 00:00:10"
at: "00:00:10"
- platform: state
alias: "AusfĂŒhren wenn Thermostate Temperatur (heating_thermostat_enabled) aktiviert wurde."
entity_id: input_boolean.holiday_enabled
from: "off"
to: "on"
- platform: state
alias: "AusfĂŒhren wenn Thermostate Temperatur (heating_thermostat_enabled) deaktiviert wurde."
entity_id: input_boolean.holiday_enabled
from: "on"
to: "off"
action:
- variables:
thermostats:
- thermostat_office
- thermostat_wc
- thermostat_kitchen
- thermostat_wohnzimmer1
- thermostat_wohnzimmer2
- thermostat_bad
- thermostat_kinderzimmer1
- thermostat_kinderzimmer2
- thermostat_schlafzimmer
- thermostat_fitnessraum
- repeat:
for_each: "{{ thermostats }}"
sequence:
- service: climate.set_temperature
alias: "Set the selected thermostat temperature based on the input_number (min, value, max)"
data:
temperature: >-
{%if is_state("input_boolean.holiday_enabled","on") %}
{{ state_attr('input_number.' ~ repeat.item,'min') | float(0.00) }}
{%elif is_state('sensor.thermostat_hc1_summer_mode', 'Sommer')%}
{{ state_attr('input_number.' ~ repeat.item,'max') | float(0.00) }}
{%else%}
{{ states('input_number.' ~ repeat.item) | float(0.00) }}
{%endif%}
target:
entity_id: "climate.{{ repeat.item }}"
- delay:
milliseconds: 200
- service: script.infomessagegotify
alias: "Send info message to gotify"
data:
title: "{{'ZEUSUS: Heizungssteuerung - Thermostate'}}"
message: "Thermostat {{ repeat.item }} wurden am: {{ now().strftime('%Y-%m-%d %H:%M:%S') }} auf {{ state_attr('climate.' ~ repeat.item,'temperature') | float(0.00) }} °C eingestellt."
- id: resetHeatingtemp
alias: "Heizungsthermostate reset"
description: "Reset der Thermostate Urlaub, Sommer- oder Winterbetrieb"
initial_state: true
trigger:
- platform: state
entity_id:
- input_boolean.heating_thermostat_enabled
condition:
alias: "Thermostatsteuerung prĂŒfen - heating_thermostat_enabled"
condition: state
entity_id: input_boolean.heating_thermostat_enabled
state: "on"
mode: queued
action:
- variables:
thermostats:
- thermostat_office
- thermostat_wc
- thermostat_kitchen
- thermostat_wohnzimmer1
- thermostat_wohnzimmer2
- thermostat_bad
- thermostat_kinderzimmer1
- thermostat_kinderzimmer2
- thermostat_schlafzimmer
- thermostat_fitnessraum
- repeat:
for_each: "{{ thermostats }}"
sequence:
- service: climate.set_temperature
alias: "Set the selected thermostat temperature based on the input_number (min, value, max)"
data:
temperature: >-
{%if is_state("input_boolean.holiday_enabled","on") %}
{{ state_attr('input_number.' ~ repeat.item,'min') | float(0.00) }}
{%elif is_state('sensor.thermostat_hc1_summer_mode', 'Sommer')%}
{{ state_attr('input_number.' ~ repeat.item,'max') | float(0.00) }}
{%else%}
{{ states('input_number.' ~ repeat.item) | float(0.00) }}
{%endif%}
target:
entity_id: "climate.{{ repeat.item }}"
- delay:
milliseconds: 200
- service: script.infomessagegotify
alias: "Send info message to gotify"
data:
title: "{{'ZEUSUS: Heizungssteuerung - Thermostate reset'}}"
message: "Thermostat {{ repeat.item }} wurden am: {{ now().strftime('%Y-%m-%d %H:%M:%S') }} auf {{ state_attr('climate.' ~ repeat.item,'temperature') | float(0.00) }} °C eingestellt."