diff --git a/CHANGELOG.md b/CHANGELOG.md index 215e2e8a7..5f1e3b71f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Ongoing +- Switching a schedule on also makes it active, so a schedule that was inactive starts running. +- 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. - 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_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 615f4d28d..4dc29c39f 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -1,23 +1,47 @@ { "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", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -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,23 +328,47 @@ }, "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", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -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", @@ -356,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": { @@ -428,23 +721,47 @@ }, "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", - "away", "home", - "asleep" + "asleep", + "away" ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", @@ -465,6 +782,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,23 +797,47 @@ }, "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", "away", - "home", - "asleep" + "asleep", + "home" ], "select_schedule": "off", "select_zone_profile": "passive", @@ -510,6 +857,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,22 +892,46 @@ }, "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", - "away", "home", + "away", "asleep" ], "select_schedule": "off", @@ -576,6 +953,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 +988,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 +1049,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,23 +1064,47 @@ }, "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", + "asleep", "away", - "home", - "asleep" + "home" ], "select_schedule": "off", "select_zone_profile": "active", @@ -688,6 +1125,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,22 +1238,46 @@ }, "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", - "away", "home", + "away", "asleep" ], "select_schedule": "off", @@ -832,6 +1299,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 +1384,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 +1445,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 04a2d5ede..3ec32adf8 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -1,20 +1,44 @@ { "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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,20 +346,44 @@ }, "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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,20 +443,44 @@ }, "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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 697796878..ea63a8b12 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,17 +36,35 @@ "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": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -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,17 +107,35 @@ "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", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -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,17 +388,35 @@ "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", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -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,17 +573,35 @@ "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": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { @@ -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": { @@ -658,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 a24e27d98..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": { @@ -90,17 +293,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 +354,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..2e4934fed 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": { @@ -106,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 6b4350c15..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": { @@ -302,6 +614,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 +627,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 +678,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 +693,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,15 +706,33 @@ "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": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], @@ -391,6 +757,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 fcfef409b..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": { @@ -254,6 +568,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,16 +581,34 @@ "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": [ - "no_frost", - "asleep", "vacation", + "no_frost", "home", + "asleep", "away" ], "select_schedule": "off", @@ -292,6 +630,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 +645,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 +658,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 +709,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 e9771f0d7..2ac944650 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,17 +36,35 @@ "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": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -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,17 +108,35 @@ "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", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -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,17 +389,35 @@ "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", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -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,17 +574,35 @@ "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": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { @@ -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": { @@ -642,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 a2a591f4d..5080840cf 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": { @@ -91,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 4c9b08154..11553c9fa 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": { @@ -98,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 f77cd2383..ab88e4d3c 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": { @@ -98,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 47fe95417..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 }, @@ -65,18 +131,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 +194,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..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 }, @@ -61,18 +125,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 +190,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..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 }, @@ -61,18 +125,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 +190,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..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 }, @@ -67,18 +133,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 +198,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..54c7da157 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": { @@ -56,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 ccac7bddf..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 }, @@ -20,6 +402,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 +415,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 +468,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..0eea5f115 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": { @@ -56,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 5f4df3f00..aae0b4588 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": { @@ -81,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 742fad881..c759fea6b 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": { @@ -54,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 b373166ba..c42aea735 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": { @@ -54,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 2c9a40c8c..9b5ba1b6f 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": { @@ -54,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 5dbecb4dd..8022f24fc 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": { @@ -54,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 f33fb1533..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": { @@ -213,6 +525,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 +538,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 +589,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 +604,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,15 +617,33 @@ "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": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], @@ -302,6 +668,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 9c15aa068..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": { @@ -218,6 +530,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 +543,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 +594,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 +609,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,15 +622,33 @@ "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": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], @@ -307,6 +673,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 ad489df47..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": { @@ -218,6 +530,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 +543,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 +594,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 +609,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,15 +622,33 @@ "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": [ - "vacation", "no_frost", "asleep", + "vacation", "home", "away" ], @@ -307,6 +673,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 dd73cb9ce..a65d9ceb7 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -1,19 +1,43 @@ { "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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,20 +345,44 @@ }, "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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,20 +442,44 @@ }, "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", "home", - "asleep", "away", - "vacation", - "no_frost" + "asleep" ], "select_schedule": "off", "select_zone_profile": "active", @@ -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 2c7881426..f31df22b6 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,17 +36,35 @@ "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": [ - "home", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home", + "vacation" ], "select_schedule": "Badkamer Schema", "sensors": { @@ -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,17 +107,35 @@ "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", - "asleep", "away", "vacation", - "no_frost" + "no_frost", + "asleep" ], "select_schedule": "off", "sensors": { @@ -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,17 +383,35 @@ "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", - "asleep", + "no_frost", "away", "vacation", - "no_frost" + "asleep" ], "select_schedule": "CV Jessie", "sensors": { @@ -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,17 +568,35 @@ "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": [ - "home", + "vacation", "asleep", + "no_frost", "away", - "vacation", - "no_frost" + "home" ], "select_schedule": "GF7 Woonkamer", "sensors": { @@ -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": { @@ -653,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 9b421f792..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 }, @@ -67,18 +133,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 +198,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..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 }, @@ -67,18 +133,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 +198,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/__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 d251f76ba..5e76c141a 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__) @@ -265,6 +266,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", @@ -535,6 +552,25 @@ 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") +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] + + +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. @@ -584,9 +620,15 @@ 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 + schedules: dict[str, ScheduleData] climate_mode: str # Extra for Adam Master Thermostats diff --git a/plugwise/data.py b/plugwise/data.py index dd03b8624..e19a79810 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, ) @@ -57,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 @@ -273,6 +278,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 +308,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 ee361e63b..02d18d552 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, @@ -918,11 +923,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 +937,35 @@ 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. + """ + 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) + + return rule_ids + def _rule_ids_by_name(self, name: str, loc_id: str) -> dict[str, dict[str, str]]: """Helper-function for _presets(). @@ -989,7 +1020,7 @@ def _schedules(self, location: str) -> tuple[list[str], str]: available: list[str] = [OFF] rule_ids: dict[str, dict[str, str]] = {} selected = OFF - tag = "zone_preset_based_on_time_and_presence_with_override" + tag = SCHEDULE_TAG if not (rule_ids := self._rule_ids_by_tag(tag, location)): return available, selected @@ -1008,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/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index 9118ff02b..1e427b817 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 @@ -28,6 +29,8 @@ from munch import Munch +NO_SCHEDULE_WRITES = "Plugwise: schedules cannot be changed on this gateway" + class SmileLegacyAPI(SmileLegacyData): """The Plugwise SmileLegacyAPI helper class for actual Plugwise legacy devices.""" @@ -154,6 +157,20 @@ 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: + """Raise an error, since legacy gateways keep schedules in a format this library does not write.""" + raise PlugwiseError(NO_SCHEDULE_WRITES) + + async def create_schedule(self, name: str, slots: list[ScheduleSlot]) -> None: + """Raise an error, since legacy gateways keep schedules in a format this library does not write.""" + raise PlugwiseError(NO_SCHEDULE_WRITES) + + async def delete_schedule(self, rule_id: str) -> None: + """Raise an error, since legacy gateways keep schedules in a format this library does not write.""" + raise PlugwiseError(NO_SCHEDULE_WRITES) + 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 0aea89a58..0eadf0446 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -7,7 +7,9 @@ from collections.abc import Awaitable, Callable import datetime as dt +import re from typing import Any, cast +from xml.sax.saxutils import quoteattr from plugwise.constants import ( ALLOWED_ZONE_PROFILES, @@ -21,10 +23,16 @@ NONE, NOTIFICATIONS, OFF, + PRESET_TEMPERATURES, RULES, + SCHEDULE_NUMBERS, + SCHEDULE_POINT, + SCHEDULE_TAG, + SCHEDULE_WHEN_KEYS, STATE_OFF, STATE_ON, GwEntityData, + ScheduleSlot, SwitchType, ThermoLoc, ) @@ -37,6 +45,26 @@ from munch import Munch +def _xml_attrs(attrs: dict[str, str]) -> str: + """Return XML attributes, with escaped values.""" + return " ".join(f"{key}={quoteattr(value)}" for key, value in attrs.items()) + + +def _schedule_name(name: str) -> str: + """Return a schedule name as CDATA, refusing the one sequence CDATA cannot hold.""" + if "]]>" in name: + raise PlugwiseError("Plugwise: a schedule name cannot contain ']]>'") + return f"" + + +def _in_range(value: str | float) -> bool: + """Return whether a schedule value is a number in the setpoint range.""" + try: + return MIN_SETPOINT <= float(value) <= MAX_SETPOINT + except ValueError: + return False + + def model_to_switch_items(model: str, state: str, switch: Munch) -> tuple[str, Munch]: """Translate state and switch attributes based on model name. @@ -57,6 +85,9 @@ def model_to_switch_items(model: str, state: str, switch: Munch) -> tuple[str, M return state, switch +XML_NAME = re.compile(r"[A-Za-z_][\w.-]*") + + class SmileAPI(SmileData): """The Plugwise SmileAPI helper class for actual Plugwise devices.""" @@ -170,7 +201,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 +251,132 @@ 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' + ): + if (when_then := when.find("then")) is None: + raise PlugwiseError( + f"Plugwise: preset rule {rule_id} has a switch point without settings" + ) + then_attrs = dict(when_then.attrib) + if when.get("preset") == preset: + then_attrs["heating_setpoint"] = heating + directives += ( + f"" + 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_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"{_schedule_name(name)}" if name is not None else "" + data = f"{new_name}{directives}" + await self.call_request(f"{RULES};id={rule_id}", method="put", data=data) + if (old_directives := rule.find("directives")) is not None: + rule.remove(old_directives) + rule.append(etree.fromstring(directives)) + if name is not None and (rule_name := rule.find("name")) is not None: + rule_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"{_schedule_name(name)}" + f'