Does schedy work OK with the new OpenZWave (Beta) integration? I ask because it seems that Schedy is not controlling my Danfoss radiator valves anymore.
Background
I had a stable schedy installation that worked perfectly all through last winter (UK), controlling a set of Danfoss ZWave radiator valves through the original ZWave integration. I upgraded to the new OpenZWave (Beta) integration soon after it was released.
Initially it did not support climate entities but that didn’t matter because the heating was off anyway Recently, the integration added support for the Danfoss valves and I can now control them through the UI.
The problem
This morning, I noticed one of the rads was set to 28C (the heating still comes on for one hour in the morning to heat the towel rail in the bathroom). All rads should be set to 17C in the summer, and Schedy should be resetting them if they get changed manually. However, it seems Schedy is not actually doing so.
The logs indicate that schedy is asking HA to set a radiator setpoint, but is not getting a confirmation. It resends a number of times and then gives up.
2020-08-22 11:50:10.039196 WARNING schedy_heating: !!! [R:livingroom] [A:climate.livingroom_radiator_thermostat] Re-sending value due to missing confirmation.
2020-08-22 11:50:10.047779 INFO schedy_heating: <-- [R:livingroom] [A:climate.livingroom_radiator_thermostat] Setting value 10.0�� (left tries = 1, interval = 30).
2020-08-22 11:50:10.057125 INFO schedy_heating: <-- [R:livingroom] [A:climate.livingroom_radiator_thermostat] Setting temperature = 10.0��, HVAC mode = 'heat'.
2020-08-22 11:50:10.242819 INFO schedy_heating: --- [R:livingroom] Unchanged HA state: state='10.0', attributes={'actor_wanted_values': {'climate.livingroom_radiator_thermostat': '10.0', 'climate.diningroom_radiator_thermostat': '10.0'}, 'scheduled_value': '10.0', 'rescheduling_time': None, 'overlay_active': False}
2020-08-22 11:50:10.275711 WARNING schedy_heating: !!! [R:livingroom] [A:climate.diningroom_radiator_thermostat] Re-sending value due to missing confirmation.
2020-08-22 11:50:10.278588 INFO schedy_heating: <-- [R:livingroom] [A:climate.diningroom_radiator_thermostat] Setting value 10.0�� (left tries = 1, interval = 30).
2020-08-22 11:50:10.281591 INFO schedy_heating: <-- [R:livingroom] [A:climate.diningroom_radiator_thermostat] Setting temperature = 10.0��, HVAC mode = 'heat'.
2020-08-22 11:50:10.353747 INFO schedy_heating: --- [R:livingroom] Unchanged HA state: state='10.0', attributes={'actor_wanted_values': {'climate.livingroom_radiator_thermostat': '10.0', 'climate.diningroom_radiator_thermostat': '10.0'}, 'scheduled_value': '10.0', 'rescheduling_time': None, 'overlay_active': False}
2020-08-22 11:50:38.014576 WARNING schedy_heating: !!! [R:bedroom_1] [A:climate.bedroom_1_radiator_thermostat] Gave up sending value after 10 retries.
2020-08-22 11:50:38.017561 INFO schedy_heating: --- [R:bedroom_1] Unchanged HA state: state='10.0', attributes={'actor_wanted_values': {'climate.bedroom_1_radiator_thermostat': '10.0'}, 'scheduled_value': '10.0', 'rescheduling_time': None, 'overlay_active': False}
2020-08-22 11:50:40.018551 WARNING schedy_heating: !!! [R:livingroom] [A:climate.livingroom_radiator_thermostat] Gave up sending value after 10 retries.
2020-08-22 11:50:40.021619 INFO schedy_heating: --- [R:livingroom] Unchanged HA state: state='10.0', attributes={'actor_wanted_values': {'climate.livingroom_radiator_thermostat': '10.0', 'climate.diningroom_radiator_thermostat': '10.0'}, 'scheduled_value': '10.0', 'rescheduling_time': None, 'overlay_active': False}
2020-08-22 11:50:40.054875 WARNING schedy_heating: !!! [R:livingroom] [A:climate.diningroom_radiator_thermostat] Gave up sending value after 10 retries.
2020-08-22 11:50:40.057898 INFO schedy_heating: --- [R:livingroom] Unchanged HA state: state='10.0', attributes={'actor_wanted_values': {'climate.livingroom_radiator_thermostat': '10.0', 'climate.diningroom_radiator_thermostat': '10.0'}, 'scheduled_value': '10.0', 'rescheduling_time': None, 'overlay_active': False}
The config is
schedy_heating: # This is our app instance name.
module: hass_apps_loader
class: SchedyApp
debug: true
reset_at_startup: false
actor_type: thermostat
expression_environment: |
def home_tomorrow():
return state("input_boolean.home_tomorrow")
def house_mode():
return state("input_select.house_mode")
def house_vacant():
return state("input_boolean.house_vacant")
def season():
return state("input_select.season")
def gareth_away():
return (state('device_tracker.life360_gareth') == 'not_home')
def varina_away():
return (state('device_tracker.life360_varina') == 'not_home')
schedule_snippets:
watched_entities:
- input_boolean.home_tomorrow
- input_boolean.house_vacant
- input_select.house_mode
- input_select.season
- device_tracker.life360_gareth
- device_tracker.life360_varina
schedule_prepend:
- x: "10 if house_mode() == 'Away' else Next()"
# default rule to apply if no other matches
schedule_append:
- v: 17
rooms:
bedroom_1:
rescheduling_delay: 60
actors:
climate.bedroom_1_radiator_thermostat:
schedule:
- v: "19 if season() == 'Winter' else 17"
rules:
- x: "17 if house_vacant() else Next()"
- { start: "07:00", end: "09:00" }
- { start: "19:00", end: "22:00" }
bedroom_2:
rescheduling_delay: 0
actors:
climate.bedroom_2_radiator_thermostat:
schedule:
- v: "22 if season() == 'Winter' else 17"
rules:
- x: "17 if varina_away() or house_vacant() else Next()"
- { start: "07:00", end: "22:00" }
landing:
actors:
climate.landing_radiator_thermostat:
schedule:
- x: "17 if house_vacant() or season() == 'Summer' else Next()"
- v: 20
rules:
- weekdays: 1-5
rules:
- rules:
- x: "Next() if house_mode() == 'Home - Normal Day' else Break()"
- { start: "07:00", end: "09:00" }
- { start: "17:00", end: "22:00" }
- rules:
- x: "Next() if house_mode() == 'Home - Home Day' else Break()"
- { start: "07:00", end: "22:00" }
- weekdays: 6-7
rules:
- x: "17 if house_vacant() else Next()"
- { start: "07:00", end: "22:00" }
livingroom:
rescheduling_delay: 0
replicate_changes: true
actors:
climate.livingroom_radiator_thermostat:
climate.diningroom_radiator_thermostat:
schedule:
- v: "19 if season() == 'Winter' else 17"
rules:
- weekdays: 1-5
rules:
- rules:
- x: "17 if house_vacant() else Next()"
- x: "Next() if house_mode() == 'Home - Normal Day' else Break()"
- { start: "07:00", end: "09:00" }
- { start: "17:00", end: "22:00" }
- rules:
- x: "17 if house_vacant() else Next()"
- x: "Next() if house_mode() == 'Home - Home Day' else Break()"
- { start: "07:00", end: "22:00" }
- weekdays: 6-7
rules:
- x: "17 if house_vacant() else Next()"
- { start: "07:00", end: "22:00" }