Hot Water Priority by @lloyda - zxdavb/ramses_cc GitHub Wiki
Hot Water Priority with S-Plan
Im my opinion, the EvoHome implementation of hot water priority has one fundamental flaw. If one or more zones have an override set, then hot water priority is disabled. Here are some automations and scripts that overcome that shortcoming by saving the state of any overrides that are in place when hot water reheat is called for, and then restoring them when that is complete.
Prerequisites
- HACS Community Store https://hacs.xyz/docs/setup/download
- home-assistant-variables by snarky-snark https://github.com/snarky-snark/home-assistant-variables
For briefness, I have only shown 3 zones in the code. This can of course be expanded to suit your system.
Additions to config.yaml
var:
zone_00_sp:
friendly_name: 'Zone 0 Temporary Setpoint'
initial_value: 0
restore: true
zone_01_sp:
friendly_name: 'Zone 1 Temporary Setpoint'
initial_value: 0
restore: true
zone_02_sp:
friendly_name: 'Zone 2 Temporary Setpoint'
initial_value: 0
restore: true
zone_00_mode:
friendly_name: 'Zone 0 CH Mode'
initial_value: not_defined
restore: true
zone_01_mode:
friendly_name: 'Zone 1 CH Mode'
initial_value: not_defined
restore: true
zone_02_mode:
friendly_name: 'Zone 2 CH Mode'
initial_value: not_defined
restore: true
zone_00_until:
friendly_name: 'Zone 0 CH Override Until'
initial_value: 0
restore: true
zone_01_until:
friendly_name: 'Zone 1 CH Override Until'
initial_value: 0
restore: true
zone_02_until:
friendly_name: 'Zone 2 CH Override Until'
initial_value: 0
restore: true
Automations
Two automations are required, which look at change of state of the hot water demand.
- id: '1670936587258'
alias: DHW Priority Enable
description: Disables all zone overrides when DHW is heated, saving settings for later
trigger:
- platform: state
entity_id:
- sensor.fa_relay_demand
to: '100.0'
condition: []
action:
- service: script.overrides_save
mode: single
- id: '1671038236020'
alias: DHW Priority Disable
description: Restores all zone overrides when DHW heating is complete
trigger:
- platform: state
entity_id:
- sensor.fa_relay_demand
to: '0.0'
condition: []
action:
- service: script.overrides_restore
mode: single
Scripts
overrides_restore:
alias: Overrides Restore
mode: single
sequence:
- repeat:
for_each:
- zone_entity: climate.evohome_cc_01_185426_00
var_sp: var.zone_00_sp
var_mode: var.zone_00_mode
var_until: var.zone_00_until
- zone_entity: climate.evohome_cc_01_185426_01
var_sp: var.zone_01_sp
var_mode: var.zone_01_mode
var_until: var.zone_01_until
- zone_entity: climate.evohome_cc_01_185426_02
var_sp: var.zone_02_sp
var_mode: var.zone_02_mode
var_until: var.zone_02_until
sequence:
- condition: template
value_template: '{{ states(repeat.item.var_sp) != not_defined }}'
- choose:
- conditions:
- condition: template
value_template: '{{ states(repeat.item.var_mode) == ''temporary'' }}'
sequence:
- service: ramses_cc.set_zone_mode
data:
entity_id: '{{ repeat.item.zone_entity }}'
mode: temporary_override
setpoint: '{{ states(repeat.item.var_sp) }}'
until: '{{ states(repeat.item.var_until) }}'
- conditions:
- condition: template
value_template: '{{ states(repeat.item.var_mode) == ''permanent'' }}'
sequence:
- service: ramses_cc.set_zone_mode
data:
entity_id: '{{ repeat.item.zone_entity }}'
mode: permanent_override
setpoint: '{{ states(repeat.item.var_sp) }}'
overrides_save:
alias: Overrides Save
mode: single
sequence:
- repeat:
for_each:
- zone_entity: climate.evohome_cc_01_185426_00
var_sp: var.zone_00_sp
var_mode: var.zone_00_mode
var_until: var.zone_00_until
- zone_entity: climate.evohome_cc_01_185426_01
var_sp: var.zone_01_sp
var_mode: var.zone_01_mode
var_until: var.zone_01_until
- zone_entity: climate.evohome_cc_01_185426_02
var_sp: var.zone_02_sp
var_mode: var.zone_02_mode
var_until: var.zone_02_until
sequence:
- if:
- condition: template
value_template: '{{ state_attr(repeat.item.zone_entity, ''preset_mode'') != ''none'' }}'
then:
- service: var.set
data_template:
entity_id: '{{ repeat.item.var_sp }}'
value: '{{ state_attr(repeat.item.zone_entity, ''temperature'') }}'
- service: var.set
data_template:
entity_id: '{{ repeat.item.var_mode }}'
value: '{{ state_attr(repeat.item.zone_entity, ''preset_mode'') }}'
- if:
- condition: template
value_template: '{{ state_attr(repeat.item.zone_entity, ''preset_mode'') == ''temporary'' }}'
then:
- service: var.set
data_template:
entity_id: '{{ repeat.item.var_until }}'
value: '{{ state_attr(repeat.item.zone_entity, ''mode'').until }}'
- service: ramses_cc.set_zone_mode
data:
entity_id: '{{ repeat.item.zone_entity }}'
mode: follow_schedule
else:
- service: var.set
data_template:
entity_id: '{{ repeat.item.var_mode }}'
value: not_defined