From 69657db9de46df549b07e411285786eb398c59d0 Mon Sep 17 00:00:00 2001 From: Mart van Male Date: Sun, 25 Oct 2026 14:19:46 +0100 Subject: [PATCH 1/7] Read each zone's own preset rule _presets() now reads only the preset rule attached to the zone, so each zone on an Adam with several zones gets its own preset setpoints. When no rule or several rules are attached to a zone, it reads all preset rules, so gateways without per-zone rules keep their preset list. --- CHANGELOG.md | 1 + fixtures/adam_heatpump_cooling/data.json | 24 +++++++++---------- fixtures/adam_jip/data.json | 18 +++++++------- .../adam_multiple_devices_per_zone/data.json | 20 ++++++++-------- fixtures/adam_plus_anna_new/data.json | 2 +- .../data.json | 4 ++-- fixtures/adam_zone_per_device/data.json | 20 ++++++++-------- fixtures/m_adam_cooling/data.json | 2 +- fixtures/m_adam_heating/data.json | 2 +- .../m_adam_heating_off_schedule/data.json | 2 +- fixtures/m_adam_jip/data.json | 18 +++++++------- .../data.json | 20 ++++++++-------- plugwise/helper.py | 23 ++++++++++++++---- tests/data/adam/adam_heatpump_cooling.json | 24 +++++++++---------- tests/data/adam/adam_jip.json | 18 +++++++------- .../adam/adam_multiple_devices_per_zone.json | 20 ++++++++-------- tests/data/adam/adam_plus_anna_new.json | 2 +- .../adam_plus_anna_new_regulation_off.json | 4 ++-- tests/data/adam/adam_zone_per_device.json | 20 ++++++++-------- tests/test_adam.py | 7 ++++++ 20 files changed, 136 insertions(+), 115 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 215e2e8a7..1df825cbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Ongoing +- Each Adam zone now takes its presets from its own preset rule, not from the last preset rule on the gateway. - Fix setting changes after a timeout or a 504 error. The retry sent a read instead of the change, so the change was reported as done even when the gateway never got it. ## v1.14.8 diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index 615f4d28d..38b11ef6d 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -16,8 +16,8 @@ "no_frost", "vacation", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -282,9 +282,9 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -442,9 +442,9 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -489,8 +489,8 @@ "no_frost", "vacation", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -553,8 +553,8 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", + "away", "asleep" ], "select_schedule": "off", @@ -665,9 +665,9 @@ "preset_modes": [ "no_frost", "vacation", + "asleep", "away", - "home", - "asleep" + "home" ], "select_schedule": "off", "select_zone_profile": "active", @@ -809,8 +809,8 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", + "away", "asleep" ], "select_schedule": "off", diff --git a/fixtures/adam_jip/data.json b/fixtures/adam_jip/data.json index 04a2d5ede..c45312421 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -10,11 +10,11 @@ "model": "ThermoZone", "name": "Slaapkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -295,11 +295,11 @@ "model": "ThermoZone", "name": "Kinderkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -362,11 +362,11 @@ "model": "ThermoZone", "name": "Logeerkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", diff --git a/fixtures/adam_multiple_devices_per_zone/data.json b/fixtures/adam_multiple_devices_per_zone/data.json index 697796878..c57f3da41 100644 --- a/fixtures/adam_multiple_devices_per_zone/data.json +++ b/fixtures/adam_multiple_devices_per_zone/data.json @@ -36,11 +36,11 @@ "model": "ThermoZone", "name": "Badkamer", "preset_modes": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -78,10 +78,10 @@ "name": "Bios", "preset_modes": [ "home", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -299,10 +299,10 @@ "name": "Jessie", "preset_modes": [ "home", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -453,11 +453,11 @@ "model": "ThermoZone", "name": "Woonkamer", "preset_modes": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 6b4350c15..655985bd0 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -364,9 +364,9 @@ "model": "ThermoZone", "name": "Bathroom", "preset_modes": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index fcfef409b..4bac4658e 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -267,10 +267,10 @@ "model": "ThermoZone", "name": "Living room", "preset_modes": [ - "no_frost", - "asleep", "vacation", + "no_frost", "home", + "asleep", "away" ], "select_schedule": "off", diff --git a/fixtures/adam_zone_per_device/data.json b/fixtures/adam_zone_per_device/data.json index e9771f0d7..aa6a5476d 100644 --- a/fixtures/adam_zone_per_device/data.json +++ b/fixtures/adam_zone_per_device/data.json @@ -36,11 +36,11 @@ "model": "ThermoZone", "name": "Badkamer", "preset_modes": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -79,10 +79,10 @@ "name": "Bios", "preset_modes": [ "home", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -300,10 +300,10 @@ "name": "Jessie", "preset_modes": [ "home", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -454,11 +454,11 @@ "model": "ThermoZone", "name": "Woonkamer", "preset_modes": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index f33fb1533..7baccf71d 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -275,9 +275,9 @@ "model": "ThermoZone", "name": "Bathroom", "preset_modes": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index 9c15aa068..a193884f1 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -280,9 +280,9 @@ "model": "ThermoZone", "name": "Bathroom", "preset_modes": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index ad489df47..6c5a7f319 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -280,9 +280,9 @@ "model": "ThermoZone", "name": "Bathroom", "preset_modes": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], diff --git a/fixtures/m_adam_jip/data.json b/fixtures/m_adam_jip/data.json index dd73cb9ce..cb3c2021c 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -9,11 +9,11 @@ "model": "ThermoZone", "name": "Slaapkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -294,11 +294,11 @@ "model": "ThermoZone", "name": "Kinderkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -361,11 +361,11 @@ "model": "ThermoZone", "name": "Logeerkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", diff --git a/fixtures/m_adam_multiple_devices_per_zone/data.json b/fixtures/m_adam_multiple_devices_per_zone/data.json index 2c7881426..842f63cff 100644 --- a/fixtures/m_adam_multiple_devices_per_zone/data.json +++ b/fixtures/m_adam_multiple_devices_per_zone/data.json @@ -36,11 +36,11 @@ "model": "ThermoZone", "name": "Badkamer", "preset_modes": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -78,10 +78,10 @@ "name": "Bios", "preset_modes": [ "home", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -294,10 +294,10 @@ "name": "Jessie", "preset_modes": [ "home", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -448,11 +448,11 @@ "model": "ThermoZone", "name": "Woonkamer", "preset_modes": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { diff --git a/plugwise/helper.py b/plugwise/helper.py index ee361e63b..2b81b877e 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -918,11 +918,8 @@ def _preset(self, loc_id: str) -> str | None: def _presets(self, loc_id: str) -> dict[str, list[float]]: """Collect Presets for a Thermostat based on location_id.""" presets: dict[str, list[float]] = {} - tag_1 = "zone_setpoint_and_state_based_on_preset" - tag_2 = "Thermostat presets" - if not (rule_ids := self._rule_ids_by_tag(tag_1, loc_id)): - if not (rule_ids := self._rule_ids_by_name(tag_2, loc_id)): - return presets # pragma: no cover + if not (rule_ids := self._preset_rule_ids(loc_id)): + return presets # pragma: no cover for rule_id in rule_ids: directives = self._domain_objects.find(f'rule[@id="{rule_id}"]/directives') @@ -935,6 +932,22 @@ def _presets(self, loc_id: str) -> dict[str, list[float]]: return presets + def _preset_rule_ids(self, loc_id: str) -> list[str]: + """Helper-function for _presets(). + + Read only the preset rule attached to loc_id, so each zone gets its own presets. + Fall back to all preset rules when none or several are attached. + """ + tag_1 = "zone_setpoint_and_state_based_on_preset" + tag_2 = "Thermostat presets" + if not (rule_ids := self._rule_ids_by_tag(tag_1, loc_id)): + rule_ids = self._rule_ids_by_name(tag_2, loc_id) + + own = [ + rule_id for rule_id, data in rule_ids.items() if data["location"] == loc_id + ] + return own if len(own) == 1 else list(rule_ids) + def _rule_ids_by_name(self, name: str, loc_id: str) -> dict[str, dict[str, str]]: """Helper-function for _presets(). diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index af25e6f25..9e4cdda6b 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -16,8 +16,8 @@ "no_frost", "vacation", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -282,9 +282,9 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -442,9 +442,9 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -489,8 +489,8 @@ "no_frost", "vacation", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -553,8 +553,8 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", + "away", "asleep" ], "select_schedule": "off", @@ -665,9 +665,9 @@ "preset_modes": [ "no_frost", "vacation", + "asleep", "away", - "home", - "asleep" + "home" ], "select_schedule": "off", "select_zone_profile": "active", @@ -809,8 +809,8 @@ "preset_modes": [ "no_frost", "vacation", - "away", "home", + "away", "asleep" ], "select_schedule": "off", diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index 1e1dfc36a..af46dd452 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -10,11 +10,11 @@ "model": "ThermoZone", "name": "Slaapkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -295,11 +295,11 @@ "model": "ThermoZone", "name": "Kinderkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -362,11 +362,11 @@ "model": "ThermoZone", "name": "Logeerkamer", "preset_modes": [ + "vacation", + "no_frost", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", diff --git a/tests/data/adam/adam_multiple_devices_per_zone.json b/tests/data/adam/adam_multiple_devices_per_zone.json index 697796878..c57f3da41 100644 --- a/tests/data/adam/adam_multiple_devices_per_zone.json +++ b/tests/data/adam/adam_multiple_devices_per_zone.json @@ -36,11 +36,11 @@ "model": "ThermoZone", "name": "Badkamer", "preset_modes": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -78,10 +78,10 @@ "name": "Bios", "preset_modes": [ "home", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -299,10 +299,10 @@ "name": "Jessie", "preset_modes": [ "home", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -453,11 +453,11 @@ "model": "ThermoZone", "name": "Woonkamer", "preset_modes": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 19f350021..11b151c6d 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -364,9 +364,9 @@ "model": "ThermoZone", "name": "Bathroom", "preset_modes": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index 25c0c695c..d6712ed4f 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -267,10 +267,10 @@ "model": "ThermoZone", "name": "Living room", "preset_modes": [ - "no_frost", - "asleep", "vacation", + "no_frost", "home", + "asleep", "away" ], "select_schedule": "off", diff --git a/tests/data/adam/adam_zone_per_device.json b/tests/data/adam/adam_zone_per_device.json index e9771f0d7..aa6a5476d 100644 --- a/tests/data/adam/adam_zone_per_device.json +++ b/tests/data/adam/adam_zone_per_device.json @@ -36,11 +36,11 @@ "model": "ThermoZone", "name": "Badkamer", "preset_modes": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -79,10 +79,10 @@ "name": "Bios", "preset_modes": [ "home", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -300,10 +300,10 @@ "name": "Jessie", "preset_modes": [ "home", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -454,11 +454,11 @@ "model": "ThermoZone", "name": "Woonkamer", "preset_modes": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { diff --git a/tests/test_adam.py b/tests/test_adam.py index 34c680026..908e65e44 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -68,6 +68,13 @@ async def test_connect_adam_plus_anna_new(self): "f871b8c4d63549319221e294e4f88074", ] assert api.reboot + # Each zone reads its own preset rule, not the last one in the document + # pylint: disable-next=protected-access + living_room = api._smile_api._presets("f2bf9048bef64cc5b6d5110154e33c81") + # pylint: disable-next=protected-access + bathroom = api._smile_api._presets("f871b8c4d63549319221e294e4f88074") + assert living_room["home"] == [19.0, 22.0] + assert bathroom["home"] == [18.0, 22.0] result = await self.tinker_thermostat( api, From 785f6151dcd1408ff31d5314b4941feb3e05307e Mon Sep 17 00:00:00 2001 From: Mart van Male Date: Sun, 25 Oct 2026 14:32:46 +0100 Subject: [PATCH 2/7] Add preset temperatures as adjustable values set_number() sends all five presets on every write and changes only the target heating setpoint. The gateway replaces a rule's whole directive set on each write. --- CHANGELOG.md | 1 + fixtures/adam_bad_thermostat/data.json | 30 ++ fixtures/adam_heatpump_cooling/data.json | 300 ++++++++++++++++++ fixtures/adam_jip/data.json | 120 +++++++ .../adam_multiple_devices_per_zone/data.json | 150 +++++++++ .../data.json | 30 ++ fixtures/adam_plus_anna/data.json | 30 ++ fixtures/adam_plus_anna_new/data.json | 60 ++++ .../data.json | 60 ++++ fixtures/adam_zone_per_device/data.json | 150 +++++++++ fixtures/anna_elga_2/data.json | 30 ++ fixtures/anna_elga_2_cooling/data.json | 30 ++ fixtures/anna_elga_2_schedule_off/data.json | 30 ++ fixtures/anna_elga_no_cooling/data.json | 30 ++ fixtures/anna_heatpump_cooling/data.json | 30 ++ .../data.json | 30 ++ fixtures/anna_heatpump_heating/data.json | 30 ++ fixtures/anna_loria_cooling_active/data.json | 30 ++ fixtures/anna_loria_driessens/data.json | 30 ++ fixtures/anna_loria_heating_idle/data.json | 30 ++ fixtures/anna_p1/data.json | 30 ++ fixtures/anna_v4/data.json | 30 ++ fixtures/anna_v4_dhw/data.json | 30 ++ fixtures/anna_v4_no_tag/data.json | 30 ++ fixtures/anna_without_boiler_fw441/data.json | 30 ++ fixtures/m_adam_cooling/data.json | 60 ++++ fixtures/m_adam_heating/data.json | 60 ++++ .../m_adam_heating_off_schedule/data.json | 60 ++++ fixtures/m_adam_jip/data.json | 120 +++++++ .../data.json | 150 +++++++++ fixtures/m_anna_heatpump_cooling/data.json | 30 ++ fixtures/m_anna_heatpump_idle/data.json | 30 ++ plugwise/constants.py | 21 ++ plugwise/data.py | 22 ++ plugwise/helper.py | 21 +- plugwise/smile.py | 54 +++- tests/data/adam/adam_bad_thermostat.json | 30 ++ tests/data/adam/adam_heatpump_cooling.json | 300 ++++++++++++++++++ tests/data/adam/adam_jip.json | 120 +++++++ .../adam/adam_multiple_devices_per_zone.json | 150 +++++++++ .../adam_onoff_cooling_fake_firmware.json | 30 ++ tests/data/adam/adam_plus_anna.json | 30 ++ tests/data/adam/adam_plus_anna_new.json | 60 ++++ .../adam_plus_anna_new_regulation_off.json | 60 ++++ tests/data/adam/adam_zone_per_device.json | 150 +++++++++ tests/data/anna/anna_elga_2.json | 30 ++ tests/data/anna/anna_elga_2_cooling.json | 30 ++ tests/data/anna/anna_elga_2_schedule_off.json | 30 ++ tests/data/anna/anna_elga_no_cooling.json | 30 ++ tests/data/anna/anna_heatpump_cooling.json | 30 ++ .../anna_heatpump_cooling_fake_firmware.json | 30 ++ tests/data/anna/anna_heatpump_heating.json | 30 ++ .../data/anna/anna_loria_cooling_active.json | 30 ++ tests/data/anna/anna_loria_driessens.json | 30 ++ tests/data/anna/anna_loria_heating_idle.json | 30 ++ tests/data/anna/anna_p1.json | 30 ++ tests/data/anna/anna_v4.json | 30 ++ tests/data/anna/anna_v4_dhw.json | 30 ++ tests/data/anna/anna_v4_no_tag.json | 30 ++ .../data/anna/anna_without_boiler_fw441.json | 30 ++ tests/test_adam.py | 45 ++- tests/test_anna.py | 32 +- tests/test_init.py | 35 ++ 63 files changed, 3473 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1df825cbc..2dffde73f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Ongoing +- Add the heating setpoint of each preset as an adjustable value for every zone with its own preset rule. Changing one resets a manual setpoint on that zone to its active preset. - Each Adam zone now takes its presets from its own preset rule, not from the last preset rule on the gateway. - Fix setting changes after a timeout or a 504 error. The retry sent a read instead of the change, so the change was reported as done even when the gateway never got it. diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index 8944b3a61..3b801e109 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -45,14 +45,38 @@ }, "3ee6b9486cb04c258a3130fff2b144a4": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Overloop", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -70,6 +94,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "8edf4c8b659342e8ae9809a6f9734532": { diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index 38b11ef6d..8a01e0f80 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -1,17 +1,41 @@ { "04b15f6e884448288f811d29fb7b1b30": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer SJ", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -38,6 +62,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -140,17 +170,41 @@ }, "20e735858f8146cead98b873177a4f99": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer DB", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -177,6 +231,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -268,17 +328,41 @@ }, "5cc21042f87f4b4c94ccb5537c47a53f": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Badkamer 2", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -304,6 +388,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -428,17 +518,41 @@ }, "8cf650a4c10c44819e426bed406aec34": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Badkamer 1", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -465,6 +579,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -474,17 +594,41 @@ }, "93ac3f7bf25342f58cbb77c4a99ac0b3": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer RB", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -510,6 +654,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -539,17 +689,41 @@ }, "9a27714b970547ee9a6bdadc2b815ad5": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer SQ", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -576,6 +750,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -605,17 +785,41 @@ }, "a562019b0b1f47a4bde8ebe3dbe3e8a9": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Keuken", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -642,6 +846,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -651,17 +861,41 @@ }, "b52908550469425b812c87f766fe5303": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bijkeuken", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -688,6 +922,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -795,17 +1035,41 @@ }, "e39529c79ab54fda9bed26cfc0447546": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer JM", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -832,6 +1096,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -911,17 +1181,41 @@ }, "fa5fa6b34f6b40a0972988b20e888ed4": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -948,6 +1242,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/adam_jip/data.json b/fixtures/adam_jip/data.json index c45312421..3ec32adf8 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -1,14 +1,38 @@ { "06aecb3d00354375924f50c47af36bd2": { "active_preset": "no_frost", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -35,6 +59,12 @@ "356b65335e274d769c338223e7af9c33" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -44,14 +74,38 @@ }, "13228dab8ce04617af318a2888b3c548": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -78,6 +132,12 @@ "833de10f269c4deab58fb9df69901b4e" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -286,14 +346,38 @@ }, "d27aede973b54be484f6842d1b2802ad": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Kinderkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -320,6 +404,12 @@ "d4496250d0e942cfa7aea3476e9070d5" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -353,14 +443,38 @@ }, "d58fec52899f4f1c92e4f8fad6d8c48c": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Logeerkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -387,6 +501,12 @@ "1da4d325838e4ad8aac12177214505c9" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/adam_multiple_devices_per_zone/data.json b/fixtures/adam_multiple_devices_per_zone/data.json index c57f3da41..44d307e86 100644 --- a/fixtures/adam_multiple_devices_per_zone/data.json +++ b/fixtures/adam_multiple_devices_per_zone/data.json @@ -22,6 +22,12 @@ }, "08963fec7c53423ca5680aa4cb502c63": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -30,11 +36,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 14.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Badkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "asleep", "no_frost", @@ -59,10 +83,22 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "12493538af164a409c6a1c79e38afe1c": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -71,11 +107,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bios", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 8.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "away", @@ -103,6 +157,12 @@ "a2c3583e0a6349358998b760cea82d2a" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "21f2b542c49845e6bb416884c55778d6": { @@ -128,6 +188,12 @@ }, "446ac08dd04d4eff8ac57489757b7314": { "active_preset": "no_frost", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -136,11 +202,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Garage", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -164,6 +248,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "4a810418d5394b3f82727340b91ba740": { @@ -284,6 +374,12 @@ }, "82fa13f017d240daa0d0ea1775420f24": { "active_preset": "asleep", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -292,11 +388,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Jessie", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "no_frost", @@ -322,6 +436,12 @@ "d3da73bde12a47d5a6b8f9dad971f2ec" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 11.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "90986d591dcd426cae3ec3e8111ff730": { @@ -439,6 +559,12 @@ }, "c50f167537524366a5af7aa3942feb1e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -447,11 +573,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "asleep", @@ -479,6 +623,12 @@ "b310b72a0e354bfab43089919b9a88bf" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { diff --git a/fixtures/adam_onoff_cooling_fake_firmware/data.json b/fixtures/adam_onoff_cooling_fake_firmware/data.json index a24e27d98..3a39b6550 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -90,17 +90,41 @@ }, "fa5fa6b34f6b40a0972988b20e888ed4": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Opstaan weekdag", "Werkdag schema", "Weekend" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "vacation", @@ -127,6 +151,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index 936cdb711..4123a2830 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -1,15 +1,39 @@ { "009490cc2f674ce6b576863fbb64f867": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Weekschema" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -35,6 +59,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "2743216f626f43948deec1f7ab3b3d70": { diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 655985bd0..4f8af21d3 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -302,6 +302,12 @@ }, "f2bf9048bef64cc5b6d5110154e33c81": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -309,11 +315,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -342,6 +366,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -351,6 +381,12 @@ }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "vacation", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -358,11 +394,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bathroom", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -391,6 +445,12 @@ "1772a4ea304041adb83f357b751341ff" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index 4bac4658e..8ec048bdd 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -254,6 +254,12 @@ }, "f2bf9048bef64cc5b6d5110154e33c81": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -261,11 +267,29 @@ "Vakantie", "Weekschema" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "climate_mode": "off", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -292,6 +316,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -301,6 +331,12 @@ }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -308,11 +344,29 @@ "Vakantie", "Weekschema" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "off", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bathroom", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -341,6 +395,12 @@ "1772a4ea304041adb83f357b751341ff" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/adam_zone_per_device/data.json b/fixtures/adam_zone_per_device/data.json index aa6a5476d..40fad1963 100644 --- a/fixtures/adam_zone_per_device/data.json +++ b/fixtures/adam_zone_per_device/data.json @@ -22,6 +22,12 @@ }, "08963fec7c53423ca5680aa4cb502c63": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -30,11 +36,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 14.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Badkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "asleep", "no_frost", @@ -60,10 +84,22 @@ "680423ff840043738f42cc7f1ff97a36" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "12493538af164a409c6a1c79e38afe1c": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -72,11 +108,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bios", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 8.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "away", @@ -104,6 +158,12 @@ "a2c3583e0a6349358998b760cea82d2a" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "21f2b542c49845e6bb416884c55778d6": { @@ -129,6 +189,12 @@ }, "446ac08dd04d4eff8ac57489757b7314": { "active_preset": "no_frost", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -137,11 +203,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Garage", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -165,6 +249,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "4a810418d5394b3f82727340b91ba740": { @@ -285,6 +375,12 @@ }, "82fa13f017d240daa0d0ea1775420f24": { "active_preset": "asleep", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -293,11 +389,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Jessie", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "no_frost", @@ -323,6 +437,12 @@ "d3da73bde12a47d5a6b8f9dad971f2ec" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 11.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "90986d591dcd426cae3ec3e8111ff730": { @@ -440,6 +560,12 @@ }, "c50f167537524366a5af7aa3942feb1e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -448,11 +574,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "asleep", @@ -480,6 +624,12 @@ "b310b72a0e354bfab43089919b9a88bf" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index a2a591f4d..70a75ea33 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -35,18 +35,42 @@ }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Thermostat schedule" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "away", "no_frost", @@ -76,6 +100,12 @@ "setpoint_low": 19.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index 4c9b08154..f3d4c6877 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -42,18 +42,42 @@ }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Thermostat schedule" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "away", "no_frost", @@ -83,6 +107,12 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index f77cd2383..e3640ab4b 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -42,18 +42,42 @@ }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Thermostat schedule" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat_cool", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "away", "no_frost", @@ -83,6 +107,12 @@ "setpoint_low": 19.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index 47fe95417..ef57ecfda 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -65,18 +65,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -104,6 +128,12 @@ "setpoint": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index 08e3a61ef..80501dc81 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -61,18 +61,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "heat_cool", "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -102,6 +126,12 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index b486ef51e..b14cce672 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -61,18 +61,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "heat_cool", "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -102,6 +126,12 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index c63972711..6ba9d7b06 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -67,18 +67,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -108,6 +132,12 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index 1dadad338..931491ea8 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -1,19 +1,43 @@ { "582dfbdace4d4aeb832923ce7d1ddda0": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Winter", "Test " ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "away", "vacation", @@ -41,6 +65,12 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index ccac7bddf..a1a8920f6 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -20,6 +20,12 @@ }, "9fb768d699e44c7fb5cc50309dc4e7d4": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Verwarmen@9-23u", @@ -27,14 +33,32 @@ "VERWARMEN", "KOELEN" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "location": "fa70e08550c94de3a34feb27ecf31421", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -62,6 +86,12 @@ "setpoint_low": 20.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "a449cbc334ae4a5bb7f89064984b2906": { diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index 682cdc878..d2490f578 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -1,19 +1,43 @@ { "582dfbdace4d4aeb832923ce7d1ddda0": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Winter", "Test " ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "away", "vacation", @@ -41,6 +65,12 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/fixtures/anna_p1/data.json b/fixtures/anna_p1/data.json index 5f4df3f00..0a15747c5 100644 --- a/fixtures/anna_p1/data.json +++ b/fixtures/anna_p1/data.json @@ -1,18 +1,42 @@ { "1e5e55b958ac445583602f767cb45942": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Thermostat schedule" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-500", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "location": "5b13651d79c4454684fd268850b1bff8", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -38,6 +62,12 @@ "setpoint": 19.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "36b937e44ad145bab165fa0fe99d742d": { diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index 742fad881..c18484a03 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -1,19 +1,43 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Standaard", "Thuiswerken" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -39,6 +63,12 @@ "setpoint": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index b373166ba..a1fee82a7 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -1,19 +1,43 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Standaard", "Thuiswerken" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -39,6 +63,12 @@ "setpoint": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index 2c9a40c8c..c3d9fd07b 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -1,19 +1,43 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Standaard", "Thuiswerken" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -39,6 +63,12 @@ "setpoint": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { diff --git a/fixtures/anna_without_boiler_fw441/data.json b/fixtures/anna_without_boiler_fw441/data.json index 5dbecb4dd..b774a7700 100644 --- a/fixtures/anna_without_boiler_fw441/data.json +++ b/fixtures/anna_without_boiler_fw441/data.json @@ -1,19 +1,43 @@ { "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Test", "Normaal" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "location": "c34c6864216446528e95d88985e714cc", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -39,6 +63,12 @@ "setpoint": 19.0, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "a270735e4ccd45239424badc0578a2b1": { diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index 7baccf71d..79e21d828 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -213,6 +213,12 @@ }, "f2bf9048bef64cc5b6d5110154e33c81": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -220,11 +226,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "cool", "control_state": "cooling", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -253,6 +277,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -262,6 +292,12 @@ }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "vacation", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -269,11 +305,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "cooling", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bathroom", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -302,6 +356,12 @@ "1772a4ea304041adb83f357b751341ff" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index a193884f1..7fcbc3ed4 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -218,6 +218,12 @@ }, "f2bf9048bef64cc5b6d5110154e33c81": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -225,11 +231,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "preheating", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -258,6 +282,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -267,6 +297,12 @@ }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "vacation", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -274,11 +310,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bathroom", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -307,6 +361,12 @@ "1772a4ea304041adb83f357b751341ff" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index 6c5a7f319..3af382e4e 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -218,6 +218,12 @@ }, "f2bf9048bef64cc5b6d5110154e33c81": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -225,11 +231,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "off", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Living room", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -258,6 +282,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -267,6 +297,12 @@ }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "vacation", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "Badkamer", @@ -274,11 +310,29 @@ "Weekschema", "Test" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "off", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bathroom", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "asleep", @@ -307,6 +361,12 @@ "1772a4ea304041adb83f357b751341ff" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/m_adam_jip/data.json b/fixtures/m_adam_jip/data.json index cb3c2021c..a65d9ceb7 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -1,13 +1,37 @@ { "06aecb3d00354375924f50c47af36bd2": { "active_preset": "no_frost", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "off", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Slaapkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -34,6 +58,12 @@ "356b65335e274d769c338223e7af9c33" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -43,14 +73,38 @@ }, "13228dab8ce04617af318a2888b3c548": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -77,6 +131,12 @@ "833de10f269c4deab58fb9df69901b4e" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -285,14 +345,38 @@ }, "d27aede973b54be484f6842d1b2802ad": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Kinderkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -319,6 +403,12 @@ "d4496250d0e942cfa7aea3476e9070d5" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", @@ -352,14 +442,38 @@ }, "d58fec52899f4f1c92e4f8fad6d8c48c": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Logeerkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "no_frost", @@ -386,6 +500,12 @@ "1da4d325838e4ad8aac12177214505c9" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise", "zone_profiles": [ "active", diff --git a/fixtures/m_adam_multiple_devices_per_zone/data.json b/fixtures/m_adam_multiple_devices_per_zone/data.json index 842f63cff..0d9b61939 100644 --- a/fixtures/m_adam_multiple_devices_per_zone/data.json +++ b/fixtures/m_adam_multiple_devices_per_zone/data.json @@ -22,6 +22,12 @@ }, "08963fec7c53423ca5680aa4cb502c63": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -30,11 +36,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 14.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Badkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "asleep", "no_frost", @@ -59,10 +83,22 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "12493538af164a409c6a1c79e38afe1c": { "active_preset": "away", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -71,11 +107,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Bios", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 8.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "away", @@ -103,6 +157,12 @@ "a2c3583e0a6349358998b760cea82d2a" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "21f2b542c49845e6bb416884c55778d6": { @@ -128,14 +188,38 @@ }, "446ac08dd04d4eff8ac57489757b7314": { "active_preset": "no_frost", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "climate_mode": "heat", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Garage", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "asleep", @@ -159,6 +243,12 @@ ], "secondary": [] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "4a810418d5394b3f82727340b91ba740": { @@ -279,6 +369,12 @@ }, "82fa13f017d240daa0d0ea1775420f24": { "active_preset": "asleep", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -287,11 +383,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Jessie", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "home", "no_frost", @@ -317,6 +431,12 @@ "d3da73bde12a47d5a6b8f9dad971f2ec" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 11.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "90986d591dcd426cae3ec3e8111ff730": { @@ -434,6 +554,12 @@ }, "c50f167537524366a5af7aa3942feb1e": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "CV Roan", @@ -442,11 +568,29 @@ "Badkamer Schema", "CV Jessie" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "heating", "dev_class": "climate", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, "model": "ThermoZone", "name": "Woonkamer", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "preset_modes": [ "vacation", "asleep", @@ -474,6 +618,12 @@ "b310b72a0e354bfab43089919b9a88bf" ] }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 9b421f792..721c8e72b 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -67,18 +67,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -108,6 +132,12 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 4ba2db676..2cbac7cb1 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -67,18 +67,42 @@ }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, "available_schedules": [ "off", "standaard" ], + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "preset_modes": [ "no_frost", "home", @@ -108,6 +132,12 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "vendor": "Plugwise" } } diff --git a/plugwise/constants.py b/plugwise/constants.py index d251f76ba..28d3df7d2 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -265,6 +265,22 @@ ] ACTIVE_ACTUATORS: Final[tuple[str, ...]] = get_args(ActuatorType) +PresetTemperatureType = Literal[ + "home_preset_temperature", + "asleep_preset_temperature", + "away_preset_temperature", + "vacation_preset_temperature", + "no_frost_preset_temperature", +] +PRESET_TEMPERATURES: Final[dict[PresetTemperatureType, str]] = { + "home_preset_temperature": "home", + "asleep_preset_temperature": "asleep", + "away_preset_temperature": "away", + "vacation_preset_temperature": "vacation", + "no_frost_preset_temperature": "no_frost", +} +PRESET_TEMPERATURE_RESOLUTION: Final[float] = 0.5 + ACTIVE_KEYS: Final[tuple[str, ...]] = ( "control_state", "lower_bound", @@ -584,6 +600,11 @@ class GwEntityData(TypedDict, total=False): # Presets: active_preset: str | None preset_modes: list[str] | None + home_preset_temperature: ActuatorData + asleep_preset_temperature: ActuatorData + away_preset_temperature: ActuatorData + vacation_preset_temperature: ActuatorData + no_frost_preset_temperature: ActuatorData # Schedules: available_schedules: list[str] select_schedule: str diff --git a/plugwise/data.py b/plugwise/data.py index dd03b8624..da4235fe2 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -13,6 +13,8 @@ MAX_SETPOINT, MIN_SETPOINT, OFF, + PRESET_TEMPERATURE_RESOLUTION, + PRESET_TEMPERATURES, ActuatorData, GwEntityData, ) @@ -273,6 +275,9 @@ def _climate_data(self, location_id: str, entity: GwEntityData) -> None: if presets := self._presets(loc_id): entity["preset_modes"] = list(presets) entity["active_preset"] = self._preset(loc_id) + # Only a zone's own rule can be edited without touching other zones + if self._preset_rule_id(loc_id) is not None: + self._preset_temperatures(presets, entity) # Schedule entity["available_schedules"] = [OFF] @@ -300,6 +305,23 @@ def _climate_data(self, location_id: str, entity: GwEntityData) -> None: loc_id, avail_schedules, sel_schedule, entity ) + def _preset_temperatures( + self, presets: dict[str, list[float]], entity: GwEntityData + ) -> None: + """Helper-function for _climate_data(). + + Add the heating setpoint of each preset as an adjustable value. + """ + for key, preset in PRESET_TEMPERATURES.items(): + if preset in presets: + entity[key] = ActuatorData( + lower_bound=MIN_SETPOINT, + resolution=PRESET_TEMPERATURE_RESOLUTION, + setpoint=presets[preset][0], + upper_bound=MAX_SETPOINT, + ) + self._count += 4 + def check_reg_mode(self, mode: str) -> bool: """Helper-function for device_data_climate().""" gateway = self.gw_entities[self._gateway_id] diff --git a/plugwise/helper.py b/plugwise/helper.py index 2b81b877e..e51f67ee7 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -938,15 +938,28 @@ def _preset_rule_ids(self, loc_id: str) -> list[str]: Read only the preset rule attached to loc_id, so each zone gets its own presets. Fall back to all preset rules when none or several are attached. """ + if (rule_id := self._preset_rule_id(loc_id)) is not None: + return [rule_id] + + return list(self._all_preset_rules(loc_id)) + + def _preset_rule_id(self, loc_id: str) -> str | None: + """Return the id of the one preset rule attached to loc_id, or None.""" + own = [ + rule_id + for rule_id, data in self._all_preset_rules(loc_id).items() + if data["location"] == loc_id + ] + return own[0] if len(own) == 1 else None + + def _all_preset_rules(self, loc_id: str) -> dict[str, dict[str, str]]: + """Collect all preset rules, by template tag or else by name.""" tag_1 = "zone_setpoint_and_state_based_on_preset" tag_2 = "Thermostat presets" if not (rule_ids := self._rule_ids_by_tag(tag_1, loc_id)): rule_ids = self._rule_ids_by_name(tag_2, loc_id) - own = [ - rule_id for rule_id, data in rule_ids.items() if data["location"] == loc_id - ] - return own if len(own) == 1 else list(rule_ids) + return rule_ids def _rule_ids_by_name(self, name: str, loc_id: str) -> dict[str, dict[str, str]]: """Helper-function for _presets(). diff --git a/plugwise/smile.py b/plugwise/smile.py index 0aea89a58..2a71dc603 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -21,6 +21,7 @@ NONE, NOTIFICATIONS, OFF, + PRESET_TEMPERATURES, RULES, STATE_OFF, STATE_ON, @@ -170,7 +171,16 @@ async def set_number( key: str, temperature: float, ) -> None: - """Set the boiler- or DHW-setpoint on the Central Heating boiler or the temperature-offset on a Thermostat.""" + """Set the boiler- or DHW-setpoint on the Central Heating boiler, the temperature-offset on a Thermostat or a preset temperature.""" + if key in PRESET_TEMPERATURES: + # Anna keeps its climate data on the thermostat, Adam on the zone + loc_id = dev_id + if (entity := self.gw_entities.get(dev_id)) is not None: + loc_id = entity.get("location", dev_id) + preset = PRESET_TEMPERATURES[key] + await self.set_preset_temperature(loc_id, preset, temperature) + return + match key: case "temperature_offset": await self.set_offset(dev_id, temperature) @@ -211,6 +221,48 @@ async def set_offset(self, dev_id: str, offset: float) -> None: uri = f"{APPLIANCES};id={dev_id}/offset;type=temperature_offset" await self.call_request(uri, method="put", data=data) + async def set_preset_temperature( + self, loc_id: str, preset: str, temperature: float + ) -> None: + """Set the heating setpoint of one preset in the zone's preset rule. + + The gateway re-applies the zone's active preset, which resets a manual setpoint. + """ + if (rule_id := self._preset_rule_id(loc_id)) is None: + raise PlugwiseError("Plugwise: this zone has no preset rule of its own") + + locator = f'rule[@id="{rule_id}"]/directives/when[@preset="{preset}"]/then' + if (then := self._domain_objects.find(locator)) is None: + raise PlugwiseError(f"Plugwise: invalid preset {preset}") + if not MIN_SETPOINT <= temperature <= MAX_SETPOINT: + raise PlugwiseError( + f"Plugwise: preset temperature must be between {MIN_SETPOINT} and {MAX_SETPOINT}" + ) + + # The gateway replaces the whole directive set, so every preset is sent. + heating = str(temperature) + directives = "" + for when in self._domain_objects.findall( + f'rule[@id="{rule_id}"]/directives/when' + ): + attrs = dict(when.find("then").attrib) + if when.get("preset") == preset: + attrs["heating_setpoint"] = heating + then_attrs = " ".join(f'{key}="{value}"' for key, value in attrs.items()) + directives += ( + f'' + ) + + data = ( + "" + f"" + f"{directives}" + "" + "" + ) + await self.call_request(f"{RULES};id={rule_id}", method="put", data=data) + then.set("heating_setpoint", heating) + async def set_preset(self, loc_id: str, preset: str) -> None: """Set the given Preset on the relevant Thermostat - from LOCATIONS.""" if (presets := self._presets(loc_id)) is None: diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 2ef25b842..eb4b593de 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -60,6 +60,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "temperature": 20.3 diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 9e4cdda6b..9ccd48c2e 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -19,6 +19,36 @@ "asleep", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -158,6 +188,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -286,6 +346,36 @@ "asleep", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Werkdag schema", "select_zone_profile": "passive", "sensors": { @@ -446,6 +536,36 @@ "asleep", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Werkdag schema", "select_zone_profile": "passive", "sensors": { @@ -492,6 +612,36 @@ "asleep", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -557,6 +707,36 @@ "away", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -623,6 +803,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { @@ -669,6 +879,36 @@ "away", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -813,6 +1053,36 @@ "away", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -929,6 +1199,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index af46dd452..cc893b932 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -16,6 +16,36 @@ "away", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -59,6 +89,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -301,6 +361,36 @@ "away", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -368,6 +458,36 @@ "away", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 13.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 9.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { diff --git a/tests/data/adam/adam_multiple_devices_per_zone.json b/tests/data/adam/adam_multiple_devices_per_zone.json index c57f3da41..ec7f3008a 100644 --- a/tests/data/adam/adam_multiple_devices_per_zone.json +++ b/tests/data/adam/adam_multiple_devices_per_zone.json @@ -42,6 +42,36 @@ "home", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 14.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Badkamer Schema", "sensors": { "temperature": 18.9 @@ -83,6 +113,36 @@ "no_frost", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 8.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "electricity_consumed": 0.0, @@ -148,6 +208,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "temperature": 15.6 @@ -304,6 +394,36 @@ "vacation", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 11.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "CV Jessie", "sensors": { "temperature": 17.2 @@ -459,6 +579,36 @@ "away", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "select_schedule": "GF7 Woonkamer", "sensors": { "electricity_consumed": 35.6, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index bf2f95f33..3aefe342a 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -108,6 +108,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index b561eb69c..c88313808 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -17,6 +17,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Weekschema", "sensors": { "electricity_consumed": 74.2, diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 11b151c6d..b68b4b42e 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -321,6 +321,36 @@ "home", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Weekschema", "select_zone_profile": "active", "sensors": { @@ -370,6 +400,36 @@ "home", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index d6712ed4f..d83116c60 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -273,6 +273,36 @@ "asleep", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -320,6 +350,36 @@ "home", "away" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "select_zone_profile": "passive", "sensors": { diff --git a/tests/data/adam/adam_zone_per_device.json b/tests/data/adam/adam_zone_per_device.json index aa6a5476d..aa1e69c03 100644 --- a/tests/data/adam/adam_zone_per_device.json +++ b/tests/data/adam/adam_zone_per_device.json @@ -42,6 +42,36 @@ "home", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 14.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Badkamer Schema", "sensors": { "temperature": 18.8 @@ -84,6 +114,36 @@ "no_frost", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 8.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "electricity_consumed": 0.0, @@ -149,6 +209,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "temperature": 15.6 @@ -305,6 +395,36 @@ "vacation", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 11.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "CV Jessie", "sensors": { "temperature": 17.1 @@ -460,6 +580,36 @@ "away", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 12.0, + "upper_bound": 30.0 + }, "select_schedule": "GF7 Woonkamer", "sensors": { "electricity_consumed": 35.8, diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index a2a591f4d..3a223a728 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -54,6 +54,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 24.0, diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index 4417929a1..162ed5ad1 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -61,6 +61,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 26.0, diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index 19622a983..bd7cf1057 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -61,6 +61,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 26.0, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index ffc9aa126..a9abd244d 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -84,6 +84,36 @@ "asleep", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index ba7456870..f7689bfe9 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -80,6 +80,36 @@ "asleep", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index 799f50295..afd7587a3 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -80,6 +80,36 @@ "asleep", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index a54846d1d..6b21abfd9 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -86,6 +86,36 @@ "asleep", "vacation" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 21.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index 69084fbb4..29555a61d 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -21,6 +21,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Winter", "sensors": { "illuminance": 45.0, diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index cbf087e31..d98e4a806 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -42,6 +42,36 @@ "away", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, "select_schedule": "Verwarmen@9-23u", "sensors": { "illuminance": 5.5, diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 9938c2694..06e56a82e 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -21,6 +21,36 @@ "home", "asleep" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.5, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Winter", "sensors": { "illuminance": 45.0, diff --git a/tests/data/anna/anna_p1.json b/tests/data/anna/anna_p1.json index b146f8a07..5b3b8a1fe 100644 --- a/tests/data/anna/anna_p1.json +++ b/tests/data/anna/anna_p1.json @@ -20,6 +20,36 @@ "vacation", "no_frost" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Thermostat schedule", "sensors": { "illuminance": 2.0, diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index 8f8ae8d59..5e9b6ce2c 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -21,6 +21,36 @@ "asleep", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "illuminance": 60.0, diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index 724811234..efe242bb3 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -21,6 +21,36 @@ "asleep", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "off", "sensors": { "illuminance": 60.0, diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index f215f24a7..ae7962e21 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -21,6 +21,36 @@ "asleep", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 17.5, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Thuiswerken", "sensors": { "illuminance": 60.0, diff --git a/tests/data/anna/anna_without_boiler_fw441.json b/tests/data/anna/anna_without_boiler_fw441.json index 5dbecb4dd..291df63f1 100644 --- a/tests/data/anna/anna_without_boiler_fw441.json +++ b/tests/data/anna/anna_without_boiler_fw441.json @@ -21,6 +21,36 @@ "vacation", "home" ], + "home_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "asleep_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "away_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 16.0, + "upper_bound": 30.0 + }, + "vacation_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 18.5, + "upper_bound": 30.0 + }, + "no_frost_preset_temperature": { + "lower_bound": 4.0, + "resolution": 0.5, + "setpoint": 10.0, + "upper_bound": 30.0 + }, "select_schedule": "Normaal", "sensors": { "illuminance": 0.25, diff --git a/tests/test_adam.py b/tests/test_adam.py index 908e65e44..85d06a43e 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -1,5 +1,7 @@ """Test Plugwise module Adam related functionality.""" +from unittest.mock import patch + import pytest from .test_init import _LOGGER, TestPlugwise, pw_exceptions @@ -47,7 +49,7 @@ async def test_connect_adam_plus_anna_new(self): test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata) assert api.gateway_id == "da224107914542988a88561b4452b0f6" - assert self.entity_items == 235 + assert self.entity_items == 275 assert test_items == self.entity_items assert self.entity_list == [ "da224107914542988a88561b4452b0f6", @@ -75,6 +77,31 @@ async def test_connect_adam_plus_anna_new(self): bathroom = api._smile_api._presets("f871b8c4d63549319221e294e4f88074") assert living_room["home"] == [19.0, 22.0] assert bathroom["home"] == [18.0, 22.0] + # pylint: disable-next=protected-access + assert len(api._smile_api._preset_rule_ids("no_such_zone")) == 2 + + assert await self.tinker_preset_temperature( + api, "f2bf9048bef64cc5b6d5110154e33c81" + ) + # pylint: disable-next=protected-access + living_room = api._smile_api._presets("f2bf9048bef64cc5b6d5110154e33c81") + assert living_room["home"] == [20.5, 22.0] + # The gateway replaces the whole directive set, so all presets must be sent + with patch.object( + # pylint: disable-next=protected-access + api._smile_api, + "call_request", + # pylint: disable-next=protected-access + wraps=api._smile_api.call_request, + ) as spy: + await api.set_number( + "f2bf9048bef64cc5b6d5110154e33c81", "away_preset_temperature", 16.0 + ) + sent = spy.call_args.kwargs["data"] + assert sent.count(" Date: Sun, 25 Oct 2026 16:06:59 +0100 Subject: [PATCH 3/7] Add the gateway's weekly schedules to its data Schedules are keyed by rule id. Slot start and end times keep the gateway's notation, such as "mo 07:15". --- CHANGELOG.md | 1 + fixtures/adam_heatpump_cooling/data.json | 203 ++++ .../adam_multiple_devices_per_zone/data.json | 518 +++++++++ .../data.json | 203 ++++ fixtures/adam_plus_anna/data.json | 116 ++ fixtures/adam_plus_anna_new/data.json | 312 +++++ .../data.json | 314 ++++++ fixtures/adam_zone_per_device/data.json | 518 +++++++++ fixtures/anna_elga_2/data.json | 106 ++ fixtures/anna_elga_2_cooling/data.json | 82 ++ fixtures/anna_elga_2_schedule_off/data.json | 79 ++ fixtures/anna_elga_no_cooling/data.json | 66 ++ fixtures/anna_heatpump_cooling/data.json | 64 ++ .../data.json | 64 ++ fixtures/anna_heatpump_heating/data.json | 66 ++ fixtures/anna_loria_cooling_active/data.json | 998 ++++++++++++++++ fixtures/anna_loria_driessens/data.json | 382 +++++++ fixtures/anna_loria_heating_idle/data.json | 998 ++++++++++++++++ fixtures/anna_p1/data.json | 10 + fixtures/anna_v4/data.json | 161 +++ fixtures/anna_v4_dhw/data.json | 161 +++ fixtures/anna_v4_no_modules/data.json | 161 +++ fixtures/anna_v4_no_tag/data.json | 163 +++ fixtures/anna_without_boiler_fw441/data.json | 148 +++ fixtures/m_adam_cooling/data.json | 312 +++++ fixtures/m_adam_heating/data.json | 312 +++++ .../m_adam_heating_off_schedule/data.json | 312 +++++ .../data.json | 518 +++++++++ fixtures/m_anna_heatpump_cooling/data.json | 66 ++ fixtures/m_anna_heatpump_idle/data.json | 66 ++ plugwise/constants.py | 18 + plugwise/data.py | 3 + plugwise/helper.py | 42 + tests/data/adam/adam_heatpump_cooling.json | 205 +++- .../adam/adam_multiple_devices_per_zone.json | 520 ++++++++- .../adam_onoff_cooling_fake_firmware.json | 205 +++- tests/data/adam/adam_plus_anna.json | 118 +- tests/data/adam/adam_plus_anna_new.json | 314 +++++- .../adam_plus_anna_new_regulation_off.json | 316 +++++- tests/data/adam/adam_zone_per_device.json | 520 ++++++++- tests/data/anna/anna_elga_2.json | 108 +- tests/data/anna/anna_elga_2_cooling.json | 84 +- tests/data/anna/anna_elga_2_schedule_off.json | 81 +- tests/data/anna/anna_elga_no_cooling.json | 68 +- tests/data/anna/anna_heatpump_cooling.json | 66 +- .../anna_heatpump_cooling_fake_firmware.json | 66 +- tests/data/anna/anna_heatpump_heating.json | 68 +- .../data/anna/anna_loria_cooling_active.json | 1000 ++++++++++++++++- tests/data/anna/anna_loria_driessens.json | 384 ++++++- tests/data/anna/anna_loria_heating_idle.json | 1000 ++++++++++++++++- tests/data/anna/anna_p1.json | 12 +- tests/data/anna/anna_v4.json | 163 ++- tests/data/anna/anna_v4_dhw.json | 163 ++- tests/data/anna/anna_v4_no_modules.json | 163 ++- tests/data/anna/anna_v4_no_tag.json | 165 ++- .../data/anna/anna_without_boiler_fw441.json | 150 ++- tests/test_adam.py | 35 +- tests/test_anna.py | 34 +- tests/test_init.py | 1 + 59 files changed, 13506 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dffde73f..f6ce59312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Ongoing +- Add the weekly schedules, with their name, zones and time slots, to the gateway data. - Add the heating setpoint of each preset as an adjustable value for every zone with its own preset rule. Changing one resets a manual setpoint on that zone to its active preset. - Each Adam zone now takes its presets from its own preset rule, not from the last preset rule on the gateway. - Fix setting changes after a timeout or a 504 error. The retry sent a read instead of the change, so the change was reported as done even when the gateway never got it. diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index 8a01e0f80..4dc29c39f 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -446,6 +446,209 @@ "bleeding_hot", "cooling" ], + "schedules": { + "09314e39f2bd416a889cc6b65b9c0209": { + "active": true, + "name": "Opstaan weekdag", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [] + }, + "4fed3d61217a408bbee54d56595cd379": { + "active": true, + "name": "Werkdag schema", + "slots": [ + { + "end": "sa 23:30", + "preset": "home", + "start": "sa 16:30" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 09:00", + "setpoint": 17.5, + "start": "sa 23:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 23:30" + }, + { + "end": "sa 16:30", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "tu 08:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "we 08:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "fr 08:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 17:15" + }, + { + "end": "tu 17:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 17:15" + }, + { + "end": "we 17:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 17:15" + }, + { + "end": "th 17:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 17:15" + }, + { + "end": "fr 17:15", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 23:30", + "preset": "home", + "start": "fr 17:15" + }, + { + "end": "mo 17:15", + "preset": "away", + "start": "mo 08:00" + } + ], + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "active": true, + "name": "Weekend", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 23:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/adam_multiple_devices_per_zone/data.json b/fixtures/adam_multiple_devices_per_zone/data.json index 44d307e86..ea63a8b12 100644 --- a/fixtures/adam_multiple_devices_per_zone/data.json +++ b/fixtures/adam_multiple_devices_per_zone/data.json @@ -808,6 +808,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + }, + { + "end": "mo 22:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "tu 07:30", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "tu 22:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "we 07:30", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "we 22:15", + "preset": "away", + "start": "we 07:30" + }, + { + "end": "th 07:30", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "th 22:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "fr 07:30", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "fr 22:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "mo 07:15", + "setpoint": 16.5, + "start": "su 21:30" + } + ], + "zones": [ + "82fa13f017d240daa0d0ea1775420f24" + ] + }, + "3e4b5a775f8143de961eaa3f5f7d9d1a": { + "active": true, + "name": "Badkamer Schema", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + }, + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 20:15", + "preset": "away", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 20:15" + }, + { + "end": "sa 20:15", + "preset": "away", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 20:15" + }, + { + "end": "su 19:30", + "preset": "away", + "start": "su 07:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 23:15", + "preset": "home", + "start": "fr 11:30" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "fr 23:15" + }, + { + "end": "sa 23:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "preset": "asleep", + "start": "sa 23:15" + } + ], + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ] + } + }, "sensors": { "outdoor_temperature": 7.81 }, diff --git a/fixtures/adam_onoff_cooling_fake_firmware/data.json b/fixtures/adam_onoff_cooling_fake_firmware/data.json index 3a39b6550..d73db7a28 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -68,6 +68,209 @@ "bleeding_hot", "cooling" ], + "schedules": { + "09314e39f2bd416a889cc6b65b9c0209": { + "active": true, + "name": "Opstaan weekdag", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [] + }, + "4fed3d61217a408bbee54d56595cd379": { + "active": true, + "name": "Werkdag schema", + "slots": [ + { + "end": "sa 23:30", + "preset": "home", + "start": "sa 16:30" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 09:00", + "preset": "asleep", + "start": "sa 23:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 23:30" + }, + { + "end": "sa 16:30", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "tu 08:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "we 08:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "fr 08:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 17:15" + }, + { + "end": "tu 17:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 17:15" + }, + { + "end": "we 17:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 17:15" + }, + { + "end": "th 17:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 17:15" + }, + { + "end": "fr 17:15", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 23:30", + "preset": "home", + "start": "fr 17:15" + }, + { + "end": "mo 17:15", + "preset": "away", + "start": "mo 08:00" + } + ], + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "active": true, + "name": "Weekend", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 23:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index 4123a2830..2e4934fed 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -136,6 +136,122 @@ "error": "There is no OpenTherm communication with the boiler." } }, + "schedules": { + "12f68057511a4445a162fb307d437cf1": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "su 16:30", + "preset": "home", + "start": "su 07:30" + }, + { + "end": "mo 16:30", + "preset": "home", + "start": "mo 07:30" + }, + { + "end": "tu 16:30", + "preset": "home", + "start": "tu 07:30" + }, + { + "end": "we 16:30", + "preset": "home", + "start": "we 07:30" + }, + { + "end": "th 16:30", + "preset": "home", + "start": "th 07:30" + }, + { + "end": "fr 16:30", + "preset": "home", + "start": "fr 07:30" + }, + { + "end": "sa 16:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 22:30", + "setpoint": 20.5, + "start": "su 16:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "mo 22:30", + "setpoint": 20.5, + "start": "mo 16:30" + }, + { + "end": "tu 07:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "setpoint": 20.5, + "start": "tu 16:30" + }, + { + "end": "we 07:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "setpoint": 20.5, + "start": "we 16:30" + }, + { + "end": "th 07:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "setpoint": 20.5, + "start": "th 16:30" + }, + { + "end": "fr 07:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 22:30", + "setpoint": 20.5, + "start": "fr 16:30" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "setpoint": 20.5, + "start": "sa 16:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + } + ], + "zones": [ + "009490cc2f674ce6b576863fbb64f867" + ] + } + }, "sensors": { "outdoor_temperature": 11.9 }, diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 4f8af21d3..3cff38746 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -227,6 +227,318 @@ "off", "bleeding_hot" ], + "schedules": { + "24df4dace79a4c42a0f4750ce65d84cb": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 07:15", + "preset": "asleep", + "start": "su 21:30" + } + ], + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "end": "mo 10:00", + "setpoint": 15.0, + "start": "sa 10:00" + }, + { + "end": "tu 10:00", + "setpoint": 15.0, + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "setpoint": 15.0, + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "setpoint": 15.0, + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "setpoint": 15.0, + "start": "th 10:00" + }, + { + "end": "su 10:00", + "setpoint": 15.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:00", + "setpoint": 15.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "ebe3e57ec41d4d8faa927ca85c95b747": { + "active": true, + "name": "Badkamer", + "slots": [ + { + "end": "mo 22:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "fr 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "su 07:30" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "heating", "sensors": { diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index 8ec048bdd..8dd9f0677 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -200,6 +200,320 @@ "off", "heating" ], + "schedules": { + "24df4dace79a4c42a0f4750ce65d84cb": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "mo 07:15", + "preset": "asleep", + "start": "su 21:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "mo 16:30", + "setpoint": 18.0, + "start": "mo 07:15" + }, + { + "end": "tu 16:30", + "setpoint": 18.0, + "start": "tu 07:15" + }, + { + "end": "we 16:30", + "setpoint": 18.0, + "start": "we 07:15" + }, + { + "end": "th 16:30", + "setpoint": 18.0, + "start": "th 07:15" + }, + { + "end": "fr 16:30", + "setpoint": 18.0, + "start": "fr 07:15" + }, + { + "end": "sa 16:00", + "setpoint": 18.0, + "start": "sa 07:45" + }, + { + "end": "su 16:00", + "setpoint": 18.0, + "start": "su 07:45" + } + ], + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "end": "mo 10:00", + "setpoint": 15.0, + "start": "sa 10:00" + }, + { + "end": "tu 10:00", + "setpoint": 15.0, + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "setpoint": 15.0, + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "setpoint": 15.0, + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "setpoint": 15.0, + "start": "th 10:00" + }, + { + "end": "su 10:00", + "setpoint": 15.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:00", + "setpoint": 15.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "ebe3e57ec41d4d8faa927ca85c95b747": { + "active": true, + "name": "Badkamer", + "slots": [ + { + "end": "mo 22:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "fr 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "su 07:30" + } + ], + "zones": [ + "f871b8c4d63549319221e294e4f88074" + ] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "off", "sensors": { diff --git a/fixtures/adam_zone_per_device/data.json b/fixtures/adam_zone_per_device/data.json index 40fad1963..2ac944650 100644 --- a/fixtures/adam_zone_per_device/data.json +++ b/fixtures/adam_zone_per_device/data.json @@ -792,6 +792,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + }, + { + "end": "mo 22:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "tu 07:30", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "tu 22:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "we 07:30", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "we 22:15", + "preset": "away", + "start": "we 07:30" + }, + { + "end": "th 07:30", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "th 22:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "fr 07:30", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "fr 22:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "mo 07:15", + "setpoint": 16.5, + "start": "su 21:30" + } + ], + "zones": [ + "82fa13f017d240daa0d0ea1775420f24" + ] + }, + "3e4b5a775f8143de961eaa3f5f7d9d1a": { + "active": true, + "name": "Badkamer Schema", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + }, + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 20:15", + "preset": "away", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 20:15" + }, + { + "end": "sa 20:15", + "preset": "away", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 20:15" + }, + { + "end": "su 19:30", + "preset": "away", + "start": "su 07:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 23:15", + "preset": "home", + "start": "fr 11:30" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "fr 23:15" + }, + { + "end": "sa 23:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "preset": "asleep", + "start": "sa 23:15" + } + ], + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ] + } + }, "sensors": { "outdoor_temperature": 7.69 }, diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index 70a75ea33..5080840cf 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -121,6 +121,112 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "sa 10:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 22:45", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 22:45" + }, + { + "end": "mo 15:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "mo 23:00", + "setpoint": 19.0, + "start": "mo 15:00" + }, + { + "end": "tu 15:00", + "preset": "home", + "start": "tu 10:00" + }, + { + "end": "tu 23:00", + "setpoint": 19.0, + "start": "tu 15:00" + }, + { + "end": "we 15:00", + "preset": "home", + "start": "we 10:00" + }, + { + "end": "we 23:00", + "setpoint": 19.0, + "start": "we 15:00" + }, + { + "end": "th 15:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "setpoint": 19.0, + "start": "th 15:00" + }, + { + "end": "fr 15:00", + "preset": "home", + "start": "fr 10:00" + }, + { + "end": "fr 23:00", + "setpoint": 19.0, + "start": "fr 15:00" + } + ], + "zones": [ + "d3ce834534114348be628b61b26d9220" + ] + } + }, "sensors": { "outdoor_temperature": 6.38 }, diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index f3d4c6877..11553c9fa 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -128,6 +128,88 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "cooling_setpoint": 23.5, + "end": "mo 06:45", + "heating_setpoint": 18.5, + "start": "sa 23:00" + }, + { + "end": "tu 06:45", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "we 06:45", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "th 06:45", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "fr 06:45", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "su 08:30", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "mo 23:00", + "preset": "asleep", + "start": "su 22:45" + }, + { + "end": "th 23:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "fr 23:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "we 23:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "tu 23:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "su 22:45", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + } + ], + "zones": [ + "d3ce834534114348be628b61b26d9220" + ] + } + }, "sensors": { "outdoor_temperature": 31.0 }, diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index e3640ab4b..ab88e4d3c 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -128,6 +128,85 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "end": "mo 06:45", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "tu 06:45", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "we 06:45", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "th 06:45", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "fr 06:45", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "su 08:30", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "mo 23:00", + "preset": "asleep", + "start": "su 22:45" + }, + { + "end": "th 23:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "fr 23:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "we 23:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "tu 23:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "su 22:45", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 13.0 }, diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index ef57ecfda..e03da1473 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -12,6 +12,72 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 20.2 }, diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index 80501dc81..22f9fa992 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -12,6 +12,70 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 22.0 }, diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index b14cce672..d54d7a0f9 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -12,6 +12,70 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 22.0 }, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 6ba9d7b06..a68c44c6f 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -12,6 +12,72 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 20.2 }, diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index 931491ea8..54c7da157 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -86,6 +86,1004 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "active": true, + "name": "Winter", + "slots": [ + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 23:15" + }, + { + "end": "sa 23:15", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 23:15" + }, + { + "end": "su 23:15", + "preset": "home", + "start": "su 07:30" + }, + { + "end": "mo 23:15", + "preset": "home", + "start": "mo 06:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "su 23:15" + }, + { + "end": "tu 06:00", + "preset": "asleep", + "start": "mo 23:15" + }, + { + "end": "tu 23:15", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "we 06:00", + "preset": "asleep", + "start": "tu 23:15" + }, + { + "end": "we 23:15", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:00", + "preset": "asleep", + "start": "we 23:15" + }, + { + "end": "th 23:15", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "fr 06:00", + "preset": "asleep", + "start": "th 23:15" + }, + { + "end": "fr 23:15", + "preset": "home", + "start": "fr 06:00" + } + ], + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "active": true, + "name": "Test ", + "slots": [ + { + "end": "mo 00:00", + "preset": "home", + "start": "fr 00:00" + }, + { + "end": "tu 00:00", + "preset": "home", + "start": "mo 00:00" + }, + { + "end": "we 00:00", + "preset": "home", + "start": "tu 00:00" + }, + { + "end": "th 00:00", + "preset": "home", + "start": "we 00:00" + }, + { + "end": "su 00:00", + "preset": "home", + "start": "th 00:00" + }, + { + "end": "mo 00:15", + "preset": "home", + "start": "su 00:00" + }, + { + "end": "tu 00:15", + "preset": "asleep", + "start": "mo 00:15" + }, + { + "end": "we 00:15", + "preset": "asleep", + "start": "tu 00:15" + }, + { + "end": "th 00:15", + "preset": "asleep", + "start": "we 00:15" + }, + { + "end": "fr 00:15", + "preset": "asleep", + "start": "th 00:15" + }, + { + "end": "su 00:15", + "preset": "asleep", + "start": "fr 00:15" + }, + { + "end": "mo 02:00", + "preset": "asleep", + "start": "su 00:15" + }, + { + "end": "tu 02:00", + "preset": "home", + "start": "mo 02:00" + }, + { + "end": "we 02:00", + "preset": "home", + "start": "tu 02:00" + }, + { + "end": "th 02:00", + "preset": "home", + "start": "we 02:00" + }, + { + "end": "fr 02:00", + "preset": "home", + "start": "th 02:00" + }, + { + "end": "su 02:00", + "preset": "home", + "start": "fr 02:00" + }, + { + "end": "mo 02:15", + "preset": "home", + "start": "su 02:00" + }, + { + "end": "tu 02:15", + "preset": "asleep", + "start": "mo 02:15" + }, + { + "end": "we 02:15", + "preset": "asleep", + "start": "tu 02:15" + }, + { + "end": "th 02:15", + "preset": "asleep", + "start": "we 02:15" + }, + { + "end": "fr 02:15", + "preset": "asleep", + "start": "th 02:15" + }, + { + "end": "su 02:15", + "preset": "asleep", + "start": "fr 02:15" + }, + { + "end": "tu 04:00", + "preset": "home", + "start": "mo 04:00" + }, + { + "end": "we 04:00", + "preset": "home", + "start": "tu 04:00" + }, + { + "end": "fr 04:00", + "preset": "home", + "start": "we 04:00" + }, + { + "end": "su 04:00", + "preset": "home", + "start": "fr 04:00" + }, + { + "end": "tu 04:15", + "preset": "asleep", + "start": "mo 04:15" + }, + { + "end": "we 04:15", + "preset": "asleep", + "start": "tu 04:15" + }, + { + "end": "fr 04:15", + "preset": "asleep", + "start": "we 04:15" + }, + { + "end": "su 04:15", + "preset": "asleep", + "start": "fr 04:15" + }, + { + "end": "th 04:15", + "preset": "asleep", + "start": "su 04:15" + }, + { + "end": "tu 06:00", + "preset": "home", + "start": "mo 06:00" + }, + { + "end": "we 06:00", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "fr 06:00", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:00", + "preset": "home", + "start": "fr 06:00" + }, + { + "end": "su 06:00", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "mo 06:30", + "preset": "home", + "start": "su 06:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 06:30" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 06:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 06:30" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 06:30" + }, + { + "end": "su 06:30", + "preset": "asleep", + "start": "fr 06:30" + }, + { + "end": "sa 00:15", + "preset": "home", + "start": "sa 00:00" + }, + { + "end": "sa 02:00", + "preset": "asleep", + "start": "sa 00:15" + }, + { + "end": "sa 02:15", + "preset": "home", + "start": "sa 02:00" + }, + { + "end": "sa 04:00", + "preset": "asleep", + "start": "sa 02:15" + }, + { + "end": "sa 04:15", + "preset": "home", + "start": "sa 04:00" + }, + { + "end": "sa 06:00", + "preset": "asleep", + "start": "sa 04:15" + }, + { + "end": "sa 06:30", + "preset": "home", + "start": "sa 06:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "tu 08:00" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "we 08:00" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "su 08:00", + "preset": "home", + "start": "fr 08:00" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "sa 06:30" + }, + { + "end": "mo 04:00", + "preset": "asleep", + "start": "su 02:15" + }, + { + "end": "mo 08:15", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "tu 08:15", + "preset": "asleep", + "start": "mo 08:15" + }, + { + "end": "we 08:15", + "preset": "asleep", + "start": "tu 08:15" + }, + { + "end": "th 08:15", + "preset": "asleep", + "start": "we 08:15" + }, + { + "end": "fr 08:15", + "preset": "asleep", + "start": "th 08:15" + }, + { + "end": "su 08:15", + "preset": "asleep", + "start": "fr 08:15" + }, + { + "end": "sa 08:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "mo 09:30", + "preset": "asleep", + "start": "su 08:15" + }, + { + "end": "tu 09:30", + "preset": "home", + "start": "mo 09:30" + }, + { + "end": "we 09:30", + "preset": "home", + "start": "tu 09:30" + }, + { + "end": "th 09:30", + "preset": "home", + "start": "we 09:30" + }, + { + "end": "fr 09:30", + "preset": "home", + "start": "th 09:30" + }, + { + "end": "su 09:30", + "preset": "home", + "start": "fr 09:30" + }, + { + "end": "sa 09:30", + "preset": "asleep", + "start": "sa 08:15" + }, + { + "end": "mo 09:45", + "preset": "home", + "start": "su 09:30" + }, + { + "end": "we 09:45", + "preset": "asleep", + "start": "mo 09:45" + }, + { + "end": "tu 09:45", + "preset": "asleep", + "start": "we 09:45" + }, + { + "end": "th 09:45", + "preset": "asleep", + "start": "tu 09:45" + }, + { + "end": "fr 09:45", + "preset": "asleep", + "start": "th 09:45" + }, + { + "end": "su 09:45", + "preset": "asleep", + "start": "fr 09:45" + }, + { + "end": "sa 09:45", + "preset": "home", + "start": "sa 09:30" + }, + { + "end": "mo 11:00", + "preset": "asleep", + "start": "su 09:45" + }, + { + "end": "tu 11:00", + "preset": "home", + "start": "mo 11:00" + }, + { + "end": "we 11:00", + "preset": "home", + "start": "tu 11:00" + }, + { + "end": "th 11:00", + "preset": "home", + "start": "we 11:00" + }, + { + "end": "fr 11:00", + "preset": "home", + "start": "th 11:00" + }, + { + "end": "su 11:00", + "preset": "home", + "start": "fr 11:00" + }, + { + "end": "sa 11:00", + "preset": "asleep", + "start": "sa 09:45" + }, + { + "end": "mo 11:15", + "preset": "home", + "start": "su 11:00" + }, + { + "end": "tu 11:15", + "preset": "asleep", + "start": "mo 11:15" + }, + { + "end": "we 11:15", + "preset": "asleep", + "start": "tu 11:15" + }, + { + "end": "th 11:15", + "preset": "asleep", + "start": "we 11:15" + }, + { + "end": "fr 11:15", + "preset": "asleep", + "start": "th 11:15" + }, + { + "end": "su 11:15", + "preset": "asleep", + "start": "fr 11:15" + }, + { + "end": "sa 11:15", + "preset": "home", + "start": "sa 11:00" + }, + { + "end": "mo 12:45", + "preset": "asleep", + "start": "su 11:15" + }, + { + "end": "tu 12:45", + "preset": "home", + "start": "mo 12:45" + }, + { + "end": "we 12:45", + "preset": "home", + "start": "tu 12:45" + }, + { + "end": "th 12:45", + "preset": "home", + "start": "we 12:45" + }, + { + "end": "fr 12:45", + "preset": "home", + "start": "th 12:45" + }, + { + "end": "su 12:45", + "preset": "home", + "start": "fr 12:45" + }, + { + "end": "sa 12:45", + "preset": "asleep", + "start": "sa 11:15" + }, + { + "end": "mo 13:00", + "preset": "home", + "start": "su 12:45" + }, + { + "end": "tu 13:00", + "preset": "asleep", + "start": "mo 13:00" + }, + { + "end": "we 13:00", + "preset": "asleep", + "start": "tu 13:00" + }, + { + "end": "th 13:00", + "preset": "asleep", + "start": "we 13:00" + }, + { + "end": "fr 13:00", + "preset": "asleep", + "start": "th 13:00" + }, + { + "end": "su 13:00", + "preset": "asleep", + "start": "fr 13:00" + }, + { + "end": "sa 13:00", + "preset": "home", + "start": "sa 12:45" + }, + { + "end": "mo 14:30", + "preset": "asleep", + "start": "su 13:00" + }, + { + "end": "tu 14:30", + "preset": "home", + "start": "mo 14:30" + }, + { + "end": "we 14:30", + "preset": "home", + "start": "tu 14:30" + }, + { + "end": "th 14:30", + "preset": "home", + "start": "we 14:30" + }, + { + "end": "fr 14:30", + "preset": "home", + "start": "th 14:30" + }, + { + "end": "su 14:30", + "preset": "home", + "start": "fr 14:30" + }, + { + "end": "sa 14:30", + "preset": "asleep", + "start": "sa 13:00" + }, + { + "end": "mo 14:45", + "preset": "home", + "start": "su 14:30" + }, + { + "end": "tu 14:45", + "preset": "asleep", + "start": "mo 14:45" + }, + { + "end": "we 14:45", + "preset": "asleep", + "start": "tu 14:45" + }, + { + "end": "th 14:45", + "preset": "asleep", + "start": "we 14:45" + }, + { + "end": "fr 14:45", + "preset": "asleep", + "start": "th 14:45" + }, + { + "end": "su 14:45", + "preset": "asleep", + "start": "fr 14:45" + }, + { + "end": "sa 14:45", + "preset": "home", + "start": "sa 14:30" + }, + { + "end": "mo 16:00", + "preset": "asleep", + "start": "su 14:45" + }, + { + "end": "tu 16:00", + "preset": "home", + "start": "mo 16:00" + }, + { + "end": "we 16:00", + "preset": "home", + "start": "tu 16:00" + }, + { + "end": "th 16:00", + "preset": "home", + "start": "we 16:00" + }, + { + "end": "fr 16:00", + "preset": "home", + "start": "th 16:00" + }, + { + "end": "su 16:00", + "preset": "home", + "start": "fr 16:00" + }, + { + "end": "sa 16:00", + "preset": "asleep", + "start": "sa 14:45" + }, + { + "end": "mo 16:15", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:15", + "preset": "asleep", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "asleep", + "start": "tu 16:15" + }, + { + "end": "fr 16:15", + "preset": "asleep", + "start": "we 16:15" + }, + { + "end": "th 16:15", + "preset": "asleep", + "start": "fr 16:15" + }, + { + "end": "su 16:15", + "preset": "asleep", + "start": "th 16:15" + }, + { + "end": "sa 16:15", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "mo 18:00", + "preset": "asleep", + "start": "su 16:15" + }, + { + "end": "tu 18:00", + "preset": "home", + "start": "mo 18:00" + }, + { + "end": "we 18:00", + "preset": "home", + "start": "tu 18:00" + }, + { + "end": "th 18:00", + "preset": "home", + "start": "we 18:00" + }, + { + "end": "fr 18:00", + "preset": "home", + "start": "th 18:00" + }, + { + "end": "sa 18:00", + "preset": "asleep", + "start": "sa 16:15" + }, + { + "end": "sa 18:15", + "preset": "home", + "start": "sa 18:00" + }, + { + "end": "tu 18:15", + "preset": "asleep", + "start": "mo 18:15" + }, + { + "end": "th 04:00", + "preset": "home", + "start": "su 04:00" + }, + { + "end": "mo 04:15", + "preset": "home", + "start": "th 04:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "th 04:15" + }, + { + "end": "we 18:15", + "preset": "asleep", + "start": "tu 18:15" + }, + { + "end": "th 18:15", + "preset": "asleep", + "start": "we 18:15" + }, + { + "end": "fr 18:15", + "preset": "asleep", + "start": "th 18:15" + }, + { + "end": "su 18:15", + "preset": "asleep", + "start": "fr 18:15" + }, + { + "end": "su 18:00", + "preset": "home", + "start": "fr 18:00" + }, + { + "end": "mo 18:15", + "preset": "home", + "start": "su 18:00" + }, + { + "end": "mo 20:15", + "preset": "asleep", + "start": "su 18:15" + }, + { + "end": "tu 20:15", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "we 20:15", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "th 20:15", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "fr 20:15", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "su 20:15", + "preset": "home", + "start": "fr 20:15" + }, + { + "end": "sa 20:15", + "preset": "asleep", + "start": "sa 18:15" + }, + { + "end": "mo 20:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "tu 20:30", + "preset": "asleep", + "start": "mo 20:30" + }, + { + "end": "we 20:30", + "preset": "asleep", + "start": "tu 20:30" + }, + { + "end": "th 20:30", + "preset": "asleep", + "start": "we 20:30" + }, + { + "end": "fr 20:30", + "preset": "asleep", + "start": "th 20:30" + }, + { + "end": "su 20:30", + "preset": "asleep", + "start": "fr 20:30" + }, + { + "end": "sa 20:30", + "preset": "home", + "start": "sa 20:15" + }, + { + "end": "mo 22:00", + "preset": "asleep", + "start": "su 20:30" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "mo 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "tu 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "we 22:00" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "th 22:00" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "fr 22:00" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "mo 22:15", + "preset": "home", + "start": "su 22:00" + }, + { + "end": "tu 22:15", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "we 22:15", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "th 22:15", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "fr 22:15", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "su 22:15", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "end": "sa 00:00", + "preset": "asleep", + "start": "su 22:15" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 22:00" + }, + { + "end": "fr 00:00", + "preset": "asleep", + "start": "sa 22:15" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 15.5 }, diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index a1a8920f6..e5e953860 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -12,6 +12,388 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "68640693f6a445a5993389c636a84435": { + "active": true, + "name": "VAKANTIE (winter)", + "slots": [ + { + "end": "mo 15:30", + "preset": "away", + "start": "mo 10:45" + }, + { + "end": "tu 10:45", + "setpoint": 15.0, + "start": "mo 15:30" + }, + { + "end": "tu 15:30", + "preset": "away", + "start": "tu 10:45" + }, + { + "end": "we 10:45", + "setpoint": 15.0, + "start": "tu 15:30" + }, + { + "end": "we 15:30", + "preset": "away", + "start": "we 10:45" + }, + { + "end": "th 10:45", + "setpoint": 15.0, + "start": "we 15:30" + }, + { + "end": "th 15:30", + "preset": "away", + "start": "th 10:45" + }, + { + "end": "fr 10:45", + "setpoint": 15.0, + "start": "th 15:30" + }, + { + "end": "fr 15:30", + "preset": "away", + "start": "fr 10:45" + }, + { + "end": "sa 10:45", + "setpoint": 15.0, + "start": "fr 15:30" + }, + { + "end": "sa 15:30", + "preset": "away", + "start": "sa 10:45" + }, + { + "end": "su 10:45", + "setpoint": 15.0, + "start": "sa 15:30" + }, + { + "end": "su 15:30", + "preset": "away", + "start": "su 10:45" + }, + { + "end": "mo 10:45", + "setpoint": 15.0, + "start": "su 15:30" + } + ], + "zones": [] + }, + "6cfc8d79f7164cd5b0e5d7a8e8d217c3": { + "active": true, + "name": "KOELEN", + "slots": [ + { + "end": "mo 20:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "tu 08:00", + "preset": "asleep", + "start": "mo 20:00" + }, + { + "end": "tu 20:00", + "preset": "home", + "start": "tu 08:00" + }, + { + "end": "we 08:00", + "preset": "asleep", + "start": "tu 20:00" + }, + { + "end": "we 20:00", + "preset": "home", + "start": "we 08:00" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 20:00" + }, + { + "end": "th 20:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "fr 08:00", + "preset": "asleep", + "start": "th 20:00" + }, + { + "end": "fr 20:00", + "preset": "home", + "start": "fr 08:00" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "fr 20:00" + }, + { + "end": "sa 20:00", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "preset": "asleep", + "start": "sa 20:00" + }, + { + "end": "su 20:00", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 20:00" + } + ], + "zones": [] + }, + "86e18430fa3f49a3a7e89557af183ccb": { + "active": true, + "name": "VERWARMEN", + "slots": [ + { + "end": "mo 17:00", + "preset": "home", + "start": "mo 10:15" + }, + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 17:00" + }, + { + "end": "tu 17:00", + "preset": "home", + "start": "tu 10:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 17:00" + }, + { + "end": "we 17:00", + "preset": "home", + "start": "we 10:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 17:00" + }, + { + "end": "th 17:00", + "preset": "home", + "start": "th 10:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 17:00" + }, + { + "end": "fr 17:00", + "preset": "home", + "start": "fr 10:15" + }, + { + "end": "sa 10:00", + "preset": "asleep", + "start": "fr 17:00" + }, + { + "end": "sa 17:00", + "preset": "home", + "start": "sa 10:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 17:00" + }, + { + "end": "su 17:00", + "preset": "home", + "start": "su 10:15" + }, + { + "end": "mo 10:00", + "preset": "asleep", + "start": "su 17:00" + }, + { + "end": "mo 10:15", + "setpoint": 21.0, + "start": "mo 10:00" + }, + { + "end": "tu 10:15", + "setpoint": 21.0, + "start": "tu 10:00" + }, + { + "end": "we 10:15", + "setpoint": 21.0, + "start": "we 10:00" + }, + { + "end": "th 10:15", + "setpoint": 21.0, + "start": "th 10:00" + }, + { + "end": "fr 10:15", + "setpoint": 21.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:15", + "setpoint": 21.0, + "start": "sa 10:00" + }, + { + "end": "su 10:15", + "setpoint": 21.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "d4e04f5167ab43348e00c0a45b50a2bb": { + "active": true, + "name": "Verwarmen@9-23u", + "slots": [ + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 09:15" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 09:15" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 09:15" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 09:15" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 09:15" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:15" + }, + { + "end": "tu 09:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "we 09:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "th 09:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "fr 09:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "sa 09:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "su 09:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "mo 09:00", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "mo 09:15", + "setpoint": 21.0, + "start": "mo 09:00" + }, + { + "end": "tu 09:15", + "setpoint": 21.0, + "start": "tu 09:00" + }, + { + "end": "we 09:15", + "setpoint": 21.0, + "start": "we 09:00" + }, + { + "end": "th 09:15", + "setpoint": 21.0, + "start": "th 09:00" + }, + { + "end": "sa 09:15", + "setpoint": 21.0, + "start": "sa 09:00" + }, + { + "end": "su 09:15", + "setpoint": 21.0, + "start": "su 09:00" + }, + { + "end": "fr 09:15", + "setpoint": 21.0, + "start": "fr 09:00" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 09:15" + } + ], + "zones": [ + "fa70e08550c94de3a34feb27ecf31421" + ] + } + }, "sensors": { "outdoor_temperature": 6.81 }, diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index d2490f578..0eea5f115 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -86,6 +86,1004 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "active": true, + "name": "Winter", + "slots": [ + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 23:15" + }, + { + "end": "sa 23:15", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 23:15" + }, + { + "end": "su 23:15", + "preset": "home", + "start": "su 07:30" + }, + { + "end": "mo 23:15", + "setpoint": 17.5, + "start": "mo 06:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "su 23:15" + }, + { + "end": "tu 06:00", + "preset": "asleep", + "start": "mo 23:15" + }, + { + "end": "tu 23:15", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "we 06:00", + "preset": "asleep", + "start": "tu 23:15" + }, + { + "end": "we 23:15", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:00", + "preset": "asleep", + "start": "we 23:15" + }, + { + "end": "th 23:15", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "fr 06:00", + "preset": "asleep", + "start": "th 23:15" + }, + { + "end": "fr 23:15", + "preset": "home", + "start": "fr 06:00" + } + ], + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "active": true, + "name": "Test ", + "slots": [ + { + "end": "mo 00:00", + "preset": "home", + "start": "fr 00:00" + }, + { + "end": "tu 00:00", + "preset": "home", + "start": "mo 00:00" + }, + { + "end": "we 00:00", + "preset": "home", + "start": "tu 00:00" + }, + { + "end": "th 00:00", + "preset": "home", + "start": "we 00:00" + }, + { + "end": "su 00:00", + "preset": "home", + "start": "th 00:00" + }, + { + "end": "mo 00:15", + "preset": "home", + "start": "su 00:00" + }, + { + "end": "tu 00:15", + "preset": "asleep", + "start": "mo 00:15" + }, + { + "end": "we 00:15", + "preset": "asleep", + "start": "tu 00:15" + }, + { + "end": "th 00:15", + "preset": "asleep", + "start": "we 00:15" + }, + { + "end": "fr 00:15", + "preset": "asleep", + "start": "th 00:15" + }, + { + "end": "su 00:15", + "preset": "asleep", + "start": "fr 00:15" + }, + { + "end": "mo 02:00", + "preset": "asleep", + "start": "su 00:15" + }, + { + "end": "tu 02:00", + "preset": "home", + "start": "mo 02:00" + }, + { + "end": "we 02:00", + "preset": "home", + "start": "tu 02:00" + }, + { + "end": "th 02:00", + "preset": "home", + "start": "we 02:00" + }, + { + "end": "fr 02:00", + "preset": "home", + "start": "th 02:00" + }, + { + "end": "su 02:00", + "preset": "home", + "start": "fr 02:00" + }, + { + "end": "mo 02:15", + "preset": "home", + "start": "su 02:00" + }, + { + "end": "tu 02:15", + "preset": "asleep", + "start": "mo 02:15" + }, + { + "end": "we 02:15", + "preset": "asleep", + "start": "tu 02:15" + }, + { + "end": "th 02:15", + "preset": "asleep", + "start": "we 02:15" + }, + { + "end": "fr 02:15", + "preset": "asleep", + "start": "th 02:15" + }, + { + "end": "su 02:15", + "preset": "asleep", + "start": "fr 02:15" + }, + { + "end": "tu 04:00", + "preset": "home", + "start": "mo 04:00" + }, + { + "end": "we 04:00", + "preset": "home", + "start": "tu 04:00" + }, + { + "end": "fr 04:00", + "preset": "home", + "start": "we 04:00" + }, + { + "end": "su 04:00", + "preset": "home", + "start": "fr 04:00" + }, + { + "end": "tu 04:15", + "preset": "asleep", + "start": "mo 04:15" + }, + { + "end": "we 04:15", + "preset": "asleep", + "start": "tu 04:15" + }, + { + "end": "fr 04:15", + "preset": "asleep", + "start": "we 04:15" + }, + { + "end": "su 04:15", + "preset": "asleep", + "start": "fr 04:15" + }, + { + "end": "th 04:15", + "preset": "asleep", + "start": "su 04:15" + }, + { + "end": "tu 06:00", + "preset": "home", + "start": "mo 06:00" + }, + { + "end": "we 06:00", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "fr 06:00", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:00", + "preset": "home", + "start": "fr 06:00" + }, + { + "end": "su 06:00", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "mo 06:30", + "preset": "home", + "start": "su 06:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 06:30" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 06:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 06:30" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 06:30" + }, + { + "end": "su 06:30", + "preset": "asleep", + "start": "fr 06:30" + }, + { + "end": "sa 00:15", + "preset": "home", + "start": "sa 00:00" + }, + { + "end": "sa 02:00", + "preset": "asleep", + "start": "sa 00:15" + }, + { + "end": "sa 02:15", + "preset": "home", + "start": "sa 02:00" + }, + { + "end": "sa 04:00", + "preset": "asleep", + "start": "sa 02:15" + }, + { + "end": "sa 04:15", + "preset": "home", + "start": "sa 04:00" + }, + { + "end": "sa 06:00", + "preset": "asleep", + "start": "sa 04:15" + }, + { + "end": "sa 06:30", + "preset": "home", + "start": "sa 06:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "tu 08:00" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "we 08:00" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "su 08:00", + "preset": "home", + "start": "fr 08:00" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "sa 06:30" + }, + { + "end": "mo 04:00", + "preset": "asleep", + "start": "su 02:15" + }, + { + "end": "mo 08:15", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "tu 08:15", + "preset": "asleep", + "start": "mo 08:15" + }, + { + "end": "we 08:15", + "preset": "asleep", + "start": "tu 08:15" + }, + { + "end": "th 08:15", + "preset": "asleep", + "start": "we 08:15" + }, + { + "end": "fr 08:15", + "preset": "asleep", + "start": "th 08:15" + }, + { + "end": "su 08:15", + "preset": "asleep", + "start": "fr 08:15" + }, + { + "end": "sa 08:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "mo 09:30", + "preset": "asleep", + "start": "su 08:15" + }, + { + "end": "tu 09:30", + "preset": "home", + "start": "mo 09:30" + }, + { + "end": "we 09:30", + "preset": "home", + "start": "tu 09:30" + }, + { + "end": "th 09:30", + "preset": "home", + "start": "we 09:30" + }, + { + "end": "fr 09:30", + "preset": "home", + "start": "th 09:30" + }, + { + "end": "su 09:30", + "preset": "home", + "start": "fr 09:30" + }, + { + "end": "sa 09:30", + "preset": "asleep", + "start": "sa 08:15" + }, + { + "end": "mo 09:45", + "preset": "home", + "start": "su 09:30" + }, + { + "end": "we 09:45", + "preset": "asleep", + "start": "mo 09:45" + }, + { + "end": "tu 09:45", + "preset": "asleep", + "start": "we 09:45" + }, + { + "end": "th 09:45", + "preset": "asleep", + "start": "tu 09:45" + }, + { + "end": "fr 09:45", + "preset": "asleep", + "start": "th 09:45" + }, + { + "end": "su 09:45", + "preset": "asleep", + "start": "fr 09:45" + }, + { + "end": "sa 09:45", + "preset": "home", + "start": "sa 09:30" + }, + { + "end": "mo 11:00", + "preset": "asleep", + "start": "su 09:45" + }, + { + "end": "tu 11:00", + "preset": "home", + "start": "mo 11:00" + }, + { + "end": "we 11:00", + "preset": "home", + "start": "tu 11:00" + }, + { + "end": "th 11:00", + "preset": "home", + "start": "we 11:00" + }, + { + "end": "fr 11:00", + "preset": "home", + "start": "th 11:00" + }, + { + "end": "su 11:00", + "preset": "home", + "start": "fr 11:00" + }, + { + "end": "sa 11:00", + "preset": "asleep", + "start": "sa 09:45" + }, + { + "end": "mo 11:15", + "preset": "home", + "start": "su 11:00" + }, + { + "end": "tu 11:15", + "preset": "asleep", + "start": "mo 11:15" + }, + { + "end": "we 11:15", + "preset": "asleep", + "start": "tu 11:15" + }, + { + "end": "th 11:15", + "preset": "asleep", + "start": "we 11:15" + }, + { + "end": "fr 11:15", + "preset": "asleep", + "start": "th 11:15" + }, + { + "end": "su 11:15", + "preset": "asleep", + "start": "fr 11:15" + }, + { + "end": "sa 11:15", + "preset": "home", + "start": "sa 11:00" + }, + { + "end": "mo 12:45", + "preset": "asleep", + "start": "su 11:15" + }, + { + "end": "tu 12:45", + "preset": "home", + "start": "mo 12:45" + }, + { + "end": "we 12:45", + "preset": "home", + "start": "tu 12:45" + }, + { + "end": "th 12:45", + "preset": "home", + "start": "we 12:45" + }, + { + "end": "fr 12:45", + "preset": "home", + "start": "th 12:45" + }, + { + "end": "su 12:45", + "preset": "home", + "start": "fr 12:45" + }, + { + "end": "sa 12:45", + "preset": "asleep", + "start": "sa 11:15" + }, + { + "end": "mo 13:00", + "preset": "home", + "start": "su 12:45" + }, + { + "end": "tu 13:00", + "preset": "asleep", + "start": "mo 13:00" + }, + { + "end": "we 13:00", + "preset": "asleep", + "start": "tu 13:00" + }, + { + "end": "th 13:00", + "preset": "asleep", + "start": "we 13:00" + }, + { + "end": "fr 13:00", + "preset": "asleep", + "start": "th 13:00" + }, + { + "end": "su 13:00", + "preset": "asleep", + "start": "fr 13:00" + }, + { + "end": "sa 13:00", + "preset": "home", + "start": "sa 12:45" + }, + { + "end": "mo 14:30", + "preset": "asleep", + "start": "su 13:00" + }, + { + "end": "tu 14:30", + "preset": "home", + "start": "mo 14:30" + }, + { + "end": "we 14:30", + "preset": "home", + "start": "tu 14:30" + }, + { + "end": "th 14:30", + "preset": "home", + "start": "we 14:30" + }, + { + "end": "fr 14:30", + "preset": "home", + "start": "th 14:30" + }, + { + "end": "su 14:30", + "preset": "home", + "start": "fr 14:30" + }, + { + "end": "sa 14:30", + "preset": "asleep", + "start": "sa 13:00" + }, + { + "end": "mo 14:45", + "preset": "home", + "start": "su 14:30" + }, + { + "end": "tu 14:45", + "preset": "asleep", + "start": "mo 14:45" + }, + { + "end": "we 14:45", + "preset": "asleep", + "start": "tu 14:45" + }, + { + "end": "th 14:45", + "preset": "asleep", + "start": "we 14:45" + }, + { + "end": "fr 14:45", + "preset": "asleep", + "start": "th 14:45" + }, + { + "end": "su 14:45", + "preset": "asleep", + "start": "fr 14:45" + }, + { + "end": "sa 14:45", + "preset": "home", + "start": "sa 14:30" + }, + { + "end": "mo 16:00", + "preset": "asleep", + "start": "su 14:45" + }, + { + "end": "tu 16:00", + "preset": "home", + "start": "mo 16:00" + }, + { + "end": "we 16:00", + "preset": "home", + "start": "tu 16:00" + }, + { + "end": "th 16:00", + "preset": "home", + "start": "we 16:00" + }, + { + "end": "fr 16:00", + "preset": "home", + "start": "th 16:00" + }, + { + "end": "su 16:00", + "preset": "home", + "start": "fr 16:00" + }, + { + "end": "sa 16:00", + "preset": "asleep", + "start": "sa 14:45" + }, + { + "end": "mo 16:15", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:15", + "preset": "asleep", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "asleep", + "start": "tu 16:15" + }, + { + "end": "fr 16:15", + "preset": "asleep", + "start": "we 16:15" + }, + { + "end": "th 16:15", + "preset": "asleep", + "start": "fr 16:15" + }, + { + "end": "su 16:15", + "preset": "asleep", + "start": "th 16:15" + }, + { + "end": "sa 16:15", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "mo 18:00", + "preset": "asleep", + "start": "su 16:15" + }, + { + "end": "tu 18:00", + "preset": "home", + "start": "mo 18:00" + }, + { + "end": "we 18:00", + "preset": "home", + "start": "tu 18:00" + }, + { + "end": "th 18:00", + "preset": "home", + "start": "we 18:00" + }, + { + "end": "fr 18:00", + "preset": "home", + "start": "th 18:00" + }, + { + "end": "sa 18:00", + "preset": "asleep", + "start": "sa 16:15" + }, + { + "end": "sa 18:15", + "preset": "home", + "start": "sa 18:00" + }, + { + "end": "tu 18:15", + "preset": "asleep", + "start": "mo 18:15" + }, + { + "end": "th 04:00", + "preset": "home", + "start": "su 04:00" + }, + { + "end": "mo 04:15", + "preset": "home", + "start": "th 04:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "th 04:15" + }, + { + "end": "we 18:15", + "preset": "asleep", + "start": "tu 18:15" + }, + { + "end": "th 18:15", + "preset": "asleep", + "start": "we 18:15" + }, + { + "end": "fr 18:15", + "preset": "asleep", + "start": "th 18:15" + }, + { + "end": "su 18:15", + "preset": "asleep", + "start": "fr 18:15" + }, + { + "end": "su 18:00", + "preset": "home", + "start": "fr 18:00" + }, + { + "end": "mo 18:15", + "preset": "home", + "start": "su 18:00" + }, + { + "end": "mo 20:15", + "preset": "asleep", + "start": "su 18:15" + }, + { + "end": "tu 20:15", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "we 20:15", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "th 20:15", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "fr 20:15", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "su 20:15", + "preset": "home", + "start": "fr 20:15" + }, + { + "end": "sa 20:15", + "preset": "asleep", + "start": "sa 18:15" + }, + { + "end": "mo 20:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "tu 20:30", + "preset": "asleep", + "start": "mo 20:30" + }, + { + "end": "we 20:30", + "preset": "asleep", + "start": "tu 20:30" + }, + { + "end": "th 20:30", + "preset": "asleep", + "start": "we 20:30" + }, + { + "end": "fr 20:30", + "preset": "asleep", + "start": "th 20:30" + }, + { + "end": "su 20:30", + "preset": "asleep", + "start": "fr 20:30" + }, + { + "end": "sa 20:30", + "preset": "home", + "start": "sa 20:15" + }, + { + "end": "mo 22:00", + "preset": "asleep", + "start": "su 20:30" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "mo 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "tu 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "we 22:00" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "th 22:00" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "fr 22:00" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "mo 22:15", + "preset": "home", + "start": "su 22:00" + }, + { + "end": "tu 22:15", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "we 22:15", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "th 22:15", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "fr 22:15", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "su 22:15", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "end": "sa 00:00", + "preset": "asleep", + "start": "su 22:15" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 22:00" + }, + { + "end": "fr 00:00", + "preset": "asleep", + "start": "sa 22:15" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 15.5 }, diff --git a/fixtures/anna_p1/data.json b/fixtures/anna_p1/data.json index 0a15747c5..aae0b4588 100644 --- a/fixtures/anna_p1/data.json +++ b/fixtures/anna_p1/data.json @@ -111,6 +111,16 @@ "model_id": "smile_thermo", "name": "Smile Anna P1", "notifications": {}, + "schedules": { + "898e6eaa068b44019ff9dc5c578881b2": { + "active": false, + "name": "Thermostat schedule", + "slots": [], + "zones": [ + "5b13651d79c4454684fd268850b1bff8" + ] + } + }, "sensors": { "outdoor_temperature": 11.8 }, diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index c18484a03..c759fea6b 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -84,6 +84,167 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 18:15" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 07:45" + }, + { + "end": "we 06:15", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 07:30", + "preset": "home", + "start": "we 06:15" + }, + { + "end": "we 18:15", + "preset": "away", + "start": "we 07:30" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index a1fee82a7..c42aea735 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -84,6 +84,167 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 18:15" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 07:45" + }, + { + "end": "we 06:15", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 07:30", + "preset": "home", + "start": "we 06:15" + }, + { + "end": "we 18:15", + "preset": "away", + "start": "we 07:30" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_v4_no_modules/data.json b/fixtures/anna_v4_no_modules/data.json index c8875bed4..27845a861 100644 --- a/fixtures/anna_v4_no_modules/data.json +++ b/fixtures/anna_v4_no_modules/data.json @@ -12,6 +12,167 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 18:15" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 07:45" + }, + { + "end": "we 06:15", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 07:30", + "preset": "home", + "start": "we 06:15" + }, + { + "end": "we 18:15", + "preset": "away", + "start": "we 07:30" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index c3d9fd07b..9b5ba1b6f 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -84,6 +84,169 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + }, + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 18:15" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 07:45" + }, + { + "end": "we 06:15", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 07:30", + "preset": "home", + "start": "we 06:15" + }, + { + "end": "we 18:15", + "preset": "away", + "start": "we 07:30" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + } + ], + "zones": [ + "eb5309212bf5407bb143e5bfa3b18aee" + ] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_without_boiler_fw441/data.json b/fixtures/anna_without_boiler_fw441/data.json index b774a7700..8022f24fc 100644 --- a/fixtures/anna_without_boiler_fw441/data.json +++ b/fixtures/anna_without_boiler_fw441/data.json @@ -84,6 +84,154 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a36b5218575a42809dc3748377d160f9": { + "active": true, + "name": "Normaal", + "slots": [ + { + "end": "tu 08:00", + "setpoint": 18.0, + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "setpoint": 18.0, + "start": "we 06:30" + }, + { + "end": "we 17:00", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "th 08:00", + "setpoint": 18.0, + "start": "th 06:30" + }, + { + "end": "th 17:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "fr 08:00", + "setpoint": 18.0, + "start": "fr 06:30" + }, + { + "end": "tu 21:00", + "preset": "home", + "start": "tu 17:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 21:00" + }, + { + "end": "we 21:00", + "preset": "home", + "start": "we 17:00" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 21:00" + }, + { + "end": "th 21:00", + "preset": "home", + "start": "th 17:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 21:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 21:00" + }, + { + "end": "su 21:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "tu 17:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "fr 17:00", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 21:00", + "preset": "home", + "start": "fr 17:00" + }, + { + "end": "sa 09:00", + "preset": "asleep", + "start": "fr 21:00" + }, + { + "end": "sa 21:00", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "su 09:00", + "preset": "asleep", + "start": "sa 21:00" + }, + { + "end": "mo 09:00", + "setpoint": 18.0, + "start": "mo 06:30" + }, + { + "end": "mo 17:00", + "preset": "home", + "start": "mo 09:00" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 17:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 21:00" + } + ], + "zones": [ + "c34c6864216446528e95d88985e714cc" + ] + }, + "d28edc40489b436e80888fa1490c77a5": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "mo 02:00", + "preset": "home", + "start": "tu 01:45" + }, + { + "end": "tu 01:45", + "preset": "home", + "start": "mo 02:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 8.31 }, diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index 79e21d828..030f6b1aa 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -138,6 +138,318 @@ "bleeding_hot", "cooling" ], + "schedules": { + "24df4dace79a4c42a0f4750ce65d84cb": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 07:15", + "preset": "asleep", + "start": "su 21:30" + } + ], + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "end": "mo 10:00", + "setpoint": 15.0, + "start": "sa 10:00" + }, + { + "end": "tu 10:00", + "setpoint": 15.0, + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "setpoint": 15.0, + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "setpoint": 15.0, + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "setpoint": 15.0, + "start": "th 10:00" + }, + { + "end": "su 10:00", + "setpoint": 15.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:00", + "setpoint": 15.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "ebe3e57ec41d4d8faa927ca85c95b747": { + "active": true, + "name": "Badkamer", + "slots": [ + { + "end": "mo 22:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "fr 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "su 07:30" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index 7fcbc3ed4..8eb1eab37 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -143,6 +143,318 @@ "off", "bleeding_hot" ], + "schedules": { + "24df4dace79a4c42a0f4750ce65d84cb": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 07:15", + "preset": "asleep", + "start": "su 21:30" + } + ], + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "end": "mo 10:00", + "setpoint": 15.0, + "start": "sa 10:00" + }, + { + "end": "tu 10:00", + "setpoint": 15.0, + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "setpoint": 15.0, + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "setpoint": 15.0, + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "setpoint": 15.0, + "start": "th 10:00" + }, + { + "end": "su 10:00", + "setpoint": 15.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:00", + "setpoint": 15.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "ebe3e57ec41d4d8faa927ca85c95b747": { + "active": true, + "name": "Badkamer", + "slots": [ + { + "end": "mo 22:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "fr 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "su 07:30" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "heating", "sensors": { diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index 3af382e4e..41c73fb0a 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -143,6 +143,318 @@ "off", "bleeding_hot" ], + "schedules": { + "24df4dace79a4c42a0f4750ce65d84cb": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 07:15", + "preset": "asleep", + "start": "su 21:30" + } + ], + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "end": "mo 10:00", + "setpoint": 15.0, + "start": "sa 10:00" + }, + { + "end": "tu 10:00", + "setpoint": 15.0, + "start": "mo 10:00" + }, + { + "end": "we 10:00", + "setpoint": 15.0, + "start": "tu 10:00" + }, + { + "end": "th 10:00", + "setpoint": 15.0, + "start": "we 10:00" + }, + { + "end": "fr 10:00", + "setpoint": 15.0, + "start": "th 10:00" + }, + { + "end": "su 10:00", + "setpoint": 15.0, + "start": "fr 10:00" + }, + { + "end": "sa 10:00", + "setpoint": 15.0, + "start": "su 10:00" + } + ], + "zones": [] + }, + "ebe3e57ec41d4d8faa927ca85c95b747": { + "active": true, + "name": "Badkamer", + "slots": [ + { + "end": "mo 22:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "fr 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "su 07:30" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "off", "sensors": { diff --git a/fixtures/m_adam_multiple_devices_per_zone/data.json b/fixtures/m_adam_multiple_devices_per_zone/data.json index 0d9b61939..f31df22b6 100644 --- a/fixtures/m_adam_multiple_devices_per_zone/data.json +++ b/fixtures/m_adam_multiple_devices_per_zone/data.json @@ -803,6 +803,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + }, + { + "end": "mo 22:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "tu 07:30", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "tu 22:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "we 07:30", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "we 22:15", + "preset": "away", + "start": "we 07:30" + }, + { + "end": "th 07:30", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "th 22:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "fr 07:30", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "fr 22:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "mo 07:15", + "setpoint": 16.5, + "start": "su 21:30" + } + ], + "zones": [ + "82fa13f017d240daa0d0ea1775420f24" + ] + }, + "3e4b5a775f8143de961eaa3f5f7d9d1a": { + "active": true, + "name": "Badkamer Schema", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + }, + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 20:15", + "preset": "away", + "start": "fr 07:00" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 20:15" + }, + { + "end": "sa 20:15", + "preset": "away", + "start": "sa 07:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 20:15" + }, + { + "end": "su 19:30", + "preset": "away", + "start": "su 07:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 23:15", + "preset": "home", + "start": "fr 11:30" + }, + { + "end": "sa 08:00", + "preset": "asleep", + "start": "fr 23:15" + }, + { + "end": "sa 23:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "preset": "asleep", + "start": "sa 23:15" + } + ], + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ] + } + }, "sensors": { "outdoor_temperature": 7.81 }, diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 721c8e72b..b1f04b207 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -12,6 +12,72 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 28.2 }, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 2cbac7cb1..a5dd7d773 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -12,6 +12,72 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "active": true, + "name": "standaard", + "slots": [ + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:30" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "fr 07:00" + }, + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 28.2 }, diff --git a/plugwise/constants.py b/plugwise/constants.py index 28d3df7d2..058eb4718 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -4,6 +4,7 @@ from collections import namedtuple import logging +import re from typing import Final, Literal, TypedDict, get_args LOGGER = logging.getLogger(__name__) @@ -551,6 +552,22 @@ class ActuatorData(TypedDict, total=False): upper_bound: float +SCHEDULE_TAG: Final = "zone_preset_based_on_time_and_presence_with_override" +SCHEDULE_PERIOD: Final = re.compile(r"\[(\w\w \d\d:\d\d),(\w\w \d\d:\d\d)\)") +SCHEDULE_NUMBERS: Final = ("setpoint", "heating_setpoint", "cooling_setpoint") + +type ScheduleSlot = dict[str, str | float] + + +class ScheduleData(TypedDict): + """A weekly schedule, one per schedule rule on the gateway.""" + + name: str + active: bool + zones: list[str] + slots: list[ScheduleSlot] + + class GwEntityData(TypedDict, total=False): """The Gateway Entity data class. @@ -608,6 +625,7 @@ class GwEntityData(TypedDict, total=False): # Schedules: available_schedules: list[str] select_schedule: str + schedules: dict[str, ScheduleData] climate_mode: str # Extra for Adam Master Thermostats diff --git a/plugwise/data.py b/plugwise/data.py index da4235fe2..e19a79810 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -59,6 +59,9 @@ def _update_gw_entities(self) -> None: if entity_id == self._gateway_id: mac_list = self._detect_low_batteries() self._add_or_update_notifications(entity_id, entity) + if schedules := self._schedule_rules(): + entity["schedules"] = schedules + self._count += len(schedules) is_battery_low = ( mac_list diff --git a/plugwise/helper.py b/plugwise/helper.py index e51f67ee7..90b7cf623 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -28,6 +28,9 @@ NONE, OFF, P1_MEASUREMENTS, + SCHEDULE_NUMBERS, + SCHEDULE_PERIOD, + SCHEDULE_TAG, TEMP_CELSIUS, THERMO_MATCHING, THERMOSTAT_CLASSES, @@ -38,6 +41,8 @@ ActuatorDataType, ActuatorType, GwEntityData, + ScheduleData, + ScheduleSlot, SensorType, ThermoLoc, ToggleNameType, @@ -1034,6 +1039,43 @@ def _schedules(self, location: str) -> tuple[list[str], str]: return available, selected + def _schedule_rules(self) -> dict[str, ScheduleData]: + """Helper-function for data.py: _update_gw_entities(). + + Collect every weekly schedule on the gateway, keyed by rule id. + """ + schedules: dict[str, ScheduleData] = {} + locator = f'./template[@tag="{SCHEDULE_TAG}"]' + for rule in self._domain_objects.findall("./rule"): + if rule.find(locator) is None or rule.find("directives") is None: + continue + + slots: list[ScheduleSlot] = [] + for when in rule.findall("directives/when"): + slot: ScheduleSlot = {} + for key, value in when.attrib.items(): + # time is a week interval: "[mo 07:15,mo 16:30)" + if key == "time" and (period := SCHEDULE_PERIOD.fullmatch(value)): + slot["start"], slot["end"] = period.groups() + else: + slot[key] = value + if (then := when.find("then")) is not None: + for key, value in then.attrib.items(): + slot[key] = float(value) if key in SCHEDULE_NUMBERS else value + slots.append(slot) + + schedules[rule.get("id")] = { + "name": rule.findtext("name", ""), + "active": rule.findtext("active") == "true", + "zones": [ + location.get("id") + for location in rule.findall("contexts/context/zone/location") + ], + "slots": slots, + } + + return schedules + def _thermostat_uri(self, loc_id: str) -> str: """Helper-function for smile.py: set_temperature(). diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 9ccd48c2e..c6f151645 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -452,7 +452,210 @@ "outdoor_temperature": 13.4 }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" + "zigbee_mac_address": "ABCD012345670101", + "schedules": { + "09314e39f2bd416a889cc6b65b9c0209": { + "name": "Opstaan weekdag", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + }, + "4fed3d61217a408bbee54d56595cd379": { + "name": "Werkdag schema", + "active": true, + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ], + "slots": [ + { + "start": "sa 16:30", + "end": "sa 23:30", + "preset": "home" + }, + { + "start": "su 09:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "sa 23:30", + "end": "su 09:00", + "setpoint": 17.5 + }, + { + "start": "fr 23:30", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 16:30", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 08:00", + "preset": "asleep" + }, + { + "start": "mo 23:00", + "end": "tu 08:00", + "preset": "asleep" + }, + { + "start": "tu 23:00", + "end": "we 08:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "th 08:00", + "preset": "asleep" + }, + { + "start": "th 23:00", + "end": "fr 08:00", + "preset": "asleep" + }, + { + "start": "mo 17:15", + "end": "mo 23:00", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "tu 17:15", + "preset": "away" + }, + { + "start": "tu 17:15", + "end": "tu 23:00", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "we 17:15", + "preset": "away" + }, + { + "start": "we 17:15", + "end": "we 23:00", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 17:15", + "preset": "away" + }, + { + "start": "th 17:15", + "end": "th 23:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "fr 17:15", + "preset": "away" + }, + { + "start": "fr 17:15", + "end": "fr 23:30", + "preset": "home" + }, + { + "start": "mo 08:00", + "end": "mo 17:15", + "preset": "away" + } + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "name": "Weekend", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 08:30", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "su 23:00", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 08:30", + "preset": "asleep" + } + ] + } + } }, "7fda9f84f01342f8afe9ebbbbff30c0f": { "available": true, diff --git a/tests/data/adam/adam_multiple_devices_per_zone.json b/tests/data/adam/adam_multiple_devices_per_zone.json index ec7f3008a..b9f158701 100644 --- a/tests/data/adam/adam_multiple_devices_per_zone.json +++ b/tests/data/adam/adam_multiple_devices_per_zone.json @@ -812,6 +812,524 @@ "outdoor_temperature": 7.81 }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" + "zigbee_mac_address": "ABCD012345670101", + "schedules": { + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "name": "CV Roan", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 19:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 19:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 19:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 19:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "su 19:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 07:00", + "end": "mo 19:30", + "preset": "away" + }, + { + "start": "tu 07:00", + "end": "tu 19:30", + "preset": "away" + }, + { + "start": "we 07:00", + "end": "we 19:30", + "preset": "away" + }, + { + "start": "th 07:00", + "end": "th 19:30", + "preset": "away" + }, + { + "start": "fr 07:00", + "end": "fr 20:15", + "preset": "away" + }, + { + "start": "fr 20:15", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 20:15", + "preset": "away" + }, + { + "start": "sa 20:15", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 19:30", + "preset": "away" + } + ] + }, + "2b5f3132692d444293854d9e0c61095f": { + "name": "Bios Schema met Film Avond", + "active": false, + "zones": [], + "slots": [ + { + "start": "su 08:30", + "end": "su 22:15", + "preset": "away" + }, + { + "start": "su 22:15", + "end": "mo 07:30", + "preset": "asleep" + }, + { + "start": "mo 07:30", + "end": "mo 22:15", + "preset": "away" + }, + { + "start": "mo 22:15", + "end": "tu 07:30", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 22:15", + "preset": "away" + }, + { + "start": "tu 22:15", + "end": "we 07:30", + "preset": "asleep" + }, + { + "start": "we 07:30", + "end": "we 22:15", + "preset": "away" + }, + { + "start": "we 22:15", + "end": "th 07:30", + "preset": "asleep" + }, + { + "start": "th 07:30", + "end": "th 22:15", + "preset": "away" + }, + { + "start": "th 22:15", + "end": "fr 07:30", + "preset": "asleep" + }, + { + "start": "fr 07:30", + "end": "fr 22:15", + "preset": "away" + }, + { + "start": "fr 22:15", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 22:15", + "end": "su 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 19:00", + "preset": "away" + }, + { + "start": "sa 19:00", + "end": "sa 22:15", + "preset": "home" + } + ] + }, + "ee003247871e4e16882771ab715ddfa1": { + "name": "GF7 Woonkamer", + "active": true, + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ], + "slots": [ + { + "start": "we 08:00", + "end": "we 11:30", + "preset": "away" + }, + { + "start": "fr 08:00", + "end": "fr 11:30", + "preset": "away" + }, + { + "start": "tu 08:00", + "end": "tu 14:00", + "preset": "away" + }, + { + "start": "mo 06:30", + "end": "mo 08:00", + "preset": "home" + }, + { + "start": "tu 06:30", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "we 06:30", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "th 06:30", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "fr 06:30", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "tu 14:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:30", + "preset": "asleep" + }, + { + "start": "we 11:30", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:30", + "preset": "asleep" + }, + { + "start": "th 22:30", + "end": "fr 06:30", + "preset": "asleep" + }, + { + "start": "su 08:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "su 22:30", + "end": "mo 06:30", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 06:30", + "preset": "asleep" + }, + { + "start": "mo 08:00", + "end": "mo 15:00", + "preset": "away" + }, + { + "start": "mo 15:00", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 15:00", + "preset": "away" + }, + { + "start": "th 15:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 11:30", + "end": "fr 23:15", + "preset": "home" + }, + { + "start": "fr 23:15", + "end": "sa 08:00", + "preset": "asleep" + }, + { + "start": "sa 08:00", + "end": "sa 23:15", + "preset": "home" + }, + { + "start": "sa 23:15", + "end": "su 08:00", + "preset": "asleep" + } + ] + }, + "3e4b5a775f8143de961eaa3f5f7d9d1a": { + "name": "Badkamer Schema", + "active": true, + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ], + "slots": [ + { + "start": "mo 06:45", + "end": "mo 08:00", + "preset": "home" + }, + { + "start": "tu 06:45", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "we 06:45", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "th 06:45", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "fr 20:30", + "preset": "away" + }, + { + "start": "su 21:30", + "end": "mo 06:45", + "preset": "away" + }, + { + "start": "mo 21:30", + "end": "tu 06:45", + "preset": "away" + }, + { + "start": "tu 21:30", + "end": "we 06:45", + "preset": "away" + }, + { + "start": "we 21:30", + "end": "th 06:45", + "preset": "away" + }, + { + "start": "fr 20:30", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "th 21:30", + "end": "fr 06:45", + "preset": "away" + }, + { + "start": "fr 06:45", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "sa 10:15", + "end": "sa 20:30", + "preset": "away" + }, + { + "start": "mo 08:00", + "end": "mo 20:15", + "preset": "away" + }, + { + "start": "mo 20:15", + "end": "mo 21:30", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "tu 20:15", + "preset": "away" + }, + { + "start": "tu 20:15", + "end": "tu 21:30", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "we 20:15", + "preset": "away" + }, + { + "start": "we 20:15", + "end": "we 21:30", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 20:15", + "preset": "away" + }, + { + "start": "th 20:15", + "end": "th 21:30", + "preset": "home" + }, + { + "start": "sa 20:30", + "end": "sa 22:00", + "preset": "asleep" + }, + { + "start": "su 10:15", + "end": "su 20:15", + "preset": "away" + }, + { + "start": "su 20:15", + "end": "su 21:30", + "preset": "home" + }, + { + "start": "fr 22:00", + "end": "sa 09:00", + "preset": "away" + }, + { + "start": "sa 09:00", + "end": "sa 10:15", + "preset": "home" + }, + { + "start": "su 09:00", + "end": "su 10:15", + "preset": "home" + }, + { + "start": "sa 22:00", + "end": "su 09:00", + "preset": "away" + } + ] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "name": "CV Jessie", + "active": true, + "zones": [ + "82fa13f017d240daa0d0ea1775420f24" + ], + "slots": [ + { + "start": "mo 07:15", + "end": "mo 21:30", + "setpoint": 15.0 + }, + { + "start": "tu 07:15", + "end": "tu 21:30", + "setpoint": 15.0 + }, + { + "start": "we 07:15", + "end": "we 21:30", + "setpoint": 15.0 + }, + { + "start": "th 07:15", + "end": "th 21:30", + "setpoint": 15.0 + }, + { + "start": "fr 07:15", + "end": "fr 22:30", + "setpoint": 15.0 + }, + { + "start": "sa 08:00", + "end": "sa 22:30", + "setpoint": 15.0 + }, + { + "start": "su 08:00", + "end": "su 21:30", + "setpoint": 15.0 + }, + { + "start": "mo 21:30", + "end": "tu 07:15", + "setpoint": 16.5 + }, + { + "start": "tu 21:30", + "end": "we 07:15", + "setpoint": 16.5 + }, + { + "start": "we 21:30", + "end": "th 07:15", + "setpoint": 16.5 + }, + { + "start": "th 21:30", + "end": "fr 07:15", + "setpoint": 16.5 + }, + { + "start": "fr 22:30", + "end": "sa 08:00", + "setpoint": 16.5 + }, + { + "start": "sa 22:30", + "end": "su 08:00", + "setpoint": 16.5 + }, + { + "start": "su 21:30", + "end": "mo 07:15", + "setpoint": 16.5 + } + ] + } + } } } diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index 3aefe342a..11dd4dce3 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -74,7 +74,210 @@ "outdoor_temperature": 13.4 }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" + "zigbee_mac_address": "ABCD012345670101", + "schedules": { + "09314e39f2bd416a889cc6b65b9c0209": { + "name": "Opstaan weekdag", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + }, + "4fed3d61217a408bbee54d56595cd379": { + "name": "Werkdag schema", + "active": true, + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ], + "slots": [ + { + "start": "sa 16:30", + "end": "sa 23:30", + "preset": "home" + }, + { + "start": "su 09:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "sa 23:30", + "end": "su 09:00", + "preset": "asleep" + }, + { + "start": "fr 23:30", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 16:30", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 08:00", + "preset": "asleep" + }, + { + "start": "mo 23:00", + "end": "tu 08:00", + "preset": "asleep" + }, + { + "start": "tu 23:00", + "end": "we 08:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "th 08:00", + "preset": "asleep" + }, + { + "start": "th 23:00", + "end": "fr 08:00", + "preset": "asleep" + }, + { + "start": "mo 17:15", + "end": "mo 23:00", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "tu 17:15", + "preset": "away" + }, + { + "start": "tu 17:15", + "end": "tu 23:00", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "we 17:15", + "preset": "away" + }, + { + "start": "we 17:15", + "end": "we 23:00", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 17:15", + "preset": "away" + }, + { + "start": "th 17:15", + "end": "th 23:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "fr 17:15", + "preset": "away" + }, + { + "start": "fr 17:15", + "end": "fr 23:30", + "preset": "home" + }, + { + "start": "mo 08:00", + "end": "mo 17:15", + "preset": "away" + } + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "name": "Weekend", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 08:30", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "su 23:00", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 08:30", + "preset": "asleep" + } + ] + } + } }, "ca79d23ae0094120b877558734cff85c": { "dev_class": "thermostat", diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index c88313808..c3dd4efac 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -140,7 +140,123 @@ "outdoor_temperature": 11.9 }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" + "zigbee_mac_address": "ABCD012345670101", + "schedules": { + "12f68057511a4445a162fb307d437cf1": { + "name": "Weekschema", + "active": true, + "zones": [ + "009490cc2f674ce6b576863fbb64f867" + ], + "slots": [ + { + "start": "su 07:30", + "end": "su 16:30", + "preset": "home" + }, + { + "start": "mo 07:30", + "end": "mo 16:30", + "preset": "home" + }, + { + "start": "tu 07:30", + "end": "tu 16:30", + "preset": "home" + }, + { + "start": "we 07:30", + "end": "we 16:30", + "preset": "home" + }, + { + "start": "th 07:30", + "end": "th 16:30", + "preset": "home" + }, + { + "start": "fr 07:30", + "end": "fr 16:30", + "preset": "home" + }, + { + "start": "sa 07:30", + "end": "sa 16:30", + "preset": "home" + }, + { + "start": "su 16:30", + "end": "su 22:30", + "setpoint": 20.5 + }, + { + "start": "su 22:30", + "end": "mo 07:30", + "preset": "asleep" + }, + { + "start": "mo 16:30", + "end": "mo 22:30", + "setpoint": 20.5 + }, + { + "start": "mo 22:30", + "end": "tu 07:30", + "preset": "asleep" + }, + { + "start": "tu 16:30", + "end": "tu 22:30", + "setpoint": 20.5 + }, + { + "start": "tu 22:30", + "end": "we 07:30", + "preset": "asleep" + }, + { + "start": "we 16:30", + "end": "we 22:30", + "setpoint": 20.5 + }, + { + "start": "we 22:30", + "end": "th 07:30", + "preset": "asleep" + }, + { + "start": "th 16:30", + "end": "th 22:30", + "setpoint": 20.5 + }, + { + "start": "th 22:30", + "end": "fr 07:30", + "preset": "asleep" + }, + { + "start": "fr 16:30", + "end": "fr 22:30", + "setpoint": 20.5 + }, + { + "start": "fr 22:30", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 16:30", + "end": "sa 22:30", + "setpoint": 20.5 + }, + { + "start": "sa 22:30", + "end": "su 07:30", + "preset": "asleep" + } + ] + } + } }, "ee62cad889f94e8ca3d09021f03a660b": { "dev_class": "thermostat", diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index b68b4b42e..55ffde1d0 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -234,7 +234,319 @@ }, "vendor": "Plugwise", "wifi_mac_address": "D40FB201CBA0", - "zigbee_mac_address": "000D6F000D5ACBA0" + "zigbee_mac_address": "000D6F000D5ACBA0", + "schedules": { + "ebe3e57ec41d4d8faa927ca85c95b747": { + "name": "Badkamer", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 07:00", + "end": "mo 22:00", + "preset": "home" + }, + { + "start": "mo 22:00", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:00", + "preset": "home" + }, + { + "start": "th 22:00", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:00", + "preset": "home" + }, + { + "start": "we 22:00", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "su 22:00", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:00", + "preset": "home" + }, + { + "start": "tu 22:00", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "fr 22:30", + "preset": "home" + }, + { + "start": "fr 22:30", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 22:30", + "preset": "home" + }, + { + "start": "sa 22:30", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 22:00", + "preset": "home" + } + ] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "name": "Vakantie", + "active": true, + "zones": [], + "slots": [ + { + "start": "sa 10:00", + "end": "mo 10:00", + "setpoint": 15.0 + }, + { + "start": "mo 10:00", + "end": "tu 10:00", + "setpoint": 15.0 + }, + { + "start": "tu 10:00", + "end": "we 10:00", + "setpoint": 15.0 + }, + { + "start": "we 10:00", + "end": "th 10:00", + "setpoint": 15.0 + }, + { + "start": "th 10:00", + "end": "fr 10:00", + "setpoint": 15.0 + }, + { + "start": "fr 10:00", + "end": "su 10:00", + "setpoint": 15.0 + }, + { + "start": "su 10:00", + "end": "sa 10:00", + "setpoint": 15.0 + } + ] + }, + "24df4dace79a4c42a0f4750ce65d84cb": { + "name": "Weekschema", + "active": true, + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ], + "slots": [ + { + "start": "tu 21:30", + "end": "we 07:15", + "preset": "asleep" + }, + { + "start": "we 21:30", + "end": "th 07:15", + "preset": "asleep" + }, + { + "start": "th 21:30", + "end": "fr 07:15", + "preset": "asleep" + }, + { + "start": "fr 22:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 22:00", + "end": "su 07:45", + "preset": "asleep" + }, + { + "start": "tu 16:30", + "end": "tu 21:30", + "preset": "home" + }, + { + "start": "we 16:30", + "end": "we 21:30", + "preset": "home" + }, + { + "start": "th 16:30", + "end": "th 21:30", + "preset": "home" + }, + { + "start": "fr 16:30", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "sa 16:00", + "end": "sa 22:00", + "preset": "home" + }, + { + "start": "su 16:00", + "end": "su 21:30", + "preset": "home" + }, + { + "start": "tu 07:15", + "end": "tu 16:30", + "setpoint": 18.5 + }, + { + "start": "we 07:15", + "end": "we 16:30", + "setpoint": 18.5 + }, + { + "start": "th 07:15", + "end": "th 16:30", + "setpoint": 18.5 + }, + { + "start": "fr 07:15", + "end": "fr 16:30", + "setpoint": 18.5 + }, + { + "start": "sa 07:45", + "end": "sa 16:00", + "setpoint": 18.5 + }, + { + "start": "su 07:45", + "end": "su 16:00", + "setpoint": 18.5 + }, + { + "start": "mo 16:30", + "end": "mo 21:00", + "preset": "home" + }, + { + "start": "mo 21:00", + "end": "tu 07:15", + "preset": "asleep" + }, + { + "start": "mo 07:15", + "end": "mo 16:30", + "setpoint": 18.5 + }, + { + "start": "su 21:30", + "end": "mo 07:15", + "preset": "asleep" + } + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "name": "Test", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 10:00", + "end": "tu 10:00", + "preset": "asleep" + }, + { + "start": "tu 10:00", + "end": "we 10:00", + "preset": "asleep" + }, + { + "start": "we 10:00", + "end": "th 10:00", + "preset": "asleep" + }, + { + "start": "th 10:00", + "end": "fr 10:00", + "preset": "asleep" + }, + { + "start": "fr 10:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "su 10:00", + "end": "mo 16:15", + "preset": "asleep" + }, + { + "start": "mo 16:15", + "end": "tu 16:15", + "preset": "home" + }, + { + "start": "tu 16:15", + "end": "we 16:15", + "preset": "home" + }, + { + "start": "we 16:15", + "end": "th 16:15", + "preset": "home" + }, + { + "start": "th 16:15", + "end": "fr 16:15", + "preset": "home" + }, + { + "start": "fr 16:15", + "end": "su 16:15", + "preset": "home" + }, + { + "start": "su 16:15", + "end": "sa 10:00", + "preset": "home" + }, + { + "start": "sa 10:00", + "end": "sa 16:15", + "preset": "asleep" + }, + { + "start": "sa 16:15", + "end": "mo 10:00", + "preset": "home" + } + ] + } + } }, "da575e9e09b947e281fb6e3ebce3b174": { "available": true, diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index d83116c60..e75696a41 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -207,7 +207,321 @@ }, "vendor": "Plugwise", "wifi_mac_address": "012345679892", - "zigbee_mac_address": "000D6F000D5A168D" + "zigbee_mac_address": "000D6F000D5A168D", + "schedules": { + "ebe3e57ec41d4d8faa927ca85c95b747": { + "name": "Badkamer", + "active": true, + "zones": [ + "f871b8c4d63549319221e294e4f88074" + ], + "slots": [ + { + "start": "mo 07:00", + "end": "mo 22:00", + "preset": "home" + }, + { + "start": "mo 22:00", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:00", + "preset": "home" + }, + { + "start": "th 22:00", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:00", + "preset": "home" + }, + { + "start": "we 22:00", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "su 22:00", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:00", + "preset": "home" + }, + { + "start": "tu 22:00", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "fr 22:30", + "preset": "home" + }, + { + "start": "fr 22:30", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 22:30", + "preset": "home" + }, + { + "start": "sa 22:30", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 22:00", + "preset": "home" + } + ] + }, + "6b309e6df44c4e9a9f0014437843fa9a": { + "name": "Test", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 10:00", + "end": "tu 10:00", + "preset": "asleep" + }, + { + "start": "tu 10:00", + "end": "we 10:00", + "preset": "asleep" + }, + { + "start": "we 10:00", + "end": "th 10:00", + "preset": "asleep" + }, + { + "start": "th 10:00", + "end": "fr 10:00", + "preset": "asleep" + }, + { + "start": "fr 10:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "su 10:00", + "end": "mo 16:15", + "preset": "asleep" + }, + { + "start": "mo 16:15", + "end": "tu 16:15", + "preset": "home" + }, + { + "start": "tu 16:15", + "end": "we 16:15", + "preset": "home" + }, + { + "start": "we 16:15", + "end": "th 16:15", + "preset": "home" + }, + { + "start": "th 16:15", + "end": "fr 16:15", + "preset": "home" + }, + { + "start": "fr 16:15", + "end": "su 16:15", + "preset": "home" + }, + { + "start": "su 16:15", + "end": "sa 10:00", + "preset": "home" + }, + { + "start": "sa 10:00", + "end": "sa 16:15", + "preset": "asleep" + }, + { + "start": "sa 16:15", + "end": "mo 10:00", + "preset": "home" + } + ] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "name": "Vakantie", + "active": true, + "zones": [], + "slots": [ + { + "start": "sa 10:00", + "end": "mo 10:00", + "setpoint": 15.0 + }, + { + "start": "mo 10:00", + "end": "tu 10:00", + "setpoint": 15.0 + }, + { + "start": "tu 10:00", + "end": "we 10:00", + "setpoint": 15.0 + }, + { + "start": "we 10:00", + "end": "th 10:00", + "setpoint": 15.0 + }, + { + "start": "th 10:00", + "end": "fr 10:00", + "setpoint": 15.0 + }, + { + "start": "fr 10:00", + "end": "su 10:00", + "setpoint": 15.0 + }, + { + "start": "su 10:00", + "end": "sa 10:00", + "setpoint": 15.0 + } + ] + }, + "24df4dace79a4c42a0f4750ce65d84cb": { + "name": "Weekschema", + "active": true, + "zones": [ + "f2bf9048bef64cc5b6d5110154e33c81" + ], + "slots": [ + { + "start": "mo 21:30", + "end": "tu 07:15", + "preset": "asleep" + }, + { + "start": "tu 21:30", + "end": "we 07:15", + "preset": "asleep" + }, + { + "start": "we 21:30", + "end": "th 07:15", + "preset": "asleep" + }, + { + "start": "th 21:30", + "end": "fr 07:15", + "preset": "asleep" + }, + { + "start": "su 21:30", + "end": "mo 07:15", + "preset": "asleep" + }, + { + "start": "fr 22:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 22:00", + "end": "su 07:45", + "preset": "asleep" + }, + { + "start": "mo 16:30", + "end": "mo 21:30", + "preset": "home" + }, + { + "start": "tu 16:30", + "end": "tu 21:30", + "preset": "home" + }, + { + "start": "we 16:30", + "end": "we 21:30", + "preset": "home" + }, + { + "start": "th 16:30", + "end": "th 21:30", + "preset": "home" + }, + { + "start": "fr 16:30", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "sa 16:00", + "end": "sa 22:00", + "preset": "home" + }, + { + "start": "su 16:00", + "end": "su 21:30", + "preset": "home" + }, + { + "start": "mo 07:15", + "end": "mo 16:30", + "setpoint": 18.0 + }, + { + "start": "tu 07:15", + "end": "tu 16:30", + "setpoint": 18.0 + }, + { + "start": "we 07:15", + "end": "we 16:30", + "setpoint": 18.0 + }, + { + "start": "th 07:15", + "end": "th 16:30", + "setpoint": 18.0 + }, + { + "start": "fr 07:15", + "end": "fr 16:30", + "setpoint": 18.0 + }, + { + "start": "sa 07:45", + "end": "sa 16:00", + "setpoint": 18.0 + }, + { + "start": "su 07:45", + "end": "su 16:00", + "setpoint": 18.0 + } + ] + } + } }, "e2f4322d57924fa090fbbc48b3a140dc": { "available": true, diff --git a/tests/data/adam/adam_zone_per_device.json b/tests/data/adam/adam_zone_per_device.json index aa1e69c03..156272482 100644 --- a/tests/data/adam/adam_zone_per_device.json +++ b/tests/data/adam/adam_zone_per_device.json @@ -796,6 +796,524 @@ "outdoor_temperature": 7.69 }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" + "zigbee_mac_address": "ABCD012345670101", + "schedules": { + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "name": "CV Roan", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 19:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 19:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 19:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 19:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "su 19:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 07:00", + "end": "mo 19:30", + "preset": "away" + }, + { + "start": "tu 07:00", + "end": "tu 19:30", + "preset": "away" + }, + { + "start": "we 07:00", + "end": "we 19:30", + "preset": "away" + }, + { + "start": "th 07:00", + "end": "th 19:30", + "preset": "away" + }, + { + "start": "fr 07:00", + "end": "fr 20:15", + "preset": "away" + }, + { + "start": "fr 20:15", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 20:15", + "preset": "away" + }, + { + "start": "sa 20:15", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 19:30", + "preset": "away" + } + ] + }, + "2b5f3132692d444293854d9e0c61095f": { + "name": "Bios Schema met Film Avond", + "active": false, + "zones": [], + "slots": [ + { + "start": "su 08:30", + "end": "su 22:15", + "preset": "away" + }, + { + "start": "su 22:15", + "end": "mo 07:30", + "preset": "asleep" + }, + { + "start": "mo 07:30", + "end": "mo 22:15", + "preset": "away" + }, + { + "start": "mo 22:15", + "end": "tu 07:30", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 22:15", + "preset": "away" + }, + { + "start": "tu 22:15", + "end": "we 07:30", + "preset": "asleep" + }, + { + "start": "we 07:30", + "end": "we 22:15", + "preset": "away" + }, + { + "start": "we 22:15", + "end": "th 07:30", + "preset": "asleep" + }, + { + "start": "th 07:30", + "end": "th 22:15", + "preset": "away" + }, + { + "start": "th 22:15", + "end": "fr 07:30", + "preset": "asleep" + }, + { + "start": "fr 07:30", + "end": "fr 22:15", + "preset": "away" + }, + { + "start": "fr 22:15", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 22:15", + "end": "su 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 19:00", + "preset": "away" + }, + { + "start": "sa 19:00", + "end": "sa 22:15", + "preset": "home" + } + ] + }, + "ee003247871e4e16882771ab715ddfa1": { + "name": "GF7 Woonkamer", + "active": true, + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ], + "slots": [ + { + "start": "we 08:00", + "end": "we 11:30", + "preset": "away" + }, + { + "start": "fr 08:00", + "end": "fr 11:30", + "preset": "away" + }, + { + "start": "tu 08:00", + "end": "tu 14:00", + "preset": "away" + }, + { + "start": "mo 06:30", + "end": "mo 08:00", + "preset": "home" + }, + { + "start": "tu 06:30", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "we 06:30", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "th 06:30", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "fr 06:30", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "tu 14:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:30", + "preset": "asleep" + }, + { + "start": "we 11:30", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:30", + "preset": "asleep" + }, + { + "start": "th 22:30", + "end": "fr 06:30", + "preset": "asleep" + }, + { + "start": "su 08:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "su 22:30", + "end": "mo 06:30", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 06:30", + "preset": "asleep" + }, + { + "start": "mo 08:00", + "end": "mo 15:00", + "preset": "away" + }, + { + "start": "mo 15:00", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 15:00", + "preset": "away" + }, + { + "start": "th 15:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 11:30", + "end": "fr 23:15", + "preset": "home" + }, + { + "start": "fr 23:15", + "end": "sa 08:00", + "preset": "asleep" + }, + { + "start": "sa 08:00", + "end": "sa 23:15", + "preset": "home" + }, + { + "start": "sa 23:15", + "end": "su 08:00", + "preset": "asleep" + } + ] + }, + "3e4b5a775f8143de961eaa3f5f7d9d1a": { + "name": "Badkamer Schema", + "active": true, + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ], + "slots": [ + { + "start": "mo 06:45", + "end": "mo 08:00", + "preset": "home" + }, + { + "start": "tu 06:45", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "we 06:45", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "th 06:45", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "fr 20:30", + "preset": "away" + }, + { + "start": "su 21:30", + "end": "mo 06:45", + "preset": "away" + }, + { + "start": "mo 21:30", + "end": "tu 06:45", + "preset": "away" + }, + { + "start": "tu 21:30", + "end": "we 06:45", + "preset": "away" + }, + { + "start": "we 21:30", + "end": "th 06:45", + "preset": "away" + }, + { + "start": "fr 20:30", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "th 21:30", + "end": "fr 06:45", + "preset": "away" + }, + { + "start": "fr 06:45", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "sa 10:15", + "end": "sa 20:30", + "preset": "away" + }, + { + "start": "mo 08:00", + "end": "mo 20:15", + "preset": "away" + }, + { + "start": "mo 20:15", + "end": "mo 21:30", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "tu 20:15", + "preset": "away" + }, + { + "start": "tu 20:15", + "end": "tu 21:30", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "we 20:15", + "preset": "away" + }, + { + "start": "we 20:15", + "end": "we 21:30", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "th 20:15", + "preset": "away" + }, + { + "start": "th 20:15", + "end": "th 21:30", + "preset": "home" + }, + { + "start": "sa 20:30", + "end": "sa 22:00", + "preset": "asleep" + }, + { + "start": "su 10:15", + "end": "su 20:15", + "preset": "away" + }, + { + "start": "su 20:15", + "end": "su 21:30", + "preset": "home" + }, + { + "start": "fr 22:00", + "end": "sa 09:00", + "preset": "away" + }, + { + "start": "sa 09:00", + "end": "sa 10:15", + "preset": "home" + }, + { + "start": "su 09:00", + "end": "su 10:15", + "preset": "home" + }, + { + "start": "sa 22:00", + "end": "su 09:00", + "preset": "away" + } + ] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "name": "CV Jessie", + "active": true, + "zones": [ + "82fa13f017d240daa0d0ea1775420f24" + ], + "slots": [ + { + "start": "mo 07:15", + "end": "mo 21:30", + "setpoint": 15.0 + }, + { + "start": "tu 07:15", + "end": "tu 21:30", + "setpoint": 15.0 + }, + { + "start": "we 07:15", + "end": "we 21:30", + "setpoint": 15.0 + }, + { + "start": "th 07:15", + "end": "th 21:30", + "setpoint": 15.0 + }, + { + "start": "fr 07:15", + "end": "fr 22:30", + "setpoint": 15.0 + }, + { + "start": "sa 08:00", + "end": "sa 22:30", + "setpoint": 15.0 + }, + { + "start": "su 08:00", + "end": "su 21:30", + "setpoint": 15.0 + }, + { + "start": "mo 21:30", + "end": "tu 07:15", + "setpoint": 16.5 + }, + { + "start": "tu 21:30", + "end": "we 07:15", + "setpoint": 16.5 + }, + { + "start": "we 21:30", + "end": "th 07:15", + "setpoint": 16.5 + }, + { + "start": "th 21:30", + "end": "fr 07:15", + "setpoint": 16.5 + }, + { + "start": "fr 22:30", + "end": "sa 08:00", + "setpoint": 16.5 + }, + { + "start": "sa 22:30", + "end": "su 08:00", + "setpoint": 16.5 + }, + { + "start": "su 21:30", + "end": "mo 07:15", + "setpoint": 16.5 + } + ] + } + } } } diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index 3a223a728..377f94717 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -125,6 +125,112 @@ "outdoor_temperature": 6.38 }, "vendor": "Plugwise", - "wifi_mac_address": "C4930002FE77" + "wifi_mac_address": "C4930002FE77", + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "name": "Thermostat schedule", + "active": true, + "zones": [ + "d3ce834534114348be628b61b26d9220" + ], + "slots": [ + { + "start": "tu 23:00", + "end": "we 10:00", + "preset": "asleep" + }, + { + "start": "fr 23:00", + "end": "sa 10:00", + "preset": "asleep" + }, + { + "start": "sa 10:00", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "su 10:00", + "end": "su 22:45", + "preset": "home" + }, + { + "start": "th 23:00", + "end": "fr 10:00", + "preset": "asleep" + }, + { + "start": "mo 23:00", + "end": "tu 10:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "th 08:00", + "preset": "asleep" + }, + { + "start": "su 22:45", + "end": "mo 08:00", + "preset": "asleep" + }, + { + "start": "mo 08:00", + "end": "mo 15:00", + "preset": "home" + }, + { + "start": "mo 15:00", + "end": "mo 23:00", + "setpoint": 19.0 + }, + { + "start": "tu 10:00", + "end": "tu 15:00", + "preset": "home" + }, + { + "start": "tu 15:00", + "end": "tu 23:00", + "setpoint": 19.0 + }, + { + "start": "we 10:00", + "end": "we 15:00", + "preset": "home" + }, + { + "start": "we 15:00", + "end": "we 23:00", + "setpoint": 19.0 + }, + { + "start": "th 08:00", + "end": "th 15:00", + "preset": "home" + }, + { + "start": "th 15:00", + "end": "th 23:00", + "setpoint": 19.0 + }, + { + "start": "fr 10:00", + "end": "fr 15:00", + "preset": "home" + }, + { + "start": "fr 15:00", + "end": "fr 23:00", + "setpoint": 19.0 + } + ] + } + } } } diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index 162ed5ad1..8f2e31c45 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -131,6 +131,88 @@ "sensors": { "outdoor_temperature": 31.0 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "name": "Thermostat schedule", + "active": true, + "zones": [ + "d3ce834534114348be628b61b26d9220" + ], + "slots": [ + { + "start": "sa 23:00", + "end": "mo 06:45", + "heating_setpoint": 18.5, + "cooling_setpoint": 23.5 + }, + { + "start": "mo 06:45", + "end": "tu 06:45", + "preset": "home" + }, + { + "start": "tu 06:45", + "end": "we 06:45", + "preset": "home" + }, + { + "start": "we 06:45", + "end": "th 06:45", + "preset": "home" + }, + { + "start": "th 06:45", + "end": "fr 06:45", + "preset": "home" + }, + { + "start": "fr 06:45", + "end": "su 08:30", + "preset": "home" + }, + { + "start": "su 22:45", + "end": "mo 23:00", + "preset": "asleep" + }, + { + "start": "mo 23:00", + "end": "th 23:00", + "preset": "asleep" + }, + { + "start": "th 23:00", + "end": "fr 23:00", + "preset": "asleep" + }, + { + "start": "fr 23:00", + "end": "we 23:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "tu 23:00", + "preset": "asleep" + }, + { + "start": "su 08:30", + "end": "su 22:45", + "preset": "home" + }, + { + "start": "tu 23:00", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 23:00", + "preset": "home" + } + ] + } + } } } diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index bd7cf1057..a8a192408 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -131,6 +131,85 @@ "sensors": { "outdoor_temperature": 13.0 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "name": "Thermostat schedule", + "active": true, + "zones": [], + "slots": [ + { + "start": "sa 23:00", + "end": "mo 06:45", + "preset": "asleep" + }, + { + "start": "mo 06:45", + "end": "tu 06:45", + "preset": "home" + }, + { + "start": "tu 06:45", + "end": "we 06:45", + "preset": "home" + }, + { + "start": "we 06:45", + "end": "th 06:45", + "preset": "home" + }, + { + "start": "th 06:45", + "end": "fr 06:45", + "preset": "home" + }, + { + "start": "fr 06:45", + "end": "su 08:30", + "preset": "home" + }, + { + "start": "su 22:45", + "end": "mo 23:00", + "preset": "asleep" + }, + { + "start": "mo 23:00", + "end": "th 23:00", + "preset": "asleep" + }, + { + "start": "th 23:00", + "end": "fr 23:00", + "preset": "asleep" + }, + { + "start": "fr 23:00", + "end": "we 23:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "tu 23:00", + "preset": "asleep" + }, + { + "start": "su 08:30", + "end": "su 22:45", + "preset": "home" + }, + { + "start": "tu 23:00", + "end": "sa 08:30", + "preset": "asleep" + }, + { + "start": "sa 08:30", + "end": "sa 23:00", + "preset": "home" + } + ] + } + } } } diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index a9abd244d..1753b6e51 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -15,7 +15,73 @@ "sensors": { "outdoor_temperature": 20.2 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "name": "standaard", + "active": true, + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + } + } }, "1cbf783bb11e4a7c8a6843dee3a86927": { "available": true, diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index f7689bfe9..f0101354f 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -15,7 +15,71 @@ "sensors": { "outdoor_temperature": 22.0 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "name": "standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + } + } }, "1cbf783bb11e4a7c8a6843dee3a86927": { "available": true, diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index afd7587a3..ea48698e4 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -15,7 +15,71 @@ "sensors": { "outdoor_temperature": 22.0 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "name": "standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + } + } }, "1cbf783bb11e4a7c8a6843dee3a86927": { "available": true, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 6b21abfd9..d04dee7a1 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -15,7 +15,73 @@ "sensors": { "outdoor_temperature": 20.2 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "6bae86c6a4ee44038393abb51c2dfe02": { + "name": "standaard", + "active": true, + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ], + "slots": [ + { + "start": "su 22:30", + "end": "mo 07:00", + "preset": "asleep" + }, + { + "start": "mo 22:30", + "end": "tu 07:00", + "preset": "asleep" + }, + { + "start": "tu 07:00", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 07:00", + "preset": "asleep" + }, + { + "start": "we 07:00", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 07:00", + "preset": "asleep" + }, + { + "start": "th 07:00", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 07:00", + "preset": "asleep" + }, + { + "start": "fr 07:00", + "end": "su 22:30", + "preset": "home" + }, + { + "start": "mo 07:00", + "end": "mo 10:15", + "preset": "home" + }, + { + "start": "mo 10:15", + "end": "mo 22:30", + "preset": "away" + } + ] + } + } }, "1cbf783bb11e4a7c8a6843dee3a86927": { "available": true, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index 29555a61d..6e329133d 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -89,7 +89,1005 @@ "sensors": { "outdoor_temperature": 15.5 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "name": "Winter", + "active": true, + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ], + "slots": [ + { + "start": "fr 23:15", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 23:15", + "preset": "home" + }, + { + "start": "sa 23:15", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 23:15", + "preset": "home" + }, + { + "start": "mo 06:00", + "end": "mo 23:15", + "preset": "home" + }, + { + "start": "su 23:15", + "end": "mo 06:00", + "preset": "asleep" + }, + { + "start": "mo 23:15", + "end": "tu 06:00", + "preset": "asleep" + }, + { + "start": "tu 06:00", + "end": "tu 23:15", + "preset": "home" + }, + { + "start": "tu 23:15", + "end": "we 06:00", + "preset": "asleep" + }, + { + "start": "we 06:00", + "end": "we 23:15", + "preset": "home" + }, + { + "start": "we 23:15", + "end": "th 06:00", + "preset": "asleep" + }, + { + "start": "th 06:00", + "end": "th 23:15", + "preset": "home" + }, + { + "start": "th 23:15", + "end": "fr 06:00", + "preset": "asleep" + }, + { + "start": "fr 06:00", + "end": "fr 23:15", + "preset": "home" + } + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "name": "Test ", + "active": true, + "zones": [], + "slots": [ + { + "start": "fr 00:00", + "end": "mo 00:00", + "preset": "home" + }, + { + "start": "mo 00:00", + "end": "tu 00:00", + "preset": "home" + }, + { + "start": "tu 00:00", + "end": "we 00:00", + "preset": "home" + }, + { + "start": "we 00:00", + "end": "th 00:00", + "preset": "home" + }, + { + "start": "th 00:00", + "end": "su 00:00", + "preset": "home" + }, + { + "start": "su 00:00", + "end": "mo 00:15", + "preset": "home" + }, + { + "start": "mo 00:15", + "end": "tu 00:15", + "preset": "asleep" + }, + { + "start": "tu 00:15", + "end": "we 00:15", + "preset": "asleep" + }, + { + "start": "we 00:15", + "end": "th 00:15", + "preset": "asleep" + }, + { + "start": "th 00:15", + "end": "fr 00:15", + "preset": "asleep" + }, + { + "start": "fr 00:15", + "end": "su 00:15", + "preset": "asleep" + }, + { + "start": "su 00:15", + "end": "mo 02:00", + "preset": "asleep" + }, + { + "start": "mo 02:00", + "end": "tu 02:00", + "preset": "home" + }, + { + "start": "tu 02:00", + "end": "we 02:00", + "preset": "home" + }, + { + "start": "we 02:00", + "end": "th 02:00", + "preset": "home" + }, + { + "start": "th 02:00", + "end": "fr 02:00", + "preset": "home" + }, + { + "start": "fr 02:00", + "end": "su 02:00", + "preset": "home" + }, + { + "start": "su 02:00", + "end": "mo 02:15", + "preset": "home" + }, + { + "start": "mo 02:15", + "end": "tu 02:15", + "preset": "asleep" + }, + { + "start": "tu 02:15", + "end": "we 02:15", + "preset": "asleep" + }, + { + "start": "we 02:15", + "end": "th 02:15", + "preset": "asleep" + }, + { + "start": "th 02:15", + "end": "fr 02:15", + "preset": "asleep" + }, + { + "start": "fr 02:15", + "end": "su 02:15", + "preset": "asleep" + }, + { + "start": "mo 04:00", + "end": "tu 04:00", + "preset": "home" + }, + { + "start": "tu 04:00", + "end": "we 04:00", + "preset": "home" + }, + { + "start": "we 04:00", + "end": "fr 04:00", + "preset": "home" + }, + { + "start": "fr 04:00", + "end": "su 04:00", + "preset": "home" + }, + { + "start": "mo 04:15", + "end": "tu 04:15", + "preset": "asleep" + }, + { + "start": "tu 04:15", + "end": "we 04:15", + "preset": "asleep" + }, + { + "start": "we 04:15", + "end": "fr 04:15", + "preset": "asleep" + }, + { + "start": "fr 04:15", + "end": "su 04:15", + "preset": "asleep" + }, + { + "start": "su 04:15", + "end": "th 04:15", + "preset": "asleep" + }, + { + "start": "mo 06:00", + "end": "tu 06:00", + "preset": "home" + }, + { + "start": "tu 06:00", + "end": "we 06:00", + "preset": "home" + }, + { + "start": "we 06:00", + "end": "fr 06:00", + "preset": "home" + }, + { + "start": "fr 06:00", + "end": "th 06:00", + "preset": "home" + }, + { + "start": "th 06:00", + "end": "su 06:00", + "preset": "home" + }, + { + "start": "su 06:00", + "end": "mo 06:30", + "preset": "home" + }, + { + "start": "mo 06:30", + "end": "tu 06:30", + "preset": "asleep" + }, + { + "start": "tu 06:30", + "end": "we 06:30", + "preset": "asleep" + }, + { + "start": "we 06:30", + "end": "th 06:30", + "preset": "asleep" + }, + { + "start": "th 06:30", + "end": "fr 06:30", + "preset": "asleep" + }, + { + "start": "fr 06:30", + "end": "su 06:30", + "preset": "asleep" + }, + { + "start": "sa 00:00", + "end": "sa 00:15", + "preset": "home" + }, + { + "start": "sa 00:15", + "end": "sa 02:00", + "preset": "asleep" + }, + { + "start": "sa 02:00", + "end": "sa 02:15", + "preset": "home" + }, + { + "start": "sa 02:15", + "end": "sa 04:00", + "preset": "asleep" + }, + { + "start": "sa 04:00", + "end": "sa 04:15", + "preset": "home" + }, + { + "start": "sa 04:15", + "end": "sa 06:00", + "preset": "asleep" + }, + { + "start": "sa 06:00", + "end": "sa 06:30", + "preset": "home" + }, + { + "start": "su 06:30", + "end": "mo 08:00", + "preset": "asleep" + }, + { + "start": "mo 08:00", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "su 08:00", + "preset": "home" + }, + { + "start": "sa 06:30", + "end": "sa 08:00", + "preset": "asleep" + }, + { + "start": "su 02:15", + "end": "mo 04:00", + "preset": "asleep" + }, + { + "start": "su 08:00", + "end": "mo 08:15", + "preset": "home" + }, + { + "start": "mo 08:15", + "end": "tu 08:15", + "preset": "asleep" + }, + { + "start": "tu 08:15", + "end": "we 08:15", + "preset": "asleep" + }, + { + "start": "we 08:15", + "end": "th 08:15", + "preset": "asleep" + }, + { + "start": "th 08:15", + "end": "fr 08:15", + "preset": "asleep" + }, + { + "start": "fr 08:15", + "end": "su 08:15", + "preset": "asleep" + }, + { + "start": "sa 08:00", + "end": "sa 08:15", + "preset": "home" + }, + { + "start": "su 08:15", + "end": "mo 09:30", + "preset": "asleep" + }, + { + "start": "mo 09:30", + "end": "tu 09:30", + "preset": "home" + }, + { + "start": "tu 09:30", + "end": "we 09:30", + "preset": "home" + }, + { + "start": "we 09:30", + "end": "th 09:30", + "preset": "home" + }, + { + "start": "th 09:30", + "end": "fr 09:30", + "preset": "home" + }, + { + "start": "fr 09:30", + "end": "su 09:30", + "preset": "home" + }, + { + "start": "sa 08:15", + "end": "sa 09:30", + "preset": "asleep" + }, + { + "start": "su 09:30", + "end": "mo 09:45", + "preset": "home" + }, + { + "start": "mo 09:45", + "end": "we 09:45", + "preset": "asleep" + }, + { + "start": "we 09:45", + "end": "tu 09:45", + "preset": "asleep" + }, + { + "start": "tu 09:45", + "end": "th 09:45", + "preset": "asleep" + }, + { + "start": "th 09:45", + "end": "fr 09:45", + "preset": "asleep" + }, + { + "start": "fr 09:45", + "end": "su 09:45", + "preset": "asleep" + }, + { + "start": "sa 09:30", + "end": "sa 09:45", + "preset": "home" + }, + { + "start": "su 09:45", + "end": "mo 11:00", + "preset": "asleep" + }, + { + "start": "mo 11:00", + "end": "tu 11:00", + "preset": "home" + }, + { + "start": "tu 11:00", + "end": "we 11:00", + "preset": "home" + }, + { + "start": "we 11:00", + "end": "th 11:00", + "preset": "home" + }, + { + "start": "th 11:00", + "end": "fr 11:00", + "preset": "home" + }, + { + "start": "fr 11:00", + "end": "su 11:00", + "preset": "home" + }, + { + "start": "sa 09:45", + "end": "sa 11:00", + "preset": "asleep" + }, + { + "start": "su 11:00", + "end": "mo 11:15", + "preset": "home" + }, + { + "start": "mo 11:15", + "end": "tu 11:15", + "preset": "asleep" + }, + { + "start": "tu 11:15", + "end": "we 11:15", + "preset": "asleep" + }, + { + "start": "we 11:15", + "end": "th 11:15", + "preset": "asleep" + }, + { + "start": "th 11:15", + "end": "fr 11:15", + "preset": "asleep" + }, + { + "start": "fr 11:15", + "end": "su 11:15", + "preset": "asleep" + }, + { + "start": "sa 11:00", + "end": "sa 11:15", + "preset": "home" + }, + { + "start": "su 11:15", + "end": "mo 12:45", + "preset": "asleep" + }, + { + "start": "mo 12:45", + "end": "tu 12:45", + "preset": "home" + }, + { + "start": "tu 12:45", + "end": "we 12:45", + "preset": "home" + }, + { + "start": "we 12:45", + "end": "th 12:45", + "preset": "home" + }, + { + "start": "th 12:45", + "end": "fr 12:45", + "preset": "home" + }, + { + "start": "fr 12:45", + "end": "su 12:45", + "preset": "home" + }, + { + "start": "sa 11:15", + "end": "sa 12:45", + "preset": "asleep" + }, + { + "start": "su 12:45", + "end": "mo 13:00", + "preset": "home" + }, + { + "start": "mo 13:00", + "end": "tu 13:00", + "preset": "asleep" + }, + { + "start": "tu 13:00", + "end": "we 13:00", + "preset": "asleep" + }, + { + "start": "we 13:00", + "end": "th 13:00", + "preset": "asleep" + }, + { + "start": "th 13:00", + "end": "fr 13:00", + "preset": "asleep" + }, + { + "start": "fr 13:00", + "end": "su 13:00", + "preset": "asleep" + }, + { + "start": "sa 12:45", + "end": "sa 13:00", + "preset": "home" + }, + { + "start": "su 13:00", + "end": "mo 14:30", + "preset": "asleep" + }, + { + "start": "mo 14:30", + "end": "tu 14:30", + "preset": "home" + }, + { + "start": "tu 14:30", + "end": "we 14:30", + "preset": "home" + }, + { + "start": "we 14:30", + "end": "th 14:30", + "preset": "home" + }, + { + "start": "th 14:30", + "end": "fr 14:30", + "preset": "home" + }, + { + "start": "fr 14:30", + "end": "su 14:30", + "preset": "home" + }, + { + "start": "sa 13:00", + "end": "sa 14:30", + "preset": "asleep" + }, + { + "start": "su 14:30", + "end": "mo 14:45", + "preset": "home" + }, + { + "start": "mo 14:45", + "end": "tu 14:45", + "preset": "asleep" + }, + { + "start": "tu 14:45", + "end": "we 14:45", + "preset": "asleep" + }, + { + "start": "we 14:45", + "end": "th 14:45", + "preset": "asleep" + }, + { + "start": "th 14:45", + "end": "fr 14:45", + "preset": "asleep" + }, + { + "start": "fr 14:45", + "end": "su 14:45", + "preset": "asleep" + }, + { + "start": "sa 14:30", + "end": "sa 14:45", + "preset": "home" + }, + { + "start": "su 14:45", + "end": "mo 16:00", + "preset": "asleep" + }, + { + "start": "mo 16:00", + "end": "tu 16:00", + "preset": "home" + }, + { + "start": "tu 16:00", + "end": "we 16:00", + "preset": "home" + }, + { + "start": "we 16:00", + "end": "th 16:00", + "preset": "home" + }, + { + "start": "th 16:00", + "end": "fr 16:00", + "preset": "home" + }, + { + "start": "fr 16:00", + "end": "su 16:00", + "preset": "home" + }, + { + "start": "sa 14:45", + "end": "sa 16:00", + "preset": "asleep" + }, + { + "start": "su 16:00", + "end": "mo 16:15", + "preset": "home" + }, + { + "start": "mo 16:15", + "end": "tu 16:15", + "preset": "asleep" + }, + { + "start": "tu 16:15", + "end": "we 16:15", + "preset": "asleep" + }, + { + "start": "we 16:15", + "end": "fr 16:15", + "preset": "asleep" + }, + { + "start": "fr 16:15", + "end": "th 16:15", + "preset": "asleep" + }, + { + "start": "th 16:15", + "end": "su 16:15", + "preset": "asleep" + }, + { + "start": "sa 16:00", + "end": "sa 16:15", + "preset": "home" + }, + { + "start": "su 16:15", + "end": "mo 18:00", + "preset": "asleep" + }, + { + "start": "mo 18:00", + "end": "tu 18:00", + "preset": "home" + }, + { + "start": "tu 18:00", + "end": "we 18:00", + "preset": "home" + }, + { + "start": "we 18:00", + "end": "th 18:00", + "preset": "home" + }, + { + "start": "th 18:00", + "end": "fr 18:00", + "preset": "home" + }, + { + "start": "sa 16:15", + "end": "sa 18:00", + "preset": "asleep" + }, + { + "start": "sa 18:00", + "end": "sa 18:15", + "preset": "home" + }, + { + "start": "mo 18:15", + "end": "tu 18:15", + "preset": "asleep" + }, + { + "start": "su 04:00", + "end": "th 04:00", + "preset": "home" + }, + { + "start": "th 04:00", + "end": "mo 04:15", + "preset": "home" + }, + { + "start": "th 04:15", + "end": "mo 06:00", + "preset": "asleep" + }, + { + "start": "tu 18:15", + "end": "we 18:15", + "preset": "asleep" + }, + { + "start": "we 18:15", + "end": "th 18:15", + "preset": "asleep" + }, + { + "start": "th 18:15", + "end": "fr 18:15", + "preset": "asleep" + }, + { + "start": "fr 18:15", + "end": "su 18:15", + "preset": "asleep" + }, + { + "start": "fr 18:00", + "end": "su 18:00", + "preset": "home" + }, + { + "start": "su 18:00", + "end": "mo 18:15", + "preset": "home" + }, + { + "start": "su 18:15", + "end": "mo 20:15", + "preset": "asleep" + }, + { + "start": "mo 20:15", + "end": "tu 20:15", + "preset": "home" + }, + { + "start": "tu 20:15", + "end": "we 20:15", + "preset": "home" + }, + { + "start": "we 20:15", + "end": "th 20:15", + "preset": "home" + }, + { + "start": "th 20:15", + "end": "fr 20:15", + "preset": "home" + }, + { + "start": "fr 20:15", + "end": "su 20:15", + "preset": "home" + }, + { + "start": "sa 18:15", + "end": "sa 20:15", + "preset": "asleep" + }, + { + "start": "su 20:15", + "end": "mo 20:30", + "preset": "home" + }, + { + "start": "mo 20:30", + "end": "tu 20:30", + "preset": "asleep" + }, + { + "start": "tu 20:30", + "end": "we 20:30", + "preset": "asleep" + }, + { + "start": "we 20:30", + "end": "th 20:30", + "preset": "asleep" + }, + { + "start": "th 20:30", + "end": "fr 20:30", + "preset": "asleep" + }, + { + "start": "fr 20:30", + "end": "su 20:30", + "preset": "asleep" + }, + { + "start": "sa 20:15", + "end": "sa 20:30", + "preset": "home" + }, + { + "start": "su 20:30", + "end": "mo 22:00", + "preset": "asleep" + }, + { + "start": "mo 22:00", + "end": "tu 22:00", + "preset": "home" + }, + { + "start": "tu 22:00", + "end": "we 22:00", + "preset": "home" + }, + { + "start": "we 22:00", + "end": "th 22:00", + "preset": "home" + }, + { + "start": "th 22:00", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "fr 22:00", + "end": "su 22:00", + "preset": "home" + }, + { + "start": "sa 20:30", + "end": "sa 22:00", + "preset": "asleep" + }, + { + "start": "su 22:00", + "end": "mo 22:15", + "preset": "home" + }, + { + "start": "mo 22:15", + "end": "tu 22:15", + "preset": "asleep" + }, + { + "start": "tu 22:15", + "end": "we 22:15", + "preset": "asleep" + }, + { + "start": "we 22:15", + "end": "th 22:15", + "preset": "asleep" + }, + { + "start": "th 22:15", + "end": "fr 22:15", + "preset": "asleep" + }, + { + "start": "fr 22:15", + "end": "su 22:15", + "preset": "asleep" + }, + { + "start": "su 22:15", + "end": "sa 00:00", + "preset": "asleep" + }, + { + "start": "sa 22:00", + "end": "sa 22:15", + "preset": "home" + }, + { + "start": "sa 22:15", + "end": "fr 00:00", + "preset": "asleep" + } + ] + } + } }, "bfb5ee0a88e14e5f97bfa725a760cc49": { "available": true, diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index d98e4a806..f54ce377f 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -16,7 +16,389 @@ "outdoor_temperature": 6.81 }, "vendor": "Plugwise", - "wifi_mac_address": "D40FB2011557" + "wifi_mac_address": "D40FB2011557", + "schedules": { + "d4e04f5167ab43348e00c0a45b50a2bb": { + "name": "Verwarmen@9-23u", + "active": true, + "zones": [ + "fa70e08550c94de3a34feb27ecf31421" + ], + "slots": [ + { + "start": "mo 09:15", + "end": "mo 23:00", + "preset": "home" + }, + { + "start": "tu 09:15", + "end": "tu 23:00", + "preset": "home" + }, + { + "start": "we 09:15", + "end": "we 23:00", + "preset": "home" + }, + { + "start": "th 09:15", + "end": "th 23:00", + "preset": "home" + }, + { + "start": "sa 09:15", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "su 09:15", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "mo 23:00", + "end": "tu 09:00", + "preset": "asleep" + }, + { + "start": "tu 23:00", + "end": "we 09:00", + "preset": "asleep" + }, + { + "start": "we 23:00", + "end": "th 09:00", + "preset": "asleep" + }, + { + "start": "th 23:00", + "end": "fr 09:00", + "preset": "asleep" + }, + { + "start": "fr 23:00", + "end": "sa 09:00", + "preset": "asleep" + }, + { + "start": "sa 23:00", + "end": "su 09:00", + "preset": "asleep" + }, + { + "start": "su 23:00", + "end": "mo 09:00", + "preset": "asleep" + }, + { + "start": "mo 09:00", + "end": "mo 09:15", + "setpoint": 21.0 + }, + { + "start": "tu 09:00", + "end": "tu 09:15", + "setpoint": 21.0 + }, + { + "start": "we 09:00", + "end": "we 09:15", + "setpoint": 21.0 + }, + { + "start": "th 09:00", + "end": "th 09:15", + "setpoint": 21.0 + }, + { + "start": "sa 09:00", + "end": "sa 09:15", + "setpoint": 21.0 + }, + { + "start": "su 09:00", + "end": "su 09:15", + "setpoint": 21.0 + }, + { + "start": "fr 09:00", + "end": "fr 09:15", + "setpoint": 21.0 + }, + { + "start": "fr 09:15", + "end": "fr 23:00", + "preset": "home" + } + ] + }, + "68640693f6a445a5993389c636a84435": { + "name": "VAKANTIE (winter)", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 10:45", + "end": "mo 15:30", + "preset": "away" + }, + { + "start": "mo 15:30", + "end": "tu 10:45", + "setpoint": 15.0 + }, + { + "start": "tu 10:45", + "end": "tu 15:30", + "preset": "away" + }, + { + "start": "tu 15:30", + "end": "we 10:45", + "setpoint": 15.0 + }, + { + "start": "we 10:45", + "end": "we 15:30", + "preset": "away" + }, + { + "start": "we 15:30", + "end": "th 10:45", + "setpoint": 15.0 + }, + { + "start": "th 10:45", + "end": "th 15:30", + "preset": "away" + }, + { + "start": "th 15:30", + "end": "fr 10:45", + "setpoint": 15.0 + }, + { + "start": "fr 10:45", + "end": "fr 15:30", + "preset": "away" + }, + { + "start": "fr 15:30", + "end": "sa 10:45", + "setpoint": 15.0 + }, + { + "start": "sa 10:45", + "end": "sa 15:30", + "preset": "away" + }, + { + "start": "sa 15:30", + "end": "su 10:45", + "setpoint": 15.0 + }, + { + "start": "su 10:45", + "end": "su 15:30", + "preset": "away" + }, + { + "start": "su 15:30", + "end": "mo 10:45", + "setpoint": 15.0 + } + ] + }, + "86e18430fa3f49a3a7e89557af183ccb": { + "name": "VERWARMEN", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 10:15", + "end": "mo 17:00", + "preset": "home" + }, + { + "start": "mo 17:00", + "end": "tu 10:00", + "preset": "asleep" + }, + { + "start": "tu 10:15", + "end": "tu 17:00", + "preset": "home" + }, + { + "start": "tu 17:00", + "end": "we 10:00", + "preset": "asleep" + }, + { + "start": "we 10:15", + "end": "we 17:00", + "preset": "home" + }, + { + "start": "we 17:00", + "end": "th 10:00", + "preset": "asleep" + }, + { + "start": "th 10:15", + "end": "th 17:00", + "preset": "home" + }, + { + "start": "th 17:00", + "end": "fr 10:00", + "preset": "asleep" + }, + { + "start": "fr 10:15", + "end": "fr 17:00", + "preset": "home" + }, + { + "start": "fr 17:00", + "end": "sa 10:00", + "preset": "asleep" + }, + { + "start": "sa 10:15", + "end": "sa 17:00", + "preset": "home" + }, + { + "start": "sa 17:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "su 10:15", + "end": "su 17:00", + "preset": "home" + }, + { + "start": "su 17:00", + "end": "mo 10:00", + "preset": "asleep" + }, + { + "start": "mo 10:00", + "end": "mo 10:15", + "setpoint": 21.0 + }, + { + "start": "tu 10:00", + "end": "tu 10:15", + "setpoint": 21.0 + }, + { + "start": "we 10:00", + "end": "we 10:15", + "setpoint": 21.0 + }, + { + "start": "th 10:00", + "end": "th 10:15", + "setpoint": 21.0 + }, + { + "start": "fr 10:00", + "end": "fr 10:15", + "setpoint": 21.0 + }, + { + "start": "sa 10:00", + "end": "sa 10:15", + "setpoint": 21.0 + }, + { + "start": "su 10:00", + "end": "su 10:15", + "setpoint": 21.0 + } + ] + }, + "6cfc8d79f7164cd5b0e5d7a8e8d217c3": { + "name": "KOELEN", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 08:00", + "end": "mo 20:00", + "preset": "home" + }, + { + "start": "mo 20:00", + "end": "tu 08:00", + "preset": "asleep" + }, + { + "start": "tu 08:00", + "end": "tu 20:00", + "preset": "home" + }, + { + "start": "tu 20:00", + "end": "we 08:00", + "preset": "asleep" + }, + { + "start": "we 08:00", + "end": "we 20:00", + "preset": "home" + }, + { + "start": "we 20:00", + "end": "th 08:00", + "preset": "asleep" + }, + { + "start": "th 08:00", + "end": "th 20:00", + "preset": "home" + }, + { + "start": "th 20:00", + "end": "fr 08:00", + "preset": "asleep" + }, + { + "start": "fr 08:00", + "end": "fr 20:00", + "preset": "home" + }, + { + "start": "fr 20:00", + "end": "sa 08:00", + "preset": "asleep" + }, + { + "start": "sa 08:00", + "end": "sa 20:00", + "preset": "home" + }, + { + "start": "sa 20:00", + "end": "su 08:00", + "preset": "asleep" + }, + { + "start": "su 08:00", + "end": "su 20:00", + "preset": "home" + }, + { + "start": "su 20:00", + "end": "mo 08:00", + "preset": "asleep" + } + ] + } + } }, "9fb768d699e44c7fb5cc50309dc4e7d4": { "active_preset": "home", diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 06e56a82e..5293d832c 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -89,7 +89,1005 @@ "sensors": { "outdoor_temperature": 15.5 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "name": "Winter", + "active": true, + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ], + "slots": [ + { + "start": "fr 23:15", + "end": "sa 07:30", + "preset": "asleep" + }, + { + "start": "sa 07:30", + "end": "sa 23:15", + "preset": "home" + }, + { + "start": "sa 23:15", + "end": "su 07:30", + "preset": "asleep" + }, + { + "start": "su 07:30", + "end": "su 23:15", + "preset": "home" + }, + { + "start": "mo 06:00", + "end": "mo 23:15", + "setpoint": 17.5 + }, + { + "start": "su 23:15", + "end": "mo 06:00", + "preset": "asleep" + }, + { + "start": "mo 23:15", + "end": "tu 06:00", + "preset": "asleep" + }, + { + "start": "tu 06:00", + "end": "tu 23:15", + "preset": "home" + }, + { + "start": "tu 23:15", + "end": "we 06:00", + "preset": "asleep" + }, + { + "start": "we 06:00", + "end": "we 23:15", + "preset": "home" + }, + { + "start": "we 23:15", + "end": "th 06:00", + "preset": "asleep" + }, + { + "start": "th 06:00", + "end": "th 23:15", + "preset": "home" + }, + { + "start": "th 23:15", + "end": "fr 06:00", + "preset": "asleep" + }, + { + "start": "fr 06:00", + "end": "fr 23:15", + "preset": "home" + } + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "name": "Test ", + "active": true, + "zones": [], + "slots": [ + { + "start": "fr 00:00", + "end": "mo 00:00", + "preset": "home" + }, + { + "start": "mo 00:00", + "end": "tu 00:00", + "preset": "home" + }, + { + "start": "tu 00:00", + "end": "we 00:00", + "preset": "home" + }, + { + "start": "we 00:00", + "end": "th 00:00", + "preset": "home" + }, + { + "start": "th 00:00", + "end": "su 00:00", + "preset": "home" + }, + { + "start": "su 00:00", + "end": "mo 00:15", + "preset": "home" + }, + { + "start": "mo 00:15", + "end": "tu 00:15", + "preset": "asleep" + }, + { + "start": "tu 00:15", + "end": "we 00:15", + "preset": "asleep" + }, + { + "start": "we 00:15", + "end": "th 00:15", + "preset": "asleep" + }, + { + "start": "th 00:15", + "end": "fr 00:15", + "preset": "asleep" + }, + { + "start": "fr 00:15", + "end": "su 00:15", + "preset": "asleep" + }, + { + "start": "su 00:15", + "end": "mo 02:00", + "preset": "asleep" + }, + { + "start": "mo 02:00", + "end": "tu 02:00", + "preset": "home" + }, + { + "start": "tu 02:00", + "end": "we 02:00", + "preset": "home" + }, + { + "start": "we 02:00", + "end": "th 02:00", + "preset": "home" + }, + { + "start": "th 02:00", + "end": "fr 02:00", + "preset": "home" + }, + { + "start": "fr 02:00", + "end": "su 02:00", + "preset": "home" + }, + { + "start": "su 02:00", + "end": "mo 02:15", + "preset": "home" + }, + { + "start": "mo 02:15", + "end": "tu 02:15", + "preset": "asleep" + }, + { + "start": "tu 02:15", + "end": "we 02:15", + "preset": "asleep" + }, + { + "start": "we 02:15", + "end": "th 02:15", + "preset": "asleep" + }, + { + "start": "th 02:15", + "end": "fr 02:15", + "preset": "asleep" + }, + { + "start": "fr 02:15", + "end": "su 02:15", + "preset": "asleep" + }, + { + "start": "mo 04:00", + "end": "tu 04:00", + "preset": "home" + }, + { + "start": "tu 04:00", + "end": "we 04:00", + "preset": "home" + }, + { + "start": "we 04:00", + "end": "fr 04:00", + "preset": "home" + }, + { + "start": "fr 04:00", + "end": "su 04:00", + "preset": "home" + }, + { + "start": "mo 04:15", + "end": "tu 04:15", + "preset": "asleep" + }, + { + "start": "tu 04:15", + "end": "we 04:15", + "preset": "asleep" + }, + { + "start": "we 04:15", + "end": "fr 04:15", + "preset": "asleep" + }, + { + "start": "fr 04:15", + "end": "su 04:15", + "preset": "asleep" + }, + { + "start": "su 04:15", + "end": "th 04:15", + "preset": "asleep" + }, + { + "start": "mo 06:00", + "end": "tu 06:00", + "preset": "home" + }, + { + "start": "tu 06:00", + "end": "we 06:00", + "preset": "home" + }, + { + "start": "we 06:00", + "end": "fr 06:00", + "preset": "home" + }, + { + "start": "fr 06:00", + "end": "th 06:00", + "preset": "home" + }, + { + "start": "th 06:00", + "end": "su 06:00", + "preset": "home" + }, + { + "start": "su 06:00", + "end": "mo 06:30", + "preset": "home" + }, + { + "start": "mo 06:30", + "end": "tu 06:30", + "preset": "asleep" + }, + { + "start": "tu 06:30", + "end": "we 06:30", + "preset": "asleep" + }, + { + "start": "we 06:30", + "end": "th 06:30", + "preset": "asleep" + }, + { + "start": "th 06:30", + "end": "fr 06:30", + "preset": "asleep" + }, + { + "start": "fr 06:30", + "end": "su 06:30", + "preset": "asleep" + }, + { + "start": "sa 00:00", + "end": "sa 00:15", + "preset": "home" + }, + { + "start": "sa 00:15", + "end": "sa 02:00", + "preset": "asleep" + }, + { + "start": "sa 02:00", + "end": "sa 02:15", + "preset": "home" + }, + { + "start": "sa 02:15", + "end": "sa 04:00", + "preset": "asleep" + }, + { + "start": "sa 04:00", + "end": "sa 04:15", + "preset": "home" + }, + { + "start": "sa 04:15", + "end": "sa 06:00", + "preset": "asleep" + }, + { + "start": "sa 06:00", + "end": "sa 06:30", + "preset": "home" + }, + { + "start": "su 06:30", + "end": "mo 08:00", + "preset": "asleep" + }, + { + "start": "mo 08:00", + "end": "tu 08:00", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "we 08:00", + "preset": "home" + }, + { + "start": "we 08:00", + "end": "th 08:00", + "preset": "home" + }, + { + "start": "th 08:00", + "end": "fr 08:00", + "preset": "home" + }, + { + "start": "fr 08:00", + "end": "su 08:00", + "preset": "home" + }, + { + "start": "sa 06:30", + "end": "sa 08:00", + "preset": "asleep" + }, + { + "start": "su 02:15", + "end": "mo 04:00", + "preset": "asleep" + }, + { + "start": "su 08:00", + "end": "mo 08:15", + "preset": "home" + }, + { + "start": "mo 08:15", + "end": "tu 08:15", + "preset": "asleep" + }, + { + "start": "tu 08:15", + "end": "we 08:15", + "preset": "asleep" + }, + { + "start": "we 08:15", + "end": "th 08:15", + "preset": "asleep" + }, + { + "start": "th 08:15", + "end": "fr 08:15", + "preset": "asleep" + }, + { + "start": "fr 08:15", + "end": "su 08:15", + "preset": "asleep" + }, + { + "start": "sa 08:00", + "end": "sa 08:15", + "preset": "home" + }, + { + "start": "su 08:15", + "end": "mo 09:30", + "preset": "asleep" + }, + { + "start": "mo 09:30", + "end": "tu 09:30", + "preset": "home" + }, + { + "start": "tu 09:30", + "end": "we 09:30", + "preset": "home" + }, + { + "start": "we 09:30", + "end": "th 09:30", + "preset": "home" + }, + { + "start": "th 09:30", + "end": "fr 09:30", + "preset": "home" + }, + { + "start": "fr 09:30", + "end": "su 09:30", + "preset": "home" + }, + { + "start": "sa 08:15", + "end": "sa 09:30", + "preset": "asleep" + }, + { + "start": "su 09:30", + "end": "mo 09:45", + "preset": "home" + }, + { + "start": "mo 09:45", + "end": "we 09:45", + "preset": "asleep" + }, + { + "start": "we 09:45", + "end": "tu 09:45", + "preset": "asleep" + }, + { + "start": "tu 09:45", + "end": "th 09:45", + "preset": "asleep" + }, + { + "start": "th 09:45", + "end": "fr 09:45", + "preset": "asleep" + }, + { + "start": "fr 09:45", + "end": "su 09:45", + "preset": "asleep" + }, + { + "start": "sa 09:30", + "end": "sa 09:45", + "preset": "home" + }, + { + "start": "su 09:45", + "end": "mo 11:00", + "preset": "asleep" + }, + { + "start": "mo 11:00", + "end": "tu 11:00", + "preset": "home" + }, + { + "start": "tu 11:00", + "end": "we 11:00", + "preset": "home" + }, + { + "start": "we 11:00", + "end": "th 11:00", + "preset": "home" + }, + { + "start": "th 11:00", + "end": "fr 11:00", + "preset": "home" + }, + { + "start": "fr 11:00", + "end": "su 11:00", + "preset": "home" + }, + { + "start": "sa 09:45", + "end": "sa 11:00", + "preset": "asleep" + }, + { + "start": "su 11:00", + "end": "mo 11:15", + "preset": "home" + }, + { + "start": "mo 11:15", + "end": "tu 11:15", + "preset": "asleep" + }, + { + "start": "tu 11:15", + "end": "we 11:15", + "preset": "asleep" + }, + { + "start": "we 11:15", + "end": "th 11:15", + "preset": "asleep" + }, + { + "start": "th 11:15", + "end": "fr 11:15", + "preset": "asleep" + }, + { + "start": "fr 11:15", + "end": "su 11:15", + "preset": "asleep" + }, + { + "start": "sa 11:00", + "end": "sa 11:15", + "preset": "home" + }, + { + "start": "su 11:15", + "end": "mo 12:45", + "preset": "asleep" + }, + { + "start": "mo 12:45", + "end": "tu 12:45", + "preset": "home" + }, + { + "start": "tu 12:45", + "end": "we 12:45", + "preset": "home" + }, + { + "start": "we 12:45", + "end": "th 12:45", + "preset": "home" + }, + { + "start": "th 12:45", + "end": "fr 12:45", + "preset": "home" + }, + { + "start": "fr 12:45", + "end": "su 12:45", + "preset": "home" + }, + { + "start": "sa 11:15", + "end": "sa 12:45", + "preset": "asleep" + }, + { + "start": "su 12:45", + "end": "mo 13:00", + "preset": "home" + }, + { + "start": "mo 13:00", + "end": "tu 13:00", + "preset": "asleep" + }, + { + "start": "tu 13:00", + "end": "we 13:00", + "preset": "asleep" + }, + { + "start": "we 13:00", + "end": "th 13:00", + "preset": "asleep" + }, + { + "start": "th 13:00", + "end": "fr 13:00", + "preset": "asleep" + }, + { + "start": "fr 13:00", + "end": "su 13:00", + "preset": "asleep" + }, + { + "start": "sa 12:45", + "end": "sa 13:00", + "preset": "home" + }, + { + "start": "su 13:00", + "end": "mo 14:30", + "preset": "asleep" + }, + { + "start": "mo 14:30", + "end": "tu 14:30", + "preset": "home" + }, + { + "start": "tu 14:30", + "end": "we 14:30", + "preset": "home" + }, + { + "start": "we 14:30", + "end": "th 14:30", + "preset": "home" + }, + { + "start": "th 14:30", + "end": "fr 14:30", + "preset": "home" + }, + { + "start": "fr 14:30", + "end": "su 14:30", + "preset": "home" + }, + { + "start": "sa 13:00", + "end": "sa 14:30", + "preset": "asleep" + }, + { + "start": "su 14:30", + "end": "mo 14:45", + "preset": "home" + }, + { + "start": "mo 14:45", + "end": "tu 14:45", + "preset": "asleep" + }, + { + "start": "tu 14:45", + "end": "we 14:45", + "preset": "asleep" + }, + { + "start": "we 14:45", + "end": "th 14:45", + "preset": "asleep" + }, + { + "start": "th 14:45", + "end": "fr 14:45", + "preset": "asleep" + }, + { + "start": "fr 14:45", + "end": "su 14:45", + "preset": "asleep" + }, + { + "start": "sa 14:30", + "end": "sa 14:45", + "preset": "home" + }, + { + "start": "su 14:45", + "end": "mo 16:00", + "preset": "asleep" + }, + { + "start": "mo 16:00", + "end": "tu 16:00", + "preset": "home" + }, + { + "start": "tu 16:00", + "end": "we 16:00", + "preset": "home" + }, + { + "start": "we 16:00", + "end": "th 16:00", + "preset": "home" + }, + { + "start": "th 16:00", + "end": "fr 16:00", + "preset": "home" + }, + { + "start": "fr 16:00", + "end": "su 16:00", + "preset": "home" + }, + { + "start": "sa 14:45", + "end": "sa 16:00", + "preset": "asleep" + }, + { + "start": "su 16:00", + "end": "mo 16:15", + "preset": "home" + }, + { + "start": "mo 16:15", + "end": "tu 16:15", + "preset": "asleep" + }, + { + "start": "tu 16:15", + "end": "we 16:15", + "preset": "asleep" + }, + { + "start": "we 16:15", + "end": "fr 16:15", + "preset": "asleep" + }, + { + "start": "fr 16:15", + "end": "th 16:15", + "preset": "asleep" + }, + { + "start": "th 16:15", + "end": "su 16:15", + "preset": "asleep" + }, + { + "start": "sa 16:00", + "end": "sa 16:15", + "preset": "home" + }, + { + "start": "su 16:15", + "end": "mo 18:00", + "preset": "asleep" + }, + { + "start": "mo 18:00", + "end": "tu 18:00", + "preset": "home" + }, + { + "start": "tu 18:00", + "end": "we 18:00", + "preset": "home" + }, + { + "start": "we 18:00", + "end": "th 18:00", + "preset": "home" + }, + { + "start": "th 18:00", + "end": "fr 18:00", + "preset": "home" + }, + { + "start": "sa 16:15", + "end": "sa 18:00", + "preset": "asleep" + }, + { + "start": "sa 18:00", + "end": "sa 18:15", + "preset": "home" + }, + { + "start": "mo 18:15", + "end": "tu 18:15", + "preset": "asleep" + }, + { + "start": "su 04:00", + "end": "th 04:00", + "preset": "home" + }, + { + "start": "th 04:00", + "end": "mo 04:15", + "preset": "home" + }, + { + "start": "th 04:15", + "end": "mo 06:00", + "preset": "asleep" + }, + { + "start": "tu 18:15", + "end": "we 18:15", + "preset": "asleep" + }, + { + "start": "we 18:15", + "end": "th 18:15", + "preset": "asleep" + }, + { + "start": "th 18:15", + "end": "fr 18:15", + "preset": "asleep" + }, + { + "start": "fr 18:15", + "end": "su 18:15", + "preset": "asleep" + }, + { + "start": "fr 18:00", + "end": "su 18:00", + "preset": "home" + }, + { + "start": "su 18:00", + "end": "mo 18:15", + "preset": "home" + }, + { + "start": "su 18:15", + "end": "mo 20:15", + "preset": "asleep" + }, + { + "start": "mo 20:15", + "end": "tu 20:15", + "preset": "home" + }, + { + "start": "tu 20:15", + "end": "we 20:15", + "preset": "home" + }, + { + "start": "we 20:15", + "end": "th 20:15", + "preset": "home" + }, + { + "start": "th 20:15", + "end": "fr 20:15", + "preset": "home" + }, + { + "start": "fr 20:15", + "end": "su 20:15", + "preset": "home" + }, + { + "start": "sa 18:15", + "end": "sa 20:15", + "preset": "asleep" + }, + { + "start": "su 20:15", + "end": "mo 20:30", + "preset": "home" + }, + { + "start": "mo 20:30", + "end": "tu 20:30", + "preset": "asleep" + }, + { + "start": "tu 20:30", + "end": "we 20:30", + "preset": "asleep" + }, + { + "start": "we 20:30", + "end": "th 20:30", + "preset": "asleep" + }, + { + "start": "th 20:30", + "end": "fr 20:30", + "preset": "asleep" + }, + { + "start": "fr 20:30", + "end": "su 20:30", + "preset": "asleep" + }, + { + "start": "sa 20:15", + "end": "sa 20:30", + "preset": "home" + }, + { + "start": "su 20:30", + "end": "mo 22:00", + "preset": "asleep" + }, + { + "start": "mo 22:00", + "end": "tu 22:00", + "preset": "home" + }, + { + "start": "tu 22:00", + "end": "we 22:00", + "preset": "home" + }, + { + "start": "we 22:00", + "end": "th 22:00", + "preset": "home" + }, + { + "start": "th 22:00", + "end": "fr 22:00", + "preset": "home" + }, + { + "start": "fr 22:00", + "end": "su 22:00", + "preset": "home" + }, + { + "start": "sa 20:30", + "end": "sa 22:00", + "preset": "asleep" + }, + { + "start": "su 22:00", + "end": "mo 22:15", + "preset": "home" + }, + { + "start": "mo 22:15", + "end": "tu 22:15", + "preset": "asleep" + }, + { + "start": "tu 22:15", + "end": "we 22:15", + "preset": "asleep" + }, + { + "start": "we 22:15", + "end": "th 22:15", + "preset": "asleep" + }, + { + "start": "th 22:15", + "end": "fr 22:15", + "preset": "asleep" + }, + { + "start": "fr 22:15", + "end": "su 22:15", + "preset": "asleep" + }, + { + "start": "su 22:15", + "end": "sa 00:00", + "preset": "asleep" + }, + { + "start": "sa 22:00", + "end": "sa 22:15", + "preset": "home" + }, + { + "start": "sa 22:15", + "end": "fr 00:00", + "preset": "asleep" + } + ] + } + } }, "bfb5ee0a88e14e5f97bfa725a760cc49": { "available": true, diff --git a/tests/data/anna/anna_p1.json b/tests/data/anna/anna_p1.json index 5b3b8a1fe..0febec043 100644 --- a/tests/data/anna/anna_p1.json +++ b/tests/data/anna/anna_p1.json @@ -115,7 +115,17 @@ "outdoor_temperature": 11.8 }, "vendor": "Plugwise", - "wifi_mac_address": "C4930002ABCE" + "wifi_mac_address": "C4930002ABCE", + "schedules": { + "898e6eaa068b44019ff9dc5c578881b2": { + "name": "Thermostat schedule", + "active": false, + "zones": [ + "5b13651d79c4454684fd268850b1bff8" + ], + "slots": [] + } + } }, "da7be222ab3b420c927f3e49fade0304": { "available": true, diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index 5e9b6ce2c..63804a451 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -87,7 +87,168 @@ "sensors": { "outdoor_temperature": 7.44 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "name": "Standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 10:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "mo 07:30", + "end": "mo 18:15", + "preset": "away" + }, + { + "start": "mo 18:15", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 18:15", + "preset": "away" + }, + { + "start": "tu 18:15", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "we 18:15", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "th 07:30", + "end": "th 18:15", + "preset": "away" + }, + { + "start": "th 18:15", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 07:30", + "end": "fr 18:15", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 06:15", + "preset": "asleep" + }, + { + "start": "mo 06:15", + "end": "mo 07:30", + "preset": "home" + }, + { + "start": "mo 22:30", + "end": "tu 06:15", + "preset": "asleep" + }, + { + "start": "tu 06:15", + "end": "tu 07:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:15", + "preset": "asleep" + }, + { + "start": "th 06:15", + "end": "th 07:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 06:15", + "preset": "asleep" + }, + { + "start": "fr 06:15", + "end": "fr 07:30", + "preset": "home" + }, + { + "start": "fr 18:15", + "end": "fr 23:00", + "preset": "home" + }, + { + "start": "fr 23:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 07:45", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:15", + "preset": "asleep" + }, + { + "start": "we 06:15", + "end": "we 07:30", + "preset": "home" + }, + { + "start": "we 07:30", + "end": "we 18:15", + "preset": "away" + } + ] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "name": "Thuiswerken", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 07:00", + "end": "we 07:00", + "preset": "home" + }, + { + "start": "we 07:00", + "end": "tu 07:00", + "preset": "home" + }, + { + "start": "tu 07:00", + "end": "fr 07:00", + "preset": "home" + }, + { + "start": "fr 07:00", + "end": "th 07:00", + "preset": "home" + }, + { + "start": "th 07:00", + "end": "mo 07:00", + "preset": "home" + } + ] + } + } }, "cd0e6156b1f04d5f952349ffbe397481": { "available": true, diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index efe242bb3..691d044d0 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -87,7 +87,168 @@ "sensors": { "outdoor_temperature": 7.44 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "name": "Standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 10:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "mo 07:30", + "end": "mo 18:15", + "preset": "away" + }, + { + "start": "mo 18:15", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 18:15", + "preset": "away" + }, + { + "start": "tu 18:15", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "we 18:15", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "th 07:30", + "end": "th 18:15", + "preset": "away" + }, + { + "start": "th 18:15", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 07:30", + "end": "fr 18:15", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 06:15", + "preset": "asleep" + }, + { + "start": "mo 06:15", + "end": "mo 07:30", + "preset": "home" + }, + { + "start": "mo 22:30", + "end": "tu 06:15", + "preset": "asleep" + }, + { + "start": "tu 06:15", + "end": "tu 07:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:15", + "preset": "asleep" + }, + { + "start": "th 06:15", + "end": "th 07:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 06:15", + "preset": "asleep" + }, + { + "start": "fr 06:15", + "end": "fr 07:30", + "preset": "home" + }, + { + "start": "fr 18:15", + "end": "fr 23:00", + "preset": "home" + }, + { + "start": "fr 23:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 07:45", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:15", + "preset": "asleep" + }, + { + "start": "we 06:15", + "end": "we 07:30", + "preset": "home" + }, + { + "start": "we 07:30", + "end": "we 18:15", + "preset": "away" + } + ] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "name": "Thuiswerken", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 07:00", + "end": "we 07:00", + "preset": "home" + }, + { + "start": "we 07:00", + "end": "tu 07:00", + "preset": "home" + }, + { + "start": "tu 07:00", + "end": "fr 07:00", + "preset": "home" + }, + { + "start": "fr 07:00", + "end": "th 07:00", + "preset": "home" + }, + { + "start": "th 07:00", + "end": "mo 07:00", + "preset": "home" + } + ] + } + } }, "cd0e6156b1f04d5f952349ffbe397481": { "available": true, diff --git a/tests/data/anna/anna_v4_no_modules.json b/tests/data/anna/anna_v4_no_modules.json index c8875bed4..d621fddb9 100644 --- a/tests/data/anna/anna_v4_no_modules.json +++ b/tests/data/anna/anna_v4_no_modules.json @@ -15,6 +15,167 @@ "sensors": { "outdoor_temperature": 7.44 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "name": "Standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 10:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "mo 07:30", + "end": "mo 18:15", + "preset": "away" + }, + { + "start": "mo 18:15", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 18:15", + "preset": "away" + }, + { + "start": "tu 18:15", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "we 18:15", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "th 07:30", + "end": "th 18:15", + "preset": "away" + }, + { + "start": "th 18:15", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 07:30", + "end": "fr 18:15", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 06:15", + "preset": "asleep" + }, + { + "start": "mo 06:15", + "end": "mo 07:30", + "preset": "home" + }, + { + "start": "mo 22:30", + "end": "tu 06:15", + "preset": "asleep" + }, + { + "start": "tu 06:15", + "end": "tu 07:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:15", + "preset": "asleep" + }, + { + "start": "th 06:15", + "end": "th 07:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 06:15", + "preset": "asleep" + }, + { + "start": "fr 06:15", + "end": "fr 07:30", + "preset": "home" + }, + { + "start": "fr 18:15", + "end": "fr 23:00", + "preset": "home" + }, + { + "start": "fr 23:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 07:45", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:15", + "preset": "asleep" + }, + { + "start": "we 06:15", + "end": "we 07:30", + "preset": "home" + }, + { + "start": "we 07:30", + "end": "we 18:15", + "preset": "away" + } + ] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "name": "Thuiswerken", + "active": true, + "zones": [], + "slots": [ + { + "start": "mo 07:00", + "end": "we 07:00", + "preset": "home" + }, + { + "start": "we 07:00", + "end": "tu 07:00", + "preset": "home" + }, + { + "start": "tu 07:00", + "end": "fr 07:00", + "preset": "home" + }, + { + "start": "fr 07:00", + "end": "th 07:00", + "preset": "home" + }, + { + "start": "th 07:00", + "end": "mo 07:00", + "preset": "home" + } + ] + } + } } } diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index ae7962e21..d2b7a1765 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -87,7 +87,170 @@ "sensors": { "outdoor_temperature": 7.44 }, - "vendor": "Plugwise" + "vendor": "Plugwise", + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "name": "Standaard", + "active": true, + "zones": [], + "slots": [ + { + "start": "su 10:00", + "end": "su 23:00", + "preset": "home" + }, + { + "start": "mo 07:30", + "end": "mo 18:15", + "preset": "away" + }, + { + "start": "mo 18:15", + "end": "mo 22:30", + "preset": "home" + }, + { + "start": "sa 23:00", + "end": "su 10:00", + "preset": "asleep" + }, + { + "start": "tu 07:30", + "end": "tu 18:15", + "preset": "away" + }, + { + "start": "tu 18:15", + "end": "tu 22:30", + "preset": "home" + }, + { + "start": "we 18:15", + "end": "we 22:30", + "preset": "home" + }, + { + "start": "th 07:30", + "end": "th 18:15", + "preset": "away" + }, + { + "start": "th 18:15", + "end": "th 22:30", + "preset": "home" + }, + { + "start": "fr 07:30", + "end": "fr 18:15", + "preset": "away" + }, + { + "start": "su 23:00", + "end": "mo 06:15", + "preset": "asleep" + }, + { + "start": "mo 06:15", + "end": "mo 07:30", + "preset": "home" + }, + { + "start": "mo 22:30", + "end": "tu 06:15", + "preset": "asleep" + }, + { + "start": "tu 06:15", + "end": "tu 07:30", + "preset": "home" + }, + { + "start": "we 22:30", + "end": "th 06:15", + "preset": "asleep" + }, + { + "start": "th 06:15", + "end": "th 07:30", + "preset": "home" + }, + { + "start": "th 22:30", + "end": "fr 06:15", + "preset": "asleep" + }, + { + "start": "fr 06:15", + "end": "fr 07:30", + "preset": "home" + }, + { + "start": "fr 18:15", + "end": "fr 23:00", + "preset": "home" + }, + { + "start": "fr 23:00", + "end": "sa 07:45", + "preset": "asleep" + }, + { + "start": "sa 07:45", + "end": "sa 23:00", + "preset": "home" + }, + { + "start": "tu 22:30", + "end": "we 06:15", + "preset": "asleep" + }, + { + "start": "we 06:15", + "end": "we 07:30", + "preset": "home" + }, + { + "start": "we 07:30", + "end": "we 18:15", + "preset": "away" + } + ] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "name": "Thuiswerken", + "active": true, + "zones": [ + "eb5309212bf5407bb143e5bfa3b18aee" + ], + "slots": [ + { + "start": "mo 07:00", + "end": "we 07:00", + "preset": "home" + }, + { + "start": "we 07:00", + "end": "tu 07:00", + "preset": "home" + }, + { + "start": "tu 07:00", + "end": "fr 07:00", + "preset": "home" + }, + { + "start": "fr 07:00", + "end": "th 07:00", + "preset": "home" + }, + { + "start": "th 07:00", + "end": "mo 07:00", + "preset": "home" + } + ] + } + } }, "cd0e6156b1f04d5f952349ffbe397481": { "available": true, diff --git a/tests/data/anna/anna_without_boiler_fw441.json b/tests/data/anna/anna_without_boiler_fw441.json index 291df63f1..aa12449a7 100644 --- a/tests/data/anna/anna_without_boiler_fw441.json +++ b/tests/data/anna/anna_without_boiler_fw441.json @@ -88,7 +88,155 @@ "outdoor_temperature": 8.31 }, "vendor": "Plugwise", - "wifi_mac_address": "D40FB200FA1D" + "wifi_mac_address": "D40FB200FA1D", + "schedules": { + "d28edc40489b436e80888fa1490c77a5": { + "name": "Test", + "active": true, + "zones": [], + "slots": [ + { + "start": "tu 01:45", + "end": "mo 02:00", + "preset": "home" + }, + { + "start": "mo 02:00", + "end": "tu 01:45", + "preset": "home" + } + ] + }, + "a36b5218575a42809dc3748377d160f9": { + "name": "Normaal", + "active": true, + "zones": [ + "c34c6864216446528e95d88985e714cc" + ], + "slots": [ + { + "start": "tu 06:30", + "end": "tu 08:00", + "setpoint": 18.0 + }, + { + "start": "we 06:30", + "end": "we 08:00", + "setpoint": 18.0 + }, + { + "start": "we 08:00", + "end": "we 17:00", + "preset": "away" + }, + { + "start": "th 06:30", + "end": "th 08:00", + "setpoint": 18.0 + }, + { + "start": "th 08:00", + "end": "th 17:00", + "preset": "away" + }, + { + "start": "fr 06:30", + "end": "fr 08:00", + "setpoint": 18.0 + }, + { + "start": "tu 17:00", + "end": "tu 21:00", + "preset": "home" + }, + { + "start": "tu 21:00", + "end": "we 06:30", + "preset": "asleep" + }, + { + "start": "we 17:00", + "end": "we 21:00", + "preset": "home" + }, + { + "start": "we 21:00", + "end": "th 06:30", + "preset": "asleep" + }, + { + "start": "th 17:00", + "end": "th 21:00", + "preset": "home" + }, + { + "start": "th 21:00", + "end": "fr 06:30", + "preset": "asleep" + }, + { + "start": "su 21:00", + "end": "mo 06:30", + "preset": "asleep" + }, + { + "start": "su 09:00", + "end": "su 21:00", + "preset": "home" + }, + { + "start": "tu 08:00", + "end": "tu 17:00", + "preset": "away" + }, + { + "start": "fr 08:00", + "end": "fr 17:00", + "preset": "away" + }, + { + "start": "fr 17:00", + "end": "fr 21:00", + "preset": "home" + }, + { + "start": "fr 21:00", + "end": "sa 09:00", + "preset": "asleep" + }, + { + "start": "sa 09:00", + "end": "sa 21:00", + "preset": "home" + }, + { + "start": "sa 21:00", + "end": "su 09:00", + "preset": "asleep" + }, + { + "start": "mo 06:30", + "end": "mo 09:00", + "setpoint": 18.0 + }, + { + "start": "mo 09:00", + "end": "mo 17:00", + "preset": "home" + }, + { + "start": "mo 17:00", + "end": "mo 21:00", + "preset": "home" + }, + { + "start": "mo 21:00", + "end": "tu 06:30", + "preset": "asleep" + } + ] + } + } }, "c46b4794d28149699eacf053deedd003": { "binary_sensors": { diff --git a/tests/test_adam.py b/tests/test_adam.py index 85d06a43e..8ceb49d95 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -49,7 +49,7 @@ async def test_connect_adam_plus_anna_new(self): test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata) assert api.gateway_id == "da224107914542988a88561b4452b0f6" - assert self.entity_items == 275 + assert self.entity_items == 279 assert test_items == self.entity_items assert self.entity_list == [ "da224107914542988a88561b4452b0f6", @@ -80,6 +80,29 @@ async def test_connect_adam_plus_anna_new(self): # pylint: disable-next=protected-access assert len(api._smile_api._preset_rule_ids("no_such_zone")) == 2 + # pylint: disable-next=protected-access + gateway = api._smile_api.gw_entities["da224107914542988a88561b4452b0f6"] + schedule = gateway["schedules"]["24df4dace79a4c42a0f4750ce65d84cb"] + assert schedule["name"] == "Weekschema" + assert schedule["zones"] == ["f2bf9048bef64cc5b6d5110154e33c81"] + assert {"start": "su 21:30", "end": "mo 07:15", "preset": "asleep"} in schedule[ + "slots" + ] + assert {"start": "mo 07:15", "end": "mo 16:30", "setpoint": 18.5} in schedule[ + "slots" + ] + # Attributes the schedule template allows beyond time are kept as they are + # pylint: disable-next=protected-access + tree = api._smile_api._domain_objects + tree.find('rule[@id="24df4dace79a4c42a0f4750ce65d84cb"]/directives/when').set( + "presence", "true" + ) + # pylint: disable-next=protected-access + slots = api._smile_api._schedule_rules()["24df4dace79a4c42a0f4750ce65d84cb"][ + "slots" + ] + assert slots[0]["presence"] == "true" + assert await self.tinker_preset_temperature( api, "f2bf9048bef64cc5b6d5110154e33c81" ) @@ -284,7 +307,7 @@ async def test_connect_adam_zone_per_device(self): test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) assert api.gateway_id == "fe799307f1624099878210aa0b9f1475" - assert self.entity_items == 486 + assert self.entity_items == 491 assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications @@ -358,7 +381,7 @@ async def test_connect_adam_multiple_devices_per_zone(self): ) test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 494 + assert self.entity_items == 499 assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications @@ -395,7 +418,7 @@ async def test_adam_heatpump_cooling(self): server, api, client = await self.connect_wrapper() test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 743 + assert self.entity_items == 746 assert test_items == self.entity_items assert self.cooling_present assert self._cooling_enabled @@ -419,7 +442,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 94 + assert self.entity_items == 97 assert test_items == self.entity_items assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present @@ -444,7 +467,7 @@ async def test_connect_adam_plus_anna(self): test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" - assert self.entity_items == 105 + assert self.entity_items == 106 assert test_items == self.entity_items assert "6fb89e35caeb4b1cb275184895202d84" in self.notifications diff --git a/tests/test_anna.py b/tests/test_anna.py index 348e8de6a..22e64d290 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -29,7 +29,7 @@ async def test_connect_anna_v4(self): await self.device_test(api, "2020-04-05 00:00:01", testdata) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" - assert self.entity_items == 84 + assert self.entity_items == 86 assert not self.notifications assert not self.cooling_present @@ -101,7 +101,7 @@ async def test_connect_anna_v4_dhw(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata) - assert self.entity_items == 84 + assert self.entity_items == 86 assert not self.notifications result = await self.tinker_thermostat( @@ -130,7 +130,7 @@ async def test_connect_anna_v4_no_tag(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata) - assert self.entity_items == 84 + assert self.entity_items == 86 result = await self.tinker_thermostat( api, @@ -158,7 +158,7 @@ async def test_connect_anna_without_boiler_fw441(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 62 + assert self.entity_items == 64 assert not self.notifications result = await self.tinker_thermostat( @@ -186,7 +186,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 93 + assert self.entity_items == 94 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -216,7 +216,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test( api, "2020-04-13 00:00:01", testdata_updated, initialize=False ) - assert self.entity_items == 89 + assert self.entity_items == 90 await api.close_connection() await self.disconnect(server, client) @@ -241,7 +241,7 @@ async def test_connect_anna_heatpump_cooling(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata) - assert self.entity_items == 89 + assert self.entity_items == 90 assert self.cooling_present assert not self.notifications @@ -287,7 +287,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata) - assert self.entity_items == 89 + assert self.entity_items == 90 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -313,7 +313,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 89 + assert self.entity_items == 90 assert not self.notifications assert not self.cooling_present @@ -336,7 +336,7 @@ async def test_connect_anna_elga_2(self): ) await self.device_test(api, "2022-03-13 00:00:01", testdata) - assert self.entity_items == 84 + assert self.entity_items == 85 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -356,7 +356,7 @@ async def test_connect_anna_elga_2_schedule_off(self): await self.device_test(api, "2022-03-13 00:00:01", testdata) assert not self._cooling_enabled - assert self.entity_items == 88 + assert self.entity_items == 89 result = await self.tinker_thermostat( api, @@ -387,7 +387,7 @@ async def test_connect_anna_elga_2_cooling(self): ) await self.device_test(api, "2022-03-10 00:00:01", testdata) - assert self.entity_items == 88 + assert self.entity_items == 89 assert not self.notifications assert self.cooling_present @@ -440,7 +440,7 @@ async def test_connect_anna_loria_heating_idle(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 90 + assert self.entity_items == 92 assert self.cooling_present assert not self._cooling_enabled @@ -509,7 +509,7 @@ async def test_connect_anna_loria_cooling_active(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 90 + assert self.entity_items == 92 assert self.cooling_present assert self._cooling_enabled @@ -532,7 +532,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 91 + assert self.entity_items == 95 assert self.cooling_present assert not self._cooling_enabled @@ -555,7 +555,7 @@ async def test_connect_anna_p1(self): ) await self.device_test(api, "2025-11-02 00:00:01", testdata) - assert self.entity_items == 99 + assert self.entity_items == 100 await api.close_connection() await self.disconnect(server, client) @@ -576,7 +576,7 @@ async def test_connect_anna_v4_no_modules(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 12 + assert self.entity_items == 14 await api.close_connection() await self.disconnect(server, client) diff --git a/tests/test_init.py b/tests/test_init.py index c40fc2137..194b34ace 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -508,6 +508,7 @@ def test_and_assert(test_dict, data, header): "away_preset_temperature", "vacation_preset_temperature", "no_frost_preset_temperature", + "schedules", ] for testitem, measurements in test_dict.items(): item_asserts = 0 From e3fa537d1e6e5b01e191428370dcd28a4fa4896f Mon Sep 17 00:00:00 2001 From: Mart van Male Date: Sun, 25 Oct 2026 18:42:23 +0100 Subject: [PATCH 4/7] Add schedule writes Slots are checked for valid day and time notation and a setpoint between 4 and 30 before anything is sent to the gateway. --- CHANGELOG.md | 1 + plugwise/__init__.py | 28 ++++++++++++++ plugwise/constants.py | 3 ++ plugwise/legacy/smile.py | 12 ++++++ plugwise/smile.py | 80 ++++++++++++++++++++++++++++++++++++++++ tests/test_adam.py | 18 +++++++++ tests/test_init.py | 34 +++++++++++++++++ 7 files changed, 176 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6ce59312..1898103f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Ongoing +- Add `set_schedule`, `create_schedule` and `delete_schedule` to change, rename, add and remove weekly schedules. A new schedule is inactive and attached to no zone. - Add the weekly schedules, with their name, zones and time slots, to the gateway data. - Add the heating setpoint of each preset as an adjustable value for every zone with its own preset rule. Changing one resets a manual setpoint on that zone to its active preset. - Each Adam zone now takes its presets from its own preset rule, not from the last preset rule on the gateway. diff --git a/plugwise/__init__.py b/plugwise/__init__.py index 7110fdf09..42642302e 100644 --- a/plugwise/__init__.py +++ b/plugwise/__init__.py @@ -22,6 +22,7 @@ STATUS, SYSTEM, GwEntityData, + ScheduleSlot, ThermoLoc, ) from plugwise.exceptions import ( @@ -390,6 +391,33 @@ async def set_schedule_state( f"Failed to set schedule state: {str(exc)}" ) from exc # pragma no cover + async def set_schedule( + self, rule_id: str, slots: list[ScheduleSlot], name: str | None = None + ) -> None: + """Replace the time slots of a schedule, and rename it when a name is given.""" + try: + await self._smile_api.set_schedule(rule_id, slots, name=name) + except ConnectionFailedError as exc: + raise ConnectionFailedError(f"Failed to set schedule: {str(exc)}") from exc + + async def create_schedule(self, name: str, slots: list[ScheduleSlot]) -> None: + """Create a schedule; the gateway adds it inactive and attached to no zone.""" + try: + await self._smile_api.create_schedule(name, slots) + except ConnectionFailedError as exc: + raise ConnectionFailedError( + f"Failed to create schedule: {str(exc)}" + ) from exc + + async def delete_schedule(self, rule_id: str) -> None: + """Delete a schedule from the gateway.""" + try: + await self._smile_api.delete_schedule(rule_id) + except ConnectionFailedError as exc: + raise ConnectionFailedError( + f"Failed to delete schedule: {str(exc)}" + ) from exc + async def set_preset(self, loc_id: str, preset: str) -> None: """Set the given Preset on the relevant Thermostat.""" try: diff --git a/plugwise/constants.py b/plugwise/constants.py index 058eb4718..5e76c141a 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -555,6 +555,9 @@ class ActuatorData(TypedDict, total=False): SCHEDULE_TAG: Final = "zone_preset_based_on_time_and_presence_with_override" SCHEDULE_PERIOD: Final = re.compile(r"\[(\w\w \d\d:\d\d),(\w\w \d\d:\d\d)\)") SCHEDULE_NUMBERS: Final = ("setpoint", "heating_setpoint", "cooling_setpoint") +SCHEDULE_POINT: Final = re.compile(r"(mo|tu|we|th|fr|sa|su) ([01]\d|2[0-3]):[0-5]\d") +# Slot keys that belong on ; all others go on +SCHEDULE_WHEN_KEYS: Final = ("presence",) type ScheduleSlot = dict[str, str | float] diff --git a/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index 9118ff02b..724ce06df 100644 --- a/plugwise/legacy/smile.py +++ b/plugwise/legacy/smile.py @@ -21,6 +21,7 @@ STATE_OFF, STATE_ON, GwEntityData, + ScheduleSlot, ThermoLoc, ) from plugwise.exceptions import ConnectionFailedError, DataMissingError, PlugwiseError @@ -154,6 +155,17 @@ async def set_number( async def set_offset(self, dev_id: str, offset: float) -> None: """Set-function placeholder for legacy devices.""" + async def set_schedule( + self, rule_id: str, slots: list[ScheduleSlot], name: str | None = None + ) -> None: + """Set-function placeholder for legacy devices.""" + + async def create_schedule(self, name: str, slots: list[ScheduleSlot]) -> None: + """Set-function placeholder for legacy devices.""" + + async def delete_schedule(self, rule_id: str) -> None: + """Set-function placeholder for legacy devices.""" + async def set_preset(self, _: str, preset: str) -> None: """Set the given Preset on the relevant Thermostat - from DOMAIN_OBJECTS.""" if not (presets := self._presets()): diff --git a/plugwise/smile.py b/plugwise/smile.py index 2a71dc603..f217af5ff 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -8,6 +8,7 @@ from collections.abc import Awaitable, Callable import datetime as dt from typing import Any, cast +from xml.sax.saxutils import quoteattr from plugwise.constants import ( ALLOWED_ZONE_PROFILES, @@ -23,9 +24,13 @@ OFF, PRESET_TEMPERATURES, RULES, + SCHEDULE_POINT, + SCHEDULE_TAG, + SCHEDULE_WHEN_KEYS, STATE_OFF, STATE_ON, GwEntityData, + ScheduleSlot, SwitchType, ThermoLoc, ) @@ -263,6 +268,81 @@ async def set_preset_temperature( await self.call_request(f"{RULES};id={rule_id}", method="put", data=data) then.set("heating_setpoint", heating) + async def set_schedule( + self, rule_id: str, slots: list[ScheduleSlot], name: str | None = None + ) -> None: + """Replace the time slots of a schedule, and rename it when a name is given.""" + rule = self._schedule_rule(rule_id) + directives = self._schedule_directives(slots) + new_name = f"" if name is not None else "" + data = f"{new_name}{directives}" + await self.call_request(f"{RULES};id={rule_id}", method="put", data=data) + rule.remove(rule.find("directives")) + rule.append(etree.fromstring(directives)) + if name is not None: + rule.find("name").text = name + + async def create_schedule(self, name: str, slots: list[ScheduleSlot]) -> None: + """Create a schedule; the gateway adds it inactive and attached to no zone.""" + directives = self._schedule_directives(slots) + data = ( + "" + f"" + f'