diff --git a/CHANGELOG.md b/CHANGELOG.md index 41fdef5f0..bc0d922c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Ongoing + +- Fix switching a schedule on or off sending the schedule's settings to another rule that shares its name, such as a preset rule. A name that belongs only to another rule is now refused. This affected both current and legacy gateways. +- Switching a schedule on also makes it active, so a schedule that was inactive starts running. Switching on a schedule that is already attached no longer adds its zone a second time. +- 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. The slots are listed in week order, starting on Monday. + ## v1.16.0 - Contribution PR [#940](https://github.com/plugwise/python-plugwise/pull/940) by @MartvanMale: diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index f8f13e5c0..259f31b2c 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -451,6 +451,209 @@ "bleeding_hot", "cooling" ], + "schedules": { + "09314e39f2bd416a889cc6b65b9c0209": { + "active": true, + "name": "Opstaan weekdag", + "slots": [ + { + "end": "mo 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [] + }, + "4fed3d61217a408bbee54d56595cd379": { + "active": true, + "name": "Werkdag schema", + "slots": [ + { + "end": "mo 17:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 17:15" + }, + { + "end": "tu 08:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "tu 17:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 17:15" + }, + { + "end": "we 08:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "we 17:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 17:15" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "th 17:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 17:15" + }, + { + "end": "fr 08:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "fr 17:15", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 23:30", + "preset": "home", + "start": "fr 17:15" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 23:30" + }, + { + "end": "sa 16:30", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 23:30", + "preset": "home", + "start": "sa 16:30" + }, + { + "end": "su 09:00", + "setpoint": 17.5, + "start": "sa 23:30" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "active": true, + "name": "Weekend", + "slots": [ + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/adam_multiple_devices_per_zone/data.json b/fixtures/adam_multiple_devices_per_zone/data.json index 44d307e86..048ebf71b 100644 --- a/fixtures/adam_multiple_devices_per_zone/data.json +++ b/fixtures/adam_multiple_devices_per_zone/data.json @@ -808,6 +808,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "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": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "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": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08: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" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + } + ], + "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 a81284da4..14ac14764 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [] + }, + "4fed3d61217a408bbee54d56595cd379": { + "active": true, + "name": "Werkdag schema", + "slots": [ + { + "end": "mo 17:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 17:15" + }, + { + "end": "tu 08:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "tu 17:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 17:15" + }, + { + "end": "we 08:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "we 17:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 17:15" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "th 17:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 17:15" + }, + { + "end": "fr 08:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "fr 17:15", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 23:30", + "preset": "home", + "start": "fr 17:15" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "fr 23:30" + }, + { + "end": "sa 16:30", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 23:30", + "preset": "home", + "start": "sa 16:30" + }, + { + "end": "su 09:00", + "preset": "asleep", + "start": "sa 23:30" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [ + "fa5fa6b34f6b40a0972988b20e888ed4", + "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "5cc21042f87f4b4c94ccb5537c47a53f", + "8cf650a4c10c44819e426bed406aec34" + ] + }, + "cad46f09817f4fcf82de44d0a49cf73c": { + "active": true, + "name": "Weekend", + "slots": [ + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index 4123a2830..ae4036c38 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -136,6 +136,122 @@ "error": "There is no OpenTherm communication with the boiler." } }, + "schedules": { + "12f68057511a4445a162fb307d437cf1": { + "active": true, + "name": "Weekschema", + "slots": [ + { + "end": "mo 16:30", + "preset": "home", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "setpoint": 20.5, + "start": "mo 16:30" + }, + { + "end": "tu 07:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 16:30", + "preset": "home", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "setpoint": 20.5, + "start": "tu 16:30" + }, + { + "end": "we 07:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 16:30", + "preset": "home", + "start": "we 07:30" + }, + { + "end": "we 22:30", + "setpoint": 20.5, + "start": "we 16:30" + }, + { + "end": "th 07:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 16:30", + "preset": "home", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "setpoint": 20.5, + "start": "th 16:30" + }, + { + "end": "fr 07:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 16:30", + "preset": "home", + "start": "fr 07:30" + }, + { + "end": "fr 22:30", + "setpoint": 20.5, + "start": "fr 16:30" + }, + { + "end": "sa 07:30", + "preset": "asleep", + "start": "fr 22:30" + }, + { + "end": "sa 16:30", + "preset": "home", + "start": "sa 07:30" + }, + { + "end": "sa 22:30", + "setpoint": 20.5, + "start": "sa 16:30" + }, + { + "end": "su 07:30", + "preset": "asleep", + "start": "sa 22:30" + }, + { + "end": "su 16:30", + "preset": "home", + "start": "su 07:30" + }, + { + "end": "su 22:30", + "setpoint": 20.5, + "start": "su 16:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "009490cc2f674ce6b576863fbb64f867" + ] + } + }, "sensors": { "outdoor_temperature": 11.9 }, diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 4f8af21d3..b4a35a251 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": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "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": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "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": "mo 10:00", + "setpoint": 15.0, + "start": "sa 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": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "heating", "sensors": { diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index 8ec048bdd..4e527091d 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": "mo 16:30", + "setpoint": 18.0, + "start": "mo 07:15" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:30" + }, + { + "end": "tu 16:30", + "setpoint": 18.0, + "start": "tu 07:15" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "we 16:30", + "setpoint": 18.0, + "start": "we 07:15" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "th 16:30", + "setpoint": 18.0, + "start": "th 07:15" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "fr 16:30", + "setpoint": 18.0, + "start": "fr 07:15" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "sa 16:00", + "setpoint": 18.0, + "start": "sa 07:45" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "su 16:00", + "setpoint": 18.0, + "start": "su 07:45" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "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": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "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": "mo 10:00", + "setpoint": 15.0, + "start": "sa 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": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + } + ], + "zones": [ + "f871b8c4d63549319221e294e4f88074" + ] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "off", "sensors": { diff --git a/fixtures/adam_zone_per_device/data.json b/fixtures/adam_zone_per_device/data.json index 40fad1963..5d776cfca 100644 --- a/fixtures/adam_zone_per_device/data.json +++ b/fixtures/adam_zone_per_device/data.json @@ -792,6 +792,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "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": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "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": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08: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" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "c50f167537524366a5af7aa3942feb1e" + ] + } + }, "sensors": { "outdoor_temperature": 7.69 }, diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index 0aaeb5ab7..1bbb0f828 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -126,6 +126,112 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "end": "mo 15:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "mo 23:00", + "setpoint": 19.0, + "start": "mo 15:00" + }, + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "tu 15:00", + "preset": "home", + "start": "tu 10:00" + }, + { + "end": "tu 23:00", + "setpoint": 19.0, + "start": "tu 15:00" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "we 15:00", + "preset": "home", + "start": "we 10:00" + }, + { + "end": "we 23:00", + "setpoint": 19.0, + "start": "we 15:00" + }, + { + "end": "th 08:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "th 15:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "th 23:00", + "setpoint": 19.0, + "start": "th 15:00" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "fr 15:00", + "preset": "home", + "start": "fr 10:00" + }, + { + "end": "fr 23:00", + "setpoint": 19.0, + "start": "fr 15: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": "mo 08:00", + "preset": "asleep", + "start": "su 22:45" + } + ], + "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 f1a401941..cbeefeaa0 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -133,6 +133,88 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "end": "tu 06:45", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "th 23:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "we 06:45", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "th 06:45", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "tu 23:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "fr 06:45", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "fr 23:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "su 08:30", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "we 23:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "cooling_setpoint": 23.5, + "end": "mo 06:45", + "heating_setpoint": 18.5, + "start": "sa 23:00" + }, + { + "end": "su 22:45", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "mo 23:00", + "preset": "asleep", + "start": "su 22:45" + } + ], + "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 ffe061a6f..3c7949bc3 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -133,6 +133,85 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "40e484ccfd644f1fa8b82f669091144a": { + "active": true, + "name": "Thermostat schedule", + "slots": [ + { + "end": "tu 06:45", + "preset": "home", + "start": "mo 06:45" + }, + { + "end": "th 23:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "we 06:45", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "sa 08:30", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "th 06:45", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "tu 23:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "fr 06:45", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "fr 23:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "su 08:30", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "we 23:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 08:30" + }, + { + "end": "mo 06:45", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 22:45", + "preset": "home", + "start": "su 08:30" + }, + { + "end": "mo 23:00", + "preset": "asleep", + "start": "su 22:45" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 13.0 }, diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index ef57ecfda..2e2b45c97 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 20.2 }, diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index ab6f2c7e7..ea0cad52b 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 22.0 }, diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index 9d9f3d84e..d15a2ce3c 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 22.0 }, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 8deef46d8..db57c6d15 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 20.2 }, diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index dbb5c9f7e..69a229e67 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -91,6 +91,1004 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "active": true, + "name": "Winter", + "slots": [ + { + "end": "mo 23:15", + "preset": "home", + "start": "mo 06:00" + }, + { + "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" + }, + { + "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 06:00", + "preset": "asleep", + "start": "su 23:15" + } + ], + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "active": true, + "name": "Test ", + "slots": [ + { + "end": "tu 00:00", + "preset": "home", + "start": "mo 00:00" + }, + { + "end": "tu 00:15", + "preset": "asleep", + "start": "mo 00:15" + }, + { + "end": "tu 02:00", + "preset": "home", + "start": "mo 02:00" + }, + { + "end": "tu 02:15", + "preset": "asleep", + "start": "mo 02:15" + }, + { + "end": "tu 04:00", + "preset": "home", + "start": "mo 04:00" + }, + { + "end": "tu 04:15", + "preset": "asleep", + "start": "mo 04:15" + }, + { + "end": "tu 06:00", + "preset": "home", + "start": "mo 06:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "tu 08:15", + "preset": "asleep", + "start": "mo 08:15" + }, + { + "end": "tu 09:30", + "preset": "home", + "start": "mo 09:30" + }, + { + "end": "we 09:45", + "preset": "asleep", + "start": "mo 09:45" + }, + { + "end": "tu 11:00", + "preset": "home", + "start": "mo 11:00" + }, + { + "end": "tu 11:15", + "preset": "asleep", + "start": "mo 11:15" + }, + { + "end": "tu 12:45", + "preset": "home", + "start": "mo 12:45" + }, + { + "end": "tu 13:00", + "preset": "asleep", + "start": "mo 13:00" + }, + { + "end": "tu 14:30", + "preset": "home", + "start": "mo 14:30" + }, + { + "end": "tu 14:45", + "preset": "asleep", + "start": "mo 14:45" + }, + { + "end": "tu 16:00", + "preset": "home", + "start": "mo 16:00" + }, + { + "end": "tu 16:15", + "preset": "asleep", + "start": "mo 16:15" + }, + { + "end": "tu 18:00", + "preset": "home", + "start": "mo 18:00" + }, + { + "end": "tu 18:15", + "preset": "asleep", + "start": "mo 18:15" + }, + { + "end": "tu 20:15", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 20:30", + "preset": "asleep", + "start": "mo 20:30" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "mo 22:00" + }, + { + "end": "tu 22:15", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "we 00:00", + "preset": "home", + "start": "tu 00:00" + }, + { + "end": "we 00:15", + "preset": "asleep", + "start": "tu 00:15" + }, + { + "end": "we 02:00", + "preset": "home", + "start": "tu 02:00" + }, + { + "end": "we 02:15", + "preset": "asleep", + "start": "tu 02:15" + }, + { + "end": "we 04:00", + "preset": "home", + "start": "tu 04:00" + }, + { + "end": "we 04:15", + "preset": "asleep", + "start": "tu 04:15" + }, + { + "end": "we 06:00", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "tu 08:00" + }, + { + "end": "we 08:15", + "preset": "asleep", + "start": "tu 08:15" + }, + { + "end": "we 09:30", + "preset": "home", + "start": "tu 09:30" + }, + { + "end": "th 09:45", + "preset": "asleep", + "start": "tu 09:45" + }, + { + "end": "we 11:00", + "preset": "home", + "start": "tu 11:00" + }, + { + "end": "we 11:15", + "preset": "asleep", + "start": "tu 11:15" + }, + { + "end": "we 12:45", + "preset": "home", + "start": "tu 12:45" + }, + { + "end": "we 13:00", + "preset": "asleep", + "start": "tu 13:00" + }, + { + "end": "we 14:30", + "preset": "home", + "start": "tu 14:30" + }, + { + "end": "we 14:45", + "preset": "asleep", + "start": "tu 14:45" + }, + { + "end": "we 16:00", + "preset": "home", + "start": "tu 16:00" + }, + { + "end": "we 16:15", + "preset": "asleep", + "start": "tu 16:15" + }, + { + "end": "we 18:00", + "preset": "home", + "start": "tu 18:00" + }, + { + "end": "we 18:15", + "preset": "asleep", + "start": "tu 18:15" + }, + { + "end": "we 20:15", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 20:30", + "preset": "asleep", + "start": "tu 20:30" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "tu 22:00" + }, + { + "end": "we 22:15", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "th 00:00", + "preset": "home", + "start": "we 00:00" + }, + { + "end": "th 00:15", + "preset": "asleep", + "start": "we 00:15" + }, + { + "end": "th 02:00", + "preset": "home", + "start": "we 02:00" + }, + { + "end": "th 02:15", + "preset": "asleep", + "start": "we 02:15" + }, + { + "end": "fr 04:00", + "preset": "home", + "start": "we 04:00" + }, + { + "end": "fr 04:15", + "preset": "asleep", + "start": "we 04:15" + }, + { + "end": "fr 06:00", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 06:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "we 08:00" + }, + { + "end": "th 08:15", + "preset": "asleep", + "start": "we 08:15" + }, + { + "end": "th 09:30", + "preset": "home", + "start": "we 09:30" + }, + { + "end": "tu 09:45", + "preset": "asleep", + "start": "we 09:45" + }, + { + "end": "th 11:00", + "preset": "home", + "start": "we 11:00" + }, + { + "end": "th 11:15", + "preset": "asleep", + "start": "we 11:15" + }, + { + "end": "th 12:45", + "preset": "home", + "start": "we 12:45" + }, + { + "end": "th 13:00", + "preset": "asleep", + "start": "we 13:00" + }, + { + "end": "th 14:30", + "preset": "home", + "start": "we 14:30" + }, + { + "end": "th 14:45", + "preset": "asleep", + "start": "we 14:45" + }, + { + "end": "th 16:00", + "preset": "home", + "start": "we 16:00" + }, + { + "end": "fr 16:15", + "preset": "asleep", + "start": "we 16:15" + }, + { + "end": "th 18:00", + "preset": "home", + "start": "we 18:00" + }, + { + "end": "th 18:15", + "preset": "asleep", + "start": "we 18:15" + }, + { + "end": "th 20:15", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 20:30", + "preset": "asleep", + "start": "we 20:30" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "we 22:00" + }, + { + "end": "th 22:15", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "su 00:00", + "preset": "home", + "start": "th 00:00" + }, + { + "end": "fr 00:15", + "preset": "asleep", + "start": "th 00:15" + }, + { + "end": "fr 02:00", + "preset": "home", + "start": "th 02:00" + }, + { + "end": "fr 02:15", + "preset": "asleep", + "start": "th 02:15" + }, + { + "end": "mo 04:15", + "preset": "home", + "start": "th 04:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "th 04:15" + }, + { + "end": "su 06:00", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 06:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "fr 08:15", + "preset": "asleep", + "start": "th 08:15" + }, + { + "end": "fr 09:30", + "preset": "home", + "start": "th 09:30" + }, + { + "end": "fr 09:45", + "preset": "asleep", + "start": "th 09:45" + }, + { + "end": "fr 11:00", + "preset": "home", + "start": "th 11:00" + }, + { + "end": "fr 11:15", + "preset": "asleep", + "start": "th 11:15" + }, + { + "end": "fr 12:45", + "preset": "home", + "start": "th 12:45" + }, + { + "end": "fr 13:00", + "preset": "asleep", + "start": "th 13:00" + }, + { + "end": "fr 14:30", + "preset": "home", + "start": "th 14:30" + }, + { + "end": "fr 14:45", + "preset": "asleep", + "start": "th 14:45" + }, + { + "end": "fr 16:00", + "preset": "home", + "start": "th 16:00" + }, + { + "end": "su 16:15", + "preset": "asleep", + "start": "th 16:15" + }, + { + "end": "fr 18:00", + "preset": "home", + "start": "th 18:00" + }, + { + "end": "fr 18:15", + "preset": "asleep", + "start": "th 18:15" + }, + { + "end": "fr 20:15", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "fr 20:30", + "preset": "asleep", + "start": "th 20:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "th 22:00" + }, + { + "end": "fr 22:15", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "mo 00:00", + "preset": "home", + "start": "fr 00:00" + }, + { + "end": "su 00:15", + "preset": "asleep", + "start": "fr 00:15" + }, + { + "end": "su 02:00", + "preset": "home", + "start": "fr 02:00" + }, + { + "end": "su 02:15", + "preset": "asleep", + "start": "fr 02:15" + }, + { + "end": "su 04:00", + "preset": "home", + "start": "fr 04:00" + }, + { + "end": "su 04:15", + "preset": "asleep", + "start": "fr 04:15" + }, + { + "end": "th 06:00", + "preset": "home", + "start": "fr 06:00" + }, + { + "end": "su 06:30", + "preset": "asleep", + "start": "fr 06:30" + }, + { + "end": "su 08:00", + "preset": "home", + "start": "fr 08:00" + }, + { + "end": "su 08:15", + "preset": "asleep", + "start": "fr 08:15" + }, + { + "end": "su 09:30", + "preset": "home", + "start": "fr 09:30" + }, + { + "end": "su 09:45", + "preset": "asleep", + "start": "fr 09:45" + }, + { + "end": "su 11:00", + "preset": "home", + "start": "fr 11:00" + }, + { + "end": "su 11:15", + "preset": "asleep", + "start": "fr 11:15" + }, + { + "end": "su 12:45", + "preset": "home", + "start": "fr 12:45" + }, + { + "end": "su 13:00", + "preset": "asleep", + "start": "fr 13:00" + }, + { + "end": "su 14:30", + "preset": "home", + "start": "fr 14:30" + }, + { + "end": "su 14:45", + "preset": "asleep", + "start": "fr 14:45" + }, + { + "end": "su 16:00", + "preset": "home", + "start": "fr 16:00" + }, + { + "end": "th 16:15", + "preset": "asleep", + "start": "fr 16:15" + }, + { + "end": "su 18:00", + "preset": "home", + "start": "fr 18:00" + }, + { + "end": "su 18:15", + "preset": "asleep", + "start": "fr 18:15" + }, + { + "end": "su 20:15", + "preset": "home", + "start": "fr 20:15" + }, + { + "end": "su 20:30", + "preset": "asleep", + "start": "fr 20:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "fr 22:00" + }, + { + "end": "su 22:15", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "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": "sa 08:00", + "preset": "asleep", + "start": "sa 06:30" + }, + { + "end": "sa 08:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "sa 09:30", + "preset": "asleep", + "start": "sa 08:15" + }, + { + "end": "sa 09:45", + "preset": "home", + "start": "sa 09:30" + }, + { + "end": "sa 11:00", + "preset": "asleep", + "start": "sa 09:45" + }, + { + "end": "sa 11:15", + "preset": "home", + "start": "sa 11:00" + }, + { + "end": "sa 12:45", + "preset": "asleep", + "start": "sa 11:15" + }, + { + "end": "sa 13:00", + "preset": "home", + "start": "sa 12:45" + }, + { + "end": "sa 14:30", + "preset": "asleep", + "start": "sa 13:00" + }, + { + "end": "sa 14:45", + "preset": "home", + "start": "sa 14:30" + }, + { + "end": "sa 16:00", + "preset": "asleep", + "start": "sa 14:45" + }, + { + "end": "sa 16:15", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "sa 18:00", + "preset": "asleep", + "start": "sa 16:15" + }, + { + "end": "sa 18:15", + "preset": "home", + "start": "sa 18:00" + }, + { + "end": "sa 20:15", + "preset": "asleep", + "start": "sa 18:15" + }, + { + "end": "sa 20:30", + "preset": "home", + "start": "sa 20:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 22:00" + }, + { + "end": "fr 00:00", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "mo 00:15", + "preset": "home", + "start": "su 00:00" + }, + { + "end": "mo 02:00", + "preset": "asleep", + "start": "su 00:15" + }, + { + "end": "mo 02:15", + "preset": "home", + "start": "su 02:00" + }, + { + "end": "mo 04:00", + "preset": "asleep", + "start": "su 02:15" + }, + { + "end": "th 04:00", + "preset": "home", + "start": "su 04:00" + }, + { + "end": "th 04:15", + "preset": "asleep", + "start": "su 04:15" + }, + { + "end": "mo 06:30", + "preset": "home", + "start": "su 06:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 06:30" + }, + { + "end": "mo 08:15", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 09:30", + "preset": "asleep", + "start": "su 08:15" + }, + { + "end": "mo 09:45", + "preset": "home", + "start": "su 09:30" + }, + { + "end": "mo 11:00", + "preset": "asleep", + "start": "su 09:45" + }, + { + "end": "mo 11:15", + "preset": "home", + "start": "su 11:00" + }, + { + "end": "mo 12:45", + "preset": "asleep", + "start": "su 11:15" + }, + { + "end": "mo 13:00", + "preset": "home", + "start": "su 12:45" + }, + { + "end": "mo 14:30", + "preset": "asleep", + "start": "su 13:00" + }, + { + "end": "mo 14:45", + "preset": "home", + "start": "su 14:30" + }, + { + "end": "mo 16:00", + "preset": "asleep", + "start": "su 14:45" + }, + { + "end": "mo 16:15", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "mo 18:00", + "preset": "asleep", + "start": "su 16:15" + }, + { + "end": "mo 18:15", + "preset": "home", + "start": "su 18:00" + }, + { + "end": "mo 20:15", + "preset": "asleep", + "start": "su 18:15" + }, + { + "end": "mo 20:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "mo 22:00", + "preset": "asleep", + "start": "su 20:30" + }, + { + "end": "mo 22:15", + "preset": "home", + "start": "su 22:00" + }, + { + "end": "sa 00:00", + "preset": "asleep", + "start": "su 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 4fd7a56a8..8e2e2278c 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 10:15", + "setpoint": 21.0, + "start": "mo 10:00" + }, + { + "end": "mo 17:00", + "preset": "home", + "start": "mo 10:15" + }, + { + "end": "tu 10:00", + "preset": "asleep", + "start": "mo 17:00" + }, + { + "end": "tu 10:15", + "setpoint": 21.0, + "start": "tu 10:00" + }, + { + "end": "tu 17:00", + "preset": "home", + "start": "tu 10:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 17:00" + }, + { + "end": "we 10:15", + "setpoint": 21.0, + "start": "we 10:00" + }, + { + "end": "we 17:00", + "preset": "home", + "start": "we 10:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 17:00" + }, + { + "end": "th 10:15", + "setpoint": 21.0, + "start": "th 10:00" + }, + { + "end": "th 17:00", + "preset": "home", + "start": "th 10:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 17:00" + }, + { + "end": "fr 10:15", + "setpoint": 21.0, + "start": "fr 10:00" + }, + { + "end": "fr 17:00", + "preset": "home", + "start": "fr 10:15" + }, + { + "end": "sa 10:00", + "preset": "asleep", + "start": "fr 17:00" + }, + { + "end": "sa 10:15", + "setpoint": 21.0, + "start": "sa 10:00" + }, + { + "end": "sa 17:00", + "preset": "home", + "start": "sa 10:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "sa 17:00" + }, + { + "end": "su 10:15", + "setpoint": 21.0, + "start": "su 10:00" + }, + { + "end": "su 17:00", + "preset": "home", + "start": "su 10:15" + }, + { + "end": "mo 10:00", + "preset": "asleep", + "start": "su 17:00" + } + ], + "zones": [] + }, + "d4e04f5167ab43348e00c0a45b50a2bb": { + "active": true, + "name": "Verwarmen@9-23u", + "slots": [ + { + "end": "mo 09:15", + "setpoint": 21.0, + "start": "mo 09:00" + }, + { + "end": "mo 23:00", + "preset": "home", + "start": "mo 09:15" + }, + { + "end": "tu 09:00", + "preset": "asleep", + "start": "mo 23:00" + }, + { + "end": "tu 09:15", + "setpoint": 21.0, + "start": "tu 09:00" + }, + { + "end": "tu 23:00", + "preset": "home", + "start": "tu 09:15" + }, + { + "end": "we 09:00", + "preset": "asleep", + "start": "tu 23:00" + }, + { + "end": "we 09:15", + "setpoint": 21.0, + "start": "we 09:00" + }, + { + "end": "we 23:00", + "preset": "home", + "start": "we 09:15" + }, + { + "end": "th 09:00", + "preset": "asleep", + "start": "we 23:00" + }, + { + "end": "th 09:15", + "setpoint": 21.0, + "start": "th 09:00" + }, + { + "end": "th 23:00", + "preset": "home", + "start": "th 09:15" + }, + { + "end": "fr 09:00", + "preset": "asleep", + "start": "th 23:00" + }, + { + "end": "fr 09:15", + "setpoint": 21.0, + "start": "fr 09:00" + }, + { + "end": "fr 23:00", + "preset": "home", + "start": "fr 09:15" + }, + { + "end": "sa 09:00", + "preset": "asleep", + "start": "fr 23:00" + }, + { + "end": "sa 09:15", + "setpoint": 21.0, + "start": "sa 09:00" + }, + { + "end": "sa 23:00", + "preset": "home", + "start": "sa 09:15" + }, + { + "end": "su 09:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 09:15", + "setpoint": 21.0, + "start": "su 09:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 09:15" + }, + { + "end": "mo 09:00", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [ + "fa70e08550c94de3a34feb27ecf31421" + ] + } + }, "sensors": { "outdoor_temperature": 6.81 }, diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index 532006bda..95045e420 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -91,6 +91,1004 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a667b8ad609f4c45a3258f2ef9749d30": { + "active": true, + "name": "Winter", + "slots": [ + { + "end": "mo 23:15", + "setpoint": 17.5, + "start": "mo 06:00" + }, + { + "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" + }, + { + "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 06:00", + "preset": "asleep", + "start": "su 23:15" + } + ], + "zones": [ + "15da035090b847e7a21f93e08c015ebc" + ] + }, + "bb391cf9eeb84fa8a874fa83072c70fb": { + "active": true, + "name": "Test ", + "slots": [ + { + "end": "tu 00:00", + "preset": "home", + "start": "mo 00:00" + }, + { + "end": "tu 00:15", + "preset": "asleep", + "start": "mo 00:15" + }, + { + "end": "tu 02:00", + "preset": "home", + "start": "mo 02:00" + }, + { + "end": "tu 02:15", + "preset": "asleep", + "start": "mo 02:15" + }, + { + "end": "tu 04:00", + "preset": "home", + "start": "mo 04:00" + }, + { + "end": "tu 04:15", + "preset": "asleep", + "start": "mo 04:15" + }, + { + "end": "tu 06:00", + "preset": "home", + "start": "mo 06:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 06:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "mo 08:00" + }, + { + "end": "tu 08:15", + "preset": "asleep", + "start": "mo 08:15" + }, + { + "end": "tu 09:30", + "preset": "home", + "start": "mo 09:30" + }, + { + "end": "we 09:45", + "preset": "asleep", + "start": "mo 09:45" + }, + { + "end": "tu 11:00", + "preset": "home", + "start": "mo 11:00" + }, + { + "end": "tu 11:15", + "preset": "asleep", + "start": "mo 11:15" + }, + { + "end": "tu 12:45", + "preset": "home", + "start": "mo 12:45" + }, + { + "end": "tu 13:00", + "preset": "asleep", + "start": "mo 13:00" + }, + { + "end": "tu 14:30", + "preset": "home", + "start": "mo 14:30" + }, + { + "end": "tu 14:45", + "preset": "asleep", + "start": "mo 14:45" + }, + { + "end": "tu 16:00", + "preset": "home", + "start": "mo 16:00" + }, + { + "end": "tu 16:15", + "preset": "asleep", + "start": "mo 16:15" + }, + { + "end": "tu 18:00", + "preset": "home", + "start": "mo 18:00" + }, + { + "end": "tu 18:15", + "preset": "asleep", + "start": "mo 18:15" + }, + { + "end": "tu 20:15", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 20:30", + "preset": "asleep", + "start": "mo 20:30" + }, + { + "end": "tu 22:00", + "preset": "home", + "start": "mo 22:00" + }, + { + "end": "tu 22:15", + "preset": "asleep", + "start": "mo 22:15" + }, + { + "end": "we 00:00", + "preset": "home", + "start": "tu 00:00" + }, + { + "end": "we 00:15", + "preset": "asleep", + "start": "tu 00:15" + }, + { + "end": "we 02:00", + "preset": "home", + "start": "tu 02:00" + }, + { + "end": "we 02:15", + "preset": "asleep", + "start": "tu 02:15" + }, + { + "end": "we 04:00", + "preset": "home", + "start": "tu 04:00" + }, + { + "end": "we 04:15", + "preset": "asleep", + "start": "tu 04:15" + }, + { + "end": "we 06:00", + "preset": "home", + "start": "tu 06:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 06:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "tu 08:00" + }, + { + "end": "we 08:15", + "preset": "asleep", + "start": "tu 08:15" + }, + { + "end": "we 09:30", + "preset": "home", + "start": "tu 09:30" + }, + { + "end": "th 09:45", + "preset": "asleep", + "start": "tu 09:45" + }, + { + "end": "we 11:00", + "preset": "home", + "start": "tu 11:00" + }, + { + "end": "we 11:15", + "preset": "asleep", + "start": "tu 11:15" + }, + { + "end": "we 12:45", + "preset": "home", + "start": "tu 12:45" + }, + { + "end": "we 13:00", + "preset": "asleep", + "start": "tu 13:00" + }, + { + "end": "we 14:30", + "preset": "home", + "start": "tu 14:30" + }, + { + "end": "we 14:45", + "preset": "asleep", + "start": "tu 14:45" + }, + { + "end": "we 16:00", + "preset": "home", + "start": "tu 16:00" + }, + { + "end": "we 16:15", + "preset": "asleep", + "start": "tu 16:15" + }, + { + "end": "we 18:00", + "preset": "home", + "start": "tu 18:00" + }, + { + "end": "we 18:15", + "preset": "asleep", + "start": "tu 18:15" + }, + { + "end": "we 20:15", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 20:30", + "preset": "asleep", + "start": "tu 20:30" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "tu 22:00" + }, + { + "end": "we 22:15", + "preset": "asleep", + "start": "tu 22:15" + }, + { + "end": "th 00:00", + "preset": "home", + "start": "we 00:00" + }, + { + "end": "th 00:15", + "preset": "asleep", + "start": "we 00:15" + }, + { + "end": "th 02:00", + "preset": "home", + "start": "we 02:00" + }, + { + "end": "th 02:15", + "preset": "asleep", + "start": "we 02:15" + }, + { + "end": "fr 04:00", + "preset": "home", + "start": "we 04:00" + }, + { + "end": "fr 04:15", + "preset": "asleep", + "start": "we 04:15" + }, + { + "end": "fr 06:00", + "preset": "home", + "start": "we 06:00" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 06:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "we 08:00" + }, + { + "end": "th 08:15", + "preset": "asleep", + "start": "we 08:15" + }, + { + "end": "th 09:30", + "preset": "home", + "start": "we 09:30" + }, + { + "end": "tu 09:45", + "preset": "asleep", + "start": "we 09:45" + }, + { + "end": "th 11:00", + "preset": "home", + "start": "we 11:00" + }, + { + "end": "th 11:15", + "preset": "asleep", + "start": "we 11:15" + }, + { + "end": "th 12:45", + "preset": "home", + "start": "we 12:45" + }, + { + "end": "th 13:00", + "preset": "asleep", + "start": "we 13:00" + }, + { + "end": "th 14:30", + "preset": "home", + "start": "we 14:30" + }, + { + "end": "th 14:45", + "preset": "asleep", + "start": "we 14:45" + }, + { + "end": "th 16:00", + "preset": "home", + "start": "we 16:00" + }, + { + "end": "fr 16:15", + "preset": "asleep", + "start": "we 16:15" + }, + { + "end": "th 18:00", + "preset": "home", + "start": "we 18:00" + }, + { + "end": "th 18:15", + "preset": "asleep", + "start": "we 18:15" + }, + { + "end": "th 20:15", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 20:30", + "preset": "asleep", + "start": "we 20:30" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "we 22:00" + }, + { + "end": "th 22:15", + "preset": "asleep", + "start": "we 22:15" + }, + { + "end": "su 00:00", + "preset": "home", + "start": "th 00:00" + }, + { + "end": "fr 00:15", + "preset": "asleep", + "start": "th 00:15" + }, + { + "end": "fr 02:00", + "preset": "home", + "start": "th 02:00" + }, + { + "end": "fr 02:15", + "preset": "asleep", + "start": "th 02:15" + }, + { + "end": "mo 04:15", + "preset": "home", + "start": "th 04:00" + }, + { + "end": "mo 06:00", + "preset": "asleep", + "start": "th 04:15" + }, + { + "end": "su 06:00", + "preset": "home", + "start": "th 06:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 06:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "th 08:00" + }, + { + "end": "fr 08:15", + "preset": "asleep", + "start": "th 08:15" + }, + { + "end": "fr 09:30", + "preset": "home", + "start": "th 09:30" + }, + { + "end": "fr 09:45", + "preset": "asleep", + "start": "th 09:45" + }, + { + "end": "fr 11:00", + "preset": "home", + "start": "th 11:00" + }, + { + "end": "fr 11:15", + "preset": "asleep", + "start": "th 11:15" + }, + { + "end": "fr 12:45", + "preset": "home", + "start": "th 12:45" + }, + { + "end": "fr 13:00", + "preset": "asleep", + "start": "th 13:00" + }, + { + "end": "fr 14:30", + "preset": "home", + "start": "th 14:30" + }, + { + "end": "fr 14:45", + "preset": "asleep", + "start": "th 14:45" + }, + { + "end": "fr 16:00", + "preset": "home", + "start": "th 16:00" + }, + { + "end": "su 16:15", + "preset": "asleep", + "start": "th 16:15" + }, + { + "end": "fr 18:00", + "preset": "home", + "start": "th 18:00" + }, + { + "end": "fr 18:15", + "preset": "asleep", + "start": "th 18:15" + }, + { + "end": "fr 20:15", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "fr 20:30", + "preset": "asleep", + "start": "th 20:30" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "th 22:00" + }, + { + "end": "fr 22:15", + "preset": "asleep", + "start": "th 22:15" + }, + { + "end": "mo 00:00", + "preset": "home", + "start": "fr 00:00" + }, + { + "end": "su 00:15", + "preset": "asleep", + "start": "fr 00:15" + }, + { + "end": "su 02:00", + "preset": "home", + "start": "fr 02:00" + }, + { + "end": "su 02:15", + "preset": "asleep", + "start": "fr 02:15" + }, + { + "end": "su 04:00", + "preset": "home", + "start": "fr 04:00" + }, + { + "end": "su 04:15", + "preset": "asleep", + "start": "fr 04:15" + }, + { + "end": "th 06:00", + "preset": "home", + "start": "fr 06:00" + }, + { + "end": "su 06:30", + "preset": "asleep", + "start": "fr 06:30" + }, + { + "end": "su 08:00", + "preset": "home", + "start": "fr 08:00" + }, + { + "end": "su 08:15", + "preset": "asleep", + "start": "fr 08:15" + }, + { + "end": "su 09:30", + "preset": "home", + "start": "fr 09:30" + }, + { + "end": "su 09:45", + "preset": "asleep", + "start": "fr 09:45" + }, + { + "end": "su 11:00", + "preset": "home", + "start": "fr 11:00" + }, + { + "end": "su 11:15", + "preset": "asleep", + "start": "fr 11:15" + }, + { + "end": "su 12:45", + "preset": "home", + "start": "fr 12:45" + }, + { + "end": "su 13:00", + "preset": "asleep", + "start": "fr 13:00" + }, + { + "end": "su 14:30", + "preset": "home", + "start": "fr 14:30" + }, + { + "end": "su 14:45", + "preset": "asleep", + "start": "fr 14:45" + }, + { + "end": "su 16:00", + "preset": "home", + "start": "fr 16:00" + }, + { + "end": "th 16:15", + "preset": "asleep", + "start": "fr 16:15" + }, + { + "end": "su 18:00", + "preset": "home", + "start": "fr 18:00" + }, + { + "end": "su 18:15", + "preset": "asleep", + "start": "fr 18:15" + }, + { + "end": "su 20:15", + "preset": "home", + "start": "fr 20:15" + }, + { + "end": "su 20:30", + "preset": "asleep", + "start": "fr 20:30" + }, + { + "end": "su 22:00", + "preset": "home", + "start": "fr 22:00" + }, + { + "end": "su 22:15", + "preset": "asleep", + "start": "fr 22:15" + }, + { + "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": "sa 08:00", + "preset": "asleep", + "start": "sa 06:30" + }, + { + "end": "sa 08:15", + "preset": "home", + "start": "sa 08:00" + }, + { + "end": "sa 09:30", + "preset": "asleep", + "start": "sa 08:15" + }, + { + "end": "sa 09:45", + "preset": "home", + "start": "sa 09:30" + }, + { + "end": "sa 11:00", + "preset": "asleep", + "start": "sa 09:45" + }, + { + "end": "sa 11:15", + "preset": "home", + "start": "sa 11:00" + }, + { + "end": "sa 12:45", + "preset": "asleep", + "start": "sa 11:15" + }, + { + "end": "sa 13:00", + "preset": "home", + "start": "sa 12:45" + }, + { + "end": "sa 14:30", + "preset": "asleep", + "start": "sa 13:00" + }, + { + "end": "sa 14:45", + "preset": "home", + "start": "sa 14:30" + }, + { + "end": "sa 16:00", + "preset": "asleep", + "start": "sa 14:45" + }, + { + "end": "sa 16:15", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "sa 18:00", + "preset": "asleep", + "start": "sa 16:15" + }, + { + "end": "sa 18:15", + "preset": "home", + "start": "sa 18:00" + }, + { + "end": "sa 20:15", + "preset": "asleep", + "start": "sa 18:15" + }, + { + "end": "sa 20:30", + "preset": "home", + "start": "sa 20:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 22:00" + }, + { + "end": "fr 00:00", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "mo 00:15", + "preset": "home", + "start": "su 00:00" + }, + { + "end": "mo 02:00", + "preset": "asleep", + "start": "su 00:15" + }, + { + "end": "mo 02:15", + "preset": "home", + "start": "su 02:00" + }, + { + "end": "mo 04:00", + "preset": "asleep", + "start": "su 02:15" + }, + { + "end": "th 04:00", + "preset": "home", + "start": "su 04:00" + }, + { + "end": "th 04:15", + "preset": "asleep", + "start": "su 04:15" + }, + { + "end": "mo 06:30", + "preset": "home", + "start": "su 06:00" + }, + { + "end": "mo 08:00", + "preset": "asleep", + "start": "su 06:30" + }, + { + "end": "mo 08:15", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 09:30", + "preset": "asleep", + "start": "su 08:15" + }, + { + "end": "mo 09:45", + "preset": "home", + "start": "su 09:30" + }, + { + "end": "mo 11:00", + "preset": "asleep", + "start": "su 09:45" + }, + { + "end": "mo 11:15", + "preset": "home", + "start": "su 11:00" + }, + { + "end": "mo 12:45", + "preset": "asleep", + "start": "su 11:15" + }, + { + "end": "mo 13:00", + "preset": "home", + "start": "su 12:45" + }, + { + "end": "mo 14:30", + "preset": "asleep", + "start": "su 13:00" + }, + { + "end": "mo 14:45", + "preset": "home", + "start": "su 14:30" + }, + { + "end": "mo 16:00", + "preset": "asleep", + "start": "su 14:45" + }, + { + "end": "mo 16:15", + "preset": "home", + "start": "su 16:00" + }, + { + "end": "mo 18:00", + "preset": "asleep", + "start": "su 16:15" + }, + { + "end": "mo 18:15", + "preset": "home", + "start": "su 18:00" + }, + { + "end": "mo 20:15", + "preset": "asleep", + "start": "su 18:15" + }, + { + "end": "mo 20:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "mo 22:00", + "preset": "asleep", + "start": "su 20:30" + }, + { + "end": "mo 22:15", + "preset": "home", + "start": "su 22:00" + }, + { + "end": "sa 00:00", + "preset": "asleep", + "start": "su 22:15" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 15.5 }, diff --git a/fixtures/anna_p1/data.json b/fixtures/anna_p1/data.json index 0a15747c5..aae0b4588 100644 --- a/fixtures/anna_p1/data.json +++ b/fixtures/anna_p1/data.json @@ -111,6 +111,16 @@ "model_id": "smile_thermo", "name": "Smile Anna P1", "notifications": {}, + "schedules": { + "898e6eaa068b44019ff9dc5c578881b2": { + "active": false, + "name": "Thermostat schedule", + "slots": [], + "zones": [ + "5b13651d79c4454684fd268850b1bff8" + ] + } + }, "sensors": { "outdoor_temperature": 11.8 }, diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index c18484a03..f8dcc6b56 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -84,6 +84,167 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "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" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "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": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index a1fee82a7..d0775b449 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -84,6 +84,167 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "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" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "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": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 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..c970eb1c7 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": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "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" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "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": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index c3d9fd07b..1524bbe6c 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -84,6 +84,169 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "51a1ee93578f426e9077933150816c9c": { + "active": true, + "name": "Standaard", + "slots": [ + { + "end": "mo 07:30", + "preset": "home", + "start": "mo 06:15" + }, + { + "end": "mo 18:15", + "preset": "away", + "start": "mo 07:30" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 18:15" + }, + { + "end": "tu 06:15", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 07:30", + "preset": "home", + "start": "tu 06:15" + }, + { + "end": "tu 18:15", + "preset": "away", + "start": "tu 07:30" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 18:15" + }, + { + "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" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 18:15" + }, + { + "end": "th 06:15", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 07:30", + "preset": "home", + "start": "th 06:15" + }, + { + "end": "th 18:15", + "preset": "away", + "start": "th 07:30" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 18:15" + }, + { + "end": "fr 06:15", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 07:30", + "preset": "home", + "start": "fr 06:15" + }, + { + "end": "fr 18:15", + "preset": "away", + "start": "fr 07:30" + }, + { + "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": "su 10:00", + "preset": "asleep", + "start": "sa 23:00" + }, + { + "end": "su 23:00", + "preset": "home", + "start": "su 10:00" + }, + { + "end": "mo 06:15", + "preset": "asleep", + "start": "su 23:00" + } + ], + "zones": [] + }, + "971128b62a0b4bd0880162ccdc4eb2c7": { + "active": true, + "name": "Thuiswerken", + "slots": [ + { + "end": "we 07:00", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "fr 07:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "tu 07:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "mo 07:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "th 07:00", + "preset": "home", + "start": "fr 07:00" + } + ], + "zones": [ + "eb5309212bf5407bb143e5bfa3b18aee" + ] + } + }, "sensors": { "outdoor_temperature": 7.44 }, diff --git a/fixtures/anna_without_boiler_fw441/data.json b/fixtures/anna_without_boiler_fw441/data.json index b774a7700..4feb32aee 100644 --- a/fixtures/anna_without_boiler_fw441/data.json +++ b/fixtures/anna_without_boiler_fw441/data.json @@ -84,6 +84,154 @@ "model_id": "smile_thermo", "name": "Smile Anna", "notifications": {}, + "schedules": { + "a36b5218575a42809dc3748377d160f9": { + "active": true, + "name": "Normaal", + "slots": [ + { + "end": "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" + }, + { + "end": "tu 08:00", + "setpoint": 18.0, + "start": "tu 06:30" + }, + { + "end": "tu 17:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:00", + "preset": "home", + "start": "tu 17:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 21:00" + }, + { + "end": "we 08:00", + "setpoint": 18.0, + "start": "we 06:30" + }, + { + "end": "we 17:00", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:00", + "preset": "home", + "start": "we 17:00" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 21:00" + }, + { + "end": "th 08:00", + "setpoint": 18.0, + "start": "th 06:30" + }, + { + "end": "th 17:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:00", + "preset": "home", + "start": "th 17:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 21:00" + }, + { + "end": "fr 08:00", + "setpoint": 18.0, + "start": "fr 06:30" + }, + { + "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": "su 21:00", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 21:00" + } + ], + "zones": [ + "c34c6864216446528e95d88985e714cc" + ] + }, + "d28edc40489b436e80888fa1490c77a5": { + "active": true, + "name": "Test", + "slots": [ + { + "end": "tu 01:45", + "preset": "home", + "start": "mo 02:00" + }, + { + "end": "mo 02:00", + "preset": "home", + "start": "tu 01:45" + } + ], + "zones": [] + } + }, "sensors": { "outdoor_temperature": 8.31 }, diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index ba13d7634..5e1777431 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": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "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": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "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": "mo 10:00", + "setpoint": 15.0, + "start": "sa 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": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "cooling", "sensors": { diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index 7fcbc3ed4..935f59c1d 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": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "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": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "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": "mo 10:00", + "setpoint": 15.0, + "start": "sa 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": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "heating", "sensors": { diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index 3af382e4e..54617b082 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": "mo 16:30", + "setpoint": 18.5, + "start": "mo 07:15" + }, + { + "end": "mo 21:00", + "preset": "home", + "start": "mo 16:30" + }, + { + "end": "tu 07:15", + "preset": "asleep", + "start": "mo 21:00" + }, + { + "end": "tu 16:30", + "setpoint": 18.5, + "start": "tu 07:15" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 16:30" + }, + { + "end": "we 07:15", + "preset": "asleep", + "start": "tu 21:30" + }, + { + "end": "we 16:30", + "setpoint": 18.5, + "start": "we 07:15" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 16:30" + }, + { + "end": "th 07:15", + "preset": "asleep", + "start": "we 21:30" + }, + { + "end": "th 16:30", + "setpoint": 18.5, + "start": "th 07:15" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 16:30" + }, + { + "end": "fr 07:15", + "preset": "asleep", + "start": "th 21:30" + }, + { + "end": "fr 16:30", + "setpoint": 18.5, + "start": "fr 07:15" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 16:30" + }, + { + "end": "sa 07:45", + "preset": "asleep", + "start": "fr 22:00" + }, + { + "end": "sa 16:00", + "setpoint": 18.5, + "start": "sa 07:45" + }, + { + "end": "sa 22:00", + "preset": "home", + "start": "sa 16:00" + }, + { + "end": "su 07:45", + "preset": "asleep", + "start": "sa 22:00" + }, + { + "end": "su 16:00", + "setpoint": 18.5, + "start": "su 07:45" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 16:00" + }, + { + "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": "tu 16:15", + "preset": "home", + "start": "mo 16:15" + }, + { + "end": "we 10:00", + "preset": "asleep", + "start": "tu 10:00" + }, + { + "end": "we 16:15", + "preset": "home", + "start": "tu 16:15" + }, + { + "end": "th 10:00", + "preset": "asleep", + "start": "we 10:00" + }, + { + "end": "th 16:15", + "preset": "home", + "start": "we 16:15" + }, + { + "end": "fr 10:00", + "preset": "asleep", + "start": "th 10:00" + }, + { + "end": "fr 16:15", + "preset": "home", + "start": "th 16:15" + }, + { + "end": "su 10:00", + "preset": "asleep", + "start": "fr 10:00" + }, + { + "end": "su 16:15", + "preset": "home", + "start": "fr 16:15" + }, + { + "end": "sa 16:15", + "preset": "asleep", + "start": "sa 10:00" + }, + { + "end": "mo 10:00", + "preset": "home", + "start": "sa 16:15" + }, + { + "end": "mo 16:15", + "preset": "asleep", + "start": "su 10:00" + }, + { + "end": "sa 10:00", + "preset": "home", + "start": "su 16:15" + } + ], + "zones": [] + }, + "e497d6c3572540008daa9d3ec9d500cd": { + "active": true, + "name": "Vakantie", + "slots": [ + { + "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": "mo 10:00", + "setpoint": 15.0, + "start": "sa 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": "tu 22:00", + "preset": "home", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 22:00" + }, + { + "end": "we 22:00", + "preset": "home", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 22:00" + }, + { + "end": "th 22:00", + "preset": "home", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 22:00" + } + ], + "zones": [] + } + }, "select_gateway_mode": "full", "select_regulation_mode": "off", "sensors": { diff --git a/fixtures/m_adam_multiple_devices_per_zone/data.json b/fixtures/m_adam_multiple_devices_per_zone/data.json index 0d9b61939..b8cc93cda 100644 --- a/fixtures/m_adam_multiple_devices_per_zone/data.json +++ b/fixtures/m_adam_multiple_devices_per_zone/data.json @@ -803,6 +803,524 @@ "warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device." } }, + "schedules": { + "2b5f3132692d444293854d9e0c61095f": { + "active": false, + "name": "Bios Schema met Film Avond", + "slots": [ + { + "end": "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": "sa 19:00", + "preset": "away", + "start": "sa 08:30" + }, + { + "end": "sa 22:15", + "preset": "home", + "start": "sa 19:00" + }, + { + "end": "su 08:30", + "preset": "asleep", + "start": "sa 22:15" + }, + { + "end": "su 22:15", + "preset": "away", + "start": "su 08:30" + }, + { + "end": "mo 07:30", + "preset": "asleep", + "start": "su 22:15" + } + ], + "zones": [] + }, + "3466ac8e063a454bb6be9481e8df92d4": { + "active": true, + "name": "CV Jessie", + "slots": [ + { + "end": "mo 21:30", + "setpoint": 15.0, + "start": "mo 07:15" + }, + { + "end": "tu 07:15", + "setpoint": 16.5, + "start": "mo 21:30" + }, + { + "end": "tu 21:30", + "setpoint": 15.0, + "start": "tu 07:15" + }, + { + "end": "we 07:15", + "setpoint": 16.5, + "start": "tu 21:30" + }, + { + "end": "we 21:30", + "setpoint": 15.0, + "start": "we 07:15" + }, + { + "end": "th 07:15", + "setpoint": 16.5, + "start": "we 21:30" + }, + { + "end": "th 21:30", + "setpoint": 15.0, + "start": "th 07:15" + }, + { + "end": "fr 07:15", + "setpoint": 16.5, + "start": "th 21:30" + }, + { + "end": "fr 22:30", + "setpoint": 15.0, + "start": "fr 07:15" + }, + { + "end": "sa 08:00", + "setpoint": 16.5, + "start": "fr 22:30" + }, + { + "end": "sa 22:30", + "setpoint": 15.0, + "start": "sa 08:00" + }, + { + "end": "su 08:00", + "setpoint": 16.5, + "start": "sa 22:30" + }, + { + "end": "su 21:30", + "setpoint": 15.0, + "start": "su 08:00" + }, + { + "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": "mo 20:15", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 21:30", + "preset": "home", + "start": "mo 20:15" + }, + { + "end": "tu 06:45", + "preset": "away", + "start": "mo 21:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:45" + }, + { + "end": "tu 20:15", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 21:30", + "preset": "home", + "start": "tu 20:15" + }, + { + "end": "we 06:45", + "preset": "away", + "start": "tu 21:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:45" + }, + { + "end": "we 20:15", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 21:30", + "preset": "home", + "start": "we 20:15" + }, + { + "end": "th 06:45", + "preset": "away", + "start": "we 21:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:45" + }, + { + "end": "th 20:15", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 21:30", + "preset": "home", + "start": "th 20:15" + }, + { + "end": "fr 06:45", + "preset": "away", + "start": "th 21:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:45" + }, + { + "end": "fr 20:30", + "preset": "away", + "start": "fr 08:00" + }, + { + "end": "fr 22:00", + "preset": "home", + "start": "fr 20:30" + }, + { + "end": "sa 09:00", + "preset": "away", + "start": "fr 22:00" + }, + { + "end": "sa 10:15", + "preset": "home", + "start": "sa 09:00" + }, + { + "end": "sa 20:30", + "preset": "away", + "start": "sa 10:15" + }, + { + "end": "sa 22:00", + "preset": "asleep", + "start": "sa 20:30" + }, + { + "end": "su 09:00", + "preset": "away", + "start": "sa 22:00" + }, + { + "end": "su 10:15", + "preset": "home", + "start": "su 09:00" + }, + { + "end": "su 20:15", + "preset": "away", + "start": "su 10:15" + }, + { + "end": "su 21:30", + "preset": "home", + "start": "su 20:15" + }, + { + "end": "mo 06:45", + "preset": "away", + "start": "su 21:30" + } + ], + "zones": [ + "08963fec7c53423ca5680aa4cb502c63" + ] + }, + "d31c0fb5b9814815a5fe4090fd8ec1e2": { + "active": true, + "name": "CV Roan", + "slots": [ + { + "end": "mo 19:30", + "preset": "away", + "start": "mo 07:00" + }, + { + "end": "tu 07:00", + "preset": "asleep", + "start": "mo 19:30" + }, + { + "end": "tu 19:30", + "preset": "away", + "start": "tu 07:00" + }, + { + "end": "we 07:00", + "preset": "asleep", + "start": "tu 19:30" + }, + { + "end": "we 19:30", + "preset": "away", + "start": "we 07:00" + }, + { + "end": "th 07:00", + "preset": "asleep", + "start": "we 19:30" + }, + { + "end": "th 19:30", + "preset": "away", + "start": "th 07:00" + }, + { + "end": "fr 07:00", + "preset": "asleep", + "start": "th 19:30" + }, + { + "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" + }, + { + "end": "mo 07:00", + "preset": "asleep", + "start": "su 19:30" + } + ], + "zones": [] + }, + "ee003247871e4e16882771ab715ddfa1": { + "active": true, + "name": "GF7 Woonkamer", + "slots": [ + { + "end": "mo 08:00", + "preset": "home", + "start": "mo 06:30" + }, + { + "end": "mo 15:00", + "preset": "away", + "start": "mo 08:00" + }, + { + "end": "mo 22:30", + "preset": "home", + "start": "mo 15:00" + }, + { + "end": "tu 06:30", + "preset": "asleep", + "start": "mo 22:30" + }, + { + "end": "tu 08:00", + "preset": "home", + "start": "tu 06:30" + }, + { + "end": "tu 14:00", + "preset": "away", + "start": "tu 08:00" + }, + { + "end": "tu 22:30", + "preset": "home", + "start": "tu 14:00" + }, + { + "end": "we 06:30", + "preset": "asleep", + "start": "tu 22:30" + }, + { + "end": "we 08:00", + "preset": "home", + "start": "we 06:30" + }, + { + "end": "we 11:30", + "preset": "away", + "start": "we 08:00" + }, + { + "end": "we 22:30", + "preset": "home", + "start": "we 11:30" + }, + { + "end": "th 06:30", + "preset": "asleep", + "start": "we 22:30" + }, + { + "end": "th 08:00", + "preset": "home", + "start": "th 06:30" + }, + { + "end": "th 15:00", + "preset": "away", + "start": "th 08:00" + }, + { + "end": "th 22:30", + "preset": "home", + "start": "th 15:00" + }, + { + "end": "fr 06:30", + "preset": "asleep", + "start": "th 22:30" + }, + { + "end": "fr 08:00", + "preset": "home", + "start": "fr 06:30" + }, + { + "end": "fr 11:30", + "preset": "away", + "start": "fr 08: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" + }, + { + "end": "su 22:30", + "preset": "home", + "start": "su 08:00" + }, + { + "end": "mo 06:30", + "preset": "asleep", + "start": "su 22:30" + } + ], + "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 a4f23c17b..6f63e63bc 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 28.2 }, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 6cd2a5524..32630fc00 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 10:15", + "preset": "home", + "start": "mo 07:00" + }, + { + "end": "mo 22:30", + "preset": "away", + "start": "mo 10:15" + }, + { + "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 07:00", + "preset": "asleep", + "start": "su 22:30" + } + ], + "zones": [ + "c784ee9fdab44e1395b8dee7d7a497d5" + ] + } + }, "sensors": { "outdoor_temperature": 28.2 }, diff --git a/plugwise/__init__.py b/plugwise/__init__.py index feb0b39d2..a5886a770 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 12c54b698..03753d8c0 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__) @@ -556,6 +557,27 @@ class ActuatorData(TypedDict, total=False): upper_bound: float +SCHEDULE_TAG: Final = "zone_preset_based_on_time_and_presence_with_override" +LEGACY_SCHEDULE_NAME: Final = "Thermostat schedule" +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_DAYS: Final = ("mo", "tu", "we", "th", "fr", "sa", "su") +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. @@ -613,6 +635,7 @@ class GwEntityData(TypedDict, total=False): # Schedules: available_schedules: list[str] select_schedule: str + schedules: dict[str, ScheduleData] climate_mode: str # Extra for Adam Master Thermostats diff --git a/plugwise/data.py b/plugwise/data.py index 56de13064..d1164c06d 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -59,6 +59,9 @@ def _update_gw_entities(self) -> None: if entity_id == self._gateway_id: mac_list = self._detect_low_batteries() self._add_or_update_notifications(entity_id, entity) + if schedules := self._schedule_rules(): + entity["schedules"] = schedules + self._count += len(schedules) is_battery_low = ( mac_list diff --git a/plugwise/helper.py b/plugwise/helper.py index 5ea6b73e5..dcf959d6d 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -5,6 +5,7 @@ from __future__ import annotations +from contextlib import suppress from typing import cast from plugwise.common import SmileCommon @@ -28,6 +29,10 @@ NONE, OFF, P1_MEASUREMENTS, + SCHEDULE_DAYS, + SCHEDULE_NUMBERS, + SCHEDULE_PERIOD, + SCHEDULE_TAG, TEMP_CELSIUS, THERMO_MATCHING, THERMOSTAT_CLASSES, @@ -38,6 +43,8 @@ ActuatorDataType, ActuatorType, GwEntityData, + ScheduleData, + ScheduleSlot, SensorType, ThermoLoc, ToggleNameType, @@ -83,6 +90,42 @@ def _own_rule_ids(rules: dict[str, dict[str, str]], loc_id: str) -> list[str]: return [rule_id for rule_id, data in rules.items() if data["location"] == loc_id] +def _slot_order(slot: ScheduleSlot) -> tuple[int, str]: + """Return a sort key that orders slots by their start in the week, Monday first.""" + start = slot.get("start") + if isinstance(start, str) and start[:2] in SCHEDULE_DAYS: + return SCHEDULE_DAYS.index(start[:2]), start[3:] + return len(SCHEDULE_DAYS), "" + + +def _slot_settings(then: etree.Element) -> ScheduleSlot: + """Return the settings of one schedule slot, from its element.""" + settings: ScheduleSlot = {} + for key, value in then.attrib.items(): + settings[key] = value + if key in SCHEDULE_NUMBERS: + # One unreadable slot must not break the whole update + with suppress(ValueError): + settings[key] = float(value) + + return settings + + +def _schedule_slot(when: etree.Element) -> ScheduleSlot: + """Return one time slot of a schedule, from its element.""" + slot: ScheduleSlot = {} + for key, value in when.attrib.items(): + # The time attribute is a week interval such as "[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: + slot.update(_slot_settings(then)) + + return slot + + class SmileHelper(SmileCommon): """The SmileHelper class.""" @@ -1041,7 +1084,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 @@ -1060,6 +1103,30 @@ 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 = [_schedule_slot(when) for when in rule.findall("directives/when")] + 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": sorted(slots, key=_slot_order), + } + + return schedules + def _thermostat_uri(self, loc_id: str) -> str: """Helper-function for smile.py: set_temperature(). diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index 22358bda6..4971dc6c4 100644 --- a/plugwise/legacy/helper.py +++ b/plugwise/legacy/helper.py @@ -20,6 +20,7 @@ FAKE_APPL, FAKE_LOC, HEATER_CENTRAL_MEASUREMENTS, + LEGACY_SCHEDULE_NAME, NONE, OFF, P1_LEGACY_MEASUREMENTS, @@ -412,8 +413,10 @@ def _schedules(self) -> tuple[list[str], str]: name: str | None = None search = self._domain_objects - if (result := search.find("./rule[name='Thermostat schedule']")) is not None: - name = "Thermostat schedule" + if ( + result := search.find(f"./rule[name='{LEGACY_SCHEDULE_NAME}']") + ) is not None: + name = LEGACY_SCHEDULE_NAME rule_id = result.get("id") log_type = "schedule_state" diff --git a/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index 841d95fb9..652b79434 100644 --- a/plugwise/legacy/smile.py +++ b/plugwise/legacy/smile.py @@ -12,6 +12,7 @@ from plugwise.constants import ( APPLIANCES, DOMAIN_OBJECTS, + LEGACY_SCHEDULE_NAME, LOCATIONS, LOGGER, MODULES, @@ -21,6 +22,7 @@ STATE_OFF, STATE_ON, GwEntityData, + ScheduleSlot, ThermoLoc, ) from plugwise.exceptions import ConnectionFailedError, DataMissingError, PlugwiseError @@ -28,6 +30,8 @@ from munch import Munch +NO_SCHEDULE_WRITES = "Plugwise: schedules cannot be changed on this gateway. Change them in the Plugwise app." + class SmileLegacyAPI(SmileLegacyData): """The Plugwise SmileLegacyAPI helper class for actual Plugwise legacy devices.""" @@ -155,6 +159,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()): @@ -201,18 +219,20 @@ async def set_schedule_state( # Handle no schedule-name / Off-schedule provided if name is None or name == OFF: - name = "Thermostat schedule" + name = LEGACY_SCHEDULE_NAME - schedule_rule_id: str | None = None - for rule in self._domain_objects.findall("rule"): - if rule.find("name").text == name: - schedule_rule_id = rule.get("id") - break - - if schedule_rule_id is None: + # A legacy gateway holds one schedule, and other rules carry a name too + rule = ( + self._domain_objects.find(f"./rule[name='{LEGACY_SCHEDULE_NAME}']") + if name == LEGACY_SCHEDULE_NAME + else None + ) + if rule is None: raise PlugwiseError( - f"Plugwise: no schedule with name {name} available" - ) # pragma: no cover + f"Plugwise: there is no schedule named {name}. Choose a name from the gateway's schedules." + ) + + schedule_rule_id = rule.get("id") new_state = "false" if state == STATE_ON: diff --git a/plugwise/smile.py b/plugwise/smile.py index 3337b0602..76e9ee9cb 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -8,6 +8,7 @@ import asyncio from collections.abc import Awaitable, Callable import datetime as dt +import re from typing import Any, cast from xml.sax.saxutils import quoteattr @@ -26,9 +27,14 @@ PRESET_SETPOINT_ATTRIBUTES, PRESET_TEMPERATURES, RULES, + SCHEDULE_NUMBERS, + SCHEDULE_POINT, + SCHEDULE_TAG, + SCHEDULE_WHEN_KEYS, STATE_OFF, STATE_ON, GwEntityData, + ScheduleSlot, SwitchType, ThermoLoc, ) @@ -46,6 +52,82 @@ def _xml_attrs(attrs: dict[str, str]) -> str: return " ".join(f"{key}={quoteattr(value)}" for key, value in attrs.items()) +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 ( + TypeError, + ValueError, + ): + return False + + +def _check_name(name: str) -> None: + """Raise when a schedule name would break the rule XML or a lookup by name.""" + # "]]>" ends the CDATA block the name is written in and '"' closes the XPath string + if "]]>" in name or '"' in name: + raise PlugwiseError( + "Plugwise: a schedule name cannot contain ']]>' or '\"'. Choose a name without them." + ) + + +def _check_slot(slot: ScheduleSlot) -> tuple[str, str]: + """Return the start and end of a schedule slot, raising when the slot is not valid.""" + start, end = slot.get("start"), slot.get("end") + if not ( + isinstance(start, str) + and isinstance(end, str) + and SCHEDULE_POINT.fullmatch(start) + and SCHEDULE_POINT.fullmatch(end) + ): + raise PlugwiseError( + f"Plugwise: schedule slot {slot} needs a start and end written as a day and time, such as 'mo 07:00'." + ) + for key in SCHEDULE_NUMBERS: + if key in slot and not _in_range(slot[key]): + raise PlugwiseError( + f"Plugwise: schedule {key} must be a number between {MIN_SETPOINT} and {MAX_SETPOINT}" + ) + if ( + "heating_setpoint" in slot + and "cooling_setpoint" in slot + and float(slot["heating_setpoint"]) > float(slot["cooling_setpoint"]) + ): + raise PlugwiseError( + f"Plugwise: schedule slot {slot} has a heating setpoint above its cooling setpoint. Lower the heating setpoint or raise the cooling setpoint." + ) + for key in slot: + if not XML_NAME.fullmatch(key): + raise PlugwiseError( + f"Plugwise: schedule slot key {key!r} is not valid. Use a name that" + " starts with a letter or '_' and holds only letters, digits," + " '_', '.' or '-'." + ) + + return start, end + + +def _slot_attrs( + slot: ScheduleSlot, start: str, end: str +) -> tuple[dict[str, str], dict[str, str]]: + """Return the and attributes of a schedule slot.""" + when: dict[str, str] = {"time": f"[{start},{end})"} + then: dict[str, str] = {} + for key, value in slot.items(): + if key in ("start", "end"): + continue + # The gateway reads presence from and the settings from + target = when if key in SCHEDULE_WHEN_KEYS else then + target[key] = str(value) + if not then: + raise PlugwiseError( + f"Plugwise: schedule slot {slot} has no setting. Add a preset or a setpoint." + ) + + return when, then + + def model_to_switch_items(model: str, state: str, switch: Munch) -> tuple[str, Munch]: """Translate state and switch attributes based on model name. @@ -66,6 +148,10 @@ 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.-]*") +RULE_ID = re.compile(r"[0-9a-f]{32}") + + class SmileAPI(SmileData): """The Plugwise SmileAPI helper class for actual Plugwise devices.""" @@ -303,6 +389,101 @@ async def set_preset_temperature( for then in self._domain_objects.findall(locator): then.set(attribute, value) + 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"{self._schedule_name(name, rule_id)}" + 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"{self._schedule_name(name)}" + f'