@roschi
Hello Robert
I have dusted off my Heaty installation and it seems to have installed the latest version. You may recall that (unfortunately) I installed Heaty without using a virtualenv. On the upside, I am running AD on a different machine from HA, one which is used for largely unchanging network infrastructure purposes, so hopefully this won’t matter too much.
I had previously disabled Heaty by moving my .yaml file to a “.hidden” extension, so moved it back and happily it AD recognised it, and reported
2018-06-12 10:08:58.287859 INFO AppDaemon: /home/pi/appdaemon/apps/04_heaty/heaty.yaml added or modified
2018-06-12 10:08:58.289137 INFO AppDaemon: App 'heaty_full' added
2018-06-12 10:08:58.293785 INFO AppDaemon: Initializing app heaty_full using class HeatyApp from module hass_apps_loader
2018-06-12 10:08:58.548372 INFO heaty_full: --- heaty v0.9.4 initialization started
Less happily, the AD error log showed the following:
2018-06-12 10:08:58.619588 WARNING AppDaemon: ------------------------------------------------------------
2018-06-12 10:08:58.620281 WARNING AppDaemon: Unexpected error running initialize() for heaty_full
2018-06-12 10:08:58.620894 WARNING AppDaemon: ------------------------------------------------------------
2018-06-12 10:08:58.635003 WARNING AppDaemon: Traceback (most recent call last):
File "/home/pi/.local/lib/python3.5/site-packages/appdaemon/appdaemon.py", line 1513, in init_object
init()
File "/usr/local/lib/python3.5/dist-packages/hass_apps/common.py", line 44, in initialize
self.cfg = self.Meta.config_schema(self.args)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/schema_builder.py", line 267, in __call__
return self._compiled([], data)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/validators.py", line 204, in _run
return self._exec(self._compiled, value, path)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/validators.py", line 284, in _exec
raise e if self.msg is None else AllInvalid(self.msg)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/validators.py", line 282, in _exec
v = func(path, v)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/schema_builder.py", line 769, in validate_callable
return schema(data)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/schema_builder.py", line 267, in __call__
return self._compiled([], data)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/schema_builder.py", line 587, in validate_dict
return base_validate(path, iteritems(data), out)
File "/home/pi/.local/lib/python3.5/site-packages/voluptuous/schema_builder.py", line 425, in validate_mapping
raise er.MultipleInvalid(errors)
voluptuous.error.MultipleInvalid: expected a list for dictionary value @ data['schedule_append']
My heaty.yaml is appended below, for info. But I have not changed it for quite a while.
My suspicion is that your changes have eliminated the need for (and therefore presence of) IncludeSchedule
- is that right? If so I will re-write my .yaml file and try again - but just wanted to check first
PS Please forgive me, but I have forgotten where we got to with Heaty controlling a “Hot Water” timer. My recollection is that because my Hive system has three modes for Hot Water - Auto, On, Off - which are diffreent for the modes for my heating circuits, it was not so easy to incorporate within Heaty. Is that right?
heaty_full:
module: hass_apps_loader
class: HeatyApp
# master_switch: input_boolean.heating_master
thermostat_defaults:
set_temp_retries: 10
set_temp_retry_interval: 60
temp_service: climate/set_temperature
opmode_heat: "heat"
opmode_off: "off"
schedule_snippets:
downstairs_winter_default:
- { weekdays: 1-5, start: "05:00", end: "06:00", temp: "23 if app.get_state('sensor.temperature__outside_front_hall') <= '-2' else Ignore()" } # Boost if chilly now
- { weekdays: 1-5, start: "06:00", end: "08:30", temp: 23 }
- { weekdays: 1-5, start: "08:30", end: "16:30", temp: "23 if app.get_state('group.someone_is_home') == 'on' else 21" } # Boost if someone at home
- { weekdays: 1-5, start: "16:30", end: "22:00", temp: 23 }
- { weekdays: 6, start: "05:00", end: "06:00", temp: "23 if app.get_state('sensor.temperature__outside_front_hall') <= '-2' else Ignore()" } # Boost if chilly now
- { weekdays: 6, start: "06:00", end: "10:30", temp: 23 }
- { weekdays: 6, start: "08:30", end: "16:30", temp: "23 if app.get_state('group.someone_is_home') == 'on' else 21" } # Boost if someone at home
- { weekdays: 6, start: "16:30", end: "22:00", temp: 23 }
- { weekdays: 7, start: "05:00", end: "06:00", temp: "23 if app.get_state('sensor.temperature__outside_front_hall') <= '-2' else Ignore()" } # Boost if chilly now
- { weekdays: 7, start: "06:00", end: "22:00", temp: 23 }
- { temp: "20 if app.get_state('sensor.pws_weather_1n_metric') <= '-2' else 18" } # Boost if probably chilly tonight
downstairs_shoulder_default:
- { weekdays: 1-5, start: "06:30", end: "07:30", temp: 22 }
- { weekdays: 1-5, start: "07:30", end: "16:30", temp: "22 if app.get_state('input_boolean.janeathome') == 'on' else 20" } # Boost if wife at home
- { weekdays: 1-5, start: "16:30", end: "22:00", temp: 23 }
- { weekdays: 6, start: "06:30", end: "09:00", temp: 22 }
- { weekdays: 6, start: "09:00", end: "16:30", temp: "22 if app.get_state('group.someone_is_home') == 'on' else 20" } # Boost if someone at home
- { weekdays: 6, start: "16:30", end: "22:00", temp: 23 }
- { weekdays: 7, start: "06:30", end: "22:00", temp: 22 }
- { temp: 17 }
downstairs_summer_default:
- { temp: 15 }
upstairs_winter_default:
- { weekdays: 1-5, start: "05:00", end: "08:30", temp: 20.5 }
- { weekdays: 1-5, start: "16:30", end: "21:30", temp: 21 }
- { weekdays: 6-7, start: "05:00", end: "06:00", temp: "21 if app.get_state('sensor.temperature__outside_front_hall') <= '-2' else Ignore()" } # Boost if chilly now
- { weekdays: 6-7, start: "06:00", end: "10:00", temp: 21 }
- { weekdays: 6-7, start: "16:30", end: "22:00", temp: 21 }
- { temp: 18.5 }
upstairs_shoulder_default:
- { weekdays: 1-5, start: "05:00", end: "08:00", temp: 20.5 }
- { weekdays: 1-5, start: "18:00", end: "21:30", temp: 21 }
- { weekdays: 6-7, start: "06:00", end: "10:00", temp: 21 }
- { weekdays: 6-7, start: "16:30", end: "22:00", temp: 21 }
- { temp: 18.5 }
upstairs_summer_default:
- { temp: 15 }
hotwater_winter_default:
- { weekdays: 1-5, start: "05:45", end: "08:00", temp: 0 }
- { weekdays: 1-5, start: "12:00", end: "12:30", temp: 0 }
- { weekdays: 1-5, start: "16:30", end: "20:30", temp: 0 }
- { weekdays: 6-7, start: "05:45", end: "10:00", temp: 0 }
- { weekdays: 6-7, start: "12:00", end: "12:30", temp: 0 }
- { weekdays: 6-7, start: "16:00", end: "20:30", temp: 0 }
- { OFF }
hotwater_shoulder_default:
- { weekdays: 1-5, start: "05:00", end: "08:00", temp: 0 }
- { weekdays: 1-5, start: "18:00", end: "21:30", temp: 0 }
- { weekdays: 6-7, start: "06:00", end: "10:00", temp: 0 }
- { weekdays: 6-7, start: "16:30", end: "22:00", temp: 0 }
- { OFF }
hotwater_summer_default:
- { weekdays: 1-5, start: "05:00", end: "08:00", temp: 0 }
- { weekdays: 1-5, start: "18:00", end: "21:30", temp: 0 }
- { weekdays: 6-7, start: "06:00", end: "10:00", temp: 0 }
- { weekdays: 6-7, start: "16:30", end: "22:00", temp: 0 }
- { OFF }
rooms:
downstairs:
friendly_name: Downstairs
# thermostats:
# climate.downstairs_heating:
schedule:
- start_date: { month: 1, day: 1 }
end_date: { month: 3, day: 15 }
temp: IncludeSchedule(schedule_snippets["downstairs_winter_default"])
- start_date: { month: 3, day: 31 }
end_date: { month: 5, day: 30 }
temp: IncludeSchedule(schedule_snippets["downstairs_shoulder_default"])
- start_date: { month: 6, day: 1 }
end_date: { month: 9, day: 15 }
temp: IncludeSchedule(schedule_snippets["downstairs_summer_default"])
- start_date: { month: 9, day: 16 }
end_date: { month: 10, day: 30 }
temp: IncludeSchedule(schedule_snippets["downstairs_shoulder_default"])
- start_date: { month: 11, day: 1 }
end_date: { month: 12, day: 31 }
temp: IncludeSchedule(schedule_snippets["downstairs_winter_default"])
friendly_name: Upstairs
# thermostats:
# climate.upstairs_heating:
schedule:
- start_date: { month: 1, day: 1 }
end_date: { month: 3, day: 15 }
temp: IncludeSchedule(schedule_snippets["upstairs_winter_default"])
- start_date: { month: 3, day: 31 }
end_date: { month: 5, day: 30 }
temp: IncludeSchedule(schedule_snippets["upstairs_shoulder_default"])
- start_date: { month: 6, day: 1 }
end_date: { month: 9, day: 15 }
temp: IncludeSchedule(schedule_snippets["upstairs_summer_default"])
- start_date: { month: 9, day: 16 }
end_date: { month: 10, day: 30 }
temp: IncludeSchedule(schedule_snippets["upstairs_shoulder_default"])
- start_date: { month: 11, day: 1 }
end_date: { month: 12, day: 31 }
temp: IncludeSchedule(schedule_snippets["upstairs_winter_default"])
friendly_name: Hot water
# thermostats:
# climate.hot_water:
# opmode_heat: "on"
schedule:
- start_date: { month: 1, day: 1 }
end_date: { month: 3, day: 15 }
temp: IncludeSchedule(schedule_snippets["hotwater_winter_default"])
- start_date: { month: 3, day: 31 }
end_date: { month: 5, day: 30 }
temp: IncludeSchedule(schedule_snippets["hotwater_shoulder_default"])
- start_date: { month: 6, day: 1 }
end_date: { month: 9, day: 15 }
temp: IncludeSchedule(schedule_snippets["hotwater_summer_default"])
- start_date: { month: 9, day: 16 }
end_date: { month: 10, day: 30 }
temp: IncludeSchedule(schedule_snippets["hotwater_shoulder_default"])
- start_date: { month: 11, day: 1 }
end_date: { month: 12, day: 31 }
temp: IncludeSchedule(schedule_snippets["hotwater_winter_default"])