diff --git a/CHANGELOG.md b/CHANGELOG.md index a6d3133e8..f8b9c73f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## v1.6.0 + +- New Feature: implement collection of location/zone data: Plugwise Adam thermostat representations are zone-based instead of device-based. + Solution for HA Core issue [#130597](https://github.com/home-assistant/core/issues/130597) + ## v1.5.2 - Bugfix for Adam: improve recognition of unknown zigbee devices. diff --git a/fixtures/adam_heatpump_cooling/all_data.json b/fixtures/adam_heatpump_cooling/all_data.json index 6905438e8..608bbd6bb 100644 --- a/fixtures/adam_heatpump_cooling/all_data.json +++ b/fixtures/adam_heatpump_cooling/all_data.json @@ -1,5 +1,45 @@ { "devices": { + "04b15f6e884448288f811d29fb7b1b30": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer SJ", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "d3a276aeb3114a509bab1e4bf8c40348" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "0ca13e8176204ca7bf6f09de59f81c83": { "available": true, "binary_sensors": { @@ -40,19 +80,10 @@ "vendor": "Remeha B.V." }, "1053c8bbf8be43c6921742b146a625f1": { - "active_preset": "away", "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "cool", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -60,14 +91,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat BK", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "off", "sensors": { "battery": 55, "setpoint": 18.0, @@ -79,12 +102,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A17" }, @@ -108,6 +125,46 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A05" }, + "20e735858f8146cead98b873177a4f99": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer DB", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "47e2c550a33846b680725aa3fb229473" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "2e0fc4db2a6d4cbeb7cf786143543961": { "available": true, "dev_class": "valve_actuator_plug", @@ -169,16 +226,7 @@ "zigbee_mac_address": "ABCD012345670A18" }, "47e2c550a33846b680725aa3fb229473": { - "active_preset": "away", "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "climate_mode": "cool", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -186,14 +234,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat DB", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "off", "sensors": { "setpoint": 18.0, "temperature": 22.0 @@ -204,14 +244,47 @@ "setpoint": 0.0, "upper_bound": 2.0 }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A20" + }, + "5cc21042f87f4b4c94ccb5537c47a53f": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Badkamer 2", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 0.0, + "temperature": 21.9 + }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, - "setpoint": 18.0, + "setpoint": 20.5, "upper_bound": 99.9 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A20" + "thermostats": { + "primary": [ + "f04c985c11ad4848b8fcd710343f9dcf" + ], + "secondary": [] + }, + "vendor": "Plugwise" }, "5ead63c65e5f44e7870ba2bd680ceb9e": { "available": true, @@ -266,16 +339,7 @@ "zigbee_mac_address": "ABCD012345670101" }, "7fda9f84f01342f8afe9ebbbbff30c0f": { - "active_preset": "away", "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "climate_mode": "cool", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -283,14 +347,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat JM", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "off", "sensors": { "setpoint": 18.0, "temperature": 20.0 @@ -301,12 +357,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A01" }, @@ -350,54 +400,93 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A10" }, - "96714ad90fc948bcbcb5021c4b9f5ae9": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "e39529c79ab54fda9bed26cfc0447546", - "model": "Plug", - "model_id": "160-01", - "name": "Smart Plug JM", + "8cf650a4c10c44819e426bed406aec34": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Badkamer 1", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", "sensors": { "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "temperature": 21.5 }, - "switches": { - "relay": false + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 99.9 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A03" + "thermostats": { + "primary": [ + "eac5db95d97241f6b17790897847ccf5" + ], + "secondary": [] + }, + "vendor": "Plugwise" }, - "a03b6e8e76dd4646af1a77c31dd9370c": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", - "model": "Plug", - "model_id": "160-01", - "name": "Smart Plug RB", + "93ac3f7bf25342f58cbb77c4a99ac0b3": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer RB", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", "sensors": { "electricity_consumed": 3.13, - "electricity_consumed_interval": 0.77, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "temperature": 20.7 }, - "switches": { - "relay": false + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 17.0, + "upper_bound": 99.9 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A08" + "thermostats": { + "primary": [ + "c4ed311d54e341f58b4cdd201d1fde7e" + ], + "secondary": [] + }, + "vendor": "Plugwise" }, - "bbcffa48019f4b09b8368bbaf9559e68": { + "96714ad90fc948bcbcb5021c4b9f5ae9": { "available": true, "dev_class": "valve_actuator_plug", "firmware": "2020-05-13T02:00:00+02:00", - "location": "8cf650a4c10c44819e426bed406aec34", + "location": "e39529c79ab54fda9bed26cfc0447546", "model": "Plug", "model_id": "160-01", - "name": "Smart Plug BK1", + "name": "Smart Plug JM", "sensors": { "electricity_consumed": 0.0, "electricity_consumed_interval": 0.0, @@ -408,11 +497,10 @@ "relay": false }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A16" + "zigbee_mac_address": "ABCD012345670A03" }, - "beb32da072274e698146db8b022f3c36": { + "9a27714b970547ee9a6bdadc2b815ad5": { "active_preset": "away", - "available": true, "available_schedules": [ "Opstaan weekdag", "Werkdag schema", @@ -421,13 +509,9 @@ ], "climate_mode": "cool", "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "9a27714b970547ee9a6bdadc2b815ad5", - "model": "Lisa", - "model_id": "158-01", - "name": "Thermostaat SQ", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer SQ", "preset_modes": [ "no_frost", "vacation", @@ -437,42 +521,57 @@ ], "select_schedule": "off", "sensors": { - "setpoint": 18.5, + "electricity_consumed": 0.0, + "electricity_produced": 0.0, "temperature": 21.4 }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.0, - "upper_bound": 2.0 - }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, "setpoint": 18.5, "upper_bound": 99.9 }, + "thermostats": { + "primary": [ + "beb32da072274e698146db8b022f3c36" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "a03b6e8e76dd4646af1a77c31dd9370c": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug RB", + "sensors": { + "electricity_consumed": 3.13, + "electricity_consumed_interval": 0.77, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A07" + "zigbee_mac_address": "ABCD012345670A08" }, - "c4ed311d54e341f58b4cdd201d1fde7e": { + "a562019b0b1f47a4bde8ebe3dbe3e8a9": { "active_preset": "away", - "available": true, "available_schedules": [ "Opstaan weekdag", "Werkdag schema", "Weekend", "off" ], - "climate_mode": "cool", + "climate_mode": "auto", "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", - "model": "Lisa", - "model_id": "158-01", - "name": "Thermostaat RB", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Keuken", "preset_modes": [ "no_frost", "vacation", @@ -480,27 +579,27 @@ "home", "asleep" ], - "select_schedule": "off", + "select_schedule": "Werkdag schema", "sensors": { - "setpoint": 17.0, - "temperature": 20.7 - }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.0, - "upper_bound": 2.0 + "electricity_consumed": 2.13, + "electricity_produced": 0.0, + "temperature": 22.5 }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, - "setpoint": 17.0, + "setpoint": 21.5, "upper_bound": 99.9 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A04" + "thermostats": { + "primary": [ + "ea8372c0e3ad4622ad45a041d02425f5" + ], + "secondary": [] + }, + "vendor": "Plugwise" }, - "ca79d23ae0094120b877558734cff85c": { + "b52908550469425b812c87f766fe5303": { "active_preset": "away", "available_schedules": [ "Opstaan weekdag", @@ -508,13 +607,11 @@ "Weekend", "off" ], - "climate_mode": "auto", + "climate_mode": "cool", "control_state": "off", - "dev_class": "thermostat", - "location": "fa5fa6b34f6b40a0972988b20e888ed4", - "model": "ThermoTouch", - "model_id": "143.1", - "name": "Thermostaat WK", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bijkeuken", "preset_modes": [ "no_frost", "vacation", @@ -522,30 +619,104 @@ "home", "asleep" ], - "select_schedule": "Werkdag schema", + "select_schedule": "off", "sensors": { - "setpoint": 21.5, - "temperature": 22.5 + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 18.8 }, "thermostat": { - "lower_bound": 1.0, + "lower_bound": 0.0, "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "1053c8bbf8be43c6921742b146a625f1" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "bbcffa48019f4b09b8368bbaf9559e68": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "8cf650a4c10c44819e426bed406aec34", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug BK1", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A16" + }, + "beb32da072274e698146db8b022f3c36": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "9a27714b970547ee9a6bdadc2b815ad5", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat SQ", + "sensors": { + "setpoint": 18.5, + "temperature": 21.4 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c4ed311d54e341f58b4cdd201d1fde7e": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat RB", + "sensors": { + "setpoint": 17.0, + "temperature": 20.7 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" + }, + "ca79d23ae0094120b877558734cff85c": { + "dev_class": "thermostat", + "location": "fa5fa6b34f6b40a0972988b20e888ed4", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Thermostaat WK", + "sensors": { "setpoint": 21.5, - "upper_bound": 35.0 + "temperature": 22.5 }, "vendor": "Plugwise" }, "d3a276aeb3114a509bab1e4bf8c40348": { - "active_preset": "away", "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "climate_mode": "cool", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -553,14 +724,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat SJ", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "off", "sensors": { "setpoint": 20.5, "temperature": 22.6 @@ -571,29 +734,54 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A13" }, - "ea8372c0e3ad4622ad45a041d02425f5": { + "e39529c79ab54fda9bed26cfc0447546": { "active_preset": "away", - "available": true, "available_schedules": [ "Opstaan weekdag", "Werkdag schema", "Weekend", "off" ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer JM", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 20.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "7fda9f84f01342f8afe9ebbbbff30c0f" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ea8372c0e3ad4622ad45a041d02425f5": { + "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -601,14 +789,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat KK", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "Werkdag schema", "sensors": { "battery": 53, "setpoint": 21.5, @@ -620,26 +800,11 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 21.5, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A02" }, "eac5db95d97241f6b17790897847ccf5": { - "active_preset": "away", "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "climate_mode": "auto", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -647,14 +812,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Thermostaat BK1", - "preset_modes": [ - "no_frost", - "vacation", - "away", - "home", - "asleep" - ], - "select_schedule": "Werkdag schema", "sensors": { "setpoint": 20.5, "temperature": 21.5 @@ -665,18 +822,33 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A09" }, "f04c985c11ad4848b8fcd710343f9dcf": { - "active_preset": "away", "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "5cc21042f87f4b4c94ccb5537c47a53f", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat BK2", + "sensors": { + "setpoint": 20.5, + "temperature": 21.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" + }, + "fa5fa6b34f6b40a0972988b20e888ed4": { + "active_preset": "away", "available_schedules": [ "Opstaan weekdag", "Werkdag schema", @@ -685,13 +857,9 @@ ], "climate_mode": "auto", "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "5cc21042f87f4b4c94ccb5537c47a53f", - "model": "Lisa", - "model_id": "158-01", - "name": "Thermostaat BK2", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", "preset_modes": [ "no_frost", "vacation", @@ -701,30 +869,30 @@ ], "select_schedule": "Werkdag schema", "sensors": { - "setpoint": 20.5, - "temperature": 21.9 - }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.0, - "upper_bound": 2.0 + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.5 }, "thermostat": { - "lower_bound": 0.0, + "lower_bound": 1.0, "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 + "setpoint": 21.5, + "upper_bound": 35.0 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A11" + "thermostats": { + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], + "secondary": [] + }, + "vendor": "Plugwise" } }, "gateway": { "cooling_present": true, "gateway_id": "7d97fc3117784cfdafe347bcedcbbbcb", "heater_id": "0ca13e8176204ca7bf6f09de59f81c83", - "item_count": 439, + "item_count": 497, "notifications": {}, "reboot": true, "smile_name": "Adam" diff --git a/fixtures/adam_jip/all_data.json b/fixtures/adam_jip/all_data.json index bbedf1527..2d58bb730 100644 --- a/fixtures/adam_jip/all_data.json +++ b/fixtures/adam_jip/all_data.json @@ -1,13 +1,76 @@ { "devices": { - "1346fbd8498d4dbcab7e18d51b771f3d": { + "06aecb3d00354375924f50c47af36bd2": { "active_preset": "no_frost", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 24.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "1346fbd8498d4dbcab7e18d51b771f3d" + ], + "secondary": [ + "356b65335e274d769c338223e7af9c33" + ] + }, + "vendor": "Plugwise" + }, + "13228dab8ce04617af318a2888b3c548": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 27.4 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.01, + "setpoint": 9.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": [ + "f61f1a2535f54f52ad006a3d18e459ca" + ], + "secondary": [ + "833de10f269c4deab58fb9df69901b4e" + ] + }, + "vendor": "Plugwise" + }, + "1346fbd8498d4dbcab7e18d51b771f3d": { "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -15,13 +78,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Slaapkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 92, "setpoint": 13.0, @@ -33,18 +89,12 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A03" }, "1da4d325838e4ad8aac12177214505c9": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "d58fec52899f4f1c92e4f8fad6d8c48c", @@ -68,7 +118,7 @@ }, "356b65335e274d769c338223e7af9c33": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "06aecb3d00354375924f50c47af36bd2", @@ -108,13 +158,10 @@ "zigbee_mac_address": "ABCD012345670A06" }, "6f3e9d7084214c21b9dfa46f6eeb8700": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -122,13 +169,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Kinderkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 79, "setpoint": 13.0, @@ -140,18 +180,12 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A02" }, "833de10f269c4deab58fb9df69901b4e": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "13228dab8ce04617af318a2888b3c548", @@ -174,13 +208,10 @@ "zigbee_mac_address": "ABCD012345670A09" }, "a6abc6a129ee499c88a4d420cc413b47": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -188,13 +219,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Logeerkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 80, "setpoint": 13.0, @@ -206,12 +230,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A01" }, @@ -246,9 +264,42 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670101" }, + "d27aede973b54be484f6842d1b2802ad": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Kinderkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "6f3e9d7084214c21b9dfa46f6eeb8700" + ], + "secondary": [ + "d4496250d0e942cfa7aea3476e9070d5" + ] + }, + "vendor": "Plugwise" + }, "d4496250d0e942cfa7aea3476e9070d5": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "d27aede973b54be484f6842d1b2802ad", @@ -270,6 +321,39 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A04" }, + "d58fec52899f4f1c92e4f8fad6d8c48c": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Logeerkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "a6abc6a129ee499c88a4d420cc413b47" + ], + "secondary": [ + "1da4d325838e4ad8aac12177214505c9" + ] + }, + "vendor": "Plugwise" + }, "e4684553153b44afbef2200885f379dc": { "available": true, "binary_sensors": { @@ -307,13 +391,10 @@ "vendor": "Remeha B.V." }, "f61f1a2535f54f52ad006a3d18e459ca": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermometer", "firmware": "2020-09-01T02:00:00+02:00", "hardware": "1", @@ -321,13 +402,6 @@ "model": "Jip", "model_id": "168-01", "name": "Woonkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 100, "humidity": 56.2, @@ -340,12 +414,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.01, - "setpoint": 9.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A08" } @@ -354,7 +422,7 @@ "cooling_present": false, "gateway_id": "b5c2386c6f6342669e50fe49dd05b188", "heater_id": "e4684553153b44afbef2200885f379dc", - "item_count": 228, + "item_count": 244, "notifications": {}, "reboot": true, "smile_name": "Adam" diff --git a/fixtures/adam_multiple_devices_per_zone/all_data.json b/fixtures/adam_multiple_devices_per_zone/all_data.json index f725a86c2..fa3b9ef6c 100644 --- a/fixtures/adam_multiple_devices_per_zone/all_data.json +++ b/fixtures/adam_multiple_devices_per_zone/all_data.json @@ -21,6 +21,89 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A15" }, + "08963fec7c53423ca5680aa4cb502c63": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Badkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Badkamer Schema", + "sensors": { + "temperature": 18.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 14.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "f1fee6043d3642a9b0a65297455f008e", + "680423ff840043738f42cc7f1ff97a36" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "12493538af164a409c6a1c79e38afe1c": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bios", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "df4a4a8169904cdb9c03d61a21f42140" + ], + "secondary": [ + "a2c3583e0a6349358998b760cea82d2a" + ] + }, + "vendor": "Plugwise" + }, "21f2b542c49845e6bb416884c55778d6": { "available": true, "dev_class": "game_console_plug", @@ -42,6 +125,45 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A12" }, + "446ac08dd04d4eff8ac57489757b7314": { + "active_preset": "no_frost", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Garage", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "temperature": 15.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 5.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "e7693eb9582644e5b865dba8d4447cf1" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "4a810418d5394b3f82727340b91ba740": { "available": true, "dev_class": "router_plug", @@ -89,13 +211,13 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "08963fec7c53423ca5680aa4cb502c63", "model": "Tom/Floor", "model_id": "106-03", - "name": "Thermostatic Radiator Badkamer", + "name": "Thermostatic Radiator Badkamer 1", "sensors": { "battery": 51, "setpoint": 14.0, @@ -113,20 +235,10 @@ "zigbee_mac_address": "ABCD012345670A17" }, "6a3bf693d05e48e0b460c815a4fdd09d": { - "active_preset": "asleep", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -134,14 +246,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Thermostat Jessie", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "CV Jessie", "sensors": { "battery": 37, "setpoint": 15.0, @@ -153,12 +257,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 15.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A03" }, @@ -182,6 +280,47 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A05" }, + "82fa13f017d240daa0d0ea1775420f24": { + "active_preset": "asleep", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Jessie", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "CV Jessie", + "sensors": { + "temperature": 17.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 15.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "6a3bf693d05e48e0b460c815a4fdd09d" + ], + "secondary": [ + "d3da73bde12a47d5a6b8f9dad971f2ec" + ] + }, + "vendor": "Plugwise" + }, "90986d591dcd426cae3ec3e8111ff730": { "binary_sensors": { "heating_state": true @@ -222,7 +361,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "12493538af164a409c6a1c79e38afe1c", @@ -247,7 +386,7 @@ }, "b310b72a0e354bfab43089919b9a88bf": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "c50f167537524366a5af7aa3942feb1e", @@ -270,20 +409,10 @@ "zigbee_mac_address": "ABCD012345670A02" }, "b59bcebaf94b499ea7d46e4a66fb62d8": { - "active_preset": "home", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-08-02T02:00:00+02:00", "hardware": "255", @@ -291,14 +420,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa WK", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "GF7 Woonkamer", "sensors": { "battery": 34, "setpoint": 21.5, @@ -310,14 +431,51 @@ "setpoint": 0.0, "upper_bound": 2.0 }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c50f167537524366a5af7aa3942feb1e": { + "active_preset": "home", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "GF7 Woonkamer", + "sensors": { + "electricity_consumed": 35.6, + "electricity_produced": 0.0, + "temperature": 20.9 + }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, "setpoint": 21.5, - "upper_bound": 99.9 + "upper_bound": 100.0 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A07" + "thermostats": { + "primary": [ + "b59bcebaf94b499ea7d46e4a66fb62d8" + ], + "secondary": [ + "b310b72a0e354bfab43089919b9a88bf" + ] + }, + "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { "available": true, @@ -345,7 +503,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "82fa13f017d240daa0d0ea1775420f24", @@ -369,20 +527,10 @@ "zigbee_mac_address": "ABCD012345670A10" }, "df4a4a8169904cdb9c03d61a21f42140": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -390,14 +538,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa Bios", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "off", "sensors": { "battery": 67, "setpoint": 13.0, @@ -409,30 +549,14 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A06" }, "e7693eb9582644e5b865dba8d4447cf1": { - "active_preset": "no_frost", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", @@ -440,14 +564,6 @@ "model": "Tom/Floor", "model_id": "106-03", "name": "CV Kraan Garage", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "off", "sensors": { "battery": 68, "setpoint": 5.5, @@ -461,45 +577,21 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 5.5, - "upper_bound": 100.0 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A11" }, "f1fee6043d3642a9b0a65297455f008e": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", - "dev_class": "zone_thermostat", + "dev_class": "thermostatic_radiator_valve", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", "location": "08963fec7c53423ca5680aa4cb502c63", "model": "Lisa", "model_id": "158-01", - "name": "Zone Thermostat Badkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "Badkamer Schema", + "name": "Thermostatic Radiator Badkamer 2", "sensors": { "battery": 92, "setpoint": 14.0, @@ -511,12 +603,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 14.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A08" }, @@ -544,7 +630,7 @@ "cooling_present": false, "gateway_id": "fe799307f1624099878210aa0b9f1475", "heater_id": "90986d591dcd426cae3ec3e8111ff730", - "item_count": 340, + "item_count": 364, "notifications": { "af82e4ccf9c548528166d38e560662a4": { "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." diff --git a/fixtures/adam_onoff_cooling_fake_firmware/all_data.json b/fixtures/adam_onoff_cooling_fake_firmware/all_data.json index d5c121418..79e1109f8 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/all_data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/all_data.json @@ -69,6 +69,18 @@ "zigbee_mac_address": "ABCD012345670101" }, "ca79d23ae0094120b877558734cff85c": { + "dev_class": "thermostat", + "location": "fa5fa6b34f6b40a0972988b20e888ed4", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Thermostaat WK", + "sensors": { + "setpoint": 21.5, + "temperature": 22.5 + }, + "vendor": "Plugwise" + }, + "fa5fa6b34f6b40a0972988b20e888ed4": { "active_preset": "away", "available_schedules": [ "Opstaan weekdag", @@ -78,11 +90,9 @@ ], "climate_mode": "auto", "control_state": "off", - "dev_class": "thermostat", - "location": "fa5fa6b34f6b40a0972988b20e888ed4", - "model": "ThermoTouch", - "model_id": "143.1", - "name": "Thermostaat WK", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", "preset_modes": [ "no_frost", "vacation", @@ -92,7 +102,8 @@ ], "select_schedule": "Werkdag schema", "sensors": { - "setpoint": 21.5, + "electricity_consumed": 0.0, + "electricity_produced": 0.0, "temperature": 22.5 }, "thermostat": { @@ -101,6 +112,12 @@ "setpoint": 21.5, "upper_bound": 35.0 }, + "thermostats": { + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], + "secondary": [] + }, "vendor": "Plugwise" } }, @@ -108,7 +125,7 @@ "cooling_present": true, "gateway_id": "7d97fc3117784cfdafe347bcedcbbbcb", "heater_id": "0ca13e8176204ca7bf6f09de59f81c83", - "item_count": 58, + "item_count": 64, "notifications": {}, "reboot": true, "smile_name": "Adam" diff --git a/fixtures/adam_plus_anna/all_data.json b/fixtures/adam_plus_anna/all_data.json index ae4f10dbb..54288e2c6 100644 --- a/fixtures/adam_plus_anna/all_data.json +++ b/fixtures/adam_plus_anna/all_data.json @@ -1,5 +1,42 @@ { "devices": { + "009490cc2f674ce6b576863fbb64f867": { + "active_preset": "home", + "available_schedules": [ + "Weekschema", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Weekschema", + "sensors": { + "electricity_consumed": 74.2, + "electricity_produced": 0.0, + "temperature": 20.5 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ee62cad889f94e8ca3d09021f03a660b" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "2743216f626f43948deec1f7ab3b3d70": { "available": false, "binary_sensors": { @@ -66,35 +103,15 @@ "zigbee_mac_address": "ABCD012345670101" }, "ee62cad889f94e8ca3d09021f03a660b": { - "active_preset": "home", - "available_schedules": [ - "Weekschema", - "off" - ], - "climate_mode": "auto", "dev_class": "thermostat", "location": "009490cc2f674ce6b576863fbb64f867", "model": "ThermoTouch", "model_id": "143.1", "name": "Anna", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "Weekschema", "sensors": { "setpoint": 20.5, "temperature": 20.5 }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 35.0 - }, "vendor": "Plugwise" }, "f2be121e4a9345ac83c6e99ed89a98be": { @@ -121,7 +138,7 @@ "cooling_present": false, "gateway_id": "b128b4bbbd1f47e9bf4d756e8fb5ee94", "heater_id": "2743216f626f43948deec1f7ab3b3d70", - "item_count": 73, + "item_count": 79, "notifications": { "6fb89e35caeb4b1cb275184895202d84": { "error": "There is no OpenTherm communication with the boiler." diff --git a/fixtures/adam_plus_anna_new/all_data.json b/fixtures/adam_plus_anna_new/all_data.json index 4727e8967..5aafe2fb7 100644 --- a/fixtures/adam_plus_anna_new/all_data.json +++ b/fixtures/adam_plus_anna_new/all_data.json @@ -42,7 +42,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "f871b8c4d63549319221e294e4f88074", @@ -145,39 +145,15 @@ "zigbee_mac_address": "000D6F000D13CB6F" }, "ad4838d7d35c4d6ea796ee12ae5aedf8": { - "active_preset": "home", - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "location": "f2bf9048bef64cc5b6d5110154e33c81", "model": "ThermoTouch", "model_id": "143.1", "name": "Anna", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "Weekschema", "sensors": { "setpoint": 18.5, "temperature": 18.4 }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 18.5, - "upper_bound": 35.0 - }, "vendor": "Plugwise" }, "da224107914542988a88561b4452b0f6": { @@ -212,20 +188,10 @@ "zigbee_mac_address": "000D6F000D5A168D" }, "e2f4322d57924fa090fbbc48b3a140dc": { - "active_preset": "home", "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], "binary_sensors": { "low_battery": true }, - "climate_mode": "auto", - "control_state": "preheating", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -233,14 +199,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Lisa Badkamer", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "Badkamer", "sensors": { "battery": 14, "setpoint": 18.0, @@ -252,12 +210,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "000D6F000C869B61" }, @@ -271,14 +223,99 @@ "name": "Test", "switches": { "relay": true - } + }, + "vendor": "Plugwise" + }, + "f2bf9048bef64cc5b6d5110154e33c81": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "auto", + "control_state": "heating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Weekschema", + "sensors": { + "electricity_consumed": 149.9, + "electricity_produced": 0.0, + "temperature": 18.4 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 18.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "f871b8c4d63549319221e294e4f88074": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "auto", + "control_state": "preheating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bathroom", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Badkamer", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "e2f4322d57924fa090fbbc48b3a140dc" + ], + "secondary": [ + "1772a4ea304041adb83f357b751341ff" + ] + }, + "vendor": "Plugwise" } }, "gateway": { "cooling_present": false, "gateway_id": "da224107914542988a88561b4452b0f6", "heater_id": "056ee145a816487eaa69243c3280f8bf", - "item_count": 165, + "item_count": 177, "notifications": {}, "reboot": true, "smile_name": "Adam" diff --git a/fixtures/adam_zone_per_device/all_data.json b/fixtures/adam_zone_per_device/all_data.json index c6172f46c..7acb1b05b 100644 --- a/fixtures/adam_zone_per_device/all_data.json +++ b/fixtures/adam_zone_per_device/all_data.json @@ -21,6 +21,90 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A15" }, + "08963fec7c53423ca5680aa4cb502c63": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Badkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Badkamer Schema", + "sensors": { + "temperature": 18.8 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 14.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "f1fee6043d3642a9b0a65297455f008e" + ], + "secondary": [ + "680423ff840043738f42cc7f1ff97a36" + ] + }, + "vendor": "Plugwise" + }, + "12493538af164a409c6a1c79e38afe1c": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bios", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "df4a4a8169904cdb9c03d61a21f42140" + ], + "secondary": [ + "a2c3583e0a6349358998b760cea82d2a" + ] + }, + "vendor": "Plugwise" + }, "21f2b542c49845e6bb416884c55778d6": { "available": true, "dev_class": "game_console_plug", @@ -42,6 +126,45 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A12" }, + "446ac08dd04d4eff8ac57489757b7314": { + "active_preset": "no_frost", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Garage", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "temperature": 15.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 5.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "e7693eb9582644e5b865dba8d4447cf1" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "4a810418d5394b3f82727340b91ba740": { "available": true, "dev_class": "router_plug", @@ -89,7 +212,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "08963fec7c53423ca5680aa4cb502c63", @@ -113,20 +236,10 @@ "zigbee_mac_address": "ABCD012345670A17" }, "6a3bf693d05e48e0b460c815a4fdd09d": { - "active_preset": "asleep", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -134,14 +247,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Thermostat Jessie", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "CV Jessie", "sensors": { "battery": 37, "setpoint": 16.0, @@ -153,12 +258,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 16.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A03" }, @@ -182,6 +281,47 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A05" }, + "82fa13f017d240daa0d0ea1775420f24": { + "active_preset": "asleep", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Jessie", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "CV Jessie", + "sensors": { + "temperature": 17.1 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 16.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "6a3bf693d05e48e0b460c815a4fdd09d" + ], + "secondary": [ + "d3da73bde12a47d5a6b8f9dad971f2ec" + ] + }, + "vendor": "Plugwise" + }, "90986d591dcd426cae3ec3e8111ff730": { "binary_sensors": { "heating_state": true @@ -222,7 +362,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "12493538af164a409c6a1c79e38afe1c", @@ -247,7 +387,7 @@ }, "b310b72a0e354bfab43089919b9a88bf": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "c50f167537524366a5af7aa3942feb1e", @@ -270,20 +410,10 @@ "zigbee_mac_address": "ABCD012345670A02" }, "b59bcebaf94b499ea7d46e4a66fb62d8": { - "active_preset": "home", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-08-02T02:00:00+02:00", "hardware": "255", @@ -291,14 +421,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa WK", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "GF7 Woonkamer", "sensors": { "battery": 34, "setpoint": 21.5, @@ -310,14 +432,51 @@ "setpoint": 0.0, "upper_bound": 2.0 }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c50f167537524366a5af7aa3942feb1e": { + "active_preset": "home", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "GF7 Woonkamer", + "sensors": { + "electricity_consumed": 35.8, + "electricity_produced": 0.0, + "temperature": 21.1 + }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, "setpoint": 21.5, - "upper_bound": 99.9 + "upper_bound": 100.0 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A07" + "thermostats": { + "primary": [ + "b59bcebaf94b499ea7d46e4a66fb62d8" + ], + "secondary": [ + "b310b72a0e354bfab43089919b9a88bf" + ] + }, + "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { "available": true, @@ -345,7 +504,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "82fa13f017d240daa0d0ea1775420f24", @@ -369,20 +528,10 @@ "zigbee_mac_address": "ABCD012345670A10" }, "df4a4a8169904cdb9c03d61a21f42140": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -390,14 +539,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa Bios", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "off", "sensors": { "battery": 67, "setpoint": 13.0, @@ -409,30 +550,14 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A06" }, "e7693eb9582644e5b865dba8d4447cf1": { - "active_preset": "no_frost", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", @@ -440,14 +565,6 @@ "model": "Tom/Floor", "model_id": "106-03", "name": "CV Kraan Garage", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "off", "sensors": { "battery": 68, "setpoint": 5.5, @@ -461,30 +578,14 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 5.5, - "upper_bound": 100.0 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A11" }, "f1fee6043d3642a9b0a65297455f008e": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -492,14 +593,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Thermostat Badkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "Badkamer Schema", "sensors": { "battery": 92, "setpoint": 14.0, @@ -511,12 +604,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 14.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A08" }, @@ -544,7 +631,7 @@ "cooling_present": false, "gateway_id": "fe799307f1624099878210aa0b9f1475", "heater_id": "90986d591dcd426cae3ec3e8111ff730", - "item_count": 340, + "item_count": 364, "notifications": { "af82e4ccf9c548528166d38e560662a4": { "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." diff --git a/fixtures/m_adam_cooling/all_data.json b/fixtures/m_adam_cooling/all_data.json index 90d9ab8d9..f594f07bb 100644 --- a/fixtures/m_adam_cooling/all_data.json +++ b/fixtures/m_adam_cooling/all_data.json @@ -31,7 +31,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "f871b8c4d63549319221e294e4f88074", @@ -40,6 +40,7 @@ "name": "Tom Badkamer", "sensors": { "battery": 99, + "setpoint": 18.0, "temperature": 21.6, "temperature_difference": -0.2, "valve_position": 100 @@ -54,40 +55,16 @@ "zigbee_mac_address": "000D6F000C8FF5EE" }, "ad4838d7d35c4d6ea796ee12ae5aedf8": { - "active_preset": "home", "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], - "climate_mode": "cool", - "control_state": "cooling", "dev_class": "thermostat", "location": "f2bf9048bef64cc5b6d5110154e33c81", "model": "ThermoTouch", "model_id": "143.1", "name": "Anna", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "off", "sensors": { "setpoint": 23.5, "temperature": 25.8 }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 23.5, - "upper_bound": 35.0 - }, "vendor": "Plugwise" }, "da224107914542988a88561b4452b0f6": { @@ -123,20 +100,10 @@ "zigbee_mac_address": "000D6F000D5A168D" }, "e2f4322d57924fa090fbbc48b3a140dc": { - "active_preset": "home", "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], "binary_sensors": { "low_battery": true }, - "climate_mode": "auto", - "control_state": "preheating", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -144,14 +111,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Lisa Badkamer", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "Badkamer", "sensors": { "battery": 14, "setpoint": 23.5, @@ -163,12 +122,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 25.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "000D6F000C869B61" }, @@ -182,7 +135,92 @@ "name": "Test", "switches": { "relay": true - } + }, + "vendor": "Plugwise" + }, + "f2bf9048bef64cc5b6d5110154e33c81": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "cool", + "control_state": "cooling", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 149.9, + "electricity_produced": 0.0, + "temperature": 25.8 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 23.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "f871b8c4d63549319221e294e4f88074": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "cool", + "control_state": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bathroom", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Badkamer", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 23.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 25.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "e2f4322d57924fa090fbbc48b3a140dc" + ], + "secondary": [ + "1772a4ea304041adb83f357b751341ff" + ] + }, + "vendor": "Plugwise" } }, "gateway": { diff --git a/fixtures/m_adam_heating/all_data.json b/fixtures/m_adam_heating/all_data.json index 7e6a5a103..7b350dddb 100644 --- a/fixtures/m_adam_heating/all_data.json +++ b/fixtures/m_adam_heating/all_data.json @@ -36,7 +36,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "f871b8c4d63549319221e294e4f88074", @@ -45,6 +45,7 @@ "name": "Tom Badkamer", "sensors": { "battery": 99, + "setpoint": 18.0, "temperature": 18.6, "temperature_difference": -0.2, "valve_position": 100 @@ -59,40 +60,16 @@ "zigbee_mac_address": "000D6F000C8FF5EE" }, "ad4838d7d35c4d6ea796ee12ae5aedf8": { - "active_preset": "home", "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], - "climate_mode": "heat", - "control_state": "preheating", "dev_class": "thermostat", "location": "f2bf9048bef64cc5b6d5110154e33c81", "model": "ThermoTouch", "model_id": "143.1", "name": "Anna", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "off", "sensors": { "setpoint": 20.0, "temperature": 19.1 }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 20.0, - "upper_bound": 35.0 - }, "vendor": "Plugwise" }, "da224107914542988a88561b4452b0f6": { @@ -127,20 +104,10 @@ "zigbee_mac_address": "000D6F000D5A168D" }, "e2f4322d57924fa090fbbc48b3a140dc": { - "active_preset": "home", "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], "binary_sensors": { "low_battery": true }, - "climate_mode": "auto", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-10T02:00:00+02:00", "hardware": "255", @@ -148,14 +115,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Lisa Badkamer", - "preset_modes": [ - "no_frost", - "asleep", - "vacation", - "home", - "away" - ], - "select_schedule": "Badkamer", "sensors": { "battery": 14, "setpoint": 15.0, @@ -167,12 +126,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 15.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "000D6F000C869B61" }, @@ -186,7 +139,92 @@ "name": "Test", "switches": { "relay": true - } + }, + "vendor": "Plugwise" + }, + "f2bf9048bef64cc5b6d5110154e33c81": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "heat", + "control_state": "preheating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 149.9, + "electricity_produced": 0.0, + "temperature": 19.1 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 20.0, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "f871b8c4d63549319221e294e4f88074": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bathroom", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Badkamer", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 17.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 15.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "e2f4322d57924fa090fbbc48b3a140dc" + ], + "secondary": [ + "1772a4ea304041adb83f357b751341ff" + ] + }, + "vendor": "Plugwise" } }, "gateway": { diff --git a/fixtures/m_adam_jip/all_data.json b/fixtures/m_adam_jip/all_data.json index 569525975..fcc817271 100644 --- a/fixtures/m_adam_jip/all_data.json +++ b/fixtures/m_adam_jip/all_data.json @@ -1,13 +1,76 @@ { "devices": { - "1346fbd8498d4dbcab7e18d51b771f3d": { + "06aecb3d00354375924f50c47af36bd2": { "active_preset": "no_frost", + "climate_mode": "off", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Slaapkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 24.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "1346fbd8498d4dbcab7e18d51b771f3d" + ], + "secondary": [ + "356b65335e274d769c338223e7af9c33" + ] + }, + "vendor": "Plugwise" + }, + "13228dab8ce04617af318a2888b3c548": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 27.4 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.01, + "setpoint": 9.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": [ + "f61f1a2535f54f52ad006a3d18e459ca" + ], + "secondary": [ + "833de10f269c4deab58fb9df69901b4e" + ] + }, + "vendor": "Plugwise" + }, + "1346fbd8498d4dbcab7e18d51b771f3d": { "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "off", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -15,13 +78,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Slaapkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 92, "setpoint": 13.0, @@ -33,18 +89,12 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A03" }, "1da4d325838e4ad8aac12177214505c9": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "d58fec52899f4f1c92e4f8fad6d8c48c", @@ -68,7 +118,7 @@ }, "356b65335e274d769c338223e7af9c33": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "06aecb3d00354375924f50c47af36bd2", @@ -108,13 +158,10 @@ "zigbee_mac_address": "ABCD012345670A06" }, "6f3e9d7084214c21b9dfa46f6eeb8700": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -122,13 +169,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Kinderkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 79, "setpoint": 13.0, @@ -140,18 +180,12 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A02" }, "833de10f269c4deab58fb9df69901b4e": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "13228dab8ce04617af318a2888b3c548", @@ -174,13 +208,10 @@ "zigbee_mac_address": "ABCD012345670A09" }, "a6abc6a129ee499c88a4d420cc413b47": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -188,13 +219,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Logeerkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 80, "setpoint": 13.0, @@ -206,12 +230,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A01" }, @@ -246,9 +264,42 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670101" }, + "d27aede973b54be484f6842d1b2802ad": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Kinderkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "6f3e9d7084214c21b9dfa46f6eeb8700" + ], + "secondary": [ + "d4496250d0e942cfa7aea3476e9070d5" + ] + }, + "vendor": "Plugwise" + }, "d4496250d0e942cfa7aea3476e9070d5": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2020-11-04T01:00:00+01:00", "hardware": "1", "location": "d27aede973b54be484f6842d1b2802ad", @@ -270,6 +321,39 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A04" }, + "d58fec52899f4f1c92e4f8fad6d8c48c": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Logeerkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "a6abc6a129ee499c88a4d420cc413b47" + ], + "secondary": [ + "1da4d325838e4ad8aac12177214505c9" + ] + }, + "vendor": "Plugwise" + }, "e4684553153b44afbef2200885f379dc": { "available": true, "binary_sensors": { @@ -307,13 +391,10 @@ "vendor": "Remeha B.V." }, "f61f1a2535f54f52ad006a3d18e459ca": { - "active_preset": "home", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", - "control_state": "off", "dev_class": "zone_thermometer", "firmware": "2020-09-01T02:00:00+02:00", "hardware": "1", @@ -321,13 +402,6 @@ "model": "Jip", "model_id": "168-01", "name": "Woonkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 100, "humidity": 56.2, @@ -340,12 +414,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.01, - "setpoint": 9.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A08" } @@ -354,7 +422,7 @@ "cooling_present": false, "gateway_id": "b5c2386c6f6342669e50fe49dd05b188", "heater_id": "e4684553153b44afbef2200885f379dc", - "item_count": 228, + "item_count": 244, "notifications": {}, "reboot": true, "smile_name": "Adam" diff --git a/fixtures/m_adam_multiple_devices_per_zone/all_data.json b/fixtures/m_adam_multiple_devices_per_zone/all_data.json index 290935ac4..522c3620e 100644 --- a/fixtures/m_adam_multiple_devices_per_zone/all_data.json +++ b/fixtures/m_adam_multiple_devices_per_zone/all_data.json @@ -21,6 +21,89 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A15" }, + "08963fec7c53423ca5680aa4cb502c63": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Badkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Badkamer Schema", + "sensors": { + "temperature": 18.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 14.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "f1fee6043d3642a9b0a65297455f008e", + "680423ff840043738f42cc7f1ff97a36" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "12493538af164a409c6a1c79e38afe1c": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Bios", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "df4a4a8169904cdb9c03d61a21f42140" + ], + "secondary": [ + "a2c3583e0a6349358998b760cea82d2a" + ] + }, + "vendor": "Plugwise" + }, "21f2b542c49845e6bb416884c55778d6": { "available": true, "dev_class": "game_console_plug", @@ -42,6 +125,36 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A12" }, + "446ac08dd04d4eff8ac57489757b7314": { + "active_preset": "no_frost", + "climate_mode": "heat", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Garage", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 15.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 5.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "e7693eb9582644e5b865dba8d4447cf1" + ], + "secondary": [] + }, + "vendor": "Plugwise" + }, "4a810418d5394b3f82727340b91ba740": { "available": true, "dev_class": "router_plug", @@ -89,13 +202,13 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "08963fec7c53423ca5680aa4cb502c63", "model": "Tom/Floor", "model_id": "106-03", - "name": "Thermostatic Radiator Badkamer", + "name": "Thermostatic Radiator Badkamer 1", "sensors": { "battery": 51, "setpoint": 14.0, @@ -113,20 +226,10 @@ "zigbee_mac_address": "ABCD012345670A17" }, "6a3bf693d05e48e0b460c815a4fdd09d": { - "active_preset": "asleep", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -134,14 +237,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Thermostat Jessie", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "CV Jessie", "sensors": { "battery": 37, "setpoint": 15.0, @@ -153,12 +248,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 15.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A03" }, @@ -182,6 +271,47 @@ "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A05" }, + "82fa13f017d240daa0d0ea1775420f24": { + "active_preset": "asleep", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Jessie", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "CV Jessie", + "sensors": { + "temperature": 17.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 15.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "6a3bf693d05e48e0b460c815a4fdd09d" + ], + "secondary": [ + "d3da73bde12a47d5a6b8f9dad971f2ec" + ] + }, + "vendor": "Plugwise" + }, "90986d591dcd426cae3ec3e8111ff730": { "binary_sensors": { "heating_state": true @@ -222,7 +352,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "12493538af164a409c6a1c79e38afe1c", @@ -247,7 +377,7 @@ }, "b310b72a0e354bfab43089919b9a88bf": { "available": true, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "c50f167537524366a5af7aa3942feb1e", @@ -270,20 +400,10 @@ "zigbee_mac_address": "ABCD012345670A02" }, "b59bcebaf94b499ea7d46e4a66fb62d8": { - "active_preset": "home", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", "dev_class": "zone_thermostat", "firmware": "2016-08-02T02:00:00+02:00", "hardware": "255", @@ -291,14 +411,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa WK", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "GF7 Woonkamer", "sensors": { "battery": 34, "setpoint": 21.5, @@ -310,14 +422,51 @@ "setpoint": 0.0, "upper_bound": 2.0 }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c50f167537524366a5af7aa3942feb1e": { + "active_preset": "home", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "GF7 Woonkamer", + "sensors": { + "electricity_consumed": 35.6, + "electricity_produced": 0.0, + "temperature": 20.9 + }, "thermostat": { "lower_bound": 0.0, "resolution": 0.01, "setpoint": 21.5, - "upper_bound": 99.9 + "upper_bound": 100.0 }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A07" + "thermostats": { + "primary": [ + "b59bcebaf94b499ea7d46e4a66fb62d8" + ], + "secondary": [ + "b310b72a0e354bfab43089919b9a88bf" + ] + }, + "vendor": "Plugwise" }, "cd0ddb54ef694e11ac18ed1cbce5dbbd": { "available": true, @@ -345,7 +494,7 @@ "binary_sensors": { "low_battery": false }, - "dev_class": "thermo_sensor", + "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", "location": "82fa13f017d240daa0d0ea1775420f24", @@ -369,20 +518,10 @@ "zigbee_mac_address": "ABCD012345670A10" }, "df4a4a8169904cdb9c03d61a21f42140": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "zone_thermostat", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", @@ -390,14 +529,6 @@ "model": "Lisa", "model_id": "158-01", "name": "Zone Lisa Bios", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "off", "sensors": { "battery": 67, "setpoint": 13.0, @@ -409,22 +540,14 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 13.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A06" }, "e7693eb9582644e5b865dba8d4447cf1": { - "active_preset": "no_frost", "available": true, "binary_sensors": { "low_battery": false }, - "climate_mode": "heat", "dev_class": "thermostatic_radiator_valve", "firmware": "2019-03-27T01:00:00+01:00", "hardware": "1", @@ -432,13 +555,6 @@ "model": "Tom/Floor", "model_id": "106-03", "name": "CV Kraan Garage", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], "sensors": { "battery": 68, "setpoint": 5.5, @@ -452,45 +568,21 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 5.5, - "upper_bound": 100.0 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A11" }, "f1fee6043d3642a9b0a65297455f008e": { - "active_preset": "away", "available": true, - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], "binary_sensors": { "low_battery": false }, - "climate_mode": "auto", - "dev_class": "zone_thermostat", + "dev_class": "thermostatic_radiator_valve", "firmware": "2016-10-27T02:00:00+02:00", "hardware": "255", "location": "08963fec7c53423ca5680aa4cb502c63", "model": "Lisa", "model_id": "158-01", - "name": "Zone Thermostat Badkamer", - "preset_modes": [ - "home", - "asleep", - "away", - "vacation", - "no_frost" - ], - "select_schedule": "Badkamer Schema", + "name": "Thermostatic Radiator Badkamer 2", "sensors": { "battery": 92, "setpoint": 14.0, @@ -502,12 +594,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 14.0, - "upper_bound": 99.9 - }, "vendor": "Plugwise", "zigbee_mac_address": "ABCD012345670A08" }, @@ -535,7 +621,7 @@ "cooling_present": false, "gateway_id": "fe799307f1624099878210aa0b9f1475", "heater_id": "90986d591dcd426cae3ec3e8111ff730", - "item_count": 340, + "item_count": 364, "notifications": { "af82e4ccf9c548528166d38e560662a4": { "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." diff --git a/fixtures/stretch_v23/all_data.json b/fixtures/stretch_v23/all_data.json index 07e89a8f2..77bc12c40 100644 --- a/fixtures/stretch_v23/all_data.json +++ b/fixtures/stretch_v23/all_data.json @@ -312,7 +312,8 @@ "name": "Test", "switches": { "relay": false - } + }, + "vendor": "Plugwise" }, "fd1b74f59e234a9dae4e23b2b5cf07ed": { "dev_class": "dryer", diff --git a/fixtures/stretch_v31/all_data.json b/fixtures/stretch_v31/all_data.json index a875324fc..b1675116b 100644 --- a/fixtures/stretch_v31/all_data.json +++ b/fixtures/stretch_v31/all_data.json @@ -96,7 +96,8 @@ "name": "Schakel", "switches": { "relay": true - } + }, + "vendor": "Plugwise" }, "d950b314e9d8499f968e6db8d82ef78c": { "dev_class": "report", @@ -111,7 +112,8 @@ "name": "Stroomvreters", "switches": { "relay": true - } + }, + "vendor": "Plugwise" }, "e1c884e7dede431dadee09506ec4f859": { "dev_class": "refrigerator", diff --git a/plugwise/__init__.py b/plugwise/__init__.py index 0d7bf6609..2769177cd 100644 --- a/plugwise/__init__.py +++ b/plugwise/__init__.py @@ -69,6 +69,7 @@ def __init__( self._elga = False self._is_thermostat = False self._last_active: dict[str, str | None] = {} + self._loc_data: dict[str, ThermoLoc] = {} self._on_off_device = False self._opentherm_device = False self._schedule_old_states: dict[str, dict[str, str]] = {} @@ -76,7 +77,6 @@ def __init__( self._stretch_v2 = False self._target_smile: str = NONE self.gateway_id: str = NONE - self.loc_data: dict[str, ThermoLoc] = {} self.smile_fw_version: Version | None = None self.smile_hostname: str = NONE self.smile_hw_version: str | None = None @@ -134,11 +134,11 @@ async def connect(self) -> Version | None: self._elga, self._is_thermostat, self._last_active, + self._loc_data, self._on_off_device, self._opentherm_device, self._schedule_old_states, self.gateway_id, - self.loc_data, self.smile_fw_version, self.smile_hostname, self.smile_hw_version, @@ -155,11 +155,11 @@ async def connect(self) -> Version | None: self._request, self._websession, self._is_thermostat, + self._loc_data, self._on_off_device, self._opentherm_device, self._stretch_v2, self._target_smile, - self.loc_data, self.smile_fw_version, self.smile_hostname, self.smile_hw_version, @@ -173,7 +173,7 @@ async def connect(self) -> Version | None: ) # Update all endpoints on first connect - await self._smile_api.full_update_device() + await self._smile_api.full_xml_update() return self.smile_version @@ -298,17 +298,17 @@ async def _smile_detect_legacy( self.smile_legacy = True return return_model - async def full_update_device(self) -> None: + async def full_xml_update(self) -> None: """Helper-function used for testing.""" - await self._smile_api.full_update_device() + await self._smile_api.full_xml_update() - def get_all_devices(self) -> None: + def get_all_gateway_entities(self) -> None: """Helper-function used for testing.""" - self._smile_api.get_all_devices() + self._smile_api.get_all_gateway_entities() async def async_update(self) -> PlugwiseData: - """Perform an incremental update for updating the various device states.""" - data = PlugwiseData({}, {}) + """Update the various entities and their states.""" + data = PlugwiseData(devices={}, gateway={}) try: data = await self._smile_api.async_update() self.gateway_id = data.gateway["gateway_id"] diff --git a/plugwise/common.py b/plugwise/common.py index ee6c22e99..8266f9a4a 100644 --- a/plugwise/common.py +++ b/plugwise/common.py @@ -11,8 +11,8 @@ SPECIAL_PLUG_TYPES, SWITCH_GROUP_TYPES, ApplianceType, - DeviceData, - ModelData, + GwEntityData, + ModuleData, SensorType, ) from plugwise.util import ( @@ -40,7 +40,7 @@ def __init__(self) -> None: self._heater_id: str self._on_off_device: bool self._opentherm_device: bool - self.gw_devices: dict[str, DeviceData] + self.gw_entities: dict[str, GwEntityData] self.smile_name: str self.smile_type: str @@ -108,7 +108,7 @@ def _appl_thermostat_info(self, appl: Munch, xml_1: etree, xml_2: etree = None) return appl - def _collect_power_values(self, data: DeviceData, loc: Munch, tariff: str, legacy: bool = False) -> None: + def _collect_power_values(self, data: GwEntityData, loc: Munch, tariff: str, legacy: bool = False) -> None: """Something.""" for loc.peak_select in ("nl_peak", "nl_offpeak"): loc.locator = ( @@ -131,6 +131,19 @@ def _collect_power_values(self, data: DeviceData, loc: Munch, tariff: str, legac key = cast(SensorType, loc.key_string) data["sensors"][key] = loc.f_val + def _count_data_items(self, data: GwEntityData) -> None: + """When present, count the binary_sensors, sensors and switches dict-items, don't count the dicts. + + Also, count the remaining single data items, the amount of dicts present have already been pre-subtracted in the previous step. + """ + if "binary_sensors" in data: + self._count += len(data["binary_sensors"]) - 1 + if "sensors" in data: + self._count += len(data["sensors"]) - 1 + if "switches" in data: + self._count += len(data["switches"]) - 1 + self._count += len(data) + def _power_data_peak_value(self, loc: Munch, legacy: bool) -> Munch: """Helper-function for _power_data_from_location() and _power_data_from_modules().""" loc.found = True @@ -160,8 +173,8 @@ def _power_data_energy_diff( measurement: str, net_string: SensorType, f_val: float | int, - direct_data: DeviceData, - ) -> DeviceData: + data: GwEntityData, + ) -> GwEntityData: """Calculate differential energy.""" if ( "electricity" in measurement @@ -171,10 +184,10 @@ def _power_data_energy_diff( diff = 1 if "produced" in measurement: diff = -1 - if net_string not in direct_data["sensors"]: + if net_string not in data["sensors"]: tmp_val: float | int = 0 else: - tmp_val = direct_data["sensors"][net_string] + tmp_val = data["sensors"][net_string] if isinstance(f_val, int): tmp_val += f_val * diff @@ -182,13 +195,13 @@ def _power_data_energy_diff( tmp_val += float(f_val * diff) tmp_val = float(f"{round(tmp_val, 3):.3f}") - direct_data["sensors"][net_string] = tmp_val + data["sensors"][net_string] = tmp_val - return direct_data + return data - def _create_gw_devices(self, appl: Munch) -> None: - """Helper-function for creating/updating gw_devices.""" - self.gw_devices[appl.dev_id] = {"dev_class": appl.pwclass} + def _create_gw_entities(self, appl: Munch) -> None: + """Helper-function for creating/updating gw_entities.""" + self.gw_entities[appl.entity_id] = {"dev_class": appl.pwclass} self._count += 1 for key, value in { "available": appl.available, @@ -204,30 +217,30 @@ def _create_gw_devices(self, appl: Munch) -> None: }.items(): if value is not None or key == "location": appl_key = cast(ApplianceType, key) - self.gw_devices[appl.dev_id][appl_key] = value + self.gw_entities[appl.entity_id][appl_key] = value self._count += 1 - def _device_data_switching_group( - self, device: DeviceData, data: DeviceData + def _entity_switching_group( + self, entity: GwEntityData, data: GwEntityData ) -> None: - """Helper-function for _get_device_data(). + """Helper-function for _get_device_zone_data(). Determine switching group device data. """ - if device["dev_class"] in SWITCH_GROUP_TYPES: + if entity["dev_class"] in SWITCH_GROUP_TYPES: counter = 0 - for member in device["members"]: - if self.gw_devices[member]["switches"].get("relay"): + for member in entity["members"]: + if self.gw_entities[member]["switches"].get("relay"): counter += 1 data["switches"]["relay"] = counter != 0 self._count += 1 - def _get_group_switches(self) -> dict[str, DeviceData]: - """Helper-function for smile.py: get_all_devices(). + def _get_group_switches(self) -> dict[str, GwEntityData]: + """Helper-function for smile.py: get_all_gateway_entities(). Collect switching- or pump-group info. """ - switch_groups: dict[str, DeviceData] = {} + switch_groups: dict[str, GwEntityData] = {} # P1 and Anna don't have switchgroups if self.smile_type == "power" or self.smile(ANNA): return switch_groups @@ -240,25 +253,22 @@ def _get_group_switches(self) -> dict[str, DeviceData]: group_appliances = group.findall("appliances/appliance") for item in group_appliances: # Check if members are not orphaned - stretch - if item.attrib["id"] in self.gw_devices: + if item.attrib["id"] in self.gw_entities: members.append(item.attrib["id"]) if group_type in SWITCH_GROUP_TYPES and members: - switch_groups.update( - { - group_id: { - "dev_class": group_type, - "model": "Switchgroup", - "name": group_name, - "members": members, - }, - }, - ) + switch_groups[group_id] = { + "dev_class": group_type, + "model": "Switchgroup", + "name": group_name, + "members": members, + "vendor": "Plugwise", + } self._count += 4 return switch_groups - def _get_lock_state(self, xml: etree, data: DeviceData, stretch_v2: bool = False) -> None: + def _get_lock_state(self, xml: etree, data: GwEntityData, stretch_v2: bool = False) -> None: """Helper-function for _get_measurement_data(). Adam & Stretches: obtain the relay-switch lock state. @@ -280,12 +290,12 @@ def _get_module_data( locator: str, xml_2: etree = None, legacy: bool = False, - ) -> ModelData: + ) -> ModuleData: """Helper-function for _energy_device_info_finder() and _appliance_info_finder(). Collect requested info from MODULES. """ - model_data: ModelData = { + module_data: ModuleData = { "contents": False, "firmware_version": None, "hardware_version": None, @@ -304,25 +314,25 @@ def _get_module_data( search = return_valid(xml_2, self._domain_objects) module = search.find(loc) if module is not None: # pylint: disable=consider-using-assignment-expr - model_data["contents"] = True - get_vendor_name(module, model_data) - model_data["vendor_model"] = module.find("vendor_model").text - model_data["hardware_version"] = module.find("hardware_version").text - model_data["firmware_version"] = module.find("firmware_version").text - self._get_zigbee_data(module, model_data, legacy) + module_data["contents"] = True + get_vendor_name(module, module_data) + module_data["vendor_model"] = module.find("vendor_model").text + module_data["hardware_version"] = module.find("hardware_version").text + module_data["firmware_version"] = module.find("firmware_version").text + self._get_zigbee_data(module, module_data, legacy) - return model_data + return module_data - def _get_zigbee_data(self, module: etree, model_data: ModelData, legacy: bool) -> None: - """Helper-function for _get_model_data().""" + def _get_zigbee_data(self, module: etree, module_data: ModuleData, legacy: bool) -> None: + """Helper-function for _get_module_data().""" if legacy: # Stretches if (router := module.find("./protocols/network_router")) is not None: - model_data["zigbee_mac_address"] = router.find("mac_address").text + module_data["zigbee_mac_address"] = router.find("mac_address").text # Also look for the Circle+/Stealth M+ if (coord := module.find("./protocols/network_coordinator")) is not None: - model_data["zigbee_mac_address"] = coord.find("mac_address").text + module_data["zigbee_mac_address"] = coord.find("mac_address").text # Adam elif (zb_node := module.find("./protocols/zig_bee_node")) is not None: - model_data["zigbee_mac_address"] = zb_node.find("mac_address").text - model_data["reachable"] = zb_node.find("reachable").text == "true" + module_data["zigbee_mac_address"] = zb_node.find("mac_address").text + module_data["reachable"] = zb_node.find("reachable").text == "true" diff --git a/plugwise/constants.py b/plugwise/constants.py index 3830e5d45..16d3e9b29 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -190,6 +190,14 @@ "outdoor_temperature", ) +# Zone/climate related measurements +ZONE_MEASUREMENTS: Final[dict[str, DATA | UOM]] = { + "electricity_consumed": UOM(POWER_WATT), + "electricity_produced": UOM(POWER_WATT), + "relay": UOM(NONE), + "temperature": UOM(TEMP_CELSIUS), # HA Core thermostat current_temperature +} + # Literals SMILE_P1 = "Smile P1" POWER = "power" @@ -397,8 +405,8 @@ class GatewayData(TypedDict, total=False): smile_name: str -class ModelData(TypedDict): - """The ModelData class.""" +class ModuleData(TypedDict): + """The Module data class.""" contents: bool firmware_version: str | None @@ -492,9 +500,9 @@ class ThermoLoc(TypedDict, total=False): """Thermo Location class.""" name: str - primary: str | None + primary: list[str] primary_prio: int - secondary: set[str] + secondary: list[str] class ActuatorData(TypedDict, total=False): @@ -508,8 +516,11 @@ class ActuatorData(TypedDict, total=False): upper_bound: float -class DeviceData(TypedDict, total=False): - """The Device Data class, covering the collected and ordered output-data per device.""" +class GwEntityData(TypedDict, total=False): + """The Gateway Entity data class. + + Covering the collected output-data per device or location. + """ # Appliance base data dev_class: str @@ -544,13 +555,13 @@ class DeviceData(TypedDict, total=False): select_gateway_mode: str select_regulation_mode: str - # Master Thermostats + # Thermostat-related + thermostats: dict[str, list[str]] # Presets: active_preset: str | None preset_modes: list[str] | None # Schedules: available_schedules: list[str] - last_used: str | None select_schedule: str climate_mode: str @@ -571,5 +582,6 @@ class DeviceData(TypedDict, total=False): class PlugwiseData: """Plugwise data provided as output.""" + devices: dict[str, GwEntityData] gateway: GatewayData - devices: dict[str, DeviceData] + diff --git a/plugwise/data.py b/plugwise/data.py index f23812b0c..22a86e901 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -13,9 +13,8 @@ MIN_SETPOINT, NONE, OFF, - ZONE_THERMOSTATS, ActuatorData, - DeviceData, + GwEntityData, ) from plugwise.helper import SmileHelper from plugwise.util import remove_empty_platform_dicts @@ -29,12 +28,16 @@ def __init__(self) -> None: SmileHelper.__init__(self) - def _all_device_data(self) -> None: - """Helper-function for get_all_devices(). + def _all_entity_data(self) -> None: + """Helper-function for get_all_gateway_entities(). - Collect data for each device and add to self.gw_data and self.gw_devices. + Collect data for each entity and add to self.gw_data and self.gw_entities. """ - self._update_gw_devices() + self._update_gw_entities() + if self.smile(ADAM): + self._update_zones() + self.gw_entities.update(self._zones) + self.gw_data.update( { "gateway_id": self.gateway_id, @@ -49,31 +52,40 @@ def _all_device_data(self) -> None: {"heater_id": self._heater_id, "cooling_present": self._cooling_present} ) - def _update_gw_devices(self) -> None: - """Helper-function for _all_device_data() and async_update(). + def _update_zones(self) -> None: + """Helper-function for _all_entity_data() and async_update(). + + Collect data for each zone/location and add to self._zones. + """ + for location_id, zone in self._zones.items(): + data = self._get_location_data(location_id) + zone.update(data) + + def _update_gw_entities(self) -> None: + """Helper-function for _all_entities_data() and async_update(). - Collect data for each device and add to self.gw_devices. + Collect data for each entity and add to self.gw_entities. """ mac_list: list[str] = [] - for device_id, device in self.gw_devices.items(): - data = self._get_device_data(device_id) - if device_id == self.gateway_id: + for entity_id, entity in self.gw_entities.items(): + data = self._get_entity_data(entity_id) + if entity_id == self.gateway_id: mac_list = self._detect_low_batteries() - self._add_or_update_notifications(device_id, device, data) + self._add_or_update_notifications(entity_id, entity, data) - device.update(data) + entity.update(data) is_battery_low = ( mac_list - and "low_battery" in device["binary_sensors"] - and device["zigbee_mac_address"] in mac_list - and device["dev_class"] in ("thermo_sensor", "thermostatic_radiator_valve", "zone_thermometer", "zone_thermostat") + and "low_battery" in entity["binary_sensors"] + and entity["zigbee_mac_address"] in mac_list + and entity["dev_class"] in ("thermo_sensor", "thermostatic_radiator_valve", "zone_thermometer", "zone_thermostat") ) if is_battery_low: - device["binary_sensors"]["low_battery"] = True + entity["binary_sensors"]["low_battery"] = True - self._update_for_cooling(device) + self._update_for_cooling(entity) - remove_empty_platform_dicts(device) + remove_empty_platform_dicts(entity) def _detect_low_batteries(self) -> list[str]: """Helper-function updating the low-battery binary_sensor status from a Battery-is-low message.""" @@ -97,31 +109,31 @@ def _detect_low_batteries(self) -> list[str]: return mac_address_list def _add_or_update_notifications( - self, device_id: str, device: DeviceData, data: DeviceData + self, entity_id: str, entity: GwEntityData, data: GwEntityData ) -> None: """Helper-function adding or updating the Plugwise notifications.""" if ( - device_id == self.gateway_id + entity_id == self.gateway_id and ( self._is_thermostat or self.smile_type == "power" ) ) or ( - "binary_sensors" in device - and "plugwise_notification" in device["binary_sensors"] + "binary_sensors" in entity + and "plugwise_notification" in entity["binary_sensors"] ): data["binary_sensors"]["plugwise_notification"] = bool(self._notifications) self._count += 1 - def _update_for_cooling(self, device: DeviceData) -> None: + def _update_for_cooling(self, entity: GwEntityData) -> None: """Helper-function for adding/updating various cooling-related values.""" # For Anna and heating + cooling, replace setpoint with setpoint_high/_low if ( self.smile(ANNA) and self._cooling_present - and device["dev_class"] == "thermostat" + and entity["dev_class"] == "thermostat" ): - thermostat = device["thermostat"] - sensors = device["sensors"] + thermostat = entity["thermostat"] + sensors = entity["sensors"] temp_dict: ActuatorData = { "setpoint_low": thermostat["setpoint"], "setpoint_high": MAX_SETPOINT, @@ -133,53 +145,68 @@ def _update_for_cooling(self, device: DeviceData) -> None: } thermostat.pop("setpoint") temp_dict.update(thermostat) - device["thermostat"] = temp_dict + entity["thermostat"] = temp_dict if "setpoint" in sensors: sensors.pop("setpoint") sensors["setpoint_low"] = temp_dict["setpoint_low"] sensors["setpoint_high"] = temp_dict["setpoint_high"] - self._count += 2 + self._count += 2 # add 4, remove 2 + + + def _get_location_data(self, loc_id: str) -> GwEntityData: + """Helper-function for _all_entity_data() and async_update(). + + Provide entity-data, based on Location ID (= loc_id). + """ + zone = self._zones[loc_id] + data = self._get_zone_data(loc_id) + if ctrl_state := self._control_state(loc_id): + data["control_state"] = ctrl_state + self._count += 1 - def _get_device_data(self, dev_id: str) -> DeviceData: - """Helper-function for _all_device_data() and async_update(). + # Thermostat data (presets, temperatures etc) + self._climate_data(loc_id, zone, data) + + return data - Provide device-data, based on Location ID (= dev_id), from APPLIANCES. + def _get_entity_data(self, entity_id: str) -> GwEntityData: + """Helper-function for _update_gw_entities() and async_update(). + + Provide entity-data, based on appliance_id (= entity_id). """ - device = self.gw_devices[dev_id] - data = self._get_measurement_data(dev_id) + entity = self.gw_entities[entity_id] + data = self._get_measurement_data(entity_id) - # Check availability of wired-connected devices + # Check availability of wired-connected entities # Smartmeter self._check_availability( - device, "smartmeter", data, "P1 does not seem to be connected" + entity, "smartmeter", data, "P1 does not seem to be connected" ) - # OpenTherm device - if device["name"] != "OnOff": + # OpenTherm entity + if entity["name"] != "OnOff": self._check_availability( - device, "heater_central", data, "no OpenTherm communication" + entity, "heater_central", data, "no OpenTherm communication" ) # Switching groups data - self._device_data_switching_group(device, data) + self._entity_switching_group(entity, data) # Adam data - self._device_data_adam(device, data) - # Skip obtaining data for (Adam) secondary thermostats - if device["dev_class"] not in ZONE_THERMOSTATS: - return data + self._get_adam_data(entity, data) - # Thermostat data (presets, temperatures etc) - self._device_data_climate(device, data) + # Thermostat data for Anna (presets, temperatures etc) + if self.smile(ANNA) and entity["dev_class"] == "thermostat": + self._climate_data(entity_id, entity, data) return data def _check_availability( - self, device: DeviceData, dev_class: str, data: DeviceData, message: str + self, entity: GwEntityData, dev_class: str, data: GwEntityData, message: str ) -> None: - """Helper-function for _get_device_data(). + """Helper-function for _get_entity_data(). - Provide availability status for the wired-commected devices. + Provide availability status for the wired-connected devices. """ - if device["dev_class"] == dev_class: + if entity["dev_class"] == dev_class: data["available"] = True self._count += 1 for item in self._notifications.values(): @@ -187,8 +214,8 @@ def _check_availability( if message in msg: data["available"] = False - def _device_data_adam(self, device: DeviceData, data: DeviceData) -> None: - """Helper-function for _get_device_data(). + def _get_adam_data(self, entity: GwEntityData, data: GwEntityData) -> None: + """Helper-function for _get_entity_data(). Determine Adam heating-status for on-off heating via valves, available regulations_modes and thermostat control_states. @@ -196,14 +223,14 @@ def _device_data_adam(self, device: DeviceData, data: DeviceData) -> None: if self.smile(ADAM): # Indicate heating_state based on valves being open in case of city-provided heating if ( - device["dev_class"] == "heater_central" + entity["dev_class"] == "heater_central" and self._on_off_device and isinstance(self._heating_valves(), int) ): data["binary_sensors"]["heating_state"] = self._heating_valves() != 0 # Show the allowed regulation_modes and gateway_modes - if device["dev_class"] == "gateway": + if entity["dev_class"] == "gateway": if self._reg_allowed_modes: data["regulation_modes"] = self._reg_allowed_modes self._count += 1 @@ -211,19 +238,20 @@ def _device_data_adam(self, device: DeviceData, data: DeviceData) -> None: data["gateway_modes"] = self._gw_allowed_modes self._count += 1 - # Control_state, only available for Adam primary thermostats - if device["dev_class"] in ZONE_THERMOSTATS: - loc_id = device["location"] - if ctrl_state := self._control_state(loc_id): - data["control_state"] = ctrl_state - self._count += 1 - def _device_data_climate(self, device: DeviceData, data: DeviceData) -> None: - """Helper-function for _get_device_data(). + def _climate_data( + self, + location_id: str, + entity: GwEntityData, + data: GwEntityData + ) -> None: + """Helper-function for _get_entity_data(). - Determine climate-control device data. + Determine climate-control entity data. """ - loc_id = device["location"] + loc_id = location_id + if entity.get("location") is not None: + loc_id = entity["location"] # Presets data["preset_modes"] = None @@ -258,13 +286,13 @@ def _device_data_climate(self, device: DeviceData, data: DeviceData) -> None: def check_reg_mode(self, mode: str) -> bool: """Helper-function for device_data_climate().""" - gateway = self.gw_devices[self.gateway_id] + gateway = self.gw_entities[self.gateway_id] return ( "regulation_modes" in gateway and gateway["select_regulation_mode"] == mode ) def _get_schedule_states_with_off( - self, location: str, schedules: list[str], selected: str, data: DeviceData + self, location: str, schedules: list[str], selected: str, data: GwEntityData ) -> None: """Collect schedules with states for each thermostat. diff --git a/plugwise/helper.py b/plugwise/helper.py index 67a123887..e9a5f5849 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -32,11 +32,12 @@ THERMOSTAT_CLASSES, TOGGLES, UOM, + ZONE_MEASUREMENTS, ActuatorData, ActuatorDataType, ActuatorType, - DeviceData, GatewayData, + GwEntityData, SensorType, ThermoLoc, ToggleNameType, @@ -223,6 +224,7 @@ def __init__(self) -> None: self._is_thermostat: bool self._last_active: dict[str, str | None] self._last_modified: dict[str, str] = {} + self._loc_data: dict[str, ThermoLoc] self._notifications: dict[str, dict[str, str]] = {} self._on_off_device: bool self._opentherm_device: bool @@ -249,8 +251,7 @@ def __init__(self) -> None: self.gateway_id: str self.gw_data: GatewayData = {} - self.gw_devices: dict[str, DeviceData] = {} - self.loc_data: dict[str, ThermoLoc] + self.gw_entities: dict[str, GwEntityData] = {} self.smile_fw_version: Version | None self.smile_hw_version: str | None self.smile_mac_address: str | None @@ -260,6 +261,7 @@ def __init__(self) -> None: self.smile_type: str self.smile_zigbee_mac_address: str | None self.therms_with_offset_func: list[str] = [] + self._zones: dict[str, GwEntityData] = {} SmileCommon.__init__(self) def _all_appliances(self) -> None: @@ -301,7 +303,7 @@ def _all_appliances(self) -> None: continue appl.available = None - appl.dev_id = appliance.attrib["id"] + appl.entity_id = appliance.attrib["id"] appl.name = appliance.find("name").text appl.model = None appl.model_id = None @@ -315,18 +317,18 @@ def _all_appliances(self) -> None: if not (appl := self._appliance_info_finder(appl, appliance)): continue - # P1: for gateway and smartmeter switch device_id - part 1 + # P1: for gateway and smartmeter switch entity_id - part 1 # This is done to avoid breakage in HA Core if appl.pwclass == "gateway" and self.smile_type == "power": - appl.dev_id = appl.location + appl.entity_id = appl.location - self._create_gw_devices(appl) + self._create_gw_entities(appl) # For P1 collect the connected SmartMeter info if self.smile_type == "power": self._p1_smartmeter_info_finder(appl) - # P1: for gateway and smartmeter switch device_id - part 2 - for item in self.gw_devices: + # P1: for gateway and smartmeter switch entity_id - part 2 + for item in self.gw_entities: if item != self.gateway_id: self.gateway_id = item # Leave for-loop to avoid a 2nd device_id switch @@ -334,13 +336,13 @@ def _all_appliances(self) -> None: # Place the gateway and optional heater_central devices as 1st and 2nd for dev_class in ("heater_central", "gateway"): - for dev_id, device in dict(self.gw_devices).items(): - if device["dev_class"] == dev_class: - tmp_device = device - self.gw_devices.pop(dev_id) - cleared_dict = self.gw_devices - add_to_front = {dev_id: tmp_device} - self.gw_devices = {**add_to_front, **cleared_dict} + for entity_id, entity in dict(self.gw_entities).items(): + if entity["dev_class"] == dev_class: + tmp_entity = entity + self.gw_entities.pop(entity_id) + cleared_dict = self.gw_entities + add_to_front = {entity_id: tmp_entity} + self.gw_entities = {**add_to_front, **cleared_dict} def _all_locations(self) -> None: """Collect all locations.""" @@ -352,11 +354,11 @@ def _all_locations(self) -> None: if loc.name == "Home": self._home_location = loc.loc_id - self.loc_data[loc.loc_id] = {"name": loc.name} + self._loc_data[loc.loc_id] = {"name": loc.name} def _p1_smartmeter_info_finder(self, appl: Munch) -> None: """Collect P1 DSMR SmartMeter info.""" - loc_id = next(iter(self.loc_data.keys())) + loc_id = next(iter(self._loc_data.keys())) location = self._domain_objects.find(f'./location[@id="{loc_id}"]') locator = MODULE_LOCATOR module_data = self._get_module_data(location, locator) @@ -364,7 +366,7 @@ def _p1_smartmeter_info_finder(self, appl: Munch) -> None: LOGGER.error("No module data found for SmartMeter") # pragma: no cover return None # pragma: no cover - appl.dev_id = self.gateway_id + appl.entity_id = self.gateway_id appl.firmware = module_data["firmware_version"] appl.hardware = module_data["hardware_version"] appl.location = loc_id @@ -376,7 +378,7 @@ def _p1_smartmeter_info_finder(self, appl: Munch) -> None: appl.vendor_name = module_data["vendor_name"] appl.zigbee_mac = None - self._create_gw_devices(appl) + self._create_gw_entities(appl) def _appliance_info_finder(self, appl: Munch, appliance: etree) -> Munch: """Collect info for all appliances found.""" @@ -392,7 +394,7 @@ def _appliance_info_finder(self, appl: Munch, appliance: etree) -> Munch: self._appl_heater_central_info(appl, appliance, False) # False means non-legacy device self._appl_dhw_mode_info(appl, appliance) # Skip orphaned heater_central (Core Issue #104433) - if appl.dev_id != self._heater_id: + if appl.entity_id != self._heater_id: return Munch() return appl case _ as s if s.endswith("_plug"): @@ -480,24 +482,40 @@ def _get_appliances_with_offset_functionality(self) -> list[str]: return therm_list - def _get_measurement_data(self, dev_id: str) -> DeviceData: - """Helper-function for smile.py: _get_device_data(). + def _get_zone_data(self, loc_id: str) -> GwEntityData: + """Helper-function for smile.py: _get_entity_data(). - Collect the appliance-data based on device id. + Collect the location-data based on location id. """ - data: DeviceData = {"binary_sensors": {}, "sensors": {}, "switches": {}} + data: GwEntityData = {"sensors": {}} + zone = self._zones[loc_id] + measurements = ZONE_MEASUREMENTS + if ( + location := self._domain_objects.find(f'./location[@id="{loc_id}"]') + ) is not None: + self._appliance_measurements(location, data, measurements) + self._get_actuator_functionalities(location, zone, data) + + return data + + def _get_measurement_data(self, entity_id: str) -> GwEntityData: + """Helper-function for smile.py: _get_entity_data(). + + Collect the appliance-data based on entity_id. + """ + data: GwEntityData = {"binary_sensors": {}, "sensors": {}, "switches": {}} # Get P1 smartmeter data from LOCATIONS - device = self.gw_devices[dev_id] + entity = self.gw_entities[entity_id] # !! DON'T CHANGE below two if-lines, will break stuff !! if self.smile_type == "power": - if device["dev_class"] == "smartmeter": - data.update(self._power_data_from_location(device["location"])) + if entity["dev_class"] == "smartmeter": + data.update(self._power_data_from_location(entity["location"])) return data # Get non-P1 data from APPLIANCES measurements = DEVICE_MEASUREMENTS - if self._is_thermostat and dev_id == self._heater_id: + if self._is_thermostat and entity_id == self._heater_id: measurements = HEATER_CENTRAL_MEASUREMENTS # Show the allowed dhw_modes (Loria only) if self._dhw_allowed_modes: @@ -505,7 +523,7 @@ def _get_measurement_data(self, dev_id: str) -> DeviceData: # Counting of this item is done in _appliance_measurements() if ( - appliance := self._domain_objects.find(f'./appliance[@id="{dev_id}"]') + appliance := self._domain_objects.find(f'./appliance[@id="{entity_id}"]') ) is not None: self._appliance_measurements(appliance, data, measurements) self._get_lock_state(appliance, data) @@ -514,21 +532,11 @@ def _get_measurement_data(self, dev_id: str) -> DeviceData: self._get_toggle_state(appliance, toggle, name, data) if appliance.find("type").text in ACTUATOR_CLASSES: - self._get_actuator_functionalities(appliance, device, data) - - if dev_id == self.gateway_id and self.smile(ADAM): - self._get_regulation_mode(appliance, data) - self._get_gateway_mode(appliance, data) + self._get_actuator_functionalities(appliance, entity, data) - # Adam & Anna: the Smile outdoor_temperature is present in DOMAIN_OBJECTS and LOCATIONS - under Home - # The outdoor_temperature present in APPLIANCES is a local sensor connected to the active device - if self._is_thermostat and dev_id == self.gateway_id: - outdoor_temperature = self._object_value( - self._home_location, "outdoor_temperature" - ) - if outdoor_temperature is not None: - data.update({"sensors": {"outdoor_temperature": outdoor_temperature}}) - self._count += 1 + self._get_regulation_mode(appliance, entity_id, data) + self._get_gateway_mode(appliance, entity_id, data) + self._get_gateway_outdoor_temp(entity_id, data) if "c_heating_state" in data: self._process_c_heating_state(data) @@ -536,45 +544,19 @@ def _get_measurement_data(self, dev_id: str) -> DeviceData: data.pop("c_heating_state") self._count -= 1 - if self._is_thermostat and self.smile(ANNA) and dev_id == self._heater_id: - # Anna+Elga: base cooling_state on the elga-status-code - if "elga_status_code" in data: - if data["thermostat_supports_cooling"]: - # Techneco Elga has cooling-capability - self._cooling_present = True - data["model"] = "Generic heater/cooler" - self._cooling_enabled = data["elga_status_code"] in (8, 9) - data["binary_sensors"]["cooling_state"] = self._cooling_active = ( - data["elga_status_code"] == 8 - ) - # Elga has no cooling-switch - if "cooling_ena_switch" in data["switches"]: - data["switches"].pop("cooling_ena_switch") - self._count -= 1 - - data.pop("elga_status_code", None) - self._count -= 1 - - # Loria/Thermastage: cooling-related is based on cooling_state - # and modulation_level - elif self._cooling_present and "cooling_state" in data["binary_sensors"]: - self._cooling_enabled = data["binary_sensors"]["cooling_state"] - self._cooling_active = data["sensors"]["modulation_level"] == 100 - # For Loria the above does not work (pw-beta issue #301) - if "cooling_ena_switch" in data["switches"]: - self._cooling_enabled = data["switches"]["cooling_ena_switch"] - self._cooling_active = data["binary_sensors"]["cooling_state"] + if self._is_thermostat and self.smile(ANNA): + self._update_anna_cooling(entity_id, data) self._cleanup_data(data) return data - def _power_data_from_location(self, loc_id: str) -> DeviceData: - """Helper-function for smile.py: _get_device_data(). + def _power_data_from_location(self, loc_id: str) -> GwEntityData: + """Helper-function for smile.py: _get_entity_data(). Collect the power-data based on Location ID, from LOCATIONS. """ - direct_data: DeviceData = {"sensors": {}} + data: GwEntityData = {"sensors": {}} loc = Munch() log_list: list[str] = ["point_log", "cumulative_log", "interval_log"] t_string = "tariff" @@ -583,15 +565,15 @@ def _power_data_from_location(self, loc_id: str) -> DeviceData: loc.logs = search.find(f'./location[@id="{loc_id}"]/logs') for loc.measurement, loc.attrs in P1_MEASUREMENTS.items(): for loc.log_type in log_list: - self._collect_power_values(direct_data, loc, t_string) + self._collect_power_values(data, loc, t_string) - self._count += len(direct_data["sensors"]) - return direct_data + self._count += len(data["sensors"]) + return data def _appliance_measurements( self, appliance: etree, - data: DeviceData, + data: GwEntityData, measurements: dict[str, DATA | UOM], ) -> None: """Helper-function for _get_measurement_data() - collect appliance measurement data.""" @@ -619,14 +601,10 @@ def _appliance_measurements( appl_i_loc.text, ENERGY_WATT_HOUR ) - self._count += len(data["binary_sensors"]) - self._count += len(data["sensors"]) - self._count += len(data["switches"]) - # Don't count the above top-level dicts, only the remaining single items - self._count += len(data) - 3 + self._count_data_items(data) def _get_toggle_state( - self, xml: etree, toggle: str, name: ToggleNameType, data: DeviceData + self, xml: etree, toggle: str, name: ToggleNameType, data: GwEntityData ) -> None: """Helper-function for _get_measurement_data(). @@ -655,14 +633,16 @@ def _get_plugwise_notifications(self) -> None: ) def _get_actuator_functionalities( - self, xml: etree, device: DeviceData, data: DeviceData + self, xml: etree, entity: GwEntityData, data: GwEntityData ) -> None: """Helper-function for _get_measurement_data().""" for item in ACTIVE_ACTUATORS: # Skip max_dhw_temperature, not initially valid, - # skip thermostat for thermo_sensors + # skip thermostat for all but zones with thermostats if item == "max_dhw_temperature" or ( - item == "thermostat" and device["dev_class"] == "thermo_sensor" + item == "thermostat" and ( + entity["dev_class"] != "climate" if self.smile(ADAM) else entity["dev_class"] != "thermostat" + ) ): continue @@ -708,29 +688,52 @@ def _get_actuator_functionalities( act_item = cast(ActuatorType, item) data[act_item] = temp_dict - def _get_regulation_mode(self, appliance: etree, data: DeviceData) -> None: + def _get_regulation_mode( + self, appliance: etree, entity_id: str, data: GwEntityData + ) -> None: """Helper-function for _get_measurement_data(). - Collect the gateway regulation_mode. + Adam: collect the gateway regulation_mode. """ + if not (self.smile(ADAM) and entity_id == self.gateway_id): + return + locator = "./actuator_functionalities/regulation_mode_control_functionality" if (search := appliance.find(locator)) is not None: data["select_regulation_mode"] = search.find("mode").text self._count += 1 self._cooling_enabled = data["select_regulation_mode"] == "cooling" - def _get_gateway_mode(self, appliance: etree, data: DeviceData) -> None: + def _get_gateway_mode( + self, appliance: etree, entity_id: str, data: GwEntityData + ) -> None: """Helper-function for _get_measurement_data(). - Collect the gateway mode. + Adam: collect the gateway mode. """ + if not (self.smile(ADAM) and entity_id == self.gateway_id): + return + locator = "./actuator_functionalities/gateway_mode_control_functionality" if (search := appliance.find(locator)) is not None: data["select_gateway_mode"] = search.find("mode").text self._count += 1 + def _get_gateway_outdoor_temp(self, entity_id: str, data: GwEntityData) -> None: + """Adam & Anna: the Smile outdoor_temperature is present in DOMAIN_OBJECTS and LOCATIONS. + + Available under the Home location. + """ + if self._is_thermostat and entity_id == self.gateway_id: + outdoor_temperature = self._object_value( + self._home_location, "outdoor_temperature" + ) + if outdoor_temperature is not None: + data.update({"sensors": {"outdoor_temperature": outdoor_temperature}}) + self._count += 1 + def _object_value(self, obj_id: str, measurement: str) -> float | int | None: - """Helper-function for smile.py: _get_device_data() and _device_data_anna(). + """Helper-function for smile.py: _get_entity_data(). Obtain the value/state for the given object from a location in DOMAIN_OBJECTS """ @@ -742,35 +745,80 @@ def _object_value(self, obj_id: str, measurement: str) -> float | int | None: return val - def _process_c_heating_state(self, data: DeviceData) -> None: + def _process_c_heating_state(self, data: GwEntityData) -> None: """Helper-function for _get_measurement_data(). Process the central_heating_state value. """ + # Adam or Anna + OnOff device if self._on_off_device: - # Anna + OnOff heater: use central_heating_state to show heating_state - # Solution for Core issue #81839 - if self.smile(ANNA): - data["binary_sensors"]["heating_state"] = data["c_heating_state"] - - # Adam + OnOff cooling: use central_heating_state to show heating/cooling_state - if self.smile(ADAM): - if "heating_state" not in data["binary_sensors"]: - self._count += 1 - data["binary_sensors"]["heating_state"] = False - if "cooling_state" not in data["binary_sensors"]: - self._count += 1 - data["binary_sensors"]["cooling_state"] = False - if self._cooling_enabled: - data["binary_sensors"]["cooling_state"] = data["c_heating_state"] - else: - data["binary_sensors"]["heating_state"] = data["c_heating_state"] + self._process_on_off_device_c_heating_state(data) # Anna + Elga: use central_heating_state to show heating_state if self._elga: data["binary_sensors"]["heating_state"] = data["c_heating_state"] - def _cleanup_data(self, data: DeviceData) -> None: + def _process_on_off_device_c_heating_state(self, data: GwEntityData) -> None: + """Adam or Anna + OnOff device - use central_heating_state to show heating/cooling_state. + + Solution for Core issue #81839. + """ + if self.smile(ANNA): + data["binary_sensors"]["heating_state"] = data["c_heating_state"] + + if self.smile(ADAM): + if "heating_state" not in data["binary_sensors"]: + self._count += 1 + data["binary_sensors"]["heating_state"] = False + if "cooling_state" not in data["binary_sensors"]: + self._count += 1 + data["binary_sensors"]["cooling_state"] = False + if self._cooling_enabled: + data["binary_sensors"]["cooling_state"] = data["c_heating_state"] + else: + data["binary_sensors"]["heating_state"] = data["c_heating_state"] + + def _update_anna_cooling(self, entity_id: str, data: GwEntityData) -> None: + """Update the Anna heater_central device for cooling. + + Support added for Techneco Elga and Thercon Loria/Thermastage. + """ + if entity_id != self._heater_id: + return + + if "elga_status_code" in data: + self._update_elga_cooling(data) + elif self._cooling_present and "cooling_state" in data["binary_sensors"]: + self._update_loria_cooling(data) + + def _update_elga_cooling(self, data: GwEntityData) -> None: + """# Anna+Elga: base cooling_state on the elga-status-code.""" + if data["thermostat_supports_cooling"]: + # Techneco Elga has cooling-capability + self._cooling_present = True + data["model"] = "Generic heater/cooler" + self._cooling_enabled = data["elga_status_code"] in (8, 9) + data["binary_sensors"]["cooling_state"] = self._cooling_active = ( + data["elga_status_code"] == 8 + ) + # Elga has no cooling-switch + if "cooling_ena_switch" in data["switches"]: + data["switches"].pop("cooling_ena_switch") + self._count -= 1 + + data.pop("elga_status_code", None) + self._count -= 1 + + def _update_loria_cooling(self, data: GwEntityData) -> None: + """Loria/Thermastage: base cooling-related on cooling_state and modulation_level.""" + self._cooling_enabled = data["binary_sensors"]["cooling_state"] + self._cooling_active = data["sensors"]["modulation_level"] == 100 + # For Loria the above does not work (pw-beta issue #301) + if "cooling_ena_switch" in data["switches"]: + self._cooling_enabled = data["switches"]["cooling_ena_switch"] + self._cooling_active = data["binary_sensors"]["cooling_state"] + + def _cleanup_data(self, data: GwEntityData) -> None: """Helper-function for _get_measurement_data(). Clean up the data dict. @@ -793,7 +841,7 @@ def _cleanup_data(self, data: DeviceData) -> None: self._count -= 1 def _scan_thermostats(self) -> None: - """Helper-function for smile.py: get_all_devices(). + """Helper-function for smile.py: get_all_entities(). Update locations with thermostat ranking results and use the result to update the device_class of secondary thermostats. @@ -801,22 +849,26 @@ def _scan_thermostats(self) -> None: self._thermo_locs = self._match_locations() thermo_matching: dict[str, int] = { - "thermostat": 3, + "thermostat": 2, "zone_thermometer": 2, "zone_thermostat": 2, "thermostatic_radiator_valve": 1, } for loc_id in self._thermo_locs: - for dev_id, device in self.gw_devices.items(): - self._rank_thermostat(thermo_matching, loc_id, dev_id, device) - - # Update secondary thermostat class where needed - for dev_id, device in self.gw_devices.items(): - if (loc_id := device["location"]) in self._thermo_locs: - tl_loc_id = self._thermo_locs[loc_id] - if "secondary" in tl_loc_id and dev_id in tl_loc_id["secondary"]: - device["dev_class"] = "thermo_sensor" + for entity_id, entity in self.gw_entities.items(): + self._rank_thermostat(thermo_matching, loc_id, entity_id, entity) + + for loc_id, loc_data in list(self._thermo_locs.items()): + if loc_data["primary_prio"] != 0: + self._zones[loc_id] = { + "dev_class": "climate", + "model": "ThermoZone", + "name": loc_data["name"], + "thermostats": {"primary": loc_data["primary"], "secondary": loc_data["secondary"]}, + "vendor": "Plugwise", + } + self._count += 3 def _match_locations(self) -> dict[str, ThermoLoc]: """Helper-function for _scan_thermostats(). @@ -824,11 +876,11 @@ def _match_locations(self) -> dict[str, ThermoLoc]: Match appliances with locations. """ matched_locations: dict[str, ThermoLoc] = {} - for location_id, location_details in self.loc_data.items(): - for appliance_details in self.gw_devices.values(): + for location_id, location_details in self._loc_data.items(): + for appliance_details in self.gw_entities.values(): if appliance_details["location"] == location_id: location_details.update( - {"primary": None, "primary_prio": 0, "secondary": set()} + {"primary": [], "primary_prio": 0, "secondary": []} ) matched_locations[location_id] = location_details @@ -839,30 +891,34 @@ def _rank_thermostat( thermo_matching: dict[str, int], loc_id: str, appliance_id: str, - appliance_details: DeviceData, + appliance_details: GwEntityData, ) -> None: """Helper-function for _scan_thermostats(). Rank the thermostat based on appliance_details: primary or secondary. + Note: there can be several primary and secondary thermostats. """ appl_class = appliance_details["dev_class"] appl_d_loc = appliance_details["location"] + thermo_loc = self._thermo_locs[loc_id] if loc_id == appl_d_loc and appl_class in thermo_matching: + if thermo_matching[appl_class] == thermo_loc["primary_prio"]: + thermo_loc["primary"].append(appliance_id) # Pre-elect new primary - if thermo_matching[appl_class] > self._thermo_locs[loc_id]["primary_prio"]: + elif (thermo_rank := thermo_matching[appl_class]) > thermo_loc["primary_prio"]: + thermo_loc["primary_prio"] = thermo_rank # Demote former primary - if (tl_primary:= self._thermo_locs[loc_id]["primary"]) is not None: - self._thermo_locs[loc_id]["secondary"].add(tl_primary) + if (tl_primary := thermo_loc["primary"]): + thermo_loc["secondary"] += tl_primary + thermo_loc["primary"] = [] # Crown primary - self._thermo_locs[loc_id]["primary_prio"] = thermo_matching[appl_class] - self._thermo_locs[loc_id]["primary"] = appliance_id - + thermo_loc["primary"].append(appliance_id) else: - self._thermo_locs[loc_id]["secondary"].add(appliance_id) + thermo_loc["secondary"].append(appliance_id) def _control_state(self, loc_id: str) -> str | bool: - """Helper-function for _device_data_adam(). + """Helper-function for _get_adam_data(). Adam: find the thermostat control_state of a location, from DOMAIN_OBJECTS. Represents the heating/cooling demand-state of the local primary thermostat. @@ -877,7 +933,7 @@ def _control_state(self, loc_id: str) -> str | bool: return False def _heating_valves(self) -> int | bool: - """Helper-function for smile.py: _device_data_adam(). + """Helper-function for smile.py: _get_adam_data(). Collect amount of open valves indicating active direct heating. For cases where the heat is provided from an external shared source (city heating). @@ -962,7 +1018,7 @@ def _rule_ids_by_tag(self, tag: str, loc_id: str) -> dict[str, dict[str, str]]: return schedule_ids def _schedules(self, location: str) -> tuple[list[str], str]: - """Helper-function for smile.py: _device_data_climate(). + """Helper-function for smile.py: _climate_data(). Obtain the available schedules/schedules. Adam: a schedule can be connected to more than one location. NEW: when a location_id is present then the schedule is active. Valid for both Adam and non-legacy Anna. diff --git a/plugwise/legacy/data.py b/plugwise/legacy/data.py index ee16ddf10..66b089ead 100644 --- a/plugwise/legacy/data.py +++ b/plugwise/legacy/data.py @@ -6,7 +6,7 @@ # Dict as class # Version detection -from plugwise.constants import NONE, OFF, DeviceData +from plugwise.constants import NONE, OFF, GwEntityData from plugwise.legacy.helper import SmileLegacyHelper from plugwise.util import remove_empty_platform_dicts @@ -18,12 +18,12 @@ def __init__(self) -> None: """Init.""" SmileLegacyHelper.__init__(self) - def _all_device_data(self) -> None: - """Helper-function for get_all_devices(). + def _all_entity_data(self) -> None: + """Helper-function for get_all_gateway_entities(). - Collect data for each device and add to self.gw_data and self.gw_devices. + Collect data for each entity and add to self.gw_data and self.gw_entities. """ - self._update_gw_devices() + self._update_gw_entities() self.gw_data.update( { "gateway_id": self.gateway_id, @@ -36,40 +36,40 @@ def _all_device_data(self) -> None: {"heater_id": self._heater_id, "cooling_present": False} ) - def _update_gw_devices(self) -> None: - """Helper-function for _all_device_data() and async_update(). + def _update_gw_entities(self) -> None: + """Helper-function for _all_entity_data() and async_update(). - Collect data for each device and add to self.gw_devices. + Collect data for each entity and add to self.gw_entities. """ - for device_id, device in self.gw_devices.items(): - data = self._get_device_data(device_id) - device.update(data) - remove_empty_platform_dicts(device) + for entity_id, entity in self.gw_entities.items(): + data = self._get_entity_data(entity_id) + entity.update(data) + remove_empty_platform_dicts(entity) - def _get_device_data(self, dev_id: str) -> DeviceData: - """Helper-function for _all_device_data() and async_update(). + def _get_entity_data(self, entity_id: str) -> GwEntityData: + """Helper-function for _all_entity_data() and async_update(). - Provide device-data, based on Location ID (= dev_id), from APPLIANCES. + Provide entity-data, based on Location ID (= entity_id), from APPLIANCES. """ - device = self.gw_devices[dev_id] - data = self._get_measurement_data(dev_id) + entity = self.gw_entities[entity_id] + data = self._get_measurement_data(entity_id) # Switching groups data - self._device_data_switching_group(device, data) + self._entity_switching_group(entity, data) # Skip obtaining data when not a thermostat - if device["dev_class"] != "thermostat": + if entity["dev_class"] != "thermostat": return data # Thermostat data (presets, temperatures etc) - self._device_data_climate(device, data) + self._climate_data(entity, data) return data - def _device_data_climate(self, device: DeviceData, data: DeviceData) -> None: - """Helper-function for _get_device_data(). + def _climate_data(self, entity: GwEntityData, data: GwEntityData) -> None: + """Helper-function for _get_entity_data(). - Determine climate-control device data. + Determine climate-control entity data. """ # Presets data["preset_modes"] = None diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index a9a62cb88..861b943dd 100644 --- a/plugwise/legacy/helper.py +++ b/plugwise/legacy/helper.py @@ -29,8 +29,8 @@ ActuatorDataType, ActuatorType, ApplianceType, - DeviceData, GatewayData, + GwEntityData, SensorType, ThermoLoc, ) @@ -68,6 +68,7 @@ def __init__(self) -> None: self._home_location: str self._is_thermostat: bool self._last_modified: dict[str, str] = {} + self._loc_data: dict[str, ThermoLoc] self._locations: etree self._modules: etree self._notifications: dict[str, dict[str, str]] = {} @@ -80,8 +81,7 @@ def __init__(self) -> None: self.gateway_id: str self.gw_data: GatewayData = {} - self.gw_devices: dict[str, DeviceData] = {} - self.loc_data: dict[str, ThermoLoc] + self.gw_entities: dict[str, GwEntityData] = {} self.smile_fw_version: Version | None self.smile_hw_version: str | None self.smile_mac_address: str | None @@ -115,7 +115,7 @@ def _all_appliances(self) -> None: continue # pragma: no cover appl.location = self._home_location - appl.dev_id = appliance.attrib["id"] + appl.entity_id = appliance.attrib["id"] appl.name = appliance.find("name").text # Extend device_class name when a Circle/Stealth is type heater_central -- Pw-Beta Issue #739 if ( @@ -139,20 +139,20 @@ def _all_appliances(self) -> None: continue # Skip orphaned heater_central (Core Issue #104433) - if appl.pwclass == "heater_central" and appl.dev_id != self._heater_id: + if appl.pwclass == "heater_central" and appl.entity_id != self._heater_id: continue # pragma: no cover - self._create_gw_devices(appl) + self._create_gw_entities(appl) # Place the gateway and optional heater_central devices as 1st and 2nd for dev_class in ("heater_central", "gateway"): - for dev_id, device in dict(self.gw_devices).items(): - if device["dev_class"] == dev_class: - tmp_device = device - self.gw_devices.pop(dev_id) - cleared_dict = self.gw_devices - add_to_front = {dev_id: tmp_device} - self.gw_devices = {**add_to_front, **cleared_dict} + for entity_id, entity in dict(self.gw_entities).items(): + if entity["dev_class"] == dev_class: + tmp_entity = entity + self.gw_entities.pop(entity_id) + cleared_dict = self.gw_entities + add_to_front = {entity_id: tmp_entity} + self.gw_entities = {**add_to_front, **cleared_dict} def _all_locations(self) -> None: """Collect all locations.""" @@ -161,7 +161,7 @@ def _all_locations(self) -> None: # Legacy Anna without outdoor_temp and Stretches have no locations, create fake location-data if not (locations := self._locations.findall("./location")): self._home_location = FAKE_LOC - self.loc_data[FAKE_LOC] = {"name": "Home"} + self._loc_data[FAKE_LOC] = {"name": "Home"} return for location in locations: @@ -182,18 +182,18 @@ def _all_locations(self) -> None: loc.name = "Home" self._home_location = loc.loc_id - self.loc_data[loc.loc_id] = {"name": loc.name} + self._loc_data[loc.loc_id] = {"name": loc.name} def _create_legacy_gateway(self) -> None: - """Create the (missing) gateway devices for legacy Anna, P1 and Stretch. + """Create the (missing) gateway entities for legacy Anna, P1 and Stretch. - Use the home_location or FAKE_APPL as device id. + Use the home_location or FAKE_APPL as entity id. """ self.gateway_id = self._home_location if self.smile_type == "power": self.gateway_id = FAKE_APPL - self.gw_devices[self.gateway_id] = {"dev_class": "gateway"} + self.gw_entities[self.gateway_id] = {"dev_class": "gateway"} self._count += 1 for key, value in { "firmware": str(self.smile_fw_version), @@ -206,28 +206,28 @@ def _create_legacy_gateway(self) -> None: }.items(): if value is not None: gw_key = cast(ApplianceType, key) - self.gw_devices[self.gateway_id][gw_key] = value + self.gw_entities[self.gateway_id][gw_key] = value self._count += 1 def _appliance_info_finder(self, appliance: etree, appl: Munch) -> Munch: - """Collect device info (Smile/Stretch, Thermostats, OpenTherm/On-Off): firmware, model and vendor name.""" + """Collect entity info (Smile/Stretch, Thermostats, OpenTherm/On-Off): firmware, model and vendor name.""" match appl.pwclass: - # Collect thermostat device info + # Collect thermostat entity info case _ as dev_class if dev_class in THERMOSTAT_CLASSES: return self._appl_thermostat_info(appl, appliance, self._modules) - # Collect heater_central device info + # Collect heater_central entity info case "heater_central": return self._appl_heater_central_info( appl, appliance, True, self._appliances, self._modules ) # True means legacy device # Collect info from Stretches case _: - return self._energy_device_info_finder(appliance, appl) + return self._energy_entity_info_finder(appliance, appl) - def _energy_device_info_finder(self, appliance: etree, appl: Munch) -> Munch: + def _energy_entity_info_finder(self, appliance: etree, appl: Munch) -> Munch: """Helper-function for _appliance_info_finder(). - Collect energy device info (Smartmeter, Circle, Stealth, etc.): firmware, model and vendor name. + Collect energy entity info (Smartmeter, Circle, Stealth, etc.): firmware, model and vendor name. """ if self.smile_type in ("power", "stretch"): locator = "./services/electricity_point_meter" @@ -251,9 +251,9 @@ def _energy_device_info_finder(self, appliance: etree, appl: Munch) -> Munch: def _p1_smartmeter_info_finder(self, appl: Munch) -> None: """Collect P1 DSMR Smartmeter info.""" - loc_id = next(iter(self.loc_data.keys())) + loc_id = next(iter(self._loc_data.keys())) appl.available = None - appl.dev_id = loc_id + appl.entity_id = loc_id appl.location = loc_id appl.mac = None appl.model = self.smile_model @@ -262,41 +262,41 @@ def _p1_smartmeter_info_finder(self, appl: Munch) -> None: appl.pwclass = "smartmeter" appl.zigbee_mac = None location = self._locations.find(f'./location[@id="{loc_id}"]') - appl = self._energy_device_info_finder(location, appl) + appl = self._energy_entity_info_finder(location, appl) - self._create_gw_devices(appl) + self._create_gw_entities(appl) - def _get_measurement_data(self, dev_id: str) -> DeviceData: - """Helper-function for smile.py: _get_device_data(). + def _get_measurement_data(self, entity_id: str) -> GwEntityData: + """Helper-function for smile.py: _get_entity_data(). - Collect the appliance-data based on device id. + Collect the appliance-data based on entity_id. """ - data: DeviceData = {"binary_sensors": {}, "sensors": {}, "switches": {}} + data: GwEntityData = {"binary_sensors": {}, "sensors": {}, "switches": {}} # Get P1 smartmeter data from LOCATIONS or MODULES - device = self.gw_devices[dev_id] + entity = self.gw_entities[entity_id] # !! DON'T CHANGE below two if-lines, will break stuff !! if self.smile_type == "power": - if device["dev_class"] == "smartmeter": + if entity["dev_class"] == "smartmeter": data.update(self._power_data_from_modules()) return data measurements = DEVICE_MEASUREMENTS - if self._is_thermostat and dev_id == self._heater_id: + if self._is_thermostat and entity_id == self._heater_id: measurements = HEATER_CENTRAL_MEASUREMENTS if ( - appliance := self._appliances.find(f'./appliance[@id="{dev_id}"]') + appliance := self._appliances.find(f'./appliance[@id="{entity_id}"]') ) is not None: self._appliance_measurements(appliance, data, measurements) self._get_lock_state(appliance, data, self._stretch_v2) if appliance.find("type").text in ACTUATOR_CLASSES: - self._get_actuator_functionalities(appliance, device, data) + self._get_actuator_functionalities(appliance, entity, data) # Adam & Anna: the Smile outdoor_temperature is present in DOMAIN_OBJECTS and LOCATIONS - under Home # The outdoor_temperature present in APPLIANCES is a local sensor connected to the active device - if self._is_thermostat and dev_id == self.gateway_id: + if self._is_thermostat and entity_id == self.gateway_id: outdoor_temperature = self._object_value( self._home_location, "outdoor_temperature" ) @@ -310,12 +310,12 @@ def _get_measurement_data(self, dev_id: str) -> DeviceData: return data - def _power_data_from_modules(self) -> DeviceData: - """Helper-function for smile.py: _get_device_data(). + def _power_data_from_modules(self) -> GwEntityData: + """Helper-function for smile.py: _get_entity_data(). Collect the power-data from MODULES (P1 legacy only). """ - direct_data: DeviceData = {"sensors": {}} + data: GwEntityData = {"sensors": {}} loc = Munch() mod_list: list[str] = ["interval_meter", "cumulative_meter", "point_meter"] t_string = "tariff_indicator" @@ -326,15 +326,15 @@ def _power_data_from_modules(self) -> DeviceData: loc.meas_list = loc.measurement.split("_") for loc.logs in mod_logs: for loc.log_type in mod_list: - self._collect_power_values(direct_data, loc, t_string, legacy=True) + self._collect_power_values(data, loc, t_string, legacy=True) - self._count += len(direct_data["sensors"]) - return direct_data + self._count += len(data["sensors"]) + return data def _appliance_measurements( self, appliance: etree, - data: DeviceData, + data: GwEntityData, measurements: dict[str, DATA | UOM], ) -> None: """Helper-function for _get_measurement_data() - collect appliance measurement data.""" @@ -359,21 +359,20 @@ def _appliance_measurements( appl_i_loc.text, ENERGY_WATT_HOUR ) - self._count += len(data["binary_sensors"]) - self._count += len(data["sensors"]) - self._count += len(data["switches"]) - # Don't count the above top-level dicts, only the remaining single items - self._count += len(data) - 3 + self._count_data_items(data) def _get_actuator_functionalities( - self, xml: etree, device: DeviceData, data: DeviceData + self, + xml: etree, + entity: GwEntityData, + data: GwEntityData ) -> None: """Helper-function for _get_measurement_data().""" for item in ACTIVE_ACTUATORS: # Skip max_dhw_temperature, not initially valid, # skip thermostat for thermo_sensors if item == "max_dhw_temperature" or ( - item == "thermostat" and device["dev_class"] == "thermo_sensor" + item == "thermostat" and entity["dev_class"] == "thermo_sensor" ): continue @@ -401,7 +400,7 @@ def _get_actuator_functionalities( data[act_item] = temp_dict def _object_value(self, obj_id: str, measurement: str) -> float | int | None: - """Helper-function for smile.py: _get_device_data() and _device_data_anna(). + """Helper-function for smile.py: _get_entity_data(). Obtain the value/state for the given object from a location in DOMAIN_OBJECTS """ @@ -415,7 +414,7 @@ def _object_value(self, obj_id: str, measurement: str) -> float | int | None: return val def _preset(self) -> str | None: - """Helper-function for smile.py: device_data_climate(). + """Helper-function for smile.py: _climate_data(). Collect the active preset based on the active rule. """ diff --git a/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index a1813105a..c1df96fdc 100644 --- a/plugwise/legacy/smile.py +++ b/plugwise/legacy/smile.py @@ -19,8 +19,8 @@ OFF, REQUIRE_APPLIANCES, RULES, - DeviceData, GatewayData, + GwEntityData, PlugwiseData, ThermoLoc, ) @@ -44,11 +44,11 @@ def __init__( request: Callable[..., Awaitable[Any]], websession: aiohttp.ClientSession, _is_thermostat: bool, + _loc_data: dict[str, ThermoLoc], _on_off_device: bool, _opentherm_device: bool, _stretch_v2: bool, _target_smile: str, - loc_data: dict[str, ThermoLoc], smile_fw_version: Version | None, smile_hostname: str, smile_hw_version: str | None, @@ -61,15 +61,13 @@ def __init__( username: str = DEFAULT_USERNAME, ) -> None: """Set the constructor for this class.""" - SmileLegacyData.__init__(self) - self._cooling_present = False self._is_thermostat = _is_thermostat + self._loc_data = _loc_data self._on_off_device = _on_off_device self._opentherm_device = _opentherm_device self._stretch_v2 = _stretch_v2 self._target_smile = _target_smile - self.loc_data = loc_data self.request = request self.smile_fw_version = smile_fw_version self.smile_hostname = smile_hostname @@ -79,10 +77,11 @@ def __init__( self.smile_name = smile_name self.smile_type = smile_type self.smile_zigbee_mac_address = smile_zigbee_mac_address + SmileLegacyData.__init__(self) self._previous_day_number: str = "0" - async def full_update_device(self) -> None: + async def full_xml_update(self) -> None: """Perform a first fetch of all XML data, needed for initialization.""" self._domain_objects = await self.request(DOMAIN_OBJECTS) self._locations = await self.request(LOCATIONS) @@ -91,8 +90,8 @@ async def full_update_device(self) -> None: if self.smile_type != "power": self._appliances = await self.request(APPLIANCES) - def get_all_devices(self) -> None: - """Determine the evices present from the obtained XML-data. + def get_all_gateway_entities(self) -> None: + """Collect the gateway entities from the received raw XML-data. Run this functions once to gather the initial device configuration, then regularly run async_update() to refresh the device data. @@ -102,10 +101,10 @@ def get_all_devices(self) -> None: # Collect and add switching- and/or pump-group devices if group_data := self._get_group_switches(): - self.gw_devices.update(group_data) + self.gw_entities.update(group_data) - # Collect the remaining data for all devices - self._all_device_data() + # Collect the remaining data for all entities + self._all_entity_data() async def async_update(self) -> PlugwiseData: """Perform an incremental update for updating the various device states.""" @@ -119,9 +118,9 @@ async def async_update(self) -> PlugwiseData: "Performing daily full-update, reload the Plugwise integration when a single entity becomes unavailable." ) self.gw_data: GatewayData = {} - self.gw_devices: dict[str, DeviceData] = {} - await self.full_update_device() - self.get_all_devices() + self.gw_entities: dict[str, GwEntityData] = {} + await self.full_xml_update() + self.get_all_gateway_entities() # Otherwise perform an incremental update else: self._domain_objects = await self.request(DOMAIN_OBJECTS) @@ -131,10 +130,13 @@ async def async_update(self) -> PlugwiseData: case self._target_smile if self._target_smile in REQUIRE_APPLIANCES: self._appliances = await self.request(APPLIANCES) - self._update_gw_devices() + self._update_gw_entities() self._previous_day_number = day_number - return PlugwiseData(self.gw_data, self.gw_devices) + return PlugwiseData( + devices=self.gw_entities, + gateway=self.gw_data, + ) ######################################################################################################## ### API Set and HA Service-related Functions ### diff --git a/plugwise/smile.py b/plugwise/smile.py index 9a725a470..eac7824ee 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -22,8 +22,8 @@ NOTIFICATIONS, OFF, RULES, - DeviceData, GatewayData, + GwEntityData, PlugwiseData, ThermoLoc, ) @@ -53,11 +53,11 @@ def __init__( _elga: bool, _is_thermostat: bool, _last_active: dict[str, str | None], + _loc_data: dict[str, ThermoLoc], _on_off_device: bool, _opentherm_device: bool, _schedule_old_states: dict[str, dict[str, str]], gateway_id: str, - loc_data: dict[str, ThermoLoc], smile_fw_version: Version | None, smile_hostname: str | None, smile_hw_version: str | None, @@ -70,17 +70,17 @@ def __init__( username: str = DEFAULT_USERNAME, ) -> None: """Set the constructor for this class.""" - SmileData.__init__(self) - + self._cooling_enabled = False self._cooling_present = _cooling_present self._elga = _elga + self._heater_id: str self._is_thermostat = _is_thermostat self._last_active = _last_active + self._loc_data = _loc_data self._on_off_device = _on_off_device self._opentherm_device = _opentherm_device self._schedule_old_states = _schedule_old_states self.gateway_id = gateway_id - self.loc_data = loc_data self.request = request self.smile_fw_version = smile_fw_version self.smile_hostname = smile_hostname @@ -90,22 +90,21 @@ def __init__( self.smile_model_id = smile_model_id self.smile_name = smile_name self.smile_type = smile_type + SmileData.__init__(self) - self._heater_id: str - self._cooling_enabled = False - async def full_update_device(self) -> None: + async def full_xml_update(self) -> None: """Perform a first fetch of all XML data, needed for initialization.""" self._domain_objects = await self.request(DOMAIN_OBJECTS) self._get_plugwise_notifications() - def get_all_devices(self) -> None: - """Determine the evices present from the obtained XML-data. + def get_all_gateway_entities(self) -> None: + """Collect the gateway entities from the received raw XML-data. - Run this functions once to gather the initial device configuration, - then regularly run async_update() to refresh the device data. + Run this functions once to gather the initial configuration, + then regularly run async_update() to refresh the entity data. """ - # Gather all the devices and their initial data + # Gather all the entities and their initial data self._all_appliances() if self._is_thermostat: if self.smile(ADAM): @@ -117,20 +116,21 @@ def get_all_devices(self) -> None: # Collect and add switching- and/or pump-group devices if group_data := self._get_group_switches(): - self.gw_devices.update(group_data) + self.gw_entities.update(group_data) - # Collect the remaining data for all devices - self._all_device_data() + # Collect the remaining data for all entities + self._all_entity_data() async def async_update(self) -> PlugwiseData: """Perform an incremental update for updating the various device states.""" self.gw_data: GatewayData = {} - self.gw_devices: dict[str, DeviceData] = {} + self.gw_entities: dict[str, GwEntityData] = {} + self._zones: dict[str, GwEntityData] = {} try: - await self.full_update_device() - self.get_all_devices() + await self.full_xml_update() + self.get_all_gateway_entities() if "heater_id" in self.gw_data: - heat_cooler = self.gw_devices[self.gw_data["heater_id"]] + heat_cooler = self.gw_entities[self.gw_data["heater_id"]] if ( "binary_sensors" in heat_cooler and "cooling_enabled" in heat_cooler["binary_sensors"] @@ -139,7 +139,10 @@ async def async_update(self) -> PlugwiseData: except KeyError as err: raise DataMissingError("No Plugwise data received") from err - return PlugwiseData(self.gw_data, self.gw_devices) + return PlugwiseData( + devices=self.gw_entities, + gateway=self.gw_data, + ) ######################################################################################################## ### API Set and HA Service-related Functions ### diff --git a/plugwise/util.py b/plugwise/util.py index 5798feb28..7beec330e 100644 --- a/plugwise/util.py +++ b/plugwise/util.py @@ -22,8 +22,8 @@ TEMP_CELSIUS, UOM, BinarySensorType, - DeviceData, - ModelData, + GwEntityData, + ModuleData, SensorType, SpecialType, SwitchType, @@ -122,7 +122,7 @@ def common_match_cases( measurement: str, attrs: DATA | UOM, location: etree, - data: DeviceData, + data: GwEntityData, ) -> None: """Helper-function for common match-case execution.""" value = location.text in ("on", "true") @@ -179,7 +179,7 @@ def format_measure(measure: str, unit: str) -> float | int: return result -def get_vendor_name(module: etree, model_data: ModelData) -> ModelData: +def get_vendor_name(module: etree, model_data: ModuleData) -> ModuleData: """Helper-function for _get_model_data().""" if (vendor_name := module.find("vendor_name").text) is not None: model_data["vendor_name"] = vendor_name @@ -202,7 +202,7 @@ def power_data_local_format( return format_measure(val, attrs_uom) -def remove_empty_platform_dicts(data: DeviceData) -> None: +def remove_empty_platform_dicts(data: GwEntityData) -> None: """Helper-function for removing any empty platform dicts.""" if not data["binary_sensors"]: data.pop("binary_sensors") diff --git a/pyproject.toml b/pyproject.toml index ebc2b3cde..67d8fb350 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "plugwise" -version = "1.5.2" +version = "1.6.0" license = {file = "LICENSE"} description = "Plugwise Smile (Adam/Anna/P1) and Stretch module for Python 3." readme = "README.md" @@ -169,6 +169,7 @@ overgeneral-exceptions = [ ] [tool.pytest.ini_options] +asyncio_default_fixture_loop_scope = "function" asyncio_mode = "strict" markers = [ # mark a test as a asynchronous io test. @@ -278,7 +279,7 @@ lint.select = [ "TID251", # Banned imports "TRY004", # Prefer TypeError exception for invalid type # "TRY200", # TRY200 has been remapped to B904 - "TRY302", # Remove exception handler; error is immediately re-raised + "TRY203", # Remove exception handler; error is immediately re-raised "UP", # pyupgrade "W", # pycodestyle ] diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py index 1ec96d80d..d806cc36d 100755 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -35,9 +35,9 @@ def json_writer(manual_name: str, all_data: dict) -> None: adam_multiple_devices_per_zone = base.copy() -# Change schedule to not present for "e7693eb9582644e5b865dba8d4447cf1" -adam_multiple_devices_per_zone["devices"]["e7693eb9582644e5b865dba8d4447cf1"].pop("available_schedules") -adam_multiple_devices_per_zone["devices"]["e7693eb9582644e5b865dba8d4447cf1"].pop("select_schedule") +# Change schedule to not present for "446ac08dd04d4eff8ac57489757b7314" +adam_multiple_devices_per_zone["devices"]["446ac08dd04d4eff8ac57489757b7314"].pop("available_schedules") +adam_multiple_devices_per_zone["devices"]["446ac08dd04d4eff8ac57489757b7314"].pop("select_schedule") json_writer("m_adam_multiple_devices_per_zone", adam_multiple_devices_per_zone) @@ -49,8 +49,8 @@ def json_writer(manual_name: str, all_data: dict) -> None: adam_jip = base.copy() -# Change mode to off for "1346fbd8498d4dbcab7e18d51b771f3d" -adam_jip["devices"]["1346fbd8498d4dbcab7e18d51b771f3d"]["climate_mode"] = "off" +# Change mode to off for "06aecb3d00354375924f50c47af36bd2" +adam_jip["devices"]["06aecb3d00354375924f50c47af36bd2"]["climate_mode"] = "off" json_writer("m_adam_jip", adam_jip) @@ -69,37 +69,35 @@ def json_writer(manual_name: str, all_data: dict) -> None: m_adam_cooling["gateway"]["cooling_present"] = True m_adam_cooling["gateway"]["item_count"] = 89 -# Remove devices "67d73d0bd469422db25a618a5fb8eeb0" and "10016900610d4c7481df78c89606ef22" from anywhere +# Remove devices 67d73d0bd469422db25a618a5fb8eeb0, 29542b2b6a6a4169acecc15c72a599b8 and 10016900610d4c7481df78c89606ef22 from anywhere +m_adam_cooling["devices"].pop("29542b2b6a6a4169acecc15c72a599b8") m_adam_cooling["devices"].pop("67d73d0bd469422db25a618a5fb8eeb0") m_adam_cooling["devices"].pop("10016900610d4c7481df78c89606ef22") -# Correct setpoint for "ad4838d7d35c4d6ea796ee12ae5aedf8" -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["thermostat"][ +# Correct setpoint for device "ad4838d7d35c4d6ea796ee12ae5aedf8" and zone "f2bf9048bef64cc5b6d5110154e33c81" +m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ "setpoint" ] = 23.5 - -# Add new key available -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["available"] = True - -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"][ +m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ + "temperature" +] = 25.8 +m_adam_cooling["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["thermostat"][ + "setpoint" +] = 23.5 +m_adam_cooling["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["sensors"][ + "temperature" +] = 25.8 +m_adam_cooling["devices"]["f2bf9048bef64cc5b6d5110154e33c81"][ "select_schedule" ] = "off" -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"][ +m_adam_cooling["devices"]["f2bf9048bef64cc5b6d5110154e33c81"][ "control_state" ] = "cooling" -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["climate_mode"] = "cool" +m_adam_cooling["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["climate_mode"] = "cool" -# (following diff, now 2954 is removed) -# Remove device "29542b2b6a6a4169acecc15c72a599b8" from anywhere -m_adam_cooling["devices"].pop("29542b2b6a6a4169acecc15c72a599b8") +# Add new key available +m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["available"] = True -# Back at ad48 -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ - "temperature" -] = 25.8 -m_adam_cooling["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ - "setpoint" -] = 23.5 # (again, following diff) # Remove device "2568cc4b9c1e401495d4741a5f89bee1" from anywhere @@ -109,21 +107,28 @@ def json_writer(manual_name: str, all_data: dict) -> None: m_adam_cooling["devices"].pop("854f8a9b0e7e425db97f1f110e1ce4b3") # Go for 1772 -m_adam_cooling["devices"]["1772a4ea304041adb83f357b751341ff"]["sensors"].pop("setpoint") m_adam_cooling["devices"]["1772a4ea304041adb83f357b751341ff"]["sensors"][ "temperature" ] = 21.6 # Go for e2f4 -m_adam_cooling["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["thermostat"][ +m_adam_cooling["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["sensors"][ "setpoint" -] = 25.0 +] = 23.5 m_adam_cooling["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["sensors"][ "temperature" ] = 23.9 -m_adam_cooling["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["sensors"][ +m_adam_cooling["devices"]["f871b8c4d63549319221e294e4f88074"]["thermostat"][ "setpoint" -] = 23.5 +] = 25.0 +m_adam_cooling["devices"]["f871b8c4d63549319221e294e4f88074"]["sensors"][ + "temperature" +] = 23.9 +m_adam_cooling["devices"]["f871b8c4d63549319221e294e4f88074"][ + "control_state" +] = "auto" +m_adam_cooling["devices"]["f871b8c4d63549319221e294e4f88074"]["climate_mode"] = "cool" + # Go for da22 m_adam_cooling["devices"]["da224107914542988a88561b4452b0f6"][ @@ -163,45 +168,49 @@ def json_writer(manual_name: str, all_data: dict) -> None: m_adam_heating["gateway"]["cooling_present"] = False # Correct setpoint for "ad4838d7d35c4d6ea796ee12ae5aedf8" -m_adam_heating["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["thermostat"][ +m_adam_heating["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["thermostat"][ "setpoint" ] = 20.0 - -m_adam_heating["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"][ - "control_state" -] = "preheating" - -m_adam_heating["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["climate_mode"] = "heat" - -# Back at ad48 m_adam_heating["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ "setpoint" ] = 20.0 +m_adam_heating["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["sensors"][ + "temperature" +] = 19.1 m_adam_heating["devices"]["ad4838d7d35c4d6ea796ee12ae5aedf8"]["sensors"][ "temperature" ] = 19.1 +m_adam_heating["devices"]["f2bf9048bef64cc5b6d5110154e33c81"][ + "control_state" +] = "preheating" +m_adam_heating["devices"]["f2bf9048bef64cc5b6d5110154e33c81"]["climate_mode"] = "heat" + # Go for 1772 m_adam_heating["devices"]["1772a4ea304041adb83f357b751341ff"]["sensors"][ "temperature" ] = 18.6 +# Related zone temperature is set below # Go for e2f4 -m_adam_heating["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["thermostat"][ +m_adam_heating["devices"]["f871b8c4d63549319221e294e4f88074"]["thermostat"][ "setpoint" ] = 15.0 - -m_adam_heating["devices"]["e2f4322d57924fa090fbbc48b3a140dc"][ - "control_state" -] = "off" - m_adam_heating["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["sensors"][ "setpoint" ] = 15.0 +m_adam_heating["devices"]["f871b8c4d63549319221e294e4f88074"]["sensors"][ + "temperature" +] = 17.9 m_adam_heating["devices"]["e2f4322d57924fa090fbbc48b3a140dc"]["sensors"][ "temperature" ] = 17.9 +m_adam_heating["devices"]["f871b8c4d63549319221e294e4f88074"]["climate_mode"] = "auto" +m_adam_heating["devices"]["f871b8c4d63549319221e294e4f88074"][ + "control_state" +] = "off" + # Go for da22 m_adam_heating["devices"]["da224107914542988a88561b4452b0f6"][ "select_regulation_mode" @@ -220,7 +229,7 @@ def json_writer(manual_name: str, all_data: dict) -> None: m_adam_heating["devices"]["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][ "heating_state" ] = True -m_adam_cooling["devices"]["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][ +m_adam_heating["devices"]["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][ "flame_state" ] = False m_adam_heating["devices"]["056ee145a816487eaa69243c3280f8bf"]["sensors"][ @@ -254,7 +263,6 @@ def json_writer(manual_name: str, all_data: dict) -> None: m_anna_heatpump_cooling["devices"]["1cbf783bb11e4a7c8a6843dee3a86927"][ "model" ] = "Generic heater/cooler" - m_anna_heatpump_cooling["devices"]["1cbf783bb11e4a7c8a6843dee3a86927"][ "binary_sensors" ]["cooling_enabled"] = True @@ -284,7 +292,6 @@ def json_writer(manual_name: str, all_data: dict) -> None: "outdoor_air_temperature" ] = 28.0 - # Go for 015a m_anna_heatpump_cooling["devices"]["015ae9ea3f964e668e490fa39da3870b"]["sensors"][ "outdoor_temperature" diff --git a/scripts/tests_and_coverage.sh b/scripts/tests_and_coverage.sh index 580482c44..c0d0d4f48 100755 --- a/scripts/tests_and_coverage.sh +++ b/scripts/tests_and_coverage.sh @@ -41,14 +41,17 @@ if [ -z "${GITHUB_ACTIONS}" ] || [ "$1" == "linting" ] ; then echo "... pylint-ing ..." pylint plugwise/ tests/ + + echo "... mypy-ing ..." + mypy plugwise/ fi # As to not generated fixtures, leaving biome to re-do them # so no auto-generation during github run of testing # Creating todo #313 to 'gracefully' do this on merge on github action if [ -z "${GITHUB_ACTIONS}" ] || [ "$1" == "fixtures" ] ; then - echo "... crafting manual fixtures ..." - PYTHONPATH=$(pwd) python3 scripts/manual_fixtures.py + echo "... crafting manual fixtures ..." + PYTHONPATH=$(pwd) python3 scripts/manual_fixtures.py fi echo "... biome-ing (fixtures and testdata) ..." ./tmp/biome lint --staged --files-ignore-unknown=true --no-errors-on-unmatched diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 2790e3ea2..029cbfcd4 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -1,576 +1,871 @@ { - "0ca13e8176204ca7bf6f09de59f81c83": { - "available": true, - "binary_sensors": { - "cooling_state": false, - "dhw_state": true, - "flame_state": false, - "heating_state": false - }, - "dev_class": "heater_central", - "location": "eedadcb297564f1483faa509179aebed", - "max_dhw_temperature": { - "lower_bound": 40.0, - "resolution": 0.01, - "setpoint": 60.0, - "upper_bound": 65.0 - }, - "maximum_boiler_temperature": { - "lower_bound": 7.0, - "resolution": 0.01, - "setpoint": 35.0, - "upper_bound": 50.0 - }, - "model": "Generic heater/cooler", - "model_id": "17.1", - "name": "OpenTherm", - "sensors": { - "dhw_temperature": 63.5, - "intended_boiler_temperature": 0.0, - "modulation_level": 0.0, - "outdoor_air_temperature": 13.5, - "return_temperature": 24.9, - "water_pressure": 2.0, - "water_temperature": 24.5 - }, - "switches": { - "dhw_cm_switch": true - }, - "vendor": "Remeha B.V." - }, - "1053c8bbf8be43c6921742b146a625f1": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "b52908550469425b812c87f766fe5303", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat BK", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "battery": 55, - "setpoint": 18.0, - "temperature": 18.8 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A17" - }, - "1a27dd03b5454c4e8b9e75c8d1afc7af": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "20e735858f8146cead98b873177a4f99", - "model": "Plug", - "name": "Smart Plug DB", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A05" - }, - "2e0fc4db2a6d4cbeb7cf786143543961": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "a562019b0b1f47a4bde8ebe3dbe3e8a9", - "model": "Plug", - "name": "Smart Plug KK", - "sensors": { - "electricity_consumed": 2.13, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": true - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A06" - }, - "3b4d2574e2c9443a832b48d19a1c4f06": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "04b15f6e884448288f811d29fb7b1b30", - "model": "Plug", - "name": "Smart Plug SJ", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A14" - }, - "3f0afa71f16c45ab964050002560e43c": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "fa5fa6b34f6b40a0972988b20e888ed4", - "model": "Plug", - "name": "Smart Plug WK", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A18" - }, - "47e2c550a33846b680725aa3fb229473": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "20e735858f8146cead98b873177a4f99", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat DB", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "setpoint": 18.0, - "temperature": 22.0 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A20" - }, - "5ead63c65e5f44e7870ba2bd680ceb9e": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "9a27714b970547ee9a6bdadc2b815ad5", - "model": "Plug", - "name": "Smart Plug SQ", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A15" - }, - "7d97fc3117784cfdafe347bcedcbbbcb": { - "binary_sensors": { - "plugwise_notification": false - }, - "dev_class": "gateway", - "firmware": "3.2.8", - "gateway_modes": ["away", "full", "vacation"], - "hardware": "AME Smile 2.0 board", - "location": "eedadcb297564f1483faa509179aebed", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Adam", - "select_gateway_mode": "full", - "select_regulation_mode": "cooling", - "regulation_modes": [ - "heating", - "off", - "bleeding_cold", - "bleeding_hot", - "cooling" - ], - "sensors": { - "outdoor_temperature": 13.4 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" - }, - "7fda9f84f01342f8afe9ebbbbff30c0f": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "e39529c79ab54fda9bed26cfc0447546", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat JM", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "setpoint": 18.0, - "temperature": 20.0 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A01" - }, - "838c2f48195242709b87217cf8d8a71f": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "b52908550469425b812c87f766fe5303", - "model": "Plug", - "name": "Smart Plug BK", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A12" - }, - "8a482fa9dddb43acb765d019d8c9838b": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "5cc21042f87f4b4c94ccb5537c47a53f", - "model": "Plug", - "name": "Smart Plug BK2", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A10" - }, - "96714ad90fc948bcbcb5021c4b9f5ae9": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "e39529c79ab54fda9bed26cfc0447546", - "model": "Plug", - "name": "Smart Plug JM", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A03" - }, - "a03b6e8e76dd4646af1a77c31dd9370c": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", - "model": "Plug", - "name": "Smart Plug RB", - "sensors": { - "electricity_consumed": 3.13, - "electricity_consumed_interval": 0.77, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A08" - }, - "bbcffa48019f4b09b8368bbaf9559e68": { - "available": true, - "dev_class": "valve_actuator_plug", - "firmware": "2020-05-13T02:00:00+02:00", - "location": "8cf650a4c10c44819e426bed406aec34", - "model": "Plug", - "name": "Smart Plug BK1", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": false - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A16" - }, - "beb32da072274e698146db8b022f3c36": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "9a27714b970547ee9a6bdadc2b815ad5", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat SQ", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "setpoint": 18.5, - "temperature": 21.4 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.5, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A07" - }, - "c4ed311d54e341f58b4cdd201d1fde7e": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat RB", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "setpoint": 17.0, - "temperature": 20.7 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 17.0, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A04" - }, - "ca79d23ae0094120b877558734cff85c": { - "active_preset": "away", - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "thermostat", - "location": "fa5fa6b34f6b40a0972988b20e888ed4", - "climate_mode": "auto", - "model": "ThermoTouch", - "name": "Thermostaat WK", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "Werkdag schema", - "sensors": { - "setpoint": 21.5, - "temperature": 22.5 - }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 21.5, - "upper_bound": 35.0 - }, - "vendor": "Plugwise" - }, - "d3a276aeb3114a509bab1e4bf8c40348": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "04b15f6e884448288f811d29fb7b1b30", - "climate_mode": "cool", - "model": "Lisa", - "name": "Thermostaat SJ", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "off", - "sensors": { - "setpoint": 20.5, - "temperature": 22.6 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A13" - }, - "ea8372c0e3ad4622ad45a041d02425f5": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "a562019b0b1f47a4bde8ebe3dbe3e8a9", - "climate_mode": "auto", - "model": "Lisa", - "name": "Thermostaat KK", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "Werkdag schema", - "sensors": { - "battery": 53, - "setpoint": 21.5, - "temperature": 22.5 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 21.5, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A02" - }, - "eac5db95d97241f6b17790897847ccf5": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "8cf650a4c10c44819e426bed406aec34", - "climate_mode": "auto", - "model": "Lisa", - "name": "Thermostaat BK1", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "Werkdag schema", - "sensors": { - "setpoint": 20.5, - "temperature": 21.5 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A09" - }, - "f04c985c11ad4848b8fcd710343f9dcf": { - "active_preset": "away", - "available": true, - "available_schedules": [ - "Opstaan weekdag", - "Werkdag schema", - "Weekend", - "off" - ], - "control_state": "off", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "5cc21042f87f4b4c94ccb5537c47a53f", - "climate_mode": "auto", - "model": "Lisa", - "name": "Thermostaat BK2", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], - "select_schedule": "Werkdag schema", - "sensors": { - "setpoint": 20.5, - "temperature": 21.9 - }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 20.5, - "upper_bound": 99.9 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A11" + "entities": { + "04b15f6e884448288f811d29fb7b1b30": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer SJ", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "d3a276aeb3114a509bab1e4bf8c40348" + ], + "secondary": [] + } + }, + "0ca13e8176204ca7bf6f09de59f81c83": { + "available": true, + "binary_sensors": { + "cooling_state": false, + "dhw_state": true, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { + "lower_bound": 40.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 65.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, + "model": "Generic heater/cooler", + "model_id": "17.1", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 63.5, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 13.5, + "return_temperature": 24.9, + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true + }, + "vendor": "Remeha B.V." + }, + "1053c8bbf8be43c6921742b146a625f1": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "b52908550469425b812c87f766fe5303", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat BK", + "sensors": { + "battery": 55, + "setpoint": 18.0, + "temperature": 18.8 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A17" + }, + "1a27dd03b5454c4e8b9e75c8d1afc7af": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "20e735858f8146cead98b873177a4f99", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug DB", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" + }, + "20e735858f8146cead98b873177a4f99": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer DB", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "47e2c550a33846b680725aa3fb229473" + ], + "secondary": [] + } + }, + "2e0fc4db2a6d4cbeb7cf786143543961": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug KK", + "sensors": { + "electricity_consumed": 2.13, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A06" + }, + "3b4d2574e2c9443a832b48d19a1c4f06": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "04b15f6e884448288f811d29fb7b1b30", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug SJ", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A14" + }, + "3f0afa71f16c45ab964050002560e43c": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "fa5fa6b34f6b40a0972988b20e888ed4", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug WK", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A18" + }, + "47e2c550a33846b680725aa3fb229473": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "20e735858f8146cead98b873177a4f99", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat DB", + "sensors": { + "setpoint": 18.0, + "temperature": 22.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A20" + }, + "5cc21042f87f4b4c94ccb5537c47a53f": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "name": "Badkamer 2", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 0.0, + "temperature": 21.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "f04c985c11ad4848b8fcd710343f9dcf" + ], + "secondary": [] + } + }, + "5ead63c65e5f44e7870ba2bd680ceb9e": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "9a27714b970547ee9a6bdadc2b815ad5", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug SQ", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A15" + }, + "7d97fc3117784cfdafe347bcedcbbbcb": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "3.2.8", + "gateway_modes": [ + "away", + "full", + "vacation" + ], + "hardware": "AME Smile 2.0 board", + "location": "eedadcb297564f1483faa509179aebed", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "regulation_modes": [ + "heating", + "off", + "bleeding_cold", + "bleeding_hot", + "cooling" + ], + "select_gateway_mode": "full", + "select_regulation_mode": "cooling", + "sensors": { + "outdoor_temperature": 13.4 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" + }, + "7fda9f84f01342f8afe9ebbbbff30c0f": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "e39529c79ab54fda9bed26cfc0447546", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat JM", + "sensors": { + "setpoint": 18.0, + "temperature": 20.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" + }, + "838c2f48195242709b87217cf8d8a71f": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "b52908550469425b812c87f766fe5303", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug BK", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A12" + }, + "8a482fa9dddb43acb765d019d8c9838b": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "5cc21042f87f4b4c94ccb5537c47a53f", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug BK2", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A10" + }, + "8cf650a4c10c44819e426bed406aec34": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "name": "Badkamer 1", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 21.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "eac5db95d97241f6b17790897847ccf5" + ], + "secondary": [] + } + }, + "93ac3f7bf25342f58cbb77c4a99ac0b3": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer RB", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 3.13, + "temperature": 20.7 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 17.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "c4ed311d54e341f58b4cdd201d1fde7e" + ], + "secondary": [] + } + }, + "96714ad90fc948bcbcb5021c4b9f5ae9": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "e39529c79ab54fda9bed26cfc0447546", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug JM", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" + }, + "9a27714b970547ee9a6bdadc2b815ad5": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer SQ", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 21.4 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "beb32da072274e698146db8b022f3c36" + ], + "secondary": [] + } + }, + "a03b6e8e76dd4646af1a77c31dd9370c": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug RB", + "sensors": { + "electricity_consumed": 3.13, + "electricity_consumed_interval": 0.77, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" + }, + "a562019b0b1f47a4bde8ebe3dbe3e8a9": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "name": "Keuken", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 2.13, + "electricity_produced": 0.0, + "temperature": 22.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 21.5, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "ea8372c0e3ad4622ad45a041d02425f5" + ], + "secondary": [] + } + }, + "b52908550469425b812c87f766fe5303": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Bijkeuken", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 18.8 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "1053c8bbf8be43c6921742b146a625f1" + ], + "secondary": [] + } + }, + "bbcffa48019f4b09b8368bbaf9559e68": { + "available": true, + "dev_class": "valve_actuator_plug", + "firmware": "2020-05-13T02:00:00+02:00", + "location": "8cf650a4c10c44819e426bed406aec34", + "model": "Plug", + "model_id": "160-01", + "name": "Smart Plug BK1", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A16" + }, + "beb32da072274e698146db8b022f3c36": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "9a27714b970547ee9a6bdadc2b815ad5", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat SQ", + "sensors": { + "setpoint": 18.5, + "temperature": 21.4 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c4ed311d54e341f58b4cdd201d1fde7e": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "93ac3f7bf25342f58cbb77c4a99ac0b3", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat RB", + "sensors": { + "setpoint": 17.0, + "temperature": 20.7 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" + }, + "ca79d23ae0094120b877558734cff85c": { + "dev_class": "thermostat", + "location": "fa5fa6b34f6b40a0972988b20e888ed4", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Thermostaat WK", + "sensors": { + "setpoint": 21.5, + "temperature": 22.5 + }, + "vendor": "Plugwise" + }, + "d3a276aeb3114a509bab1e4bf8c40348": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "04b15f6e884448288f811d29fb7b1b30", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat SJ", + "sensors": { + "setpoint": 20.5, + "temperature": 22.6 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A13" + }, + "e39529c79ab54fda9bed26cfc0447546": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "cool", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer JM", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 20.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "7fda9f84f01342f8afe9ebbbbff30c0f" + ], + "secondary": [] + } + }, + "ea8372c0e3ad4622ad45a041d02425f5": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "a562019b0b1f47a4bde8ebe3dbe3e8a9", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat KK", + "sensors": { + "battery": 53, + "setpoint": 21.5, + "temperature": 22.5 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" + }, + "eac5db95d97241f6b17790897847ccf5": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "8cf650a4c10c44819e426bed406aec34", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat BK1", + "sensors": { + "setpoint": 20.5, + "temperature": 21.5 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" + }, + "f04c985c11ad4848b8fcd710343f9dcf": { + "available": true, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "5cc21042f87f4b4c94ccb5537c47a53f", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostaat BK2", + "sensors": { + "setpoint": 20.5, + "temperature": 21.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" + }, + "fa5fa6b34f6b40a0972988b20e888ed4": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "name": "Woonkamer", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.5 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 21.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], + "secondary": [] + } + } } } diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index e734e1707..097c530a7 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -1,249 +1,413 @@ { - "e4684553153b44afbef2200885f379dc": { - "dev_class": "heater_central", - "location": "9e4433a9d69f40b3aefd15e74395eaec", - "model": "Generic heater", - "model_id": "10.20", - "name": "OpenTherm", - "vendor": "Remeha B.V.", - "maximum_boiler_temperature": { - "setpoint": 90.0, - "lower_bound": 20.0, - "upper_bound": 90.0, - "resolution": 0.01 + "entities": { + "06aecb3d00354375924f50c47af36bd2": { + "active_preset": "no_frost", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "name": "Slaapkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 24.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "1346fbd8498d4dbcab7e18d51b771f3d" + ], + "secondary": [ + "356b65335e274d769c338223e7af9c33" + ] + } }, - "max_dhw_temperature": { - "setpoint": 60.0, - "lower_bound": 40.0, - "upper_bound": 60.0, - "resolution": 0.01 + "13228dab8ce04617af318a2888b3c548": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 27.4 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.01, + "setpoint": 9.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": [ + "f61f1a2535f54f52ad006a3d18e459ca" + ], + "secondary": [ + "833de10f269c4deab58fb9df69901b4e" + ] + } }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "flame_state": false + "1346fbd8498d4dbcab7e18d51b771f3d": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "06aecb3d00354375924f50c47af36bd2", + "model": "Lisa", + "model_id": "158-01", + "name": "Slaapkamer", + "sensors": { + "battery": 92, + "setpoint": 13.0, + "temperature": 24.2 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" }, - "sensors": { - "water_temperature": 37.3, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "return_temperature": 37.1, - "water_pressure": 1.4 + "1da4d325838e4ad8aac12177214505c9": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2020-11-04T01:00:00+01:00", + "hardware": "1", + "location": "d58fec52899f4f1c92e4f8fad6d8c48c", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Tom Logeerkamer", + "sensors": { + "setpoint": 13.0, + "temperature": 28.8, + "temperature_difference": 2.0, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.1, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" }, - "switches": { - "dhw_cm_switch": false - } - }, - "a6abc6a129ee499c88a4d420cc413b47": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "d58fec52899f4f1c92e4f8fad6d8c48c", - "model": "Lisa", - "name": "Logeerkamer", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "thermostat": { - "lower_bound": 0.0, - "setpoint": 13.0, - "resolution": 0.01, - "upper_bound": 99.9 + "356b65335e274d769c338223e7af9c33": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2020-11-04T01:00:00+01:00", + "hardware": "1", + "location": "06aecb3d00354375924f50c47af36bd2", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Tom Slaapkamer", + "sensors": { + "setpoint": 13.0, + "temperature": 24.2, + "temperature_difference": 1.7, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.1, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "control_state": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 30.0, - "setpoint": 13.0, - "battery": 80 - } - }, - "1346fbd8498d4dbcab7e18d51b771f3d": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "06aecb3d00354375924f50c47af36bd2", - "model": "Lisa", - "name": "Slaapkamer", - "zigbee_mac_address": "ABCD012345670A03", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 13.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "457ce8414de24596a2d5e7dbc9c7682f": { + "available": true, + "dev_class": "zz_misc_plug", + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "model": "Aqara Smart Plug", + "model_id": "lumi.plug.maeu01", + "name": "Plug", + "sensors": { + "electricity_consumed_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": false + }, + "vendor": "LUMI", + "zigbee_mac_address": "ABCD012345670A06" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "no_frost", - "control_state": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 24.2, - "setpoint": 13.0, - "battery": 92 - } - }, - "833de10f269c4deab58fb9df69901b4e": { - "dev_class": "thermo_sensor", - "firmware": "2020-11-04T01:00:00+01:00", - "hardware": "1", - "location": "13228dab8ce04617af318a2888b3c548", - "model": "Tom/Floor", - "name": "Tom Woonkamer", - "zigbee_mac_address": "ABCD012345670A09", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 24.0, - "setpoint": 9.0, - "temperature_difference": 1.8, - "valve_position": 100 - } - }, - "6f3e9d7084214c21b9dfa46f6eeb8700": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "d27aede973b54be484f6842d1b2802ad", - "model": "Lisa", - "name": "Kinderkamer", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 13.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "6f3e9d7084214c21b9dfa46f6eeb8700": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "d27aede973b54be484f6842d1b2802ad", + "model": "Lisa", + "model_id": "158-01", + "name": "Kinderkamer", + "sensors": { + "battery": 79, + "setpoint": 13.0, + "temperature": 30.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "control_state": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 30.0, - "setpoint": 13.0, - "battery": 79 - } - }, - "f61f1a2535f54f52ad006a3d18e459ca": { - "dev_class": "zone_thermometer", - "firmware": "2020-09-01T02:00:00+02:00", - "hardware": "1", - "location": "13228dab8ce04617af318a2888b3c548", - "model": "Jip", - "name": "Woonkamer", - "zigbee_mac_address": "ABCD012345670A08", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 9.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.01 + "833de10f269c4deab58fb9df69901b4e": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2020-11-04T01:00:00+01:00", + "hardware": "1", + "location": "13228dab8ce04617af318a2888b3c548", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Tom Woonkamer", + "sensors": { + "setpoint": 9.0, + "temperature": 24.0, + "temperature_difference": 1.8, + "valve_position": 100 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.1, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "control_state": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 27.4, - "setpoint": 9.0, - "battery": 100, - "humidity": 56.2 - } - }, - "d4496250d0e942cfa7aea3476e9070d5": { - "dev_class": "thermo_sensor", - "firmware": "2020-11-04T01:00:00+01:00", - "hardware": "1", - "location": "d27aede973b54be484f6842d1b2802ad", - "model": "Tom/Floor", - "name": "Tom Kinderkamer", - "zigbee_mac_address": "ABCD012345670A04", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 28.7, - "setpoint": 13.0, - "temperature_difference": 1.9, - "valve_position": 0 - } - }, - "356b65335e274d769c338223e7af9c33": { - "dev_class": "thermo_sensor", - "firmware": "2020-11-04T01:00:00+01:00", - "hardware": "1", - "location": "06aecb3d00354375924f50c47af36bd2", - "model": "Tom/Floor", - "name": "Tom Slaapkamer", - "zigbee_mac_address": "ABCD012345670A05", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 24.2, - "setpoint": 13.0, - "temperature_difference": 1.7, - "valve_position": 0 - } - }, - "b5c2386c6f6342669e50fe49dd05b188": { - "dev_class": "gateway", - "firmware": "3.2.8", - "gateway_modes": ["away", "full", "vacation"], - "hardware": "AME Smile 2.0 board", - "location": "9e4433a9d69f40b3aefd15e74395eaec", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Adam", - "zigbee_mac_address": "ABCD012345670101", - "vendor": "Plugwise", - "select_gateway_mode": "full", - "select_regulation_mode": "heating", - "regulation_modes": ["heating", "off", "bleeding_cold", "bleeding_hot"], - "binary_sensors": { - "plugwise_notification": false + "a6abc6a129ee499c88a4d420cc413b47": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "d58fec52899f4f1c92e4f8fad6d8c48c", + "model": "Lisa", + "model_id": "158-01", + "name": "Logeerkamer", + "sensors": { + "battery": 80, + "setpoint": 13.0, + "temperature": 30.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "sensors": { - "outdoor_temperature": 24.9 - } - }, - "1da4d325838e4ad8aac12177214505c9": { - "dev_class": "thermo_sensor", - "firmware": "2020-11-04T01:00:00+01:00", - "hardware": "1", - "location": "d58fec52899f4f1c92e4f8fad6d8c48c", - "model": "Tom/Floor", - "name": "Tom Logeerkamer", - "zigbee_mac_address": "ABCD012345670A07", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 28.8, - "setpoint": 13.0, - "temperature_difference": 2.0, - "valve_position": 0 - } - }, - "457ce8414de24596a2d5e7dbc9c7682f": { - "dev_class": "zz_misc_plug", - "location": "9e4433a9d69f40b3aefd15e74395eaec", - "model": "Aqara Smart Plug", - "model_id": "lumi.plug.maeu01", - "name": "Plug", - "zigbee_mac_address": "ABCD012345670A06", - "vendor": "LUMI", - "available": true, - "sensors": { - "electricity_consumed_interval": 0.0 + "b5c2386c6f6342669e50fe49dd05b188": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "3.2.8", + "gateway_modes": [ + "away", + "full", + "vacation" + ], + "hardware": "AME Smile 2.0 board", + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "regulation_modes": [ + "heating", + "off", + "bleeding_cold", + "bleeding_hot" + ], + "select_gateway_mode": "full", + "select_regulation_mode": "heating", + "sensors": { + "outdoor_temperature": 24.9 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" + }, + "d27aede973b54be484f6842d1b2802ad": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "name": "Kinderkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "6f3e9d7084214c21b9dfa46f6eeb8700" + ], + "secondary": [ + "d4496250d0e942cfa7aea3476e9070d5" + ] + } + }, + "d4496250d0e942cfa7aea3476e9070d5": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2020-11-04T01:00:00+01:00", + "hardware": "1", + "location": "d27aede973b54be484f6842d1b2802ad", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Tom Kinderkamer", + "sensors": { + "setpoint": 13.0, + "temperature": 28.7, + "temperature_difference": 1.9, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.1, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" + }, + "d58fec52899f4f1c92e4f8fad6d8c48c": { + "active_preset": "home", + "climate_mode": "heat", + "control_state": "off", + "dev_class": "climate", + "name": "Logeerkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "sensors": { + "temperature": 30.0 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "a6abc6a129ee499c88a4d420cc413b47" + ], + "secondary": [ + "1da4d325838e4ad8aac12177214505c9" + ] + } + }, + "e4684553153b44afbef2200885f379dc": { + "available": true, + "binary_sensors": { + "dhw_state": false, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "max_dhw_temperature": { + "lower_bound": 40.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, + "model": "Generic heater", + "model_id": "10.20", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "return_temperature": 37.1, + "water_pressure": 1.4, + "water_temperature": 37.3 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Remeha B.V." }, - "switches": { - "relay": false, - "lock": true + "f61f1a2535f54f52ad006a3d18e459ca": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermometer", + "firmware": "2020-09-01T02:00:00+02:00", + "hardware": "1", + "location": "13228dab8ce04617af318a2888b3c548", + "model": "Jip", + "model_id": "168-01", + "name": "Woonkamer", + "sensors": { + "battery": 100, + "humidity": 56.2, + "setpoint": 9.0, + "temperature": 27.4 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" } } } diff --git a/tests/data/adam/adam_multiple_devices_per_zone.json b/tests/data/adam/adam_multiple_devices_per_zone.json index 51a8f3378..8003bdab3 100644 --- a/tests/data/adam/adam_multiple_devices_per_zone.json +++ b/tests/data/adam/adam_multiple_devices_per_zone.json @@ -1,416 +1,619 @@ { - "df4a4a8169904cdb9c03d61a21f42140": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "12493538af164a409c6a1c79e38afe1c", - "model": "Lisa", - "name": "Zone Lisa Bios", - "zigbee_mac_address": "ABCD012345670A06", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 13.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "entities": { + "02cf28bfec924855854c544690a609ef": { + "available": true, + "dev_class": "vcr_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "NVR", + "sensors": { + "electricity_consumed": 34.0, + "electricity_consumed_interval": 9.15, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A15" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "away", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 16.5, - "setpoint": 13.0, - "battery": 67 - } - }, - "b310b72a0e354bfab43089919b9a88bf": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Tom/Floor", - "name": "Floor kraan", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 26.0, - "setpoint": 21.5, - "temperature_difference": 3.5, - "valve_position": 100 - } - }, - "a2c3583e0a6349358998b760cea82d2a": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "12493538af164a409c6a1c79e38afe1c", - "model": "Tom/Floor", - "name": "Bios Cv Thermostatic Radiator ", - "zigbee_mac_address": "ABCD012345670A09", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 17.2, - "setpoint": 13.0, - "battery": 62, - "temperature_difference": -0.2, - "valve_position": 0 - } - }, - "b59bcebaf94b499ea7d46e4a66fb62d8": { - "dev_class": "zone_thermostat", - "firmware": "2016-08-02T02:00:00+02:00", - "hardware": "255", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Lisa", - "name": "Zone Lisa WK", - "zigbee_mac_address": "ABCD012345670A07", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 21.5, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "08963fec7c53423ca5680aa4cb502c63": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Badkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Badkamer Schema", + "sensors": { + "temperature": 18.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 14.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "f1fee6043d3642a9b0a65297455f008e", + "680423ff840043738f42cc7f1ff97a36" + ], + "secondary": [] + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "GF7 Woonkamer", - "climate_mode": "auto", - "sensors": { - "temperature": 20.9, - "setpoint": 21.5, - "battery": 34 - } - }, - "fe799307f1624099878210aa0b9f1475": { - "dev_class": "gateway", - "firmware": "3.0.15", - "hardware": "AME Smile 2.0 board", - "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Adam", - "zigbee_mac_address": "ABCD012345670101", - "vendor": "Plugwise", - "select_regulation_mode": "heating", - "binary_sensors": { - "plugwise_notification": true + "12493538af164a409c6a1c79e38afe1c": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "name": "Bios", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "df4a4a8169904cdb9c03d61a21f42140" + ], + "secondary": [ + "a2c3583e0a6349358998b760cea82d2a" + ] + } }, - "sensors": { - "outdoor_temperature": 7.81 - } - }, - "d3da73bde12a47d5a6b8f9dad971f2ec": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "82fa13f017d240daa0d0ea1775420f24", - "model": "Tom/Floor", - "name": "Thermostatic Radiator Jessie", - "zigbee_mac_address": "ABCD012345670A10", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 17.1, - "setpoint": 15.0, - "battery": 62, - "temperature_difference": 0.1, - "valve_position": 0 - } - }, - "21f2b542c49845e6bb416884c55778d6": { - "dev_class": "game_console_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "Playstation Smart Plug", - "zigbee_mac_address": "ABCD012345670A12", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 84.1, - "electricity_consumed_interval": 8.6, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "21f2b542c49845e6bb416884c55778d6": { + "available": true, + "dev_class": "game_console_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "Playstation Smart Plug", + "sensors": { + "electricity_consumed": 84.1, + "electricity_consumed_interval": 8.6, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A12" }, - "switches": { - "relay": true, - "lock": false - } - }, - "78d1126fc4c743db81b61c20e88342a7": { - "dev_class": "central_heating_pump_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Plug", - "name": "CV Pomp", - "zigbee_mac_address": "ABCD012345670A05", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 35.6, - "electricity_consumed_interval": 7.37, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "446ac08dd04d4eff8ac57489757b7314": { + "active_preset": "no_frost", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "name": "Garage", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "temperature": 15.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 5.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "e7693eb9582644e5b865dba8d4447cf1" + ], + "secondary": [] + } }, - "switches": { - "relay": true - } - }, - "90986d591dcd426cae3ec3e8111ff730": { - "dev_class": "heater_central", - "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", - "model": "Unknown", - "name": "OnOff", - "binary_sensors": { - "heating_state": true + "4a810418d5394b3f82727340b91ba740": { + "available": true, + "dev_class": "router_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "USG Smart Plug", + "sensors": { + "electricity_consumed": 8.5, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A16" }, - "sensors": { - "water_temperature": 70.0, - "intended_boiler_temperature": 70.0, - "modulation_level": 1 - } - }, - "cd0ddb54ef694e11ac18ed1cbce5dbbd": { - "dev_class": "vcr_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "NAS", - "zigbee_mac_address": "ABCD012345670A14", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 16.5, - "electricity_consumed_interval": 0.5, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "675416a629f343c495449970e2ca37b5": { + "available": true, + "dev_class": "router_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "Ziggo Modem", + "sensors": { + "electricity_consumed": 12.2, + "electricity_consumed_interval": 2.97, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "switches": { - "relay": true, - "lock": true - } - }, - "4a810418d5394b3f82727340b91ba740": { - "dev_class": "router_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "USG Smart Plug", - "zigbee_mac_address": "ABCD012345670A16", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 8.5, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "680423ff840043738f42cc7f1ff97a36": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "08963fec7c53423ca5680aa4cb502c63", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Thermostatic Radiator Badkamer 1", + "sensors": { + "battery": 51, + "setpoint": 14.0, + "temperature": 19.1, + "temperature_difference": -0.4, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A17" }, - "switches": { - "relay": true, - "lock": true - } - }, - "02cf28bfec924855854c544690a609ef": { - "dev_class": "vcr_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "NVR", - "zigbee_mac_address": "ABCD012345670A15", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 34.0, - "electricity_consumed_interval": 9.15, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "6a3bf693d05e48e0b460c815a4fdd09d": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "82fa13f017d240daa0d0ea1775420f24", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Thermostat Jessie", + "sensors": { + "battery": 37, + "setpoint": 15.0, + "temperature": 17.2 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" }, - "switches": { - "relay": true, - "lock": true - } - }, - "a28f588dc4a049a483fd03a30361ad3a": { - "dev_class": "settop_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "Fibaro HC2", - "zigbee_mac_address": "ABCD012345670A13", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 12.5, - "electricity_consumed_interval": 3.8, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "78d1126fc4c743db81b61c20e88342a7": { + "available": true, + "dev_class": "central_heating_pump_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Plug", + "model_id": "160-01", + "name": "CV Pomp", + "sensors": { + "electricity_consumed": 35.6, + "electricity_consumed_interval": 7.37, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" }, - "switches": { - "relay": true, - "lock": true - } - }, - "6a3bf693d05e48e0b460c815a4fdd09d": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "82fa13f017d240daa0d0ea1775420f24", - "model": "Lisa", - "name": "Zone Thermostat Jessie", - "zigbee_mac_address": "ABCD012345670A03", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 15.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "82fa13f017d240daa0d0ea1775420f24": { + "active_preset": "asleep", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Jessie", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "CV Jessie", + "sensors": { + "temperature": 17.2 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 15.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "6a3bf693d05e48e0b460c815a4fdd09d" + ], + "secondary": [ + "d3da73bde12a47d5a6b8f9dad971f2ec" + ] + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "asleep", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "CV Jessie", - "climate_mode": "auto", - "sensors": { - "temperature": 17.2, - "setpoint": 15.0, - "battery": 37 - } - }, - "680423ff840043738f42cc7f1ff97a36": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "08963fec7c53423ca5680aa4cb502c63", - "model": "Tom/Floor", - "name": "Thermostatic Radiator Badkamer", - "zigbee_mac_address": "ABCD012345670A17", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 19.1, - "setpoint": 14.0, - "battery": 51, - "temperature_difference": -0.4, - "valve_position": 0 - } - }, - "f1fee6043d3642a9b0a65297455f008e": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "08963fec7c53423ca5680aa4cb502c63", - "model": "Lisa", - "name": "Zone Thermostat Badkamer", - "zigbee_mac_address": "ABCD012345670A08", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 14.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "90986d591dcd426cae3ec3e8111ff730": { + "binary_sensors": { + "heating_state": true + }, + "dev_class": "heater_central", + "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", + "model": "Unknown", + "name": "OnOff", + "sensors": { + "intended_boiler_temperature": 70.0, + "modulation_level": 1, + "water_temperature": 70.0 + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "away", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "Badkamer Schema", - "climate_mode": "auto", - "sensors": { - "temperature": 18.9, - "setpoint": 14.0, - "battery": 92 - } - }, - "675416a629f343c495449970e2ca37b5": { - "dev_class": "router_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "Ziggo Modem", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 12.2, - "electricity_consumed_interval": 2.97, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "a28f588dc4a049a483fd03a30361ad3a": { + "available": true, + "dev_class": "settop_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "Fibaro HC2", + "sensors": { + "electricity_consumed": 12.5, + "electricity_consumed_interval": 3.8, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A13" }, - "switches": { - "relay": true, - "lock": true - } - }, - "e7693eb9582644e5b865dba8d4447cf1": { - "dev_class": "thermostatic_radiator_valve", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "446ac08dd04d4eff8ac57489757b7314", - "model": "Tom/Floor", - "name": "CV Kraan Garage", - "zigbee_mac_address": "ABCD012345670A11", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 5.5, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 0.01 + "a2c3583e0a6349358998b760cea82d2a": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "12493538af164a409c6a1c79e38afe1c", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Bios Cv Thermostatic Radiator ", + "sensors": { + "battery": 62, + "setpoint": 13.0, + "temperature": 17.2, + "temperature_difference": -0.2, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" + }, + "b310b72a0e354bfab43089919b9a88bf": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Floor kraan", + "sensors": { + "setpoint": 21.5, + "temperature": 26.0, + "temperature_difference": 3.5, + "valve_position": 100 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" + }, + "b59bcebaf94b499ea7d46e4a66fb62d8": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-08-02T02:00:00+02:00", + "hardware": "255", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Lisa WK", + "sensors": { + "battery": 34, + "setpoint": 21.5, + "temperature": 20.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c50f167537524366a5af7aa3942feb1e": { + "active_preset": "home", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "GF7 Woonkamer", + "sensors": { + "electricity_consumed": 35.6, + "electricity_produced": 0.0, + "temperature": 20.9 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 21.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "b59bcebaf94b499ea7d46e4a66fb62d8" + ], + "secondary": [ + "b310b72a0e354bfab43089919b9a88bf" + ] + } + }, + "cd0ddb54ef694e11ac18ed1cbce5dbbd": { + "available": true, + "dev_class": "vcr_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "NAS", + "sensors": { + "electricity_consumed": 16.5, + "electricity_consumed_interval": 0.5, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A14" + }, + "d3da73bde12a47d5a6b8f9dad971f2ec": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "82fa13f017d240daa0d0ea1775420f24", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Thermostatic Radiator Jessie", + "sensors": { + "battery": 62, + "setpoint": 15.0, + "temperature": 17.1, + "temperature_difference": 0.1, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A10" + }, + "df4a4a8169904cdb9c03d61a21f42140": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "12493538af164a409c6a1c79e38afe1c", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Lisa Bios", + "sensors": { + "battery": 67, + "setpoint": 13.0, + "temperature": 16.5 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A06" + }, + "e7693eb9582644e5b865dba8d4447cf1": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "446ac08dd04d4eff8ac57489757b7314", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "CV Kraan Garage", + "sensors": { + "battery": 68, + "setpoint": 5.5, + "temperature": 15.6, + "temperature_difference": 0.0, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" + }, + "f1fee6043d3642a9b0a65297455f008e": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "08963fec7c53423ca5680aa4cb502c63", + "model": "Lisa", + "model_id": "158-01", + "name": "Thermostatic Radiator Badkamer 2", + "sensors": { + "battery": 92, + "setpoint": 14.0, + "temperature": 18.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "no_frost", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 15.6, - "setpoint": 5.5, - "battery": 68, - "temperature_difference": 0.0, - "valve_position": 0 + "fe799307f1624099878210aa0b9f1475": { + "binary_sensors": { + "plugwise_notification": true + }, + "dev_class": "gateway", + "firmware": "3.0.15", + "hardware": "AME Smile 2.0 board", + "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "select_regulation_mode": "heating", + "sensors": { + "outdoor_temperature": 7.81 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" } } } diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index 1c3dac0e0..335ef5d01 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -1,12 +1,122 @@ { - "0ca13e8176204ca7bf6f09de59f81c83": { - "binary_sensors": { - "cooling_state": true, - "dhw_state": true, - "heating_state": false + "entities": { + "0ca13e8176204ca7bf6f09de59f81c83": { + "binary_sensors": { + "cooling_state": true, + "dhw_state": true, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { + "lower_bound": 40.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 65.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, + "model": "Unknown", + "name": "OnOff", + "sensors": { + "dhw_temperature": 63.5, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 13.5, + "return_temperature": 24.9, + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true + } }, - "sensors": { - "modulation_level": 0 + "7d97fc3117784cfdafe347bcedcbbbcb": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "3.2.8", + "gateway_modes": [ + "away", + "full", + "vacation" + ], + "hardware": "AME Smile 2.0 board", + "location": "eedadcb297564f1483faa509179aebed", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "regulation_modes": [ + "heating", + "off", + "bleeding_cold", + "bleeding_hot", + "cooling" + ], + "select_gateway_mode": "full", + "select_regulation_mode": "cooling", + "sensors": { + "outdoor_temperature": 13.4 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" + }, + "ca79d23ae0094120b877558734cff85c": { + "dev_class": "thermostat", + "location": "fa5fa6b34f6b40a0972988b20e888ed4", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Thermostaat WK", + "sensors": { + "setpoint": 21.5, + "temperature": 22.5 + }, + "vendor": "Plugwise" + }, + "fa5fa6b34f6b40a0972988b20e888ed4": { + "active_preset": "away", + "available_schedules": [ + "Opstaan weekdag", + "Werkdag schema", + "Weekend", + "off" + ], + "climate_mode": "auto", + "control_state": "off", + "dev_class": "climate", + "name": "Woonkamer", + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], + "select_schedule": "Werkdag schema", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 22.5 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 21.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], + "secondary": [] + } } } } diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index be742da7b..e6cd0e985 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -1,106 +1,135 @@ { - "2743216f626f43948deec1f7ab3b3d70": { - "dev_class": "heater_central", - "location": "07d618f0bb80412687f065b8698ce3e7", - "model": "Generic heater", - "name": "OpenTherm", - "maximum_boiler_temperature": { - "setpoint": 80.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 + "entities": { + "009490cc2f674ce6b576863fbb64f867": { + "active_preset": "home", + "available_schedules": [ + "Weekschema", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Living room", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Weekschema", + "sensors": { + "electricity_consumed": 74.2, + "electricity_produced": 0.0, + "temperature": 20.5 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 20.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ee62cad889f94e8ca3d09021f03a660b" + ], + "secondary": [] + } }, - "available": false, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "flame_state": false + "2743216f626f43948deec1f7ab3b3d70": { + "available": false, + "binary_sensors": { + "dhw_state": false, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "07d618f0bb80412687f065b8698ce3e7", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 80.0, + "upper_bound": 100.0 + }, + "model": "Generic heater", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 0.0, + "water_temperature": 48.0 + }, + "switches": { + "dhw_cm_switch": false + } }, - "sensors": { - "water_temperature": 48.0, - "intended_boiler_temperature": 0.0 + "aa6b0002df0a46e1b1eb94beb61eddfe": { + "available": true, + "dev_class": "hometheater_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "45d410adf8fd461e85cebf16d5ead542", + "model": "Plug", + "model_id": "160-01", + "name": "MediaCenter", + "sensors": { + "electricity_consumed": 10.3, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "switches": { - "dhw_cm_switch": false - } - }, - "aa6b0002df0a46e1b1eb94beb61eddfe": { - "dev_class": "hometheater_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "45d410adf8fd461e85cebf16d5ead542", - "model": "Plug", - "name": "MediaCenter", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 10.3, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": true, - "lock": false - } - }, - "b128b4bbbd1f47e9bf4d756e8fb5ee94": { - "dev_class": "gateway", - "firmware": "3.0.15", - "hardware": "AME Smile 2.0 board", - "location": "07d618f0bb80412687f065b8698ce3e7", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Adam", - "zigbee_mac_address": "ABCD012345670101", - "vendor": "Plugwise", - "select_regulation_mode": "heating", - "binary_sensors": { - "plugwise_notification": true + "b128b4bbbd1f47e9bf4d756e8fb5ee94": { + "binary_sensors": { + "plugwise_notification": true + }, + "dev_class": "gateway", + "firmware": "3.0.15", + "hardware": "AME Smile 2.0 board", + "location": "07d618f0bb80412687f065b8698ce3e7", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "select_regulation_mode": "heating", + "sensors": { + "outdoor_temperature": 11.9 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" }, - "sensors": { - "outdoor_temperature": 11.9 - } - }, - "ee62cad889f94e8ca3d09021f03a660b": { - "dev_class": "thermostat", - "location": "009490cc2f674ce6b576863fbb64f867", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 20.5, - "lower_bound": 1.0, - "upper_bound": 35.0, - "resolution": 0.01 - }, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "available_schedules": ["Weekschema", "off"], - "select_schedule": "Weekschema", - "climate_mode": "auto", - "sensors": { - "temperature": 20.5, - "setpoint": 20.5 - } - }, - "f2be121e4a9345ac83c6e99ed89a98be": { - "dev_class": "computer_desktop_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "5ccb6c41a7d9403988d261ceee04239f", - "name": "Work-PC", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 80.5, - "electricity_consumed_interval": 7.03, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "ee62cad889f94e8ca3d09021f03a660b": { + "dev_class": "thermostat", + "location": "009490cc2f674ce6b576863fbb64f867", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Anna", + "sensors": { + "setpoint": 20.5, + "temperature": 20.5 + }, + "vendor": "Plugwise" }, - "switches": { - "relay": true, - "lock": false + "f2be121e4a9345ac83c6e99ed89a98be": { + "available": true, + "dev_class": "computer_desktop_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "5ccb6c41a7d9403988d261ceee04239f", + "name": "Work-PC", + "sensors": { + "electricity_consumed": 80.5, + "electricity_consumed_interval": 7.03, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" } } } diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 41c0b575a..d67cf5763 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -1,242 +1,309 @@ { - "da224107914542988a88561b4452b0f6": { - "binary_sensors": { - "plugwise_notification": false + "device_zones": { + "056ee145a816487eaa69243c3280f8bf": { + "available": true, + "binary_sensors": { + "dhw_state": false, + "flame_state": true, + "heating_state": true + }, + "dev_class": "heater_central", + "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, + "model": "Generic heater", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 23.9, + "water_temperature": 30.0 + }, + "switches": { + "dhw_cm_switch": false + } }, - "dev_class": "gateway", - "firmware": "3.7.8", - "gateway_modes": ["away", "full", "vacation"], - "hardware": "AME Smile 2.0 board", - "location": "bc93488efab249e5bc54fd7e175a6f91", - "mac_address": "012345679891", - "model": "Gateway", - "model_id": "smile_open_therm", - "name": "Adam", - "regulation_modes": ["bleeding_hot", "bleeding_cold", "off", "heating"], - "select_gateway_mode": "full", - "select_regulation_mode": "heating", - "sensors": { - "outdoor_temperature": 9.19 + "10016900610d4c7481df78c89606ef22": { + "available": true, + "dev_class": "valve_actuator_plug", + "location": "d9786723dbcf4f19b5c629a54629f9c7", + "model_id": "TS0011", + "name": "Aanvoer water afsluiter (nous lz3)", + "switches": { + "relay": false + }, + "vendor": "_TZ3000_abjodzas", + "zigbee_mac_address": "A4C13862AF9917B1" }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000D5A168D" - }, - "056ee145a816487eaa69243c3280f8bf": { - "available": true, - "binary_sensors": { - "dhw_state": false, - "flame_state": true, - "heating_state": true + "1772a4ea304041adb83f357b751341ff": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2020-11-04T01:00:00+01:00", + "hardware": "1", + "location": "f871b8c4d63549319221e294e4f88074", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Tom Badkamer", + "sensors": { + "battery": 99, + "setpoint": 18.0, + "temperature": 17.6, + "temperature_difference": -0.2, + "valve_position": 100 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.1, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000C8FF5EE" }, - "dev_class": "heater_central", - "location": "bc93488efab249e5bc54fd7e175a6f91", - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 + "2568cc4b9c1e401495d4741a5f89bee1": { + "available": true, + "dev_class": "hometheater_plug", + "firmware": "2020-11-10T01:00:00+01:00", + "location": "f2bf9048bef64cc5b6d5110154e33c81", + "model": "Plug", + "model_id": "160-01", + "name": "Plug MediaTV", + "sensors": { + "electricity_consumed": 14.8, + "electricity_consumed_interval": 3.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000D13CCFD" }, - "model": "Generic heater", - "name": "OpenTherm", - "sensors": { - "intended_boiler_temperature": 23.9, - "water_temperature": 30.0 + "29542b2b6a6a4169acecc15c72a599b8": { + "available": true, + "dev_class": "computer_desktop_plug", + "firmware": "2020-11-10T01:00:00+01:00", + "location": "f2bf9048bef64cc5b6d5110154e33c81", + "model": "Plug", + "model_id": "160-01", + "name": "Plug Werkplek", + "sensors": { + "electricity_consumed": 91.3, + "electricity_consumed_interval": 23.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000D13CA9A" }, - "switches": { - "dhw_cm_switch": false - } - }, - "1772a4ea304041adb83f357b751341ff": { - "available": true, - "binary_sensors": { - "low_battery": false - }, - "dev_class": "thermo_sensor", - "firmware": "2020-11-04T01:00:00+01:00", - "hardware": "1", - "location": "f871b8c4d63549319221e294e4f88074", - "model": "Tom/Floor", - "model_id": "106-03", - "name": "Tom Badkamer", - "sensors": { - "battery": 99, - "setpoint": 18.0, - "temperature": 17.6, - "temperature_difference": -0.2, - "valve_position": 100 - }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.1, - "upper_bound": 2.0 - }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000C8FF5EE" - }, - "2568cc4b9c1e401495d4741a5f89bee1": { - "available": true, - "dev_class": "hometheater_plug", - "firmware": "2020-11-10T01:00:00+01:00", - "location": "f2bf9048bef64cc5b6d5110154e33c81", - "model": "Plug", - "model_id": "160-01", - "name": "Plug MediaTV", - "sensors": { - "electricity_consumed": 14.8, - "electricity_consumed_interval": 3.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "lock": true, - "relay": true - }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000D13CCFD" - }, - "29542b2b6a6a4169acecc15c72a599b8": { - "available": true, - "dev_class": "computer_desktop_plug", - "firmware": "2020-11-10T01:00:00+01:00", - "location": "f2bf9048bef64cc5b6d5110154e33c81", - "model": "Plug", - "model_id": "160-01", - "name": "Plug Werkplek", - "sensors": { - "electricity_consumed": 91.3, - "electricity_consumed_interval": 23.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "lock": false, - "relay": true - }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000D13CA9A" - }, - "67d73d0bd469422db25a618a5fb8eeb0": { - "available": true, - "dev_class": "heater_central_plug", - "location": "b4f211175e124df59603412bafa77a34", - "model": "Aqara Smart Plug", - "model_id": "lumi.plug.maeu01", - "name": "SmartPlug Floor 0", - "sensors": { - "electricity_consumed_interval": 0.0 - }, - "switches": { - "lock": false, - "relay": true - }, - "vendor": "LUMI", - "zigbee_mac_address": "54EF4410002C97F2" - }, - "854f8a9b0e7e425db97f1f110e1ce4b3": { - "available": true, - "dev_class": "central_heating_pump_plug", - "firmware": "2020-11-10T01:00:00+01:00", - "location": "f2bf9048bef64cc5b6d5110154e33c81", - "model": "Plug", - "model_id": "160-01", - "name": "Plug Vloerverwarming", - "sensors": { - "electricity_consumed": 43.8, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": true + "67d73d0bd469422db25a618a5fb8eeb0": { + "available": true, + "dev_class": "heater_central_plug", + "location": "b4f211175e124df59603412bafa77a34", + "model": "Aqara Smart Plug", + "model_id": "lumi.plug.maeu01", + "name": "SmartPlug Floor 0", + "sensors": { + "electricity_consumed_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "LUMI", + "zigbee_mac_address": "54EF4410002C97F2" }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000D13CB6F" - }, - "ad4838d7d35c4d6ea796ee12ae5aedf8": { - "active_preset": "home", - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], - "control_state": "heating", - "dev_class": "thermostat", - "location": "f2bf9048bef64cc5b6d5110154e33c81", - "climate_mode": "auto", - "model": "ThermoTouch", - "model_id": "143.1", - "name": "Anna", - "preset_modes": ["no_frost", "asleep", "vacation", "home", "away"], - "select_schedule": "Weekschema", - "sensors": { - "setpoint": 18.5, - "temperature": 18.4 + "854f8a9b0e7e425db97f1f110e1ce4b3": { + "available": true, + "dev_class": "central_heating_pump_plug", + "firmware": "2020-11-10T01:00:00+01:00", + "location": "f2bf9048bef64cc5b6d5110154e33c81", + "model": "Plug", + "model_id": "160-01", + "name": "Plug Vloerverwarming", + "sensors": { + "electricity_consumed": 43.8, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000D13CB6F" }, - "thermostat": { - "lower_bound": 1.0, - "resolution": 0.01, - "setpoint": 18.5, - "upper_bound": 35.0 + "ad4838d7d35c4d6ea796ee12ae5aedf8": { + "dev_class": "thermostat", + "location": "f2bf9048bef64cc5b6d5110154e33c81", + "model": "ThermoTouch", + "model_id": "143.1", + "name": "Anna", + "sensors": { + "setpoint": 18.5, + "temperature": 18.4 + }, + "vendor": "Plugwise" }, - "vendor": "Plugwise" - }, - "e2f4322d57924fa090fbbc48b3a140dc": { - "active_preset": "home", - "available": true, - "available_schedules": [ - "Badkamer", - "Test", - "Vakantie", - "Weekschema", - "off" - ], - "binary_sensors": { - "low_battery": true + "da224107914542988a88561b4452b0f6": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "3.7.8", + "gateway_modes": [ + "away", + "full", + "vacation" + ], + "hardware": "AME Smile 2.0 board", + "location": "bc93488efab249e5bc54fd7e175a6f91", + "mac_address": "012345679891", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "regulation_modes": [ + "bleeding_hot", + "bleeding_cold", + "off", + "heating" + ], + "select_gateway_mode": "full", + "select_regulation_mode": "heating", + "sensors": { + "outdoor_temperature": 9.19 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000D5A168D" }, - "control_state": "preheating", - "dev_class": "zone_thermostat", - "firmware": "2016-10-10T02:00:00+02:00", - "hardware": "255", - "location": "f871b8c4d63549319221e294e4f88074", - "climate_mode": "auto", - "model": "Lisa", - "model_id": "158-01", - "name": "Lisa Badkamer", - "preset_modes": ["no_frost", "asleep", "vacation", "home", "away"], - "select_schedule": "Badkamer", - "sensors": { - "battery": 14, - "setpoint": 18.0, - "temperature": 16.5 + "e2f4322d57924fa090fbbc48b3a140dc": { + "available": true, + "binary_sensors": { + "low_battery": true + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-10T02:00:00+02:00", + "hardware": "255", + "location": "f871b8c4d63549319221e294e4f88074", + "model": "Lisa", + "model_id": "158-01", + "name": "Lisa Badkamer", + "sensors": { + "battery": 14, + "setpoint": 18.0, + "temperature": 16.5 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "000D6F000C869B61" }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.0, - "upper_bound": 2.0 + "e8ef2a01ed3b4139a53bf749204fe6b4": { + "dev_class": "switching", + "members": [ + "2568cc4b9c1e401495d4741a5f89bee1", + "29542b2b6a6a4169acecc15c72a599b8" + ], + "model": "Switchgroup", + "name": "Test", + "switches": { + "relay": true + } }, - "thermostat": { - "lower_bound": 0.0, - "resolution": 0.01, - "setpoint": 18.0, - "upper_bound": 99.9 + "f2bf9048bef64cc5b6d5110154e33c81": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "auto", + "control_state": "heating", + "dev_class": "climate", + "name": "Living room", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Weekschema", + "sensors": { + "electricity_consumed": 149.9, + "electricity_produced": 0.0, + "temperature": 18.4 + }, + "thermostat": { + "lower_bound": 1.0, + "resolution": 0.01, + "setpoint": 18.5, + "upper_bound": 35.0 + }, + "thermostats": { + "primary": [ + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], + "secondary": [] + } }, - "vendor": "Plugwise", - "zigbee_mac_address": "000D6F000C869B61" - }, - "e8ef2a01ed3b4139a53bf749204fe6b4": { - "dev_class": "switching", - "members": [ - "2568cc4b9c1e401495d4741a5f89bee1", - "29542b2b6a6a4169acecc15c72a599b8" - ], - "model": "Switchgroup", - "name": "Test", - "switches": { - "relay": true + "f871b8c4d63549319221e294e4f88074": { + "active_preset": "home", + "available_schedules": [ + "Badkamer", + "Test", + "Vakantie", + "Weekschema", + "off" + ], + "climate_mode": "auto", + "control_state": "preheating", + "dev_class": "climate", + "name": "Bathroom", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], + "select_schedule": "Badkamer", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 18.0, + "upper_bound": 99.9 + }, + "thermostats": { + "primary": [ + "e2f4322d57924fa090fbbc48b3a140dc" + ], + "secondary": [ + "1772a4ea304041adb83f357b751341ff" + ] + } } } } diff --git a/tests/data/adam/adam_plus_anna_new_UPDATED_DATA.json b/tests/data/adam/adam_plus_anna_new_UPDATED_DATA.json index 1ff5bd24f..b924ec501 100644 --- a/tests/data/adam/adam_plus_anna_new_UPDATED_DATA.json +++ b/tests/data/adam/adam_plus_anna_new_UPDATED_DATA.json @@ -1,49 +1,47 @@ { - "67d73d0bd469422db25a618a5fb8eeb0": { - "switches": { - "lock": true - } - }, - "ad4838d7d35c4d6ea796ee12ae5aedf8": { - "climate_mode": "off" - }, - "29542b2b6a6a4169acecc15c72a599b8": { - "switches": { - "relay": false, - "lock": false - } - }, - "2568cc4b9c1e401495d4741a5f89bee1": { - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0 + "entities": { + "67d73d0bd469422db25a618a5fb8eeb0": { + "switches": { + "lock": true + } }, - "switches": { - "relay": false, - "lock": false - } - }, - "1772a4ea304041adb83f357b751341ff": { - "available": false - }, - "e2f4322d57924fa090fbbc48b3a140dc": { - "binary_sensors": { - "low_battery": true + "29542b2b6a6a4169acecc15c72a599b8": { + "switches": { + "relay": false, + "lock": false + } }, - "climate_mode": "off" - }, - "da224107914542988a88561b4452b0f6": { - "binary_sensors": { - "plugwise_notification": true - } - }, - "e8ef2a01ed3b4139a53bf749204fe6b4": { - "members": [ - "2568cc4b9c1e401495d4741a5f89bee1", - "29542b2b6a6a4169acecc15c72a599b8" - ], - "switches": { - "relay": false + "2568cc4b9c1e401495d4741a5f89bee1": { + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0 + }, + "switches": { + "relay": false, + "lock": false + } + }, + "1772a4ea304041adb83f357b751341ff": { + "available": false + }, + "e2f4322d57924fa090fbbc48b3a140dc": { + "binary_sensors": { + "low_battery": true + } + }, + "da224107914542988a88561b4452b0f6": { + "binary_sensors": { + "plugwise_notification": true + } + }, + "e8ef2a01ed3b4139a53bf749204fe6b4": { + "members": [ + "2568cc4b9c1e401495d4741a5f89bee1", + "29542b2b6a6a4169acecc15c72a599b8" + ], + "switches": { + "relay": false + } } - } + } } diff --git a/tests/data/adam/adam_zone_per_device.json b/tests/data/adam/adam_zone_per_device.json index d9969d045..bb5220de9 100644 --- a/tests/data/adam/adam_zone_per_device.json +++ b/tests/data/adam/adam_zone_per_device.json @@ -1,416 +1,620 @@ { - "df4a4a8169904cdb9c03d61a21f42140": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "12493538af164a409c6a1c79e38afe1c", - "model": "Lisa", - "name": "Zone Lisa Bios", - "zigbee_mac_address": "ABCD012345670A06", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 13.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "entities": { + "02cf28bfec924855854c544690a609ef": { + "available": true, + "dev_class": "vcr_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "c4d2bda6df8146caa2e5c2b5dc65660e", + "model": "Plug", + "model_id": "160-01", + "name": "NVR", + "sensors": { + "electricity_consumed": 34.0, + "electricity_consumed_interval": 8.65, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A15" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "away", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 16.5, - "setpoint": 13.0, - "battery": 67 - } - }, - "b310b72a0e354bfab43089919b9a88bf": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Tom/Floor", - "name": "Floor kraan", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 26.2, - "setpoint": 21.5, - "temperature_difference": 3.7, - "valve_position": 100 - } - }, - "a2c3583e0a6349358998b760cea82d2a": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "12493538af164a409c6a1c79e38afe1c", - "model": "Tom/Floor", - "name": "Bios Cv Thermostatic Radiator ", - "zigbee_mac_address": "ABCD012345670A09", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 17.1, - "setpoint": 13.0, - "battery": 62, - "temperature_difference": -0.1, - "valve_position": 0 - } - }, - "b59bcebaf94b499ea7d46e4a66fb62d8": { - "dev_class": "zone_thermostat", - "firmware": "2016-08-02T02:00:00+02:00", - "hardware": "255", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Lisa", - "name": "Zone Lisa WK", - "zigbee_mac_address": "ABCD012345670A07", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 21.5, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "08963fec7c53423ca5680aa4cb502c63": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Badkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "Badkamer Schema", + "sensors": { + "temperature": 18.8 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 14.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "f1fee6043d3642a9b0a65297455f008e" + ], + "secondary": [ + "680423ff840043738f42cc7f1ff97a36" + ] + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "home", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "GF7 Woonkamer", - "climate_mode": "auto", - "sensors": { - "temperature": 21.1, - "setpoint": 21.5, - "battery": 34 - } - }, - "fe799307f1624099878210aa0b9f1475": { - "dev_class": "gateway", - "firmware": "3.0.15", - "hardware": "AME Smile 2.0 board", - "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Adam", - "zigbee_mac_address": "ABCD012345670101", - "vendor": "Plugwise", - "select_regulation_mode": "heating", - "binary_sensors": { - "plugwise_notification": true + "12493538af164a409c6a1c79e38afe1c": { + "active_preset": "away", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "name": "Bios", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "electricity_consumed": 0.0, + "electricity_produced": 0.0, + "temperature": 16.5 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 13.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "df4a4a8169904cdb9c03d61a21f42140" + ], + "secondary": [ + "a2c3583e0a6349358998b760cea82d2a" + ] + } }, - "sensors": { - "outdoor_temperature": 7.69 - } - }, - "d3da73bde12a47d5a6b8f9dad971f2ec": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "82fa13f017d240daa0d0ea1775420f24", - "model": "Tom/Floor", - "name": "Thermostatic Radiator Jessie", - "zigbee_mac_address": "ABCD012345670A10", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 16.9, - "setpoint": 16.0, - "battery": 62, - "temperature_difference": 0.1, - "valve_position": 0 - } - }, - "21f2b542c49845e6bb416884c55778d6": { - "dev_class": "game_console_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "4efbab4c8bb84fbab26c8decf670eb96", - "model": "Plug", - "name": "Playstation Smart Plug", - "zigbee_mac_address": "ABCD012345670A12", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 80.1, - "electricity_consumed_interval": 12.7, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "21f2b542c49845e6bb416884c55778d6": { + "available": true, + "dev_class": "game_console_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "4efbab4c8bb84fbab26c8decf670eb96", + "model": "Plug", + "model_id": "160-01", + "name": "Playstation Smart Plug", + "sensors": { + "electricity_consumed": 80.1, + "electricity_consumed_interval": 12.7, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A12" }, - "switches": { - "relay": true, - "lock": false - } - }, - "78d1126fc4c743db81b61c20e88342a7": { - "dev_class": "central_heating_pump_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "c50f167537524366a5af7aa3942feb1e", - "model": "Plug", - "name": "CV Pomp", - "zigbee_mac_address": "ABCD012345670A05", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 35.8, - "electricity_consumed_interval": 5.85, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "446ac08dd04d4eff8ac57489757b7314": { + "active_preset": "no_frost", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "heat", + "dev_class": "climate", + "name": "Garage", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "off", + "sensors": { + "temperature": 15.6 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 5.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "e7693eb9582644e5b865dba8d4447cf1" + ], + "secondary": [] + } }, - "switches": { - "relay": true - } - }, - "90986d591dcd426cae3ec3e8111ff730": { - "dev_class": "heater_central", - "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", - "model": "Unknown", - "name": "OnOff", - "binary_sensors": { - "heating_state": true + "4a810418d5394b3f82727340b91ba740": { + "available": true, + "dev_class": "router_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "0217e9743c174eef9d6e9f680d403ce2", + "model": "Plug", + "model_id": "160-01", + "name": "USG Smart Plug", + "sensors": { + "electricity_consumed": 8.5, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A16" }, - "sensors": { - "water_temperature": 70.0, - "intended_boiler_temperature": 70.0, - "modulation_level": 1 - } - }, - "cd0ddb54ef694e11ac18ed1cbce5dbbd": { - "dev_class": "vcr_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "e704bae65654496f9cade9c855decdfe", - "model": "Plug", - "name": "NAS", - "zigbee_mac_address": "ABCD012345670A14", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 16.5, - "electricity_consumed_interval": 0.29, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "675416a629f343c495449970e2ca37b5": { + "available": true, + "dev_class": "router_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "2b1591ecf6344d4d93b03dece9747648", + "model": "Plug", + "model_id": "160-01", + "name": "Ziggo Modem", + "sensors": { + "electricity_consumed": 12.2, + "electricity_consumed_interval": 2.8, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "switches": { - "relay": true, - "lock": true - } - }, - "4a810418d5394b3f82727340b91ba740": { - "dev_class": "router_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "0217e9743c174eef9d6e9f680d403ce2", - "model": "Plug", - "name": "USG Smart Plug", - "zigbee_mac_address": "ABCD012345670A16", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 8.5, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "680423ff840043738f42cc7f1ff97a36": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "08963fec7c53423ca5680aa4cb502c63", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Thermostatic Radiator Badkamer", + "sensors": { + "battery": 51, + "setpoint": 14.0, + "temperature": 19.1, + "temperature_difference": -0.3, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A17" }, - "switches": { - "relay": true, - "lock": true - } - }, - "02cf28bfec924855854c544690a609ef": { - "dev_class": "vcr_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "c4d2bda6df8146caa2e5c2b5dc65660e", - "model": "Plug", - "name": "NVR", - "zigbee_mac_address": "ABCD012345670A15", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 34.0, - "electricity_consumed_interval": 8.65, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "6a3bf693d05e48e0b460c815a4fdd09d": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "82fa13f017d240daa0d0ea1775420f24", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Thermostat Jessie", + "sensors": { + "battery": 37, + "setpoint": 16.0, + "temperature": 17.1 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" }, - "switches": { - "relay": true, - "lock": true - } - }, - "a28f588dc4a049a483fd03a30361ad3a": { - "dev_class": "settop_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "cd143c07248f491493cea0533bc3d669", - "model": "Plug", - "name": "Fibaro HC2", - "zigbee_mac_address": "ABCD012345670A13", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 12.5, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "78d1126fc4c743db81b61c20e88342a7": { + "available": true, + "dev_class": "central_heating_pump_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Plug", + "model_id": "160-01", + "name": "CV Pomp", + "sensors": { + "electricity_consumed": 35.8, + "electricity_consumed_interval": 5.85, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" }, - "switches": { - "relay": true, - "lock": true - } - }, - "6a3bf693d05e48e0b460c815a4fdd09d": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "82fa13f017d240daa0d0ea1775420f24", - "model": "Lisa", - "name": "Zone Thermostat Jessie", - "zigbee_mac_address": "ABCD012345670A03", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 16.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "82fa13f017d240daa0d0ea1775420f24": { + "active_preset": "asleep", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Jessie", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "CV Jessie", + "sensors": { + "temperature": 17.1 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 16.0, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "6a3bf693d05e48e0b460c815a4fdd09d" + ], + "secondary": [ + "d3da73bde12a47d5a6b8f9dad971f2ec" + ] + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "asleep", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "CV Jessie", - "climate_mode": "auto", - "sensors": { - "temperature": 17.1, - "setpoint": 16.0, - "battery": 37 - } - }, - "680423ff840043738f42cc7f1ff97a36": { - "dev_class": "thermo_sensor", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "08963fec7c53423ca5680aa4cb502c63", - "model": "Tom/Floor", - "name": "Thermostatic Radiator Badkamer", - "zigbee_mac_address": "ABCD012345670A17", - "vendor": "Plugwise", - "available": true, - "sensors": { - "temperature": 19.1, - "setpoint": 14.0, - "battery": 51, - "temperature_difference": -0.3, - "valve_position": 0 - } - }, - "f1fee6043d3642a9b0a65297455f008e": { - "dev_class": "zone_thermostat", - "firmware": "2016-10-27T02:00:00+02:00", - "hardware": "255", - "location": "08963fec7c53423ca5680aa4cb502c63", - "model": "Lisa", - "name": "Zone Thermostat Badkamer", - "zigbee_mac_address": "ABCD012345670A08", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 14.0, - "lower_bound": 0.0, - "upper_bound": 99.9, - "resolution": 0.01 + "90986d591dcd426cae3ec3e8111ff730": { + "binary_sensors": { + "heating_state": true + }, + "dev_class": "heater_central", + "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", + "model": "Unknown", + "name": "OnOff", + "sensors": { + "intended_boiler_temperature": 70.0, + "modulation_level": 1, + "water_temperature": 70.0 + } }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "away", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "Badkamer Schema", - "climate_mode": "auto", - "sensors": { - "temperature": 18.8, - "setpoint": 14.0, - "battery": 92 - } - }, - "675416a629f343c495449970e2ca37b5": { - "dev_class": "router_plug", - "firmware": "2019-06-21T02:00:00+02:00", - "location": "2b1591ecf6344d4d93b03dece9747648", - "model": "Plug", - "name": "Ziggo Modem", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "available": true, - "sensors": { - "electricity_consumed": 12.2, - "electricity_consumed_interval": 2.8, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "a28f588dc4a049a483fd03a30361ad3a": { + "available": true, + "dev_class": "settop_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "cd143c07248f491493cea0533bc3d669", + "model": "Plug", + "model_id": "160-01", + "name": "Fibaro HC2", + "sensors": { + "electricity_consumed": 12.5, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A13" }, - "switches": { - "relay": true, - "lock": true - } - }, - "e7693eb9582644e5b865dba8d4447cf1": { - "dev_class": "thermostatic_radiator_valve", - "firmware": "2019-03-27T01:00:00+01:00", - "hardware": "1", - "location": "446ac08dd04d4eff8ac57489757b7314", - "model": "Tom/Floor", - "name": "CV Kraan Garage", - "zigbee_mac_address": "ABCD012345670A11", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 5.5, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 0.01 + "a2c3583e0a6349358998b760cea82d2a": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "12493538af164a409c6a1c79e38afe1c", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Bios Cv Thermostatic Radiator ", + "sensors": { + "battery": 62, + "setpoint": 13.0, + "temperature": 17.1, + "temperature_difference": -0.1, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" + }, + "b310b72a0e354bfab43089919b9a88bf": { + "available": true, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Floor kraan", + "sensors": { + "setpoint": 21.5, + "temperature": 26.2, + "temperature_difference": 3.7, + "valve_position": 100 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" + }, + "b59bcebaf94b499ea7d46e4a66fb62d8": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-08-02T02:00:00+02:00", + "hardware": "255", + "location": "c50f167537524366a5af7aa3942feb1e", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Lisa WK", + "sensors": { + "battery": 34, + "setpoint": 21.5, + "temperature": 21.1 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "c50f167537524366a5af7aa3942feb1e": { + "active_preset": "home", + "available_schedules": [ + "CV Roan", + "Bios Schema met Film Avond", + "GF7 Woonkamer", + "Badkamer Schema", + "CV Jessie", + "off" + ], + "climate_mode": "auto", + "dev_class": "climate", + "name": "Woonkamer", + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], + "select_schedule": "GF7 Woonkamer", + "sensors": { + "electricity_consumed": 35.8, + "electricity_produced": 0.0, + "temperature": 21.1 + }, + "thermostat": { + "lower_bound": 0.0, + "resolution": 0.01, + "setpoint": 21.5, + "upper_bound": 100.0 + }, + "thermostats": { + "primary": [ + "b59bcebaf94b499ea7d46e4a66fb62d8" + ], + "secondary": [ + "b310b72a0e354bfab43089919b9a88bf" + ] + } + }, + "cd0ddb54ef694e11ac18ed1cbce5dbbd": { + "available": true, + "dev_class": "vcr_plug", + "firmware": "2019-06-21T02:00:00+02:00", + "location": "e704bae65654496f9cade9c855decdfe", + "model": "Plug", + "model_id": "160-01", + "name": "NAS", + "sensors": { + "electricity_consumed": 16.5, + "electricity_consumed_interval": 0.29, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A14" + }, + "d3da73bde12a47d5a6b8f9dad971f2ec": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "82fa13f017d240daa0d0ea1775420f24", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "Thermostatic Radiator Jessie", + "sensors": { + "battery": 62, + "setpoint": 16.0, + "temperature": 16.9, + "temperature_difference": 0.1, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A10" + }, + "df4a4a8169904cdb9c03d61a21f42140": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "12493538af164a409c6a1c79e38afe1c", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Lisa Bios", + "sensors": { + "battery": 67, + "setpoint": 13.0, + "temperature": 16.5 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A06" + }, + "e7693eb9582644e5b865dba8d4447cf1": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "thermostatic_radiator_valve", + "firmware": "2019-03-27T01:00:00+01:00", + "hardware": "1", + "location": "446ac08dd04d4eff8ac57489757b7314", + "model": "Tom/Floor", + "model_id": "106-03", + "name": "CV Kraan Garage", + "sensors": { + "battery": 68, + "setpoint": 5.5, + "temperature": 15.6, + "temperature_difference": 0.1, + "valve_position": 0.0 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" + }, + "f1fee6043d3642a9b0a65297455f008e": { + "available": true, + "binary_sensors": { + "low_battery": false + }, + "dev_class": "zone_thermostat", + "firmware": "2016-10-27T02:00:00+02:00", + "hardware": "255", + "location": "08963fec7c53423ca5680aa4cb502c63", + "model": "Lisa", + "model_id": "158-01", + "name": "Zone Thermostat Badkamer", + "sensors": { + "battery": 92, + "setpoint": 14.0, + "temperature": 18.8 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" }, - "available": true, - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], - "active_preset": "no_frost", - "available_schedules": [ - "CV Roan", - "Bios Schema met Film Avond", - "GF7 Woonkamer", - "Badkamer Schema", - "CV Jessie", - "off" - ], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 15.6, - "setpoint": 5.5, - "battery": 68, - "temperature_difference": 0.1, - "valve_position": 0 + "fe799307f1624099878210aa0b9f1475": { + "binary_sensors": { + "plugwise_notification": true + }, + "dev_class": "gateway", + "firmware": "3.0.15", + "hardware": "AME Smile 2.0 board", + "location": "1f9dcf83fd4e4b66b72ff787957bfe5d", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_open_therm", + "name": "Adam", + "select_regulation_mode": "heating", + "sensors": { + "outdoor_temperature": 7.69 + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" } } } diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index 1530cb866..6e7c93904 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -1,82 +1,100 @@ { - "fb49af122f6e4b0f91267e1cf7666d6f": { - "dev_class": "gateway", - "firmware": "4.2.1", - "hardware": "AME Smile 2.0 board", - "location": "d34dfe6ab90b410c98068e75de3eb631", - "mac_address": "C4930002FE76", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "entities": { + "573c152e7d4f4720878222bd75638f5b": { + "available": true, + "binary_sensors": { + "compressor_state": false, + "cooling_enabled": false, + "cooling_state": false, + "dhw_state": false, + "flame_state": false, + "heating_state": false, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "domestic_hot_water_setpoint": 60.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 14.0, + "return_temperature": 23.4, + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true + }, + "vendor": "Techneco" }, - "sensors": { - "outdoor_temperature": 13.0 - } - }, - "573c152e7d4f4720878222bd75638f5b": { - "dev_class": "heater_central", - "location": "d34dfe6ab90b410c98068e75de3eb631", - "model": "Generic heater/cooler", - "name": "OpenTherm", - "vendor": "Techneco", - "maximum_boiler_temperature": { - "setpoint": 60.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 - }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "compressor_state": false, - "cooling_state": false, - "cooling_enabled": false, - "secondary_boiler_state": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 22.8, - "domestic_hot_water_setpoint": 60.0, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "return_temperature": 23.4, - "water_pressure": 0.5, - "outdoor_air_temperature": 14.0 - }, - "switches": { - "dhw_cm_switch": true - } - }, - "ebd90df1ab334565b5895f37590ccff4": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "d3ce834534114348be628b61b26d9220", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint_low": 19.5, - "setpoint_high": 30.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "ebd90df1ab334565b5895f37590ccff4": { + "active_preset": "home", + "available_schedules": [ + "Thermostat schedule", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "d3ce834534114348be628b61b26d9220", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "no_frost", + "vacation", + "home", + "asleep" + ], + "select_schedule": "Thermostat schedule", + "sensors": { + "cooling_activation_outdoor_temperature": 26.0, + "cooling_deactivation_threshold": 3.0, + "illuminance": 0.5, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 20.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], - "select_schedule": "Thermostat schedule", - "climate_mode": "auto", - "sensors": { - "temperature": 20.9, - "illuminance": 0.5, - "cooling_activation_outdoor_temperature": 26.0, - "cooling_deactivation_threshold": 3.0, - "setpoint_low": 19.5, - "setpoint_high": 30.0 + "fb49af122f6e4b0f91267e1cf7666d6f": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.2.1", + "hardware": "AME Smile 2.0 board", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "mac_address": "C4930002FE76", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 13.0 + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index d74c77fbf..55afba51a 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -1,82 +1,100 @@ { - "573c152e7d4f4720878222bd75638f5b": { - "available": true, - "binary_sensors": { - "compressor_state": true, - "cooling_enabled": true, - "cooling_state": true, - "dhw_state": false, - "flame_state": false, - "heating_state": false, - "secondary_boiler_state": false + "entities": { + "573c152e7d4f4720878222bd75638f5b": { + "available": true, + "binary_sensors": { + "compressor_state": true, + "cooling_enabled": true, + "cooling_state": true, + "dhw_state": false, + "flame_state": false, + "heating_state": false, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "domestic_hot_water_setpoint": 60.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 30.0, + "return_temperature": 23.4, + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true + }, + "vendor": "Techneco" }, - "dev_class": "heater_central", - "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 + "ebd90df1ab334565b5895f37590ccff4": { + "active_preset": "home", + "available_schedules": [ + "Thermostat schedule", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "d3ce834534114348be628b61b26d9220", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "no_frost", + "vacation", + "home", + "asleep" + ], + "select_schedule": "Thermostat schedule", + "sensors": { + "cooling_activation_outdoor_temperature": 26.0, + "cooling_deactivation_threshold": 3.0, + "illuminance": 0.5, + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "temperature": 24.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "model": "Generic heater/cooler", - "name": "OpenTherm", - "sensors": { - "domestic_hot_water_setpoint": 60.0, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "outdoor_air_temperature": 30.0, - "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 - }, - "switches": { - "dhw_cm_switch": true - }, - "vendor": "Techneco" - }, - "ebd90df1ab334565b5895f37590ccff4": { - "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "d3ce834534114348be628b61b26d9220", - "climate_mode": "auto", - "model": "ThermoTouch", - "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", - "sensors": { - "cooling_activation_outdoor_temperature": 26.0, - "cooling_deactivation_threshold": 3.0, - "illuminance": 0.5, - "setpoint_high": 23.0, - "setpoint_low": 4.0, - "temperature": 24.9 - }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 23.0, - "setpoint_low": 4.0, - "upper_bound": 30.0 - }, - "vendor": "Plugwise" - }, - "fb49af122f6e4b0f91267e1cf7666d6f": { - "binary_sensors": { - "plugwise_notification": false - }, - "dev_class": "gateway", - "firmware": "4.2.1", - "hardware": "AME Smile 2.0 board", - "location": "d34dfe6ab90b410c98068e75de3eb631", - "mac_address": "C4930002FE76", - "model": "Gateway", - "name": "Smile Anna", - "sensors": { - "outdoor_temperature": 31.0 - }, - "vendor": "Plugwise" + "fb49af122f6e4b0f91267e1cf7666d6f": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.2.1", + "hardware": "AME Smile 2.0 board", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "mac_address": "C4930002FE76", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 31.0 + }, + "vendor": "Plugwise" + } } } diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index 714c68de8..7e911ca2c 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -1,31 +1,100 @@ { - "ebd90df1ab334565b5895f37590ccff4": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "d3ce834534114348be628b61b26d9220", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint_low": 19.5, - "setpoint_high": 30.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "entities": { + "573c152e7d4f4720878222bd75638f5b": { + "available": true, + "binary_sensors": { + "compressor_state": false, + "cooling_enabled": false, + "cooling_state": false, + "dhw_state": false, + "flame_state": false, + "heating_state": false, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "domestic_hot_water_setpoint": 60.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 13.0, + "return_temperature": 23.4, + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true + }, + "vendor": "Techneco" }, - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], - "select_schedule": "off", - "climate_mode": "heat_cool", - "sensors": { - "temperature": 20.9, - "illuminance": 0.5, - "cooling_activation_outdoor_temperature": 26.0, - "cooling_deactivation_threshold": 3.0, - "setpoint_low": 19.5, - "setpoint_high": 30.0 + "ebd90df1ab334565b5895f37590ccff4": { + "active_preset": "home", + "available_schedules": [ + "Thermostat schedule", + "off" + ], + "climate_mode": "heat_cool", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "d3ce834534114348be628b61b26d9220", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "no_frost", + "vacation", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "cooling_activation_outdoor_temperature": 26.0, + "cooling_deactivation_threshold": 3.0, + "illuminance": 0.5, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 20.9 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" + }, + "fb49af122f6e4b0f91267e1cf7666d6f": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.2.1", + "hardware": "AME Smile 2.0 board", + "location": "d34dfe6ab90b410c98068e75de3eb631", + "mac_address": "C4930002FE76", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 13.0 + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index 320e43349..056ef3310 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -1,90 +1,102 @@ { - "015ae9ea3f964e668e490fa39da3870b": { - "dev_class": "gateway", - "firmware": "4.0.15", - "hardware": "AME Smile 2.0 board", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "entities": { + "015ae9ea3f964e668e490fa39da3870b": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 20.2 + }, + "vendor": "Plugwise" }, - "sensors": { - "outdoor_temperature": 20.2 - } - }, - "1cbf783bb11e4a7c8a6843dee3a86927": { - "dev_class": "heater_central", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "model": "Generic heater", - "name": "OpenTherm", - "vendor": "Techneco", - "maximum_boiler_temperature": { - "setpoint": 60.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 - }, - "max_dhw_temperature": { - "setpoint": 53.0, - "lower_bound": 35.0, - "upper_bound": 60.0, - "resolution": 0.01 - }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": true, - "compressor_state": true, - "secondary_boiler_state": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 29.1, - "dhw_temperature": 46.3, - "intended_boiler_temperature": 35.0, - "modulation_level": 52, - "return_temperature": 25.1, - "water_pressure": 1.57, - "outdoor_air_temperature": 3.0 - }, - "switches": { - "dhw_cm_switch": false - } - }, - "3cb70739631c4d17a86b8b12e8a5161b": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "c784ee9fdab44e1395b8dee7d7a497d5", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "upper_bound": 2.0, - "setpoint": -0.5 - }, - "thermostat": { - "setpoint": 20.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "1cbf783bb11e4a7c8a6843dee3a86927": { + "available": true, + "binary_sensors": { + "compressor_state": true, + "dhw_state": false, + "flame_state": false, + "heating_state": true, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { + "lower_bound": 35.0, + "resolution": 0.01, + "setpoint": 53.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 46.3, + "intended_boiler_temperature": 35.0, + "modulation_level": 52, + "outdoor_air_temperature": 3.0, + "return_temperature": 25.1, + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Techneco" }, - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "select_schedule": "standaard", - "climate_mode": "auto", - "sensors": { - "setpoint": 20.5, - "temperature": 19.3, - "illuminance": 86.0, - "cooling_activation_outdoor_temperature": 21.0, - "cooling_deactivation_threshold": 4.0 + "3cb70739631c4d17a86b8b12e8a5161b": { + "active_preset": "home", + "available_schedules": [ + "standaard", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "c784ee9fdab44e1395b8dee7d7a497d5", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], + "select_schedule": "standaard", + "sensors": { + "cooling_activation_outdoor_temperature": 21.0, + "cooling_deactivation_threshold": 4.0, + "illuminance": 86.0, + "setpoint": 20.5, + "temperature": 19.3 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": -0.5, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index b69c6fff0..854a2ed01 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -1,82 +1,101 @@ { - "015ae9ea3f964e668e490fa39da3870b": { - "dev_class": "gateway", - "firmware": "4.0.15", - "hardware": "AME Smile 2.0 board", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "entities": { + "015ae9ea3f964e668e490fa39da3870b": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 22.0 + }, + "vendor": "Plugwise" }, - "sensors": { - "outdoor_temperature": 22.0 - } - }, - "1cbf783bb11e4a7c8a6843dee3a86927": { - "dev_class": "heater_central", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "model": "Generic heater/cooler", - "name": "OpenTherm", - "vendor": "Techneco", - "maximum_boiler_temperature": { - "setpoint": 60.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 - }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "compressor_state": true, - "cooling_enabled": true, - "cooling_state": true, - "secondary_boiler_state": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 24.7, - "domestic_hot_water_setpoint": 60.0, - "intended_boiler_temperature": 0.0, - "modulation_level": 40, - "return_temperature": 23.8, - "water_pressure": 1.61, - "outdoor_air_temperature": 22.0 - }, - "switches": { - "dhw_cm_switch": false - } - }, - "3cb70739631c4d17a86b8b12e8a5161b": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "c784ee9fdab44e1395b8dee7d7a497d5", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint_low": 4.0, - "setpoint_high": 22.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "1cbf783bb11e4a7c8a6843dee3a86927": { + "available": true, + "binary_sensors": { + "compressor_state": true, + "cooling_enabled": true, + "cooling_state": true, + "dhw_state": false, + "flame_state": false, + "heating_state": false, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 41.5, + "domestic_hot_water_setpoint": 60.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 40, + "outdoor_air_temperature": 22.0, + "return_temperature": 23.8, + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Techneco" }, - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "select_schedule": "off", - "climate_mode": "heat_cool", - "sensors": { - "temperature": 22.3, - "illuminance": 24.5, - "cooling_activation_outdoor_temperature": 21.0, - "cooling_deactivation_threshold": 6.0, - "setpoint_low": 4.0, - "setpoint_high": 22.0 + "3cb70739631c4d17a86b8b12e8a5161b": { + "active_preset": "home", + "available_schedules": [ + "standaard", + "off" + ], + "climate_mode": "heat_cool", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "c784ee9fdab44e1395b8dee7d7a497d5", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], + "select_schedule": "off", + "sensors": { + "cooling_activation_outdoor_temperature": 21.0, + "cooling_deactivation_threshold": 6.0, + "illuminance": 24.5, + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": -0.5, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index 2a7f146a0..dd9291df2 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -1,16 +1,101 @@ { - "1cbf783bb11e4a7c8a6843dee3a86927": { - "binary_sensors": { - "cooling_enabled": true, - "cooling_state": true, - "dhw_state": false, - "heating_state": false + "entities": { + "015ae9ea3f964e668e490fa39da3870b": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.10.10", + "hardware": "AME Smile 2.0 board", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 22.0 + }, + "vendor": "Plugwise" }, - "sensors": { - "modulation_level": 100 + "1cbf783bb11e4a7c8a6843dee3a86927": { + "available": true, + "binary_sensors": { + "compressor_state": true, + "cooling_enabled": true, + "cooling_state": true, + "dhw_state": false, + "flame_state": false, + "heating_state": false, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 41.5, + "domestic_hot_water_setpoint": 60.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 100, + "outdoor_air_temperature": 22.0, + "return_temperature": 23.8, + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Techneco" + }, + "3cb70739631c4d17a86b8b12e8a5161b": { + "active_preset": "home", + "available_schedules": [ + "standaard", + "off" + ], + "climate_mode": "heat_cool", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "c784ee9fdab44e1395b8dee7d7a497d5", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], + "select_schedule": "off", + "sensors": { + "cooling_activation_outdoor_temperature": 21.0, + "cooling_deactivation_threshold": 6.0, + "illuminance": 24.5, + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": -0.5, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" } - }, - "015ae9ea3f964e668e490fa39da3870b": { - "firmware": "4.10.10" } } diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index a78ccefe2..db65c31cb 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -1,95 +1,106 @@ { - "015ae9ea3f964e668e490fa39da3870b": { - "binary_sensors": { - "plugwise_notification": false + "entities": { + "015ae9ea3f964e668e490fa39da3870b": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 20.2 + }, + "vendor": "Plugwise" }, - "dev_class": "gateway", - "firmware": "4.0.15", - "hardware": "AME Smile 2.0 board", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "mac_address": "012345670001", - "model": "Gateway", - "model_id": "smile_thermo", - "name": "Smile Anna", - "sensors": { - "outdoor_temperature": 20.2 + "1cbf783bb11e4a7c8a6843dee3a86927": { + "available": true, + "binary_sensors": { + "compressor_state": true, + "cooling_enabled": false, + "cooling_state": false, + "dhw_state": false, + "flame_state": false, + "heating_state": true, + "secondary_boiler_state": false + }, + "dev_class": "heater_central", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { + "lower_bound": 35.0, + "resolution": 0.01, + "setpoint": 53.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, + "model": "Generic heater/cooler", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 46.3, + "intended_boiler_temperature": 35.0, + "modulation_level": 52, + "outdoor_air_temperature": 3.0, + "return_temperature": 25.1, + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Techneco" }, - "vendor": "Plugwise" - }, - "1cbf783bb11e4a7c8a6843dee3a86927": { - "available": true, - "binary_sensors": { - "compressor_state": true, - "cooling_enabled": false, - "cooling_state": false, - "dhw_state": false, - "flame_state": false, - "heating_state": true, - "secondary_boiler_state": false - }, - "dev_class": "heater_central", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { - "lower_bound": 35.0, - "resolution": 0.01, - "setpoint": 53.0, - "upper_bound": 60.0 - }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, - "model": "Generic heater/cooler", - "name": "OpenTherm", - "sensors": { - "dhw_temperature": 46.3, - "intended_boiler_temperature": 35.0, - "modulation_level": 52, - "outdoor_air_temperature": 3.0, - "return_temperature": 25.1, - "water_pressure": 1.57, - "water_temperature": 29.1 - }, - "switches": { - "dhw_cm_switch": false - }, - "vendor": "Techneco" - }, - "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "c784ee9fdab44e1395b8dee7d7a497d5", - "climate_mode": "auto", - "model": "ThermoTouch", - "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", - "sensors": { - "cooling_activation_outdoor_temperature": 21.0, - "cooling_deactivation_threshold": 4.0, - "illuminance": 86.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "temperature": 19.3 - }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": -0.5, - "upper_bound": 2.0 - }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "upper_bound": 30.0 - }, - "vendor": "Plugwise" + "3cb70739631c4d17a86b8b12e8a5161b": { + "active_preset": "home", + "available_schedules": [ + "standaard", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "c784ee9fdab44e1395b8dee7d7a497d5", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], + "select_schedule": "standaard", + "sensors": { + "cooling_activation_outdoor_temperature": 21.0, + "cooling_deactivation_threshold": 4.0, + "illuminance": 86.0, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 19.3 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": -0.5, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" + } } } diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index a36012587..aa1e3dc4d 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -1,38 +1,40 @@ { - "1cbf783bb11e4a7c8a6843dee3a86927": { - "dev_class": "heater_central", - "location": "a57efe5f145f498c9be62a9b63626fbf", - "model": "Generic heater/cooler", - "name": "OpenTherm", - "vendor": "Techneco", - "maximum_boiler_temperature": { - "setpoint": 60.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 - }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": true, - "compressor_state": true, - "cooling_state": false, - "cooling_enabled": false, - "secondary_boiler_state": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 29.1, - "domestic_hot_water_setpoint": 60.0, - "dhw_temperature": 46.3, - "intended_boiler_temperature": 35.0, - "modulation_level": 52, - "return_temperature": 25.1, - "water_pressure": 1.57, - "outdoor_air_temperature": 3.0 - }, - "switches": { - "dhw_cm_switch": false + "entities": { + "1cbf783bb11e4a7c8a6843dee3a86927": { + "dev_class": "heater_central", + "location": "a57efe5f145f498c9be62a9b63626fbf", + "model": "Generic heater/cooler", + "name": "OpenTherm", + "vendor": "Techneco", + "maximum_boiler_temperature": { + "setpoint": 60.0, + "lower_bound": 0.0, + "upper_bound": 100.0, + "resolution": 1.0 + }, + "available": true, + "binary_sensors": { + "dhw_state": false, + "heating_state": true, + "compressor_state": true, + "cooling_state": false, + "cooling_enabled": false, + "secondary_boiler_state": false, + "flame_state": false + }, + "sensors": { + "water_temperature": 29.1, + "domestic_hot_water_setpoint": 60.0, + "dhw_temperature": 46.3, + "intended_boiler_temperature": 35.0, + "modulation_level": 52, + "return_temperature": 25.1, + "water_pressure": 1.57, + "outdoor_air_temperature": 3.0 + }, + "switches": { + "dhw_cm_switch": false + } } } } diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index 5902980e8..eca1cfe6c 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -1,87 +1,112 @@ { - "582dfbdace4d4aeb832923ce7d1ddda0": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "15da035090b847e7a21f93e08c015ebc", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint_low": 4.0, - "setpoint_high": 23.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "entities": { + "582dfbdace4d4aeb832923ce7d1ddda0": { + "active_preset": "home", + "available_schedules": [ + "Winter", + "Test ", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "15da035090b847e7a21f93e08c015ebc", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "vacation", + "no_frost", + "home", + "asleep" + ], + "select_schedule": "Winter", + "sensors": { + "illuminance": 45.0, + "setpoint_high": 23.5, + "setpoint_low": 4.0, + "temperature": 24.1 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 23.5, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "active_preset": "home", - "available_schedules": ["Winter", "Test ", "off"], - "select_schedule": "Winter", - "climate_mode": "auto", - "sensors": { - "temperature": 24.1, - "illuminance": 45.0, - "setpoint_low": 4.0, - "setpoint_high": 23.5 - } - }, - "bfb5ee0a88e14e5f97bfa725a760cc49": { - "dev_class": "heater_central", - "location": "674b657c138a41a291d315d7471deb06", - "model": "Generic heater/cooler", - "model_id": "173", - "name": "OpenTherm", - "vendor": "Atlantic", - "select_dhw_mode": "auto", - "maximum_boiler_temperature": { - "setpoint": 40.0, - "lower_bound": 25.0, - "upper_bound": 45.0, - "resolution": 0.01 - }, - "max_dhw_temperature": { - "setpoint": 53.0, - "lower_bound": 35.0, - "upper_bound": 60.0, - "resolution": 0.01 - }, - "dhw_modes": ["off", "auto", "boost", "eco", "comfort"], - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "cooling_state": true, - "cooling_enabled": true, - "flame_state": false - }, - "sensors": { - "water_temperature": 25.3, - "dhw_temperature": 52.9, - "intended_boiler_temperature": 0.0, - "modulation_level": 100, - "return_temperature": 26.3, - "outdoor_air_temperature": 17.2 - }, - "switches": { - "dhw_cm_switch": true, - "cooling_ena_switch": true - } - }, - "9ff0569b4984459fb243af64c0901894": { - "dev_class": "gateway", - "firmware": "4.3.8", - "hardware": "AME Smile 2.0 board", - "location": "674b657c138a41a291d315d7471deb06", - "mac_address": "C493000278E2", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "9ff0569b4984459fb243af64c0901894": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.3.8", + "hardware": "AME Smile 2.0 board", + "location": "674b657c138a41a291d315d7471deb06", + "mac_address": "C493000278E2", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 15.5 + }, + "vendor": "Plugwise" }, - "sensors": { - "outdoor_temperature": 15.5 + "bfb5ee0a88e14e5f97bfa725a760cc49": { + "available": true, + "binary_sensors": { + "cooling_enabled": true, + "cooling_state": true, + "dhw_state": false, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "dhw_modes": [ + "off", + "auto", + "boost", + "eco", + "comfort" + ], + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { + "lower_bound": 35.0, + "resolution": 0.01, + "setpoint": 53.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, + "model": "Generic heater/cooler", + "model_id": "173", + "name": "OpenTherm", + "select_dhw_mode": "auto", + "sensors": { + "dhw_temperature": 52.9, + "intended_boiler_temperature": 0.0, + "modulation_level": 100, + "outdoor_air_temperature": 17.2, + "return_temperature": 26.3, + "water_temperature": 25.3 + }, + "switches": { + "cooling_ena_switch": true, + "dhw_cm_switch": true + }, + "vendor": "Atlantic" } } } diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index 0c1b5689e..8b6061c9e 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -1,99 +1,114 @@ { - "5c118b1842e943c0a5b6ef88a60bb17a": { - "binary_sensors": { - "plugwise_notification": false + "entities": { + "5c118b1842e943c0a5b6ef88a60bb17a": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.4.1", + "hardware": "AME Smile 2.0 board", + "location": "82c15f65c9bf44c592d69e16139355e3", + "mac_address": "D40FB2011556", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 6.81 + }, + "vendor": "Plugwise" }, - "dev_class": "gateway", - "firmware": "4.4.1", - "hardware": "AME Smile 2.0 board", - "location": "82c15f65c9bf44c592d69e16139355e3", - "mac_address": "D40FB2011556", - "model": "Gateway", - "name": "Smile Anna", - "sensors": { - "outdoor_temperature": 6.81 + "9fb768d699e44c7fb5cc50309dc4e7d4": { + "active_preset": "home", + "available_schedules": [ + "Verwarmen@9-23u", + "VAKANTIE (winter)", + "VERWARMEN", + "KOELEN", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "fa70e08550c94de3a34feb27ecf31421", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "away", + "home" + ], + "select_schedule": "Verwarmen@9-23u", + "sensors": { + "illuminance": 5.5, + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "temperature": 21.2 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "vendor": "Plugwise" - }, - "9fb768d699e44c7fb5cc50309dc4e7d4": { - "active_preset": "home", - "available_schedules": [ - "Verwarmen@9-23u", - "VAKANTIE (winter)", - "VERWARMEN", - "KOELEN", - "off" - ], - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "fa70e08550c94de3a34feb27ecf31421", - "climate_mode": "auto", - "model": "ThermoTouch", - "name": "Anna", - "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], - "select_schedule": "Verwarmen@9-23u", - "sensors": { - "illuminance": 5.5, - "setpoint_high": 30.0, - "setpoint_low": 20.0, - "temperature": 21.2 - }, - "temperature_offset": { - "lower_bound": -2.0, - "resolution": 0.1, - "setpoint": 0.0, - "upper_bound": 2.0 - }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.0, - "upper_bound": 30.0 - }, - "vendor": "Plugwise" - }, - "a449cbc334ae4a5bb7f89064984b2906": { - "available": true, - "binary_sensors": { - "cooling_enabled": false, - "cooling_state": false, - "dhw_state": false, - "flame_state": false, - "heating_state": false - }, - "dev_class": "heater_central", - "dhw_modes": ["comfort", "eco", "off", "boost", "auto"], - "location": "82c15f65c9bf44c592d69e16139355e3", - "max_dhw_temperature": { - "lower_bound": 35.0, - "resolution": 0.01, - "setpoint": 53.0, - "upper_bound": 60.0 - }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 45.0, - "upper_bound": 45.0 - }, - "model": "Generic heater/cooler", - "model_id": "173", - "name": "OpenTherm", - "select_dhw_mode": "auto", - "sensors": { - "dhw_temperature": 49.5, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "outdoor_air_temperature": 7.5, - "return_temperature": 23.0, - "water_temperature": 23.3 - }, - "switches": { - "cooling_ena_switch": false, - "dhw_cm_switch": true - }, - "vendor": "Atlantic" + "a449cbc334ae4a5bb7f89064984b2906": { + "available": true, + "binary_sensors": { + "cooling_enabled": false, + "cooling_state": false, + "dhw_state": false, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "dhw_modes": [ + "comfort", + "eco", + "off", + "boost", + "auto" + ], + "location": "82c15f65c9bf44c592d69e16139355e3", + "max_dhw_temperature": { + "lower_bound": 35.0, + "resolution": 0.01, + "setpoint": 53.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 45.0, + "upper_bound": 45.0 + }, + "model": "Generic heater/cooler", + "model_id": "173", + "name": "OpenTherm", + "select_dhw_mode": "auto", + "sensors": { + "dhw_temperature": 49.5, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 7.5, + "return_temperature": 23.0, + "water_temperature": 23.3 + }, + "switches": { + "cooling_ena_switch": false, + "dhw_cm_switch": true + }, + "vendor": "Atlantic" + } } } diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 2ac87d7fd..c4baacc9f 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -1,87 +1,112 @@ { - "582dfbdace4d4aeb832923ce7d1ddda0": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "15da035090b847e7a21f93e08c015ebc", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint_low": 20.5, - "setpoint_high": 30.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "entities": { + "582dfbdace4d4aeb832923ce7d1ddda0": { + "active_preset": "home", + "available_schedules": [ + "Winter", + "Test ", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "15da035090b847e7a21f93e08c015ebc", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "vacation", + "no_frost", + "home", + "asleep" + ], + "select_schedule": "Winter", + "sensors": { + "illuminance": 45.0, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 22.1 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "active_preset": "home", - "available_schedules": ["Winter", "Test ", "off"], - "select_schedule": "Winter", - "climate_mode": "auto", - "sensors": { - "temperature": 22.1, - "illuminance": 45.0, - "setpoint_low": 20.5, - "setpoint_high": 30.0 - } - }, - "bfb5ee0a88e14e5f97bfa725a760cc49": { - "dev_class": "heater_central", - "location": "674b657c138a41a291d315d7471deb06", - "model": "Generic heater/cooler", - "model_id": "173", - "name": "OpenTherm", - "vendor": "Atlantic", - "select_dhw_mode": "auto", - "maximum_boiler_temperature": { - "setpoint": 40.0, - "lower_bound": 25.0, - "upper_bound": 45.0, - "resolution": 0.01 - }, - "max_dhw_temperature": { - "setpoint": 53.0, - "lower_bound": 35.0, - "upper_bound": 60.0, - "resolution": 0.01 - }, - "dhw_modes": ["off", "auto", "boost", "eco", "comfort"], - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "cooling_state": false, - "cooling_enabled": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 25.3, - "dhw_temperature": 52.9, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "return_temperature": 26.3, - "outdoor_air_temperature": 17.2 - }, - "switches": { - "dhw_cm_switch": true, - "cooling_ena_switch": false - } - }, - "9ff0569b4984459fb243af64c0901894": { - "dev_class": "gateway", - "firmware": "4.3.8", - "hardware": "AME Smile 2.0 board", - "location": "674b657c138a41a291d315d7471deb06", - "mac_address": "C493000278E2", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "9ff0569b4984459fb243af64c0901894": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.3.8", + "hardware": "AME Smile 2.0 board", + "location": "674b657c138a41a291d315d7471deb06", + "mac_address": "C493000278E2", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 15.5 + }, + "vendor": "Plugwise" }, - "sensors": { - "outdoor_temperature": 15.5 + "bfb5ee0a88e14e5f97bfa725a760cc49": { + "available": true, + "binary_sensors": { + "cooling_enabled": false, + "cooling_state": false, + "dhw_state": false, + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "dhw_modes": [ + "off", + "auto", + "boost", + "eco", + "comfort" + ], + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { + "lower_bound": 35.0, + "resolution": 0.01, + "setpoint": 53.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, + "model": "Generic heater/cooler", + "model_id": "173", + "name": "OpenTherm", + "select_dhw_mode": "auto", + "sensors": { + "dhw_temperature": 52.9, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "outdoor_air_temperature": 17.2, + "return_temperature": 26.3, + "water_temperature": 25.3 + }, + "switches": { + "cooling_ena_switch": false, + "dhw_cm_switch": true + }, + "vendor": "Atlantic" } } } diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index dbd089643..581ef2ff0 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -1,79 +1,98 @@ { - "cd0e6156b1f04d5f952349ffbe397481": { - "dev_class": "heater_central", - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "model": "Generic heater", - "model_id": "2.32", - "name": "OpenTherm", - "vendor": "Bosch Thermotechniek B.V.", - "maximum_boiler_temperature": { - "setpoint": 70.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1 + "device_zones": { + "01b85360fdd243d0aaad4d6ac2a5ba7e": { + "active_preset": "home", + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], + "climate_mode": "heat", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "eb5309212bf5407bb143e5bfa3b18aee", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], + "select_schedule": "off", + "sensors": { + "illuminance": 60.0, + "setpoint": 20.5, + "temperature": 20.6 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "max_dhw_temperature": { - "setpoint": 60.0, - "lower_bound": 30.0, - "upper_bound": 60.0, - "resolution": 0.01 + "0466eae8520144c78afb29628384edeb": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 7.44 + }, + "vendor": "Plugwise" }, - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": true, - "flame_state": false - }, - "sensors": { - "water_temperature": 45.0, - "intended_boiler_temperature": 39.9, - "modulation_level": 0, - "return_temperature": 32.0, - "water_pressure": 2.2 - }, - "switches": { - "dhw_cm_switch": false - } - }, - "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "eb5309212bf5407bb143e5bfa3b18aee", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 20.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 - }, - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 20.6, - "setpoint": 20.5, - "illuminance": 60.0 - } - }, - "0466eae8520144c78afb29628384edeb": { - "dev_class": "gateway", - "firmware": "4.0.15", - "hardware": "AME Smile 2.0 board", - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false - }, - "sensors": { - "outdoor_temperature": 7.44 + "cd0e6156b1f04d5f952349ffbe397481": { + "available": true, + "binary_sensors": { + "dhw_state": false, + "flame_state": false, + "heating_state": true + }, + "dev_class": "heater_central", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { + "lower_bound": 30.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, + "model": "Generic heater", + "model_id": "2.32", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 39.9, + "modulation_level": 0.0, + "return_temperature": 32.0, + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Bosch Thermotechniek B.V." } } } diff --git a/tests/data/anna/anna_v4_UPDATED_DATA.json b/tests/data/anna/anna_v4_UPDATED_DATA.json index a80745221..fbd34b429 100644 --- a/tests/data/anna/anna_v4_UPDATED_DATA.json +++ b/tests/data/anna/anna_v4_UPDATED_DATA.json @@ -1,52 +1,54 @@ { - "cd0e6156b1f04d5f952349ffbe397481": { - "maximum_boiler_temperature": { - "setpoint": 69.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 + "entities": { + "cd0e6156b1f04d5f952349ffbe397481": { + "maximum_boiler_temperature": { + "setpoint": 69.0, + "lower_bound": 0.0, + "upper_bound": 100.0, + "resolution": 1.0 + }, + "max_dhw_temperature": { + "setpoint": 59.0, + "lower_bound": 30.0, + "upper_bound": 60.0, + "resolution": 0.01 + }, + "binary_sensors": { + "dhw_state": false, + "heating_state": false, + "flame_state": false + }, + "sensors": { + "water_temperature": 51.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 0, + "return_temperature": 41.0, + "water_pressure": 2.1 + }, + "switches": { + "dhw_cm_switch": true + } }, - "max_dhw_temperature": { - "setpoint": 59.0, - "lower_bound": 30.0, - "upper_bound": 60.0, - "resolution": 0.01 + "01b85360fdd243d0aaad4d6ac2a5ba7e": { + "thermostat": { + "setpoint": 19.5, + "lower_bound": 4.0, + "upper_bound": 30.0, + "resolution": 0.1 + }, + "active_preset": "away", + "select_schedule": "Standaard", + "climate_mode": "auto", + "sensors": { + "temperature": 19.5, + "setpoint": 19.5, + "illuminance": 39.5 + } }, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "flame_state": false - }, - "sensors": { - "water_temperature": 51.0, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "return_temperature": 41.0, - "water_pressure": 2.1 - }, - "switches": { - "dhw_cm_switch": true - } - }, - "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "thermostat": { - "setpoint": 19.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 - }, - "active_preset": "away", - "select_schedule": "Standaard", - "climate_mode": "auto", - "sensors": { - "temperature": 19.5, - "setpoint": 19.5, - "illuminance": 39.5 - } - }, - "0466eae8520144c78afb29628384edeb": { - "sensors": { - "outdoor_temperature": 6.44 + "0466eae8520144c78afb29628384edeb": { + "sensors": { + "outdoor_temperature": 6.44 + } } } } diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index 2b3252a82..3cbf7e717 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -1,79 +1,98 @@ { - "cd0e6156b1f04d5f952349ffbe397481": { - "dev_class": "heater_central", - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "model": "Generic heater", - "model_id": "2.32", - "name": "OpenTherm", - "vendor": "Bosch Thermotechniek B.V.", - "maximum_boiler_temperature": { - "setpoint": 70.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1 + "entities": { + "01b85360fdd243d0aaad4d6ac2a5ba7e": { + "active_preset": "home", + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], + "climate_mode": "heat", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "eb5309212bf5407bb143e5bfa3b18aee", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], + "select_schedule": "off", + "sensors": { + "illuminance": 60.0, + "setpoint": 20.5, + "temperature": 20.6 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "max_dhw_temperature": { - "setpoint": 60.0, - "lower_bound": 30.0, - "upper_bound": 60.0, - "resolution": 0.01 + "0466eae8520144c78afb29628384edeb": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 7.44 + }, + "vendor": "Plugwise" }, - "available": true, - "binary_sensors": { - "dhw_state": true, - "heating_state": false, - "flame_state": true - }, - "sensors": { - "water_temperature": 45.0, - "intended_boiler_temperature": 39.9, - "modulation_level": 0, - "return_temperature": 32.0, - "water_pressure": 2.2 - }, - "switches": { - "dhw_cm_switch": false - } - }, - "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "eb5309212bf5407bb143e5bfa3b18aee", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 20.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 - }, - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 20.6, - "setpoint": 20.5, - "illuminance": 60.0 - } - }, - "0466eae8520144c78afb29628384edeb": { - "dev_class": "gateway", - "firmware": "4.0.15", - "hardware": "AME Smile 2.0 board", - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false - }, - "sensors": { - "outdoor_temperature": 7.44 + "cd0e6156b1f04d5f952349ffbe397481": { + "available": true, + "binary_sensors": { + "dhw_state": true, + "flame_state": true, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { + "lower_bound": 30.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, + "model": "Generic heater", + "model_id": "2.32", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 39.9, + "modulation_level": 0.0, + "return_temperature": 32.0, + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Bosch Thermotechniek B.V." } } } diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json new file mode 100644 index 000000000..7ce51a609 --- /dev/null +++ b/tests/data/anna/anna_v4_no_tag.json @@ -0,0 +1,98 @@ +{ + "entities": { + "01b85360fdd243d0aaad4d6ac2a5ba7e": { + "active_preset": "home", + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "eb5309212bf5407bb143e5bfa3b18aee", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], + "select_schedule": "Thuiswerken", + "sensors": { + "illuminance": 60.0, + "setpoint": 20.5, + "temperature": 20.6 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" + }, + "0466eae8520144c78afb29628384edeb": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.0.15", + "hardware": "AME Smile 2.0 board", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 7.44 + }, + "vendor": "Plugwise" + }, + "cd0e6156b1f04d5f952349ffbe397481": { + "available": true, + "binary_sensors": { + "dhw_state": false, + "flame_state": false, + "heating_state": true + }, + "dev_class": "heater_central", + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { + "lower_bound": 30.0, + "resolution": 0.01, + "setpoint": 60.0, + "upper_bound": 60.0 + }, + "maximum_boiler_temperature": { + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, + "model": "Generic heater", + "model_id": "2.32", + "name": "OpenTherm", + "sensors": { + "intended_boiler_temperature": 39.9, + "modulation_level": 0.0, + "return_temperature": 32.0, + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false + }, + "vendor": "Bosch Thermotechniek B.V." + } + } +} diff --git a/tests/data/anna/anna_without_boiler_fw441.json b/tests/data/anna/anna_without_boiler_fw441.json index c175ef90e..f5b6b0c77 100644 --- a/tests/data/anna/anna_without_boiler_fw441.json +++ b/tests/data/anna/anna_without_boiler_fw441.json @@ -1,52 +1,71 @@ { - "a270735e4ccd45239424badc0578a2b1": { - "dev_class": "gateway", - "firmware": "4.4.1", - "hardware": "AME Smile 2.0 board", - "location": "0f4f2ada20734a339fe353348fe87b96", - "mac_address": "D40FB200FA1C", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false + "entities": { + "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { + "active_preset": "home", + "available_schedules": [ + "Test", + "Normaal", + "off" + ], + "climate_mode": "auto", + "dev_class": "thermostat", + "firmware": "2018-02-08T11:15:53+01:00", + "hardware": "6539-1301-5002", + "location": "c34c6864216446528e95d88985e714cc", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "no_frost", + "asleep", + "away", + "vacation", + "home" + ], + "select_schedule": "Normaal", + "sensors": { + "illuminance": 0.25, + "setpoint": 19.0, + "temperature": 19.1 + }, + "temperature_offset": { + "lower_bound": -2.0, + "resolution": 0.1, + "setpoint": 0.0, + "upper_bound": 2.0 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "sensors": { - "outdoor_temperature": 8.31 - } - }, - "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { - "dev_class": "thermostat", - "firmware": "2018-02-08T11:15:53+01:00", - "hardware": "6539-1301-5002", - "location": "c34c6864216446528e95d88985e714cc", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 19.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "a270735e4ccd45239424badc0578a2b1": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.4.1", + "hardware": "AME Smile 2.0 board", + "location": "0f4f2ada20734a339fe353348fe87b96", + "mac_address": "D40FB200FA1C", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 8.31 + }, + "vendor": "Plugwise" }, - "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], - "active_preset": "home", - "available_schedules": ["Test", "Normaal", "off"], - "select_schedule": "Normaal", - "climate_mode": "auto", - "sensors": { - "temperature": 19.1, - "setpoint": 19.0, - "illuminance": 0.25 - } - }, - "c46b4794d28149699eacf053deedd003": { - "dev_class": "heater_central", - "location": "0f4f2ada20734a339fe353348fe87b96", - "model": "Unknown", - "name": "OnOff", - "binary_sensors": { - "heating_state": false + "c46b4794d28149699eacf053deedd003": { + "binary_sensors": { + "heating_state": false + }, + "dev_class": "heater_central", + "location": "0f4f2ada20734a339fe353348fe87b96", + "model": "Unknown", + "name": "OnOff" } } } diff --git a/tests/data/anna/legacy_anna.json b/tests/data/anna/legacy_anna.json index 8e0a058ed..a6454ec27 100644 --- a/tests/data/anna/legacy_anna.json +++ b/tests/data/anna/legacy_anna.json @@ -1,59 +1,67 @@ { - "0000aaaa0000aaaa0000aaaa0000aa00": { - "dev_class": "gateway", - "firmware": "1.8.22", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "mac_address": "01:23:45:67:89:AB", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise" - }, - "0d266432d64443e283b5d708ae98b455": { - "dev_class": "thermostat", - "firmware": "2017-03-13T11:54:58+01:00", - "hardware": "6539-1301-500", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 20.5, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 + "device_zones": { + "0000aaaa0000aaaa0000aaaa0000aa00": { + "dev_class": "gateway", + "firmware": "1.8.22", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "mac_address": "01:23:45:67:89:AB", + "model": "Gateway", + "name": "Smile Anna", + "vendor": "Plugwise" }, - "preset_modes": ["away", "vacation", "asleep", "home", "no_frost"], - "active_preset": "home", - "climate_mode": "heat", - "sensors": { - "temperature": 20.4, - "illuminance": 150.8, - "setpoint": 20.5 - } - }, - "04e4cbfe7f4340f090f85ec3b9e6a950": { - "dev_class": "heater_central", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Generic heater", - "name": "OpenTherm", - "vendor": "Bosch Thermotechniek B.V.", - "maximum_boiler_temperature": { - "setpoint": 50.0, - "lower_bound": 50.0, - "upper_bound": 90.0, - "resolution": 1.0 - }, - "binary_sensors": { - "flame_state": true, - "heating_state": true + "04e4cbfe7f4340f090f85ec3b9e6a950": { + "binary_sensors": { + "flame_state": true, + "heating_state": true + }, + "dev_class": "heater_central", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "maximum_boiler_temperature": { + "lower_bound": 50.0, + "resolution": 1.0, + "setpoint": 50.0, + "upper_bound": 90.0 + }, + "model": "Generic heater", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 51.2, + "intended_boiler_temperature": 17.0, + "modulation_level": 0.0, + "return_temperature": 21.7, + "water_pressure": 1.2, + "water_temperature": 23.6 + }, + "vendor": "Bosch Thermotechniek B.V." }, - "sensors": { - "water_temperature": 23.6, - "dhw_temperature": 51.2, - "intended_boiler_temperature": 17.0, - "modulation_level": 0, - "return_temperature": 21.7, - "water_pressure": 1.2 + "0d266432d64443e283b5d708ae98b455": { + "active_preset": "home", + "climate_mode": "heat", + "dev_class": "thermostat", + "firmware": "2017-03-13T11:54:58+01:00", + "hardware": "6539-1301-500", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "away", + "vacation", + "asleep", + "home", + "no_frost" + ], + "sensors": { + "illuminance": 150.8, + "setpoint": 20.5, + "temperature": 20.4 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/legacy_anna_2.json b/tests/data/anna/legacy_anna_2.json index 4721af5b6..d41d7ca94 100644 --- a/tests/data/anna/legacy_anna_2.json +++ b/tests/data/anna/legacy_anna_2.json @@ -1,63 +1,74 @@ { - "be81e3f8275b4129852c4d8d550ae2eb": { - "dev_class": "gateway", - "firmware": "1.8.22", - "location": "be81e3f8275b4129852c4d8d550ae2eb", - "mac_address": "01:23:45:67:89:AB", - "model": "Gateway", - "name": "Smile Anna", - "vendor": "Plugwise", - "sensors": { - "outdoor_temperature": 21.0 - } - }, - "9e7377867dc24e51b8098a5ba02bd89d": { - "dev_class": "thermostat", - "firmware": "2017-03-13T11:54:58+01:00", - "hardware": "6539-1301-5002", - "location": "be81e3f8275b4129852c4d8d550ae2eb", - "model": "ThermoTouch", - "name": "Anna", - "vendor": "Plugwise", - "thermostat": { - "setpoint": 15.0, - "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 - }, - "preset_modes": ["vacation", "away", "no_frost", "home", "asleep"], - "active_preset": null, - "available_schedules": ["Thermostat schedule", "off"], - "select_schedule": "off", - "climate_mode": "heat", - "sensors": { - "temperature": 21.4, - "illuminance": 19.5, - "setpoint": 15.0 - } - }, - "ea5d8a7177e541b0a4b52da815166de4": { - "dev_class": "heater_central", - "location": "be81e3f8275b4129852c4d8d550ae2eb", - "model": "Generic heater", - "name": "OpenTherm", - "maximum_boiler_temperature": { - "setpoint": 70.0, - "lower_bound": 50.0, - "upper_bound": 90.0, - "resolution": 1.0 + "entities": { + "9e7377867dc24e51b8098a5ba02bd89d": { + "active_preset": null, + "available_schedules": [ + "Thermostat schedule", + "off" + ], + "climate_mode": "heat", + "dev_class": "thermostat", + "firmware": "2017-03-13T11:54:58+01:00", + "hardware": "6539-1301-5002", + "location": "be81e3f8275b4129852c4d8d550ae2eb", + "model": "ThermoTouch", + "name": "Anna", + "preset_modes": [ + "vacation", + "away", + "no_frost", + "home", + "asleep" + ], + "select_schedule": "off", + "sensors": { + "illuminance": 19.5, + "setpoint": 15.0, + "temperature": 21.4 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 15.0, + "upper_bound": 30.0 + }, + "vendor": "Plugwise" }, - "binary_sensors": { - "flame_state": false, - "heating_state": false + "be81e3f8275b4129852c4d8d550ae2eb": { + "dev_class": "gateway", + "firmware": "1.8.22", + "location": "be81e3f8275b4129852c4d8d550ae2eb", + "mac_address": "01:23:45:67:89:AB", + "model": "Gateway", + "name": "Smile Anna", + "sensors": { + "outdoor_temperature": 21.0 + }, + "vendor": "Plugwise" }, - "sensors": { - "water_temperature": 54.0, - "dhw_temperature": 0.0, - "intended_boiler_temperature": 0.0, - "modulation_level": 0, - "return_temperature": 0.0, - "water_pressure": 1.7 + "ea5d8a7177e541b0a4b52da815166de4": { + "binary_sensors": { + "flame_state": false, + "heating_state": false + }, + "dev_class": "heater_central", + "location": "be81e3f8275b4129852c4d8d550ae2eb", + "maximum_boiler_temperature": { + "lower_bound": 50.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 90.0 + }, + "model": "Generic heater", + "name": "OpenTherm", + "sensors": { + "dhw_temperature": 0.0, + "intended_boiler_temperature": 0.0, + "modulation_level": 0.0, + "return_temperature": 0.0, + "water_pressure": 1.7, + "water_temperature": 54.0 + } } } } diff --git a/tests/data/p1/p1v4_442_single.json b/tests/data/p1/p1v4_442_single.json index 92c645776..387ee92f5 100644 --- a/tests/data/p1/p1v4_442_single.json +++ b/tests/data/p1/p1v4_442_single.json @@ -1,42 +1,44 @@ { - "a455b61e52394b2db5081ce025a430f3": { - "dev_class": "gateway", - "firmware": "4.4.2", - "hardware": "AME Smile 2.0 board", - "location": "a455b61e52394b2db5081ce025a430f3", - "mac_address": "012345670001", - "model": "Gateway", - "model_id": "smile", - "name": "Smile P1", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": false - } - }, - "ba4de7613517478da82dd9b6abea36af": { - "dev_class": "smartmeter", - "location": "a455b61e52394b2db5081ce025a430f3", - "model": "KFM5KAIFA-METER", - "name": "P1", - "vendor": "SHENZHEN KAIFA TECHNOLOGY (CHENGDU) CO., LTD.", - "available": true, - "sensors": { - "net_electricity_point": 486.0, - "electricity_consumed_peak_point": 0.0, - "electricity_consumed_off_peak_point": 486.0, - "net_electricity_cumulative": 31610.031, - "electricity_consumed_peak_cumulative": 13966.608, - "electricity_consumed_off_peak_cumulative": 17643.423, - "electricity_consumed_peak_interval": 0.0, - "electricity_consumed_off_peak_interval": 15.0, - "electricity_produced_peak_point": 0.0, - "electricity_produced_off_peak_point": 0.0, - "electricity_produced_peak_cumulative": 0.0, - "electricity_produced_off_peak_cumulative": 0.0, - "electricity_produced_peak_interval": 0.0, - "electricity_produced_off_peak_interval": 0.0, - "electricity_phase_one_consumed": 486.0, - "electricity_phase_one_produced": 0.0 + "entities": { + "a455b61e52394b2db5081ce025a430f3": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.4.2", + "hardware": "AME Smile 2.0 board", + "location": "a455b61e52394b2db5081ce025a430f3", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile", + "name": "Smile P1", + "vendor": "Plugwise" + }, + "ba4de7613517478da82dd9b6abea36af": { + "available": true, + "dev_class": "smartmeter", + "location": "a455b61e52394b2db5081ce025a430f3", + "model": "KFM5KAIFA-METER", + "name": "P1", + "sensors": { + "electricity_consumed_off_peak_cumulative": 17643.423, + "electricity_consumed_off_peak_interval": 15, + "electricity_consumed_off_peak_point": 486, + "electricity_consumed_peak_cumulative": 13966.608, + "electricity_consumed_peak_interval": 0, + "electricity_consumed_peak_point": 0, + "electricity_phase_one_consumed": 486, + "electricity_phase_one_produced": 0, + "electricity_produced_off_peak_cumulative": 0.0, + "electricity_produced_off_peak_interval": 0, + "electricity_produced_off_peak_point": 0, + "electricity_produced_peak_cumulative": 0.0, + "electricity_produced_peak_interval": 0, + "electricity_produced_peak_point": 0, + "net_electricity_cumulative": 31610.031, + "net_electricity_point": 486 + }, + "vendor": "SHENZHEN KAIFA TECHNOLOGY \uff08CHENGDU\uff09 CO., LTD." } } } diff --git a/tests/data/p1/p1v4_442_single_UPDATED_DATA.json b/tests/data/p1/p1v4_442_single_UPDATED_DATA.json index 1033342ef..f7c54c9f6 100644 --- a/tests/data/p1/p1v4_442_single_UPDATED_DATA.json +++ b/tests/data/p1/p1v4_442_single_UPDATED_DATA.json @@ -1,19 +1,21 @@ { - "ba4de7613517478da82dd9b6abea36af": { - "sensors": { - "net_electricity_point": -2248.0, - "electricity_consumed_peak_point": 0.0, - "electricity_consumed_off_peak_point": 0.0, - "electricity_consumed_peak_interval": 0.0, - "electricity_consumed_off_peak_interval": 0.0, - "electricity_produced_peak_point": 2248.0, - "electricity_produced_off_peak_point": 0.0, - "electricity_produced_peak_cumulative": 6.543, - "electricity_produced_off_peak_cumulative": 0.0, - "electricity_produced_peak_interval": 1345.0, - "electricity_produced_off_peak_interval": 0.0, - "electricity_phase_one_consumed": 0.0, - "electricity_phase_one_produced": 1998.0 + "entities": { + "ba4de7613517478da82dd9b6abea36af": { + "sensors": { + "net_electricity_point": -2248.0, + "electricity_consumed_peak_point": 0.0, + "electricity_consumed_off_peak_point": 0.0, + "electricity_consumed_peak_interval": 0.0, + "electricity_consumed_off_peak_interval": 0.0, + "electricity_produced_peak_point": 2248.0, + "electricity_produced_off_peak_point": 0.0, + "electricity_produced_peak_cumulative": 6.543, + "electricity_produced_off_peak_cumulative": 0.0, + "electricity_produced_peak_interval": 1345.0, + "electricity_produced_off_peak_interval": 0.0, + "electricity_phase_one_consumed": 0.0, + "electricity_phase_one_produced": 1998.0 + } } } } diff --git a/tests/data/p1/p1v4_442_triple.json b/tests/data/p1/p1v4_442_triple.json index 84780b497..5e8c38bc6 100644 --- a/tests/data/p1/p1v4_442_triple.json +++ b/tests/data/p1/p1v4_442_triple.json @@ -1,51 +1,53 @@ { - "03e65b16e4b247a29ae0d75a78cb492e": { - "dev_class": "gateway", - "firmware": "4.4.2", - "hardware": "AME Smile 2.0 board", - "location": "03e65b16e4b247a29ae0d75a78cb492e", - "mac_address": "012345670001", - "model": "Gateway", - "model_id": "smile", - "name": "Smile P1", - "vendor": "Plugwise", - "binary_sensors": { - "plugwise_notification": true - } - }, - "b82b6b3322484f2ea4e25e0bd5f3d61f": { - "dev_class": "smartmeter", - "location": "03e65b16e4b247a29ae0d75a78cb492e", - "model": "XMX5LGF0010453051839", - "name": "P1", - "vendor": "XEMEX NV", - "available": true, - "sensors": { - "net_electricity_point": 5553.0, - "electricity_consumed_peak_point": 0.0, - "electricity_consumed_off_peak_point": 5553.0, - "net_electricity_cumulative": 231866.539, - "electricity_consumed_peak_cumulative": 161328.641, - "electricity_consumed_off_peak_cumulative": 70537.898, - "electricity_consumed_peak_interval": 0.0, - "electricity_consumed_off_peak_interval": 314.0, - "electricity_produced_peak_point": 0.0, - "electricity_produced_off_peak_point": 0.0, - "electricity_produced_peak_cumulative": 0.0, - "electricity_produced_off_peak_cumulative": 0.0, - "electricity_produced_peak_interval": 0.0, - "electricity_produced_off_peak_interval": 0.0, - "electricity_phase_one_consumed": 1763.0, - "electricity_phase_two_consumed": 1703.0, - "electricity_phase_three_consumed": 2080.0, - "electricity_phase_one_produced": 0.0, - "electricity_phase_two_produced": 0.0, - "electricity_phase_three_produced": 0.0, - "gas_consumed_cumulative": 16811.37, - "gas_consumed_interval": 0.06, - "voltage_phase_one": 233.2, - "voltage_phase_two": 234.4, - "voltage_phase_three": 234.7 + "entities": { + "03e65b16e4b247a29ae0d75a78cb492e": { + "binary_sensors": { + "plugwise_notification": true + }, + "dev_class": "gateway", + "firmware": "4.4.2", + "hardware": "AME Smile 2.0 board", + "location": "03e65b16e4b247a29ae0d75a78cb492e", + "mac_address": "012345670001", + "model": "Gateway", + "model_id": "smile", + "name": "Smile P1", + "vendor": "Plugwise" + }, + "b82b6b3322484f2ea4e25e0bd5f3d61f": { + "available": true, + "dev_class": "smartmeter", + "location": "03e65b16e4b247a29ae0d75a78cb492e", + "model": "XMX5LGF0010453051839", + "name": "P1", + "sensors": { + "electricity_consumed_off_peak_cumulative": 70537.898, + "electricity_consumed_off_peak_interval": 314, + "electricity_consumed_off_peak_point": 5553, + "electricity_consumed_peak_cumulative": 161328.641, + "electricity_consumed_peak_interval": 0, + "electricity_consumed_peak_point": 0, + "electricity_phase_one_consumed": 1763, + "electricity_phase_one_produced": 0, + "electricity_phase_three_consumed": 2080, + "electricity_phase_three_produced": 0, + "electricity_phase_two_consumed": 1703, + "electricity_phase_two_produced": 0, + "electricity_produced_off_peak_cumulative": 0.0, + "electricity_produced_off_peak_interval": 0, + "electricity_produced_off_peak_point": 0, + "electricity_produced_peak_cumulative": 0.0, + "electricity_produced_peak_interval": 0, + "electricity_produced_peak_point": 0, + "gas_consumed_cumulative": 16811.37, + "gas_consumed_interval": 0.06, + "net_electricity_cumulative": 231866.539, + "net_electricity_point": 5553, + "voltage_phase_one": 233.2, + "voltage_phase_three": 234.7, + "voltage_phase_two": 234.4 + }, + "vendor": "XEMEX NV" } } } diff --git a/tests/data/p1/smile_p1_v2.json b/tests/data/p1/smile_p1_v2.json index 298fcfc1c..10c129e47 100644 --- a/tests/data/p1/smile_p1_v2.json +++ b/tests/data/p1/smile_p1_v2.json @@ -1,34 +1,36 @@ { - "aaaa0000aaaa0000aaaa0000aaaa00aa": { - "dev_class": "gateway", - "firmware": "2.5.9", - "location": "938696c4bcdb4b8a9a595cb38ed43913", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile P1", - "vendor": "Plugwise" - }, - "938696c4bcdb4b8a9a595cb38ed43913": { - "dev_class": "smartmeter", - "location": "938696c4bcdb4b8a9a595cb38ed43913", - "model": "Ene5\\T210-DESMR5.0", - "name": "P1", - "vendor": "Ene5\\T210-DESMR5.0", - "sensors": { - "net_electricity_point": 458.0, - "electricity_consumed_point": 458.0, - "net_electricity_cumulative": 1019.201, - "electricity_consumed_peak_cumulative": 1155.195, - "electricity_consumed_off_peak_cumulative": 1642.74, - "electricity_consumed_peak_interval": 250.0, - "electricity_consumed_off_peak_interval": 0.0, - "electricity_produced_point": 0.0, - "electricity_produced_peak_cumulative": 1296.136, - "electricity_produced_off_peak_cumulative": 482.598, - "electricity_produced_peak_interval": 0.0, - "electricity_produced_off_peak_interval": 0.0, - "gas_consumed_cumulative": 584.433, - "gas_consumed_interval": 0.016 + "device_zones": { + "938696c4bcdb4b8a9a595cb38ed43913": { + "dev_class": "smartmeter", + "location": "938696c4bcdb4b8a9a595cb38ed43913", + "model": "Ene5\\T210-DESMR5.0", + "name": "P1", + "sensors": { + "electricity_consumed_off_peak_cumulative": 1642.74, + "electricity_consumed_off_peak_interval": 0, + "electricity_consumed_peak_cumulative": 1155.195, + "electricity_consumed_peak_interval": 250, + "electricity_consumed_point": 458, + "electricity_produced_off_peak_cumulative": 482.598, + "electricity_produced_off_peak_interval": 0, + "electricity_produced_peak_cumulative": 1296.136, + "electricity_produced_peak_interval": 0, + "electricity_produced_point": 0, + "gas_consumed_cumulative": 584.433, + "gas_consumed_interval": 0.016, + "net_electricity_cumulative": 1019.201, + "net_electricity_point": 458 + }, + "vendor": "Ene5\\T210-DESMR5.0" + }, + "aaaa0000aaaa0000aaaa0000aaaa00aa": { + "dev_class": "gateway", + "firmware": "2.5.9", + "location": "938696c4bcdb4b8a9a595cb38ed43913", + "mac_address": "012345670001", + "model": "Gateway", + "name": "Smile P1", + "vendor": "Plugwise" } } } diff --git a/tests/data/p1/smile_p1_v2_2.json b/tests/data/p1/smile_p1_v2_2.json index bb59a0476..30734158e 100644 --- a/tests/data/p1/smile_p1_v2_2.json +++ b/tests/data/p1/smile_p1_v2_2.json @@ -1,34 +1,36 @@ { - "aaaa0000aaaa0000aaaa0000aaaa00aa": { - "dev_class": "gateway", - "firmware": "2.5.9", - "location": "199aa40f126840f392983d171374ab0b", - "mac_address": "012345670001", - "model": "Gateway", - "name": "Smile P1", - "vendor": "Plugwise" - }, - "199aa40f126840f392983d171374ab0b": { - "dev_class": "smartmeter", - "location": "199aa40f126840f392983d171374ab0b", - "model": "Ene5\\T210-DESMR5.0", - "name": "P1", - "vendor": "Ene5\\T210-DESMR5.0", - "sensors": { - "net_electricity_point": 458.0, - "electricity_consumed_point": 458.0, - "net_electricity_cumulative": 1019.201, - "electricity_consumed_peak_cumulative": 1155.195, - "electricity_consumed_off_peak_cumulative": 1642.74, - "electricity_consumed_peak_interval": 250.0, - "electricity_consumed_off_peak_interval": 0.0, - "electricity_produced_point": 0.0, - "electricity_produced_peak_cumulative": 1296.136, - "electricity_produced_off_peak_cumulative": 482.598, - "electricity_produced_peak_interval": 0.0, - "electricity_produced_off_peak_interval": 0.0, - "gas_consumed_cumulative": 584.433, - "gas_consumed_interval": 0.016 + "entities": { + "199aa40f126840f392983d171374ab0b": { + "dev_class": "smartmeter", + "location": "199aa40f126840f392983d171374ab0b", + "model": "Ene5\\T210-DESMR5.0", + "name": "P1", + "sensors": { + "electricity_consumed_off_peak_cumulative": 1642.74, + "electricity_consumed_off_peak_interval": 0, + "electricity_consumed_peak_cumulative": 1155.195, + "electricity_consumed_peak_interval": 250, + "electricity_consumed_point": 458, + "electricity_produced_off_peak_cumulative": 482.598, + "electricity_produced_off_peak_interval": 0, + "electricity_produced_peak_cumulative": 1296.136, + "electricity_produced_peak_interval": 0, + "electricity_produced_point": 0, + "gas_consumed_cumulative": 584.433, + "gas_consumed_interval": 0.016, + "net_electricity_cumulative": 1019.201, + "net_electricity_point": 458 + }, + "vendor": "Ene5\\T210-DESMR5.0" + }, + "aaaa0000aaaa0000aaaa0000aaaa00aa": { + "dev_class": "gateway", + "firmware": "2.5.9", + "location": "199aa40f126840f392983d171374ab0b", + "mac_address": "012345670001", + "model": "Gateway", + "name": "Smile P1", + "vendor": "Plugwise" } } } diff --git a/tests/data/p1/smile_p1_v2_2_UPDATED_DATA.json b/tests/data/p1/smile_p1_v2_2_UPDATED_DATA.json index 088a6a609..237826b33 100644 --- a/tests/data/p1/smile_p1_v2_2_UPDATED_DATA.json +++ b/tests/data/p1/smile_p1_v2_2_UPDATED_DATA.json @@ -1,16 +1,18 @@ { - "199aa40f126840f392983d171374ab0b": { - "sensors": { - "net_electricity_point": -2248.0, - "electricity_consumed_point": 0.0, - "net_electricity_cumulative": 1019.101, - "electricity_consumed_peak_cumulative": 1155.295, - "electricity_consumed_off_peak_cumulative": 1642.84, - "electricity_produced_point": 2248.0, - "electricity_produced_peak_cumulative": 1296.336, - "electricity_produced_off_peak_cumulative": 482.698, - "gas_consumed_cumulative": 585.433, - "gas_consumed_interval": 0.0 + "entities": { + "199aa40f126840f392983d171374ab0b": { + "sensors": { + "net_electricity_point": -2248.0, + "electricity_consumed_point": 0.0, + "net_electricity_cumulative": 1019.101, + "electricity_consumed_peak_cumulative": 1155.295, + "electricity_consumed_off_peak_cumulative": 1642.84, + "electricity_produced_point": 2248.0, + "electricity_produced_peak_cumulative": 1296.336, + "electricity_produced_off_peak_cumulative": 482.698, + "gas_consumed_cumulative": 585.433, + "gas_consumed_interval": 0.0 + } } } } diff --git a/tests/data/stretch/stretch_v23.json b/tests/data/stretch/stretch_v23.json index 1c3c8cbb2..79038dbb0 100644 --- a/tests/data/stretch/stretch_v23.json +++ b/tests/data/stretch/stretch_v23.json @@ -1,353 +1,357 @@ { - "0000aaaa0000aaaa0000aaaa0000aa00": { - "dev_class": "gateway", - "firmware": "2.3.12", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "mac_address": "01:23:45:67:89:AB", - "model": "Gateway", - "name": "Stretch", - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" - }, - "09c8ce93d7064fa6a233c0e4c2449bfe": { - "dev_class": "lamp", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "kerstboom buiten 043B016", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "entities": { + "0000aaaa0000aaaa0000aaaa0000aa00": { + "dev_class": "gateway", + "firmware": "2.3.12", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "mac_address": "01:23:45:67:89:AB", + "model": "Gateway", + "name": "Stretch", + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" }, - "switches": { - "relay": false, - "lock": false - } - }, - "33a1c784a9ff4c2d8766a0212714be09": { - "dev_class": "lighting", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Barverlichting", - "zigbee_mac_address": "ABCD012345670A13", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "09c8ce93d7064fa6a233c0e4c2449bfe": { + "dev_class": "lamp", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "kerstboom buiten 043B016", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "switches": { - "relay": false, - "lock": false - } - }, - "199fd4b2caa44197aaf5b3128f6464ed": { - "dev_class": "airconditioner", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Airco 25F69E3", - "zigbee_mac_address": "ABCD012345670A10", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 2.06, - "electricity_consumed_interval": 1.62, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "199fd4b2caa44197aaf5b3128f6464ed": { + "dev_class": "airconditioner", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Airco 25F69E3", + "sensors": { + "electricity_consumed": 2.06, + "electricity_consumed_interval": 1.62, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A10" }, - "switches": { - "relay": true, - "lock": false - } - }, - "713427748874454ca1eb4488d7919cf2": { - "dev_class": "freezer", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Leeg 043220D", - "zigbee_mac_address": "ABCD012345670A12", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "24b2ed37c8964c73897db6340a39c129": { + "dev_class": "router", + "firmware": "2011-06-27T10:47:37+02:00", + "hardware": "6539-0700-7325", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle+ type F", + "name": "MK Netwerk 1A4455E", + "sensors": { + "electricity_consumed": 4.63, + "electricity_consumed_interval": 0.65, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "0123456789AB" }, - "switches": { - "relay": false, - "lock": false - } - }, - "fd1b74f59e234a9dae4e23b2b5cf07ed": { - "dev_class": "dryer", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Wasdroger 043AECA", - "zigbee_mac_address": "ABCD012345670A04", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 1.31, - "electricity_consumed_interval": 0.21, - "electricity_produced": 0.0 + "2587a7fcdd7e482dab03fda256076b4b": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "00469CA1", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A16" }, - "switches": { - "relay": true, - "lock": true - } - }, - "c71f1cb2100b42ca942f056dcb7eb01f": { - "dev_class": "tv", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Tv hoek 25F6790", - "zigbee_mac_address": "ABCD012345670A11", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 33.3, - "electricity_consumed_interval": 4.93, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "2cc9a0fe70ef4441a9e4f55dfd64b776": { + "dev_class": "lamp", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Lamp TV 025F698F", + "sensors": { + "electricity_consumed": 4.0, + "electricity_consumed_interval": 0.58, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A15" }, - "switches": { - "relay": true, - "lock": false - } - }, - "2cc9a0fe70ef4441a9e4f55dfd64b776": { - "dev_class": "lamp", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Lamp TV 025F698F", - "zigbee_mac_address": "ABCD012345670A15", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 4.0, - "electricity_consumed_interval": 0.58, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "305452ce97c243c0a7b4ab2a4ebfe6e3": { + "dev_class": "lamp", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Lamp piano 025F6819", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" }, - "switches": { - "relay": true, - "lock": false - } - }, - "6518f3f72a82486c97b91e26f2e9bd1d": { - "dev_class": "charger", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Bed 025F6768", - "zigbee_mac_address": "ABCD012345670A14", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "33a1c784a9ff4c2d8766a0212714be09": { + "dev_class": "lighting", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Barverlichting", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A13" }, - "switches": { - "relay": true, - "lock": false - } - }, - "828f6ce1e36744689baacdd6ddb1d12c": { - "dev_class": "washingmachine", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Wasmachine 043AEC7", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 3.5, - "electricity_consumed_interval": 0.5, - "electricity_produced": 0.0 + "407aa1c1099d463c9137a3a9eda787fd": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "0043B013", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" }, - "switches": { - "relay": true, - "lock": true - } - }, - "71e3e65ffc5a41518b19460c6e8ee34f": { - "dev_class": "tv", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Leeg 043AEC6", - "zigbee_mac_address": "ABCD012345670A08", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "6518f3f72a82486c97b91e26f2e9bd1d": { + "dev_class": "charger", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Bed 025F6768", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A14" }, - "switches": { - "relay": false, - "lock": false - } - }, - "305452ce97c243c0a7b4ab2a4ebfe6e3": { - "dev_class": "lamp", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Lamp piano 025F6819", - "zigbee_mac_address": "ABCD012345670A05", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "713427748874454ca1eb4488d7919cf2": { + "dev_class": "freezer", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Leeg 043220D", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A12" }, - "switches": { - "relay": false, - "lock": false - } - }, - "bc0adbebc50d428d9444a5d805c89da9": { - "dev_class": "watercooker", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Waterkoker 043AF7F", - "zigbee_mac_address": "ABCD012345670A07", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "71e3e65ffc5a41518b19460c6e8ee34f": { + "dev_class": "tv", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Leeg 043AEC6", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": false + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" }, - "switches": { - "relay": true, - "lock": false - } - }, - "407aa1c1099d463c9137a3a9eda787fd": { - "dev_class": "zz_misc", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "0043B013", - "zigbee_mac_address": "ABCD012345670A09", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "828f6ce1e36744689baacdd6ddb1d12c": { + "dev_class": "washingmachine", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Wasmachine 043AEC7", + "sensors": { + "electricity_consumed": 3.5, + "electricity_consumed_interval": 0.5, + "electricity_produced": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" }, - "switches": { - "relay": false, - "lock": false - } - }, - "2587a7fcdd7e482dab03fda256076b4b": { - "dev_class": "zz_misc", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "00469CA1", - "zigbee_mac_address": "ABCD012345670A16", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "a28e6f5afc0e4fc68498c1f03e82a052": { + "dev_class": "lamp", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Lamp bank 25F67F8", + "sensors": { + "electricity_consumed": 4.19, + "electricity_consumed_interval": 0.62, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" }, - "switches": { - "relay": true, - "lock": false - } - }, - "a28e6f5afc0e4fc68498c1f03e82a052": { - "dev_class": "lamp", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Lamp bank 25F67F8", - "zigbee_mac_address": "ABCD012345670A03", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 4.19, - "electricity_consumed_interval": 0.62, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "bc0adbebc50d428d9444a5d805c89da9": { + "dev_class": "watercooker", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Waterkoker 043AF7F", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" }, - "switches": { - "relay": true, - "lock": false - } - }, - "24b2ed37c8964c73897db6340a39c129": { - "dev_class": "router", - "firmware": "2011-06-27T10:47:37+02:00", - "hardware": "6539-0700-7325", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle+ type F", - "name": "MK Netwerk 1A4455E", - "zigbee_mac_address": "0123456789AB", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 4.63, - "electricity_consumed_interval": 0.65, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 + "c71f1cb2100b42ca942f056dcb7eb01f": { + "dev_class": "tv", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Tv hoek 25F6790", + "sensors": { + "electricity_consumed": 33.3, + "electricity_consumed_interval": 4.93, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" }, - "switches": { - "relay": true, - "lock": true - } - }, - "f7b145c8492f4dd7a4de760456fdef3e": { - "dev_class": "switching", - "model": "Switchgroup", - "name": "Test", - "members": ["407aa1c1099d463c9137a3a9eda787fd"], - "switches": { - "relay": false - } - }, - "fead900a56d3430bb2d53d891f7c0656": { - "dev_class": "heater_central_plug", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4026", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "CV-ketel 25F6789", - "sensors": { - "electricity_consumed": 1.56, - "electricity_consumed_interval": 0.04, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "lock": true, - "relay": true + "f7b145c8492f4dd7a4de760456fdef3e": { + "dev_class": "switching", + "members": [ + "407aa1c1099d463c9137a3a9eda787fd" + ], + "model": "Switchgroup", + "name": "Test", + "switches": { + "relay": false + } }, - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A06" + "fd1b74f59e234a9dae4e23b2b5cf07ed": { + "dev_class": "dryer", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Wasdroger 043AECA", + "sensors": { + "electricity_consumed": 1.31, + "electricity_consumed_interval": 0.21, + "electricity_produced": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" + }, + "fead900a56d3430bb2d53d891f7c0656": { + "dev_class": "heater_central_plug", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "CV-ketel 25F6789", + "sensors": { + "electricity_consumed": 1.56, + "electricity_consumed_interval": 0.04, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A06" + } } } diff --git a/tests/data/stretch/stretch_v27_no_domain.json b/tests/data/stretch/stretch_v27_no_domain.json index 55a64d2c8..b11b88814 100644 --- a/tests/data/stretch/stretch_v27_no_domain.json +++ b/tests/data/stretch/stretch_v27_no_domain.json @@ -1,36 +1,274 @@ { - "9b9bfdb3c7ad4ca5817ccaa235f1e094": { - "dev_class": "zz_misc", - "firmware": "2011-06-27T10:47:37+02:00", - "hardware": "6539-0700-7326", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle+ type F", - "name": "25881A2", - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670A04", - "sensors": { - "electricity_consumed": 13.3, - "electricity_consumed_interval": 7.77, - "electricity_produced": 0.0, - "electricity_produced_interval": 0.0 - }, - "switches": { - "relay": true, - "lock": true - } - }, - "8b8d14b242e24cd789743c828b9a2ea9": { - "sensors": { - "electricity_consumed": 1.69 - }, - "switches": { - "lock": false, - "relay": true - } - }, - "d0122ac66eba47b99d8e5fbd1e2f5932": { - "sensors": { - "electricity_consumed_interval": 2.21 + "entities": { + "0000aaaa0000aaaa0000aaaa0000aa00": { + "dev_class": "gateway", + "firmware": "2.7.18", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "mac_address": "01:23:45:67:89:AB", + "model": "Gateway", + "name": "Stretch", + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" + }, + "0b078d5862614880bc670cabf9f54b4e": { + "dev_class": "zz_misc", + "firmware": "2011-05-13T09:19:23+02:00", + "hardware": "6539-0701-4023", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "769C03", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" + }, + "3b729c63ca41421b9e21264adfa0a4e7": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "261B34C", + "sensors": { + "electricity_consumed": 8.5, + "electricity_consumed_interval": 5.19, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A06" + }, + "4661019bbe7b4a3bbe39f345ca5b5d98": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "25F68CC", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" + }, + "553dfa416df94802851de32913f1ebd3": { + "dev_class": "zz_misc", + "firmware": "2011-05-13T09:19:23+02:00", + "hardware": "6539-0701-4023", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "B7DEED", + "sensors": { + "electricity_consumed": 2.5, + "electricity_consumed_interval": 1.66, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A09" + }, + "5ee135e752034ad2a3e38a407332757f": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "261B329", + "sensors": { + "electricity_consumed": 6.75, + "electricity_consumed_interval": 3.98, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A03" + }, + "7c7f0d3da801402291b057f9ec69b5b6": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "261B34D", + "sensors": { + "electricity_consumed": 7.81, + "electricity_consumed_interval": 4.54, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A08" + }, + "8b8d14b242e24cd789743c828b9a2ea9": { + "dev_class": "zz_misc", + "firmware": "2011-05-13T09:19:23+02:00", + "hardware": "6539-0701-4022", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "76BF93", + "sensors": { + "electricity_consumed": 1.69, + "electricity_consumed_interval": 1.14, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A05" + }, + "8e4ecdcc9094481387e0273437bb51f9": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "25F68C3", + "sensors": { + "electricity_consumed": 4.69, + "electricity_consumed_interval": 2.83, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" + }, + "9b9bfdb3c7ad4ca5817ccaa235f1e094": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:47:37+02:00", + "hardware": "6539-0700-7326", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle+ type F", + "name": "25881A2", + "sensors": { + "electricity_consumed": 13.3, + "electricity_consumed_interval": 7.77, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" + }, + "9db23f92fd114e83acce036b6cb82295": { + "dev_class": "zz_misc", + "firmware": "2011-05-13T09:19:23+02:00", + "hardware": "6539-0701-4023", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "76B2F2", + "sensors": { + "electricity_consumed": 0.63, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A13" + }, + "ad858f416f3e42e6a25bbd6b18178b0e": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "261B2AE", + "sensors": { + "electricity_consumed": 6.06, + "electricity_consumed_interval": 3.41, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A12" + }, + "d0122ac66eba47b99d8e5fbd1e2f5932": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "25F66AD", + "sensors": { + "electricity_consumed": 3.88, + "electricity_consumed_interval": 2.21, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A10" + }, + "e4172142264f488a99b63c73817c9d21": { + "dev_class": "zz_misc", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4026", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "261B32A", + "sensors": { + "electricity_consumed": 9.63, + "electricity_consumed_interval": 5.84, + "electricity_produced": 0.0, + "electricity_produced_interval": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A11" } } } diff --git a/tests/data/stretch/stretch_v31.json b/tests/data/stretch/stretch_v31.json index 369300146..43f925648 100644 --- a/tests/data/stretch/stretch_v31.json +++ b/tests/data/stretch/stretch_v31.json @@ -1,134 +1,136 @@ { - "0000aaaa0000aaaa0000aaaa0000aa00": { - "dev_class": "gateway", - "firmware": "3.1.11", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "mac_address": "01:23:45:67:89:AB", - "model": "Gateway", - "name": "Stretch", - "vendor": "Plugwise", - "zigbee_mac_address": "ABCD012345670101" - }, - "5871317346d045bc9f6b987ef25ee638": { - "dev_class": "water_heater_vessel", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4028", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Boiler (1EB31)", - "zigbee_mac_address": "ABCD012345670A07", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 1.19, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "device_zones": { + "0000aaaa0000aaaa0000aaaa0000aa00": { + "dev_class": "gateway", + "firmware": "3.1.11", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "mac_address": "01:23:45:67:89:AB", + "model": "Gateway", + "name": "Stretch", + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670101" }, - "switches": { - "relay": true, - "lock": false - } - }, - "e1c884e7dede431dadee09506ec4f859": { - "dev_class": "refrigerator", - "firmware": "2011-06-27T10:47:37+02:00", - "hardware": "6539-0700-7330", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle+ type F", - "name": "Koelkast (92C4A)", - "zigbee_mac_address": "0123456789AB", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 50.5, - "electricity_consumed_interval": 0.08, - "electricity_produced": 0.0 + "059e4d03c7a34d278add5c7a4a781d19": { + "dev_class": "washingmachine", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Wasmachine (52AC1)", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": true, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A01" }, - "switches": { - "relay": true, - "lock": false - } - }, - "aac7b735042c4832ac9ff33aae4f453b": { - "dev_class": "dishwasher", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "6539-0701-4022", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Vaatwasser (2a1ab)", - "zigbee_mac_address": "ABCD012345670A02", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.71, - "electricity_produced": 0.0 + "5871317346d045bc9f6b987ef25ee638": { + "dev_class": "water_heater_vessel", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4028", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Boiler (1EB31)", + "sensors": { + "electricity_consumed": 1.19, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A07" }, - "switches": { - "relay": true, - "lock": false - } - }, - "cfe95cf3de1948c0b8955125bf754614": { - "dev_class": "dryer", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Droger (52559)", - "zigbee_mac_address": "ABCD012345670A04", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "aac7b735042c4832ac9ff33aae4f453b": { + "dev_class": "dishwasher", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "6539-0701-4022", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Vaatwasser (2a1ab)", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.71, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A02" }, - "switches": { - "relay": true, - "lock": false - } - }, - "059e4d03c7a34d278add5c7a4a781d19": { - "dev_class": "washingmachine", - "firmware": "2011-06-27T10:52:18+02:00", - "hardware": "0000-0440-0107", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", - "model": "Circle type F", - "name": "Wasmachine (52AC1)", - "zigbee_mac_address": "ABCD012345670A01", - "vendor": "Plugwise", - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "cfe95cf3de1948c0b8955125bf754614": { + "dev_class": "dryer", + "firmware": "2011-06-27T10:52:18+02:00", + "hardware": "0000-0440-0107", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle type F", + "name": "Droger (52559)", + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "ABCD012345670A04" }, - "switches": { - "relay": true, - "lock": true - } - }, - "d950b314e9d8499f968e6db8d82ef78c": { - "dev_class": "report", - "model": "Switchgroup", - "name": "Stroomvreters", - "members": [ - "059e4d03c7a34d278add5c7a4a781d19", - "5871317346d045bc9f6b987ef25ee638", - "aac7b735042c4832ac9ff33aae4f453b", - "cfe95cf3de1948c0b8955125bf754614", - "e1c884e7dede431dadee09506ec4f859" - ], - "switches": { - "relay": true - } - }, - "d03738edfcc947f7b8f4573571d90d2d": { - "dev_class": "switching", - "model": "Switchgroup", - "name": "Schakel", - "members": [ - "059e4d03c7a34d278add5c7a4a781d19", - "cfe95cf3de1948c0b8955125bf754614" - ], - "switches": { - "relay": true + "d03738edfcc947f7b8f4573571d90d2d": { + "dev_class": "switching", + "members": [ + "059e4d03c7a34d278add5c7a4a781d19", + "cfe95cf3de1948c0b8955125bf754614" + ], + "model": "Switchgroup", + "name": "Schakel", + "switches": { + "relay": true + } + }, + "d950b314e9d8499f968e6db8d82ef78c": { + "dev_class": "report", + "members": [ + "059e4d03c7a34d278add5c7a4a781d19", + "5871317346d045bc9f6b987ef25ee638", + "aac7b735042c4832ac9ff33aae4f453b", + "cfe95cf3de1948c0b8955125bf754614", + "e1c884e7dede431dadee09506ec4f859" + ], + "model": "Switchgroup", + "name": "Stroomvreters", + "switches": { + "relay": true + } + }, + "e1c884e7dede431dadee09506ec4f859": { + "dev_class": "refrigerator", + "firmware": "2011-06-27T10:47:37+02:00", + "hardware": "6539-0700-7330", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "model": "Circle+ type F", + "name": "Koelkast (92C4A)", + "sensors": { + "electricity_consumed": 50.5, + "electricity_consumed_interval": 0.08, + "electricity_produced": 0.0 + }, + "switches": { + "lock": false, + "relay": true + }, + "vendor": "Plugwise", + "zigbee_mac_address": "0123456789AB" } } } diff --git a/tests/data/stretch/stretch_v31_UPDATED_DATA.json b/tests/data/stretch/stretch_v31_UPDATED_DATA.json index 44a1049ef..0eff7c2ef 100644 --- a/tests/data/stretch/stretch_v31_UPDATED_DATA.json +++ b/tests/data/stretch/stretch_v31_UPDATED_DATA.json @@ -1,44 +1,46 @@ { - "aac7b735042c4832ac9ff33aae4f453b": { - "sensors": { - "electricity_consumed": 1000.0, - "electricity_consumed_interval": 20.7, - "electricity_produced": 0.0 + "device_zones": { + "aac7b735042c4832ac9ff33aae4f453b": { + "sensors": { + "electricity_consumed": 1000.0, + "electricity_consumed_interval": 20.7, + "electricity_produced": 0.0 + }, + "switches": { + "relay": true, + "lock": true + } }, - "switches": { - "relay": true, - "lock": true - } - }, - "cfe95cf3de1948c0b8955125bf754614": { - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "cfe95cf3de1948c0b8955125bf754614": { + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "relay": false, + "lock": false + } }, - "switches": { - "relay": false, - "lock": false - } - }, - "059e4d03c7a34d278add5c7a4a781d19": { - "sensors": { - "electricity_consumed": 0.0, - "electricity_consumed_interval": 0.0, - "electricity_produced": 0.0 + "059e4d03c7a34d278add5c7a4a781d19": { + "sensors": { + "electricity_consumed": 0.0, + "electricity_consumed_interval": 0.0, + "electricity_produced": 0.0 + }, + "switches": { + "relay": false, + "lock": false + } }, - "switches": { - "relay": false, - "lock": false - } - }, - "d03738edfcc947f7b8f4573571d90d2d": { - "members": [ - "059e4d03c7a34d278add5c7a4a781d19", - "cfe95cf3de1948c0b8955125bf754614" - ], - "switches": { - "relay": false + "d03738edfcc947f7b8f4573571d90d2d": { + "members": [ + "059e4d03c7a34d278add5c7a4a781d19", + "cfe95cf3de1948c0b8955125bf754614" + ], + "switches": { + "relay": false + } } } } diff --git a/tests/test_adam.py b/tests/test_adam.py index 2a2f95116..2bf559be7 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -36,8 +36,8 @@ async def test_connect_adam_plus_anna_new(self): assert smile.gateway_id == "da224107914542988a88561b4452b0f6" assert smile._last_active["f2bf9048bef64cc5b6d5110154e33c81"] == "Weekschema" assert smile._last_active["f871b8c4d63549319221e294e4f88074"] == "Badkamer" - assert self.device_items == 165 - assert self.device_list == [ + assert self.entity_items == 177 + assert self.entity_list == [ "da224107914542988a88561b4452b0f6", "056ee145a816487eaa69243c3280f8bf", "10016900610d4c7481df78c89606ef22", @@ -49,6 +49,8 @@ async def test_connect_adam_plus_anna_new(self): "854f8a9b0e7e425db97f1f110e1ce4b3", "2568cc4b9c1e401495d4741a5f89bee1", "e8ef2a01ed3b4139a53bf749204fe6b4", + "f2bf9048bef64cc5b6d5110154e33c81", + "f871b8c4d63549319221e294e4f88074", ] result = await self.tinker_thermostat( @@ -187,7 +189,7 @@ async def test_connect_adam_zone_per_device(self): assert smile._last_active["82fa13f017d240daa0d0ea1775420f24"] == CV_JESSIE assert smile._last_active["08963fec7c53423ca5680aa4cb502c63"] == BADKAMER_SCHEMA assert smile._last_active["446ac08dd04d4eff8ac57489757b7314"] == BADKAMER_SCHEMA - assert self.device_items == 340 + assert self.entity_items == 364 assert "af82e4ccf9c548528166d38e560662a4" in self.notifications await smile.delete_notification() @@ -265,7 +267,7 @@ async def test_connect_adam_multiple_devices_per_zone(self): assert smile._last_active["82fa13f017d240daa0d0ea1775420f24"] == CV_JESSIE assert smile._last_active["08963fec7c53423ca5680aa4cb502c63"] == BADKAMER_SCHEMA assert smile._last_active["446ac08dd04d4eff8ac57489757b7314"] == BADKAMER_SCHEMA - assert self.device_items == 340 + assert self.entity_items == 364 assert "af82e4ccf9c548528166d38e560662a4" in self.notifications @@ -303,7 +305,7 @@ async def test_adam_heatpump_cooling(self): assert smile._last_active["a562019b0b1f47a4bde8ebe3dbe3e8a9"] == WERKDAG_SCHEMA assert smile._last_active["8cf650a4c10c44819e426bed406aec34"] == WERKDAG_SCHEMA assert smile._last_active["5cc21042f87f4b4c94ccb5537c47a53f"] == WERKDAG_SCHEMA - assert self.device_items == 439 + assert self.entity_items == 497 await smile.close_connection() await self.disconnect(server, client) @@ -324,7 +326,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) await self.device_test(smile, "2022-01-02 00:00:01", testdata) - assert self.device_items == 58 + assert self.entity_items == 64 assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present @@ -349,7 +351,7 @@ async def test_connect_adam_plus_anna(self): await self.device_test(smile, "2020-03-22 00:00:01", testdata) assert smile.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" assert smile._last_active["009490cc2f674ce6b576863fbb64f867"] == "Weekschema" - assert self.device_items == 73 + assert self.entity_items == 79 assert "6fb89e35caeb4b1cb275184895202d84" in self.notifications result = await self.tinker_thermostat( @@ -393,7 +395,7 @@ async def test_adam_plus_jip(self): assert smile._last_active["06aecb3d00354375924f50c47af36bd2"] is None assert smile._last_active["d27aede973b54be484f6842d1b2802ad"] is None assert smile._last_active["13228dab8ce04617af318a2888b3c548"] is None - assert self.device_items == 228 + assert self.entity_items == 244 # Negative test result = await self.tinker_thermostat( diff --git a/tests/test_anna.py b/tests/test_anna.py index e260f95e0..4f5c6e46b 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -30,7 +30,7 @@ async def test_connect_anna_v4(self): await self.device_test(smile, "2020-04-05 00:00:01", testdata) assert smile.gateway_id == "0466eae8520144c78afb29628384edeb" assert smile._last_active["eb5309212bf5407bb143e5bfa3b18aee"] == "Standaard" - assert self.device_items == 58 + assert self.entity_items == 58 assert not self.notifications assert not self.cooling_present @@ -105,7 +105,7 @@ async def test_connect_anna_v4_dhw(self): await self.device_test(smile, "2020-04-05 00:00:01", testdata) assert smile._last_active["eb5309212bf5407bb143e5bfa3b18aee"] == "Standaard" - assert self.device_items == 58 + assert self.entity_items == 58 assert not self.notifications result = await self.tinker_thermostat( @@ -121,13 +121,9 @@ async def test_connect_anna_v4_dhw(self): @pytest.mark.asyncio async def test_connect_anna_v4_no_tag(self): """Test an Anna firmware 4 setup - missing tag (issue).""" - testdata = { - # Anna - "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - } - } self.smile_setup = "anna_v4_no_tag" + + testdata = self.load_testdata(SMILE_TYPE, self.smile_setup) server, smile, client = await self.connect_wrapper() assert smile.smile_hostname == "smile000000" @@ -138,7 +134,7 @@ async def test_connect_anna_v4_no_tag(self): ) await self.device_test(smile, "2020-04-05 00:00:01", testdata) - assert self.device_items == 58 + assert self.entity_items == 58 result = await self.tinker_thermostat( smile, @@ -167,7 +163,7 @@ async def test_connect_anna_without_boiler_fw441(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile._last_active["c34c6864216446528e95d88985e714cc"] == "Normaal" - assert self.device_items == 39 + assert self.entity_items == 39 assert not self.notifications result = await self.tinker_thermostat( @@ -196,7 +192,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(smile, "2020-04-12 00:00:01", testdata) assert smile.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert smile._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.device_items == 67 + assert self.entity_items == 67 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -225,7 +221,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test( smile, "2020-04-13 00:00:01", testdata_updated, initialize=False ) - assert self.device_items == 64 + assert self.entity_items == 64 await smile.close_connection() await self.disconnect(server, client) @@ -251,7 +247,7 @@ async def test_connect_anna_heatpump_cooling(self): await self.device_test(smile, "2020-04-19 00:00:01", testdata) assert smile._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.device_items == 64 + assert self.entity_items == 64 assert self.cooling_present assert not self.notifications @@ -296,7 +292,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): ) await self.device_test(smile, "2020-04-19 00:00:01", testdata) - assert self.device_items == 64 + assert self.entity_items == 64 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -323,7 +319,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(smile, "2020-04-12 00:00:01", testdata) assert smile.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert smile._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.device_items == 63 + assert self.entity_items == 63 assert not self.notifications assert not self.cooling_present @@ -350,7 +346,7 @@ async def test_connect_anna_elga_2(self): smile._last_active["d3ce834534114348be628b61b26d9220"] == THERMOSTAT_SCHEDULE ) - assert self.device_items == 63 + assert self.entity_items == 63 assert smile.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -375,7 +371,7 @@ async def test_connect_anna_elga_2_schedule_off(self): ) assert self.cooling_present assert not self._cooling_enabled - assert self.device_items == 63 + assert self.entity_items == 63 await smile.close_connection() await self.disconnect(server, client) @@ -404,7 +400,7 @@ async def test_connect_anna_elga_2_cooling(self): smile._last_active["d3ce834534114348be628b61b26d9220"] == THERMOSTAT_SCHEDULE ) - assert self.device_items == 63 + assert self.entity_items == 63 assert not self.notifications assert self.cooling_present @@ -431,7 +427,7 @@ async def test_connect_anna_loria_heating_idle(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile._last_active["15da035090b847e7a21f93e08c015ebc"] == "Winter" - assert self.device_items == 66 + assert self.entity_items == 66 assert self.cooling_present assert not self._cooling_enabled @@ -497,7 +493,7 @@ async def test_connect_anna_loria_cooling_active(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile._last_active["15da035090b847e7a21f93e08c015ebc"] == "Winter" - assert self.device_items == 66 + assert self.entity_items == 66 assert self.cooling_present assert self._cooling_enabled @@ -520,7 +516,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(smile, "2022-05-16 00:00:01", testdata) - assert self.device_items == 66 + assert self.entity_items == 66 assert self.cooling_present assert not self._cooling_enabled diff --git a/tests/test_init.py b/tests/test_init.py index 179db8025..9d3698beb 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -516,24 +516,24 @@ async def disconnect(cls, server, client): await server.close() @staticmethod - def show_setup(location_list, device_list): + def show_setup(location_list, entity_list): """Show informative outline of the setup.""" _LOGGER.info("This environment looks like:") for loc_id, loc_info in location_list.items(): _LOGGER.info( " --> Location: %s", "{} ({})".format(loc_info["name"], loc_id) ) - device_count = 0 - for dev_id, dev_info in device_list.items(): - if dev_info.get("location", "not_found") == loc_id: - device_count += 1 + devzone_count = 0 + for devzone_id, devzone_info in entity_list.items(): + if devzone_info.get("location", "not_found") == loc_id: + devzone_count += 1 _LOGGER.info( - " + Device: %s", + " + Entity: %s", "{} ({} - {})".format( - dev_info["name"], dev_info["dev_class"], dev_id + devzone_info["name"], devzone_info["dev_class"], devzone_id ), ) - if device_count == 0: # pragma: no cover + if devzone_count == 0: # pragma: no cover _LOGGER.info(" ! no devices found in this location") @pytest.mark.asyncio @@ -546,7 +546,58 @@ async def device_test( skip_testing=False, ): """Perform basic device tests.""" - bsw_list = ["binary_sensors", "central", "climate", "sensors", "switches"] + + def test_and_assert(test_dict, data, header): + """Test-and-assert helper-function.""" + tests = 0 + tested_items = 0 + asserts = 0 + bsw_list = ["binary_sensors", "central", "climate", "sensors", "switches"] + for testitem, measurements in test_dict.items(): + item_asserts = 0 + tests += 1 + assert testitem in data + tested_items += 1 + for data_id, details in data.items(): + if testitem == data_id: + _LOGGER.info( + "%s", + f"- Testing data for {header} {details['name']} ({data_id})", + ) + _LOGGER.info("%s", f" + {header} data: {details}") + for measure_key, measure_assert in measurements.items(): + _LOGGER.info( + "%s", + f" + Testing {measure_key}/{type(measure_key)} with {details[measure_key]}/{type(details[measure_key])} (should be {measure_assert}/{type(measure_assert)} )", + ) + tests += 1 + if ( + measure_key in bsw_list + or measure_key in pw_constants.ACTIVE_ACTUATORS + ): + tests -= 1 + for key_1, val_1 in measure_assert.items(): + tests += 1 + for key_2, val_2 in details[measure_key].items(): + if key_1 != key_2: + continue + + _LOGGER.info( + "%s", + f" + Testing {key_1} ({val_1} should be {val_2})", + ) + assert val_1 == val_2 + asserts += 1 + item_asserts += 1 + else: + assert details[measure_key] == measure_assert + asserts += 1 + item_asserts += 1 + _LOGGER.debug("Item %s test-asserts: %s", testitem, item_asserts) + + assert tests == asserts + tested_items + _LOGGER.debug("Total items tested: %s", tested_items) + _LOGGER.debug("Total entity test-asserts: %s", asserts) # pragma warning disable S3776 @@ -556,8 +607,8 @@ async def device_test( if initialize: _LOGGER.info("Asserting testdata:") if smile.smile_legacy: - await smile.full_update_device() - smile.get_all_devices() + await smile.full_xml_update() + smile.get_all_gateway_entities() data = await smile.async_update() assert smile._timeout == 30 else: @@ -572,7 +623,7 @@ async def device_test( self.cooling_present = data.gateway["cooling_present"] if "notifications" in data.gateway: self.notifications = data.gateway["notifications"] - self.device_items = data.gateway["item_count"] + self.entity_items = data.gateway["item_count"] self._cooling_active = False self._cooling_enabled = False @@ -584,69 +635,27 @@ async def device_test( if "cooling_state" in heat_cooler["binary_sensors"]: self._cooling_active = heat_cooler["binary_sensors"]["cooling_state"] - self._write_json("all_data", {"gateway": data.gateway, "devices": data.devices}) + self._write_json("all_data", {"devices": data.devices, "gateway": data.gateway}) if "FIXTURES" in os.environ: _LOGGER.info("Skipping tests: Requested fixtures only") # pragma: no cover return # pragma: no cover - self.device_list = list(data.devices.keys()) - location_list = smile.loc_data + self.entity_list = list(data.devices.keys()) + location_list = smile._loc_data _LOGGER.info("Gateway id = %s", data.gateway["gateway_id"]) _LOGGER.info("Hostname = %s", smile.smile_hostname) _LOGGER.info("Gateway data = %s", data.gateway) - _LOGGER.info("Device list = %s", data.devices) + _LOGGER.info("Entities list = %s", data.devices) self.show_setup(location_list, data.devices) if skip_testing: return - # Perform tests and asserts - tests = 0 - asserts = 0 - for testdevice, measurements in testdata.items(): - tests += 1 - assert testdevice in data.devices - asserts += 1 - for dev_id, details in data.devices.items(): - if testdevice == dev_id: - _LOGGER.info( - "%s", - "- Testing data for device {} ({})".format( - details["name"], dev_id - ), - ) - _LOGGER.info(" + Device data: %s", details) - for measure_key, measure_assert in measurements.items(): - _LOGGER.info( - "%s", - f" + Testing {measure_key}/{type(measure_key)} with {details[measure_key]}/{type(details[measure_key])} (should be {measure_assert}/{type(measure_assert)} )", - ) - tests += 1 - if ( - measure_key in bsw_list - or measure_key in pw_constants.ACTIVE_ACTUATORS - ): - tests -= 1 - for key_1, val_1 in measure_assert.items(): - tests += 1 - for key_2, val_2 in details[measure_key].items(): - if key_1 != key_2: - continue - - _LOGGER.info( - "%s", - f" + Testing {key_1} ({val_1} should be {val_2})", - ) - assert val_1 == val_2 - asserts += 1 - else: - assert details[measure_key] == measure_assert - asserts += 1 - - assert tests == asserts - _LOGGER.debug("Number of test-assert: %s", asserts) + # Perform tests and asserts in two steps: devices and zones + for header, data_dict in testdata.items(): + test_and_assert(data_dict, data.devices, header) # pragma warning restore S3776 diff --git a/tests/test_legacy_anna.py b/tests/test_legacy_anna.py index 2475aff83..32b1a26da 100644 --- a/tests/test_legacy_anna.py +++ b/tests/test_legacy_anna.py @@ -30,7 +30,7 @@ async def test_connect_legacy_anna(self): await self.device_test(smile, "2020-03-22 00:00:01", testdata) assert smile.gateway_id == "0000aaaa0000aaaa0000aaaa0000aa00" - assert self.device_items == 41 + assert self.entity_items == 41 result = await self.tinker_legacy_thermostat(smile, schedule_on=False) assert result @@ -64,7 +64,7 @@ async def test_connect_legacy_anna_2(self): await self.device_test(smile, "2020-05-03 00:00:01", testdata) assert smile.gateway_id == "be81e3f8275b4129852c4d8d550ae2eb" - assert self.device_items == 43 + assert self.entity_items == 43 result = await self.tinker_legacy_thermostat(smile) assert result diff --git a/tests/test_legacy_p1.py b/tests/test_legacy_p1.py index 99b1277db..d569ca52b 100644 --- a/tests/test_legacy_p1.py +++ b/tests/test_legacy_p1.py @@ -29,7 +29,7 @@ async def test_connect_smile_p1_v2(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile.gateway_id == "aaaa0000aaaa0000aaaa0000aaaa00aa" - assert self.device_items == 26 + assert self.entity_items == 26 await smile.close_connection() await self.disconnect(server, client) @@ -52,7 +52,7 @@ async def test_connect_smile_p1_v2_2(self): ) await self.device_test(smile, "2022-05-16 00:00:01", testdata) - assert self.device_items == 26 + assert self.entity_items == 26 # Now change some data and change directory reading xml from # emulating reading newer dataset after an update_interval @@ -66,4 +66,3 @@ async def test_connect_smile_p1_v2_2(self): await smile.close_connection() await self.disconnect(server, client) - diff --git a/tests/test_legacy_stretch.py b/tests/test_legacy_stretch.py index c88be6f1a..961bb6378 100644 --- a/tests/test_legacy_stretch.py +++ b/tests/test_legacy_stretch.py @@ -31,7 +31,7 @@ async def test_connect_stretch_v31(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile.gateway_id == "0000aaaa0000aaaa0000aaaa0000aa00" - assert self.device_items == 83 + assert self.entity_items == 83 switch_change = await self.tinker_switch( smile, "059e4d03c7a34d278add5c7a4a781d19", @@ -69,7 +69,7 @@ async def test_connect_stretch_v23(self): ) await self.device_test(smile, "2022-05-16 00:00:01", testdata) - assert self.device_items == 243 + assert self.entity_items == 243 switch_change = await self.tinker_switch( smile, "2587a7fcdd7e482dab03fda256076b4b" @@ -104,7 +104,7 @@ async def test_connect_stretch_v27_no_domain(self): ) await self.device_test(smile, "2022-05-16 00:00:01", testdata) - assert self.device_items == 190 + assert self.entity_items == 190 _LOGGER.info(" # Assert no master thermostat") switch_change = await self.tinker_switch( diff --git a/tests/test_p1.py b/tests/test_p1.py index 4bec2f54b..3cd72257e 100644 --- a/tests/test_p1.py +++ b/tests/test_p1.py @@ -10,30 +10,6 @@ class TestPlugwiseP1(TestPlugwise): # pylint: disable=attribute-defined-outside-init """Tests for P1.""" - @pytest.mark.asyncio - async def test_connect_p1v4(self): - """Test a P1 firmware 4 setup.""" - self.smile_setup = "p1v4" - - testdata = self.load_testdata(SMILE_TYPE, self.smile_setup) - server, smile, client = await self.connect_wrapper() - assert smile.smile_hostname == "smile000000" - - self.validate_test_basics( - _LOGGER, - smile, - smile_type="power", - smile_version="4.1.1", - ) - - await self.device_test(smile, "2022-05-16 00:00:01", testdata) - assert smile.gateway_id == "a455b61e52394b2db5081ce025a430f3" - assert self.device_items == 30 - assert "97a04c0c263049b29350a660b4cdd01e" in self.notifications - - await smile.close_connection() - await self.disconnect(server, client) - @pytest.mark.asyncio async def test_connect_p1v4_442_single(self): """Test a P1 firmware 4.4 single-phase setup.""" @@ -52,7 +28,7 @@ async def test_connect_p1v4_442_single(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile.gateway_id == "a455b61e52394b2db5081ce025a430f3" - assert self.device_items == 32 + assert self.entity_items == 32 assert not self.notifications # Now change some data and change directory reading xml from @@ -86,7 +62,7 @@ async def test_connect_p1v4_442_triple(self): await self.device_test(smile, "2022-05-16 00:00:01", testdata) assert smile.gateway_id == "03e65b16e4b247a29ae0d75a78cb492e" - assert self.device_items == 41 + assert self.entity_items == 41 assert self.notifications await smile.close_connection() diff --git a/userdata/adam_multiple_devices_per_zone/core.domain_objects.xml b/userdata/adam_multiple_devices_per_zone/core.domain_objects.xml index 802c29970..e38e3a9b1 100644 --- a/userdata/adam_multiple_devices_per_zone/core.domain_objects.xml +++ b/userdata/adam_multiple_devices_per_zone/core.domain_objects.xml @@ -1937,9 +1937,9 @@ - Zone Thermostat Badkamer - A zone thermostat regulates the temperature in a heating zone (generally a room). - zone_thermostat + Thermostatic Radiator Badkamer 2 + A thermostatic radiator valve allows hot water to be pumped into its radiator based on ambient temperature and the local temperature setpoint. + thermostatic_radiator_valve 2019-01-25T08:21:56.648+01:00 2020-03-20T17:46:28.412+01:00 @@ -2094,7 +2094,7 @@ - Thermostatic Radiator Badkamer + Thermostatic Radiator Badkamer 1 A thermostatic radiator valve allows hot water to be pumped into its radiator based on ambient temperature and the local temperature setpoint. thermostatic_radiator_valve 2018-12-10T10:52:45.271+01:00