From 8bb0fab732d5b202ebc85f4f3188d7bdb5efc700 Mon Sep 17 00:00:00 2001
From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com>
Date: Wed, 27 Nov 2024 08:34:15 +0100
Subject: [PATCH] Bump plugwise to v1.6.0 and adapt (#131659)

---
 homeassistant/components/plugwise/__init__.py |   2 +-
 homeassistant/components/plugwise/climate.py  |  29 +-
 .../components/plugwise/coordinator.py        |   4 +-
 .../components/plugwise/diagnostics.py        |   2 +-
 homeassistant/components/plugwise/entity.py   |   4 +-
 .../components/plugwise/manifest.json         |   2 +-
 homeassistant/components/plugwise/number.py   |   6 +-
 homeassistant/components/plugwise/select.py   |  12 +-
 homeassistant/components/plugwise/sensor.py   |   2 +-
 homeassistant/components/plugwise/switch.py   |   2 +-
 requirements_all.txt                          |   2 +-
 requirements_test_all.txt                     |   2 +-
 tests/components/plugwise/conftest.py         |  22 +-
 .../fixtures/legacy_anna/all_data.json        |   2 +-
 .../fixtures/m_adam_cooling/all_data.json     | 110 +++---
 .../fixtures/m_adam_heating/all_data.json     | 110 +++---
 .../fixtures/m_adam_jip/all_data.json         | 142 +++++---
 .../all_data.json                             | 244 +++++++++-----
 .../fixtures/stretch_v31/all_data.json        |   6 +-
 .../plugwise/snapshots/test_diagnostics.ambr  | 318 +++++++++++-------
 tests/components/plugwise/test_climate.py     |  32 +-
 tests/components/plugwise/test_init.py        |  28 +-
 tests/components/plugwise/test_select.py      |   4 +-
 23 files changed, 697 insertions(+), 390 deletions(-)

diff --git a/homeassistant/components/plugwise/__init__.py b/homeassistant/components/plugwise/__init__.py
index 7d1b9ceac8a..a100103b029 100644
--- a/homeassistant/components/plugwise/__init__.py
+++ b/homeassistant/components/plugwise/__init__.py
@@ -83,7 +83,7 @@ def migrate_sensor_entities(
     # Migrating opentherm_outdoor_temperature
     # to opentherm_outdoor_air_temperature sensor
     for device_id, device in coordinator.data.devices.items():
-        if device.get("dev_class") != "heater_central":
+        if device["dev_class"] != "heater_central":
             continue
 
         old_unique_id = f"{device_id}-outdoor_temperature"
diff --git a/homeassistant/components/plugwise/climate.py b/homeassistant/components/plugwise/climate.py
index 46b4bff250a..f1f54aa6647 100644
--- a/homeassistant/components/plugwise/climate.py
+++ b/homeassistant/components/plugwise/climate.py
@@ -39,11 +39,19 @@ async def async_setup_entry(
         if not coordinator.new_devices:
             return
 
-        async_add_entities(
-            PlugwiseClimateEntity(coordinator, device_id)
-            for device_id in coordinator.new_devices
-            if coordinator.data.devices[device_id]["dev_class"] in MASTER_THERMOSTATS
-        )
+        if coordinator.data.gateway["smile_name"] == "Adam":
+            async_add_entities(
+                PlugwiseClimateEntity(coordinator, device_id)
+                for device_id in coordinator.new_devices
+                if coordinator.data.devices[device_id]["dev_class"] == "climate"
+            )
+        else:
+            async_add_entities(
+                PlugwiseClimateEntity(coordinator, device_id)
+                for device_id in coordinator.new_devices
+                if coordinator.data.devices[device_id]["dev_class"]
+                in MASTER_THERMOSTATS
+            )
 
     _add_entities()
     entry.async_on_unload(coordinator.async_add_listener(_add_entities))
@@ -69,6 +77,11 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
         super().__init__(coordinator, device_id)
         self._attr_extra_state_attributes = {}
         self._attr_unique_id = f"{device_id}-climate"
+
+        self._location = device_id
+        if (location := self.device.get("location")) is not None:
+            self._location = location
+
         self.cdr_gateway = coordinator.data.gateway
         gateway_id: str = coordinator.data.gateway["gateway_id"]
         self.gateway_data = coordinator.data.devices[gateway_id]
@@ -222,7 +235,7 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
         if mode := kwargs.get(ATTR_HVAC_MODE):
             await self.async_set_hvac_mode(mode)
 
-        await self.coordinator.api.set_temperature(self.device["location"], data)
+        await self.coordinator.api.set_temperature(self._location, data)
 
     @plugwise_command
     async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
@@ -237,7 +250,7 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
             await self.coordinator.api.set_regulation_mode(hvac_mode)
         else:
             await self.coordinator.api.set_schedule_state(
-                self.device["location"],
+                self._location,
                 "on" if hvac_mode == HVACMode.AUTO else "off",
             )
             if self.hvac_mode == HVACMode.OFF:
@@ -246,4 +259,4 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
     @plugwise_command
     async def async_set_preset_mode(self, preset_mode: str) -> None:
         """Set the preset mode."""
-        await self.coordinator.api.set_preset(self.device["location"], preset_mode)
+        await self.coordinator.api.set_preset(self._location, preset_mode)
diff --git a/homeassistant/components/plugwise/coordinator.py b/homeassistant/components/plugwise/coordinator.py
index b897a8bf833..6ce6855e7d6 100644
--- a/homeassistant/components/plugwise/coordinator.py
+++ b/homeassistant/components/plugwise/coordinator.py
@@ -64,11 +64,11 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
         version = await self.api.connect()
         self._connected = isinstance(version, Version)
         if self._connected:
-            self.api.get_all_devices()
+            self.api.get_all_gateway_entities()
 
     async def _async_update_data(self) -> PlugwiseData:
         """Fetch data from Plugwise."""
-        data = PlugwiseData({}, {})
+        data = PlugwiseData(devices={}, gateway={})
         try:
             if not self._connected:
                 await self._connect()
diff --git a/homeassistant/components/plugwise/diagnostics.py b/homeassistant/components/plugwise/diagnostics.py
index 9d15ea4fe28..47ff7d1a9fb 100644
--- a/homeassistant/components/plugwise/diagnostics.py
+++ b/homeassistant/components/plugwise/diagnostics.py
@@ -15,6 +15,6 @@ async def async_get_config_entry_diagnostics(
     """Return diagnostics for a config entry."""
     coordinator = entry.runtime_data
     return {
-        "gateway": coordinator.data.gateway,
         "devices": coordinator.data.devices,
+        "gateway": coordinator.data.gateway,
     }
diff --git a/homeassistant/components/plugwise/entity.py b/homeassistant/components/plugwise/entity.py
index e24f3d1e1bb..7b28bf78342 100644
--- a/homeassistant/components/plugwise/entity.py
+++ b/homeassistant/components/plugwise/entity.py
@@ -2,7 +2,7 @@
 
 from __future__ import annotations
 
-from plugwise.constants import DeviceData
+from plugwise.constants import GwEntityData
 
 from homeassistant.const import ATTR_NAME, ATTR_VIA_DEVICE, CONF_HOST
 from homeassistant.helpers.device_registry import (
@@ -74,7 +74,7 @@ class PlugwiseEntity(CoordinatorEntity[PlugwiseDataUpdateCoordinator]):
         )
 
     @property
-    def device(self) -> DeviceData:
+    def device(self) -> GwEntityData:
         """Return data for this device."""
         return self.coordinator.data.devices[self._dev_id]
 
diff --git a/homeassistant/components/plugwise/manifest.json b/homeassistant/components/plugwise/manifest.json
index 9f11433d8d3..d4d80749a8d 100644
--- a/homeassistant/components/plugwise/manifest.json
+++ b/homeassistant/components/plugwise/manifest.json
@@ -7,6 +7,6 @@
   "integration_type": "hub",
   "iot_class": "local_polling",
   "loggers": ["plugwise"],
-  "requirements": ["plugwise==1.5.2"],
+  "requirements": ["plugwise==1.6.0"],
   "zeroconf": ["_plugwise._tcp.local."]
 }
diff --git a/homeassistant/components/plugwise/number.py b/homeassistant/components/plugwise/number.py
index 06db5faa55b..833ea3ec761 100644
--- a/homeassistant/components/plugwise/number.py
+++ b/homeassistant/components/plugwise/number.py
@@ -91,12 +91,12 @@ class PlugwiseNumberEntity(PlugwiseEntity, NumberEntity):
     ) -> None:
         """Initiate Plugwise Number."""
         super().__init__(coordinator, device_id)
-        self.device_id = device_id
-        self.entity_description = description
-        self._attr_unique_id = f"{device_id}-{description.key}"
         self._attr_mode = NumberMode.BOX
         self._attr_native_max_value = self.device[description.key]["upper_bound"]
         self._attr_native_min_value = self.device[description.key]["lower_bound"]
+        self._attr_unique_id = f"{device_id}-{description.key}"
+        self.device_id = device_id
+        self.entity_description = description
 
         native_step = self.device[description.key]["resolution"]
         if description.key != "temperature_offset":
diff --git a/homeassistant/components/plugwise/select.py b/homeassistant/components/plugwise/select.py
index b7d4a0a1ded..46b27ca6225 100644
--- a/homeassistant/components/plugwise/select.py
+++ b/homeassistant/components/plugwise/select.py
@@ -10,7 +10,7 @@ from homeassistant.core import HomeAssistant, callback
 from homeassistant.helpers.entity_platform import AddEntitiesCallback
 
 from . import PlugwiseConfigEntry
-from .const import LOCATION, SelectOptionsType, SelectType
+from .const import SelectOptionsType, SelectType
 from .coordinator import PlugwiseDataUpdateCoordinator
 from .entity import PlugwiseEntity
 from .util import plugwise_command
@@ -89,8 +89,12 @@ class PlugwiseSelectEntity(PlugwiseEntity, SelectEntity):
     ) -> None:
         """Initialise the selector."""
         super().__init__(coordinator, device_id)
-        self.entity_description = entity_description
         self._attr_unique_id = f"{device_id}-{entity_description.key}"
+        self.entity_description = entity_description
+
+        self._location = device_id
+        if (location := self.device.get("location")) is not None:
+            self._location = location
 
     @property
     def current_option(self) -> str:
@@ -106,8 +110,8 @@ class PlugwiseSelectEntity(PlugwiseEntity, SelectEntity):
     async def async_select_option(self, option: str) -> None:
         """Change to the selected entity option.
 
-        self.device[LOCATION] and STATE_ON are required for the thermostat-schedule select.
+        self._location and STATE_ON are required for the thermostat-schedule select.
         """
         await self.coordinator.api.set_select(
-            self.entity_description.key, self.device[LOCATION], option, STATE_ON
+            self.entity_description.key, self._location, option, STATE_ON
         )
diff --git a/homeassistant/components/plugwise/sensor.py b/homeassistant/components/plugwise/sensor.py
index ae5b4e6ed91..41ca439451a 100644
--- a/homeassistant/components/plugwise/sensor.py
+++ b/homeassistant/components/plugwise/sensor.py
@@ -439,8 +439,8 @@ class PlugwiseSensorEntity(PlugwiseEntity, SensorEntity):
     ) -> None:
         """Initialise the sensor."""
         super().__init__(coordinator, device_id)
-        self.entity_description = description
         self._attr_unique_id = f"{device_id}-{description.key}"
+        self.entity_description = description
 
     @property
     def native_value(self) -> int | float:
diff --git a/homeassistant/components/plugwise/switch.py b/homeassistant/components/plugwise/switch.py
index a134ab5b044..744fc0a2b72 100644
--- a/homeassistant/components/plugwise/switch.py
+++ b/homeassistant/components/plugwise/switch.py
@@ -93,8 +93,8 @@ class PlugwiseSwitchEntity(PlugwiseEntity, SwitchEntity):
     ) -> None:
         """Set up the Plugwise API."""
         super().__init__(coordinator, device_id)
-        self.entity_description = description
         self._attr_unique_id = f"{device_id}-{description.key}"
+        self.entity_description = description
 
     @property
     def is_on(self) -> bool:
diff --git a/requirements_all.txt b/requirements_all.txt
index ea025a255a5..100e77bff69 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -1622,7 +1622,7 @@ plexauth==0.0.6
 plexwebsocket==0.0.14
 
 # homeassistant.components.plugwise
-plugwise==1.5.2
+plugwise==1.6.0
 
 # homeassistant.components.plum_lightpad
 plumlightpad==0.0.11
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index 1695c32d9b2..506c5d469df 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -1329,7 +1329,7 @@ plexauth==0.0.6
 plexwebsocket==0.0.14
 
 # homeassistant.components.plugwise
-plugwise==1.5.2
+plugwise==1.6.0
 
 # homeassistant.components.plum_lightpad
 plumlightpad==0.0.11
diff --git a/tests/components/plugwise/conftest.py b/tests/components/plugwise/conftest.py
index f18c96d36c5..dead58e0581 100644
--- a/tests/components/plugwise/conftest.py
+++ b/tests/components/plugwise/conftest.py
@@ -93,7 +93,7 @@ def mock_smile_adam() -> Generator[MagicMock]:
         smile.connect.return_value = Version("3.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -120,7 +120,7 @@ def mock_smile_adam_2() -> Generator[MagicMock]:
         smile.connect.return_value = Version("3.6.4")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -147,7 +147,7 @@ def mock_smile_adam_3() -> Generator[MagicMock]:
         smile.connect.return_value = Version("3.6.4")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -174,7 +174,7 @@ def mock_smile_adam_4() -> Generator[MagicMock]:
         smile.connect.return_value = Version("3.2.8")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -200,7 +200,7 @@ def mock_smile_anna() -> Generator[MagicMock]:
         smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -226,7 +226,7 @@ def mock_smile_anna_2() -> Generator[MagicMock]:
         smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -252,7 +252,7 @@ def mock_smile_anna_3() -> Generator[MagicMock]:
         smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -278,7 +278,7 @@ def mock_smile_p1() -> Generator[MagicMock]:
         smile.connect.return_value = Version("4.4.2")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -304,7 +304,7 @@ def mock_smile_p1_2() -> Generator[MagicMock]:
         smile.connect.return_value = Version("4.4.2")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -330,7 +330,7 @@ def mock_smile_legacy_anna() -> Generator[MagicMock]:
         smile.connect.return_value = Version("1.8.22")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
@@ -356,7 +356,7 @@ def mock_stretch() -> Generator[MagicMock]:
         smile.connect.return_value = Version("3.1.11")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
-            all_data["gateway"], all_data["devices"]
+            all_data["devices"], all_data["gateway"]
         )
 
         yield smile
diff --git a/tests/components/plugwise/fixtures/legacy_anna/all_data.json b/tests/components/plugwise/fixtures/legacy_anna/all_data.json
index c5ee4b2b103..2cb439950af 100644
--- a/tests/components/plugwise/fixtures/legacy_anna/all_data.json
+++ b/tests/components/plugwise/fixtures/legacy_anna/all_data.json
@@ -45,7 +45,7 @@
       "name": "Anna",
       "preset_modes": ["away", "vacation", "asleep", "home", "no_frost"],
       "sensors": {
-        "illuminance": 151,
+        "illuminance": 150.8,
         "setpoint": 20.5,
         "temperature": 20.4
       },
diff --git a/tests/components/plugwise/fixtures/m_adam_cooling/all_data.json b/tests/components/plugwise/fixtures/m_adam_cooling/all_data.json
index 6edd4c5901d..9c40e50278b 100644
--- a/tests/components/plugwise/fixtures/m_adam_cooling/all_data.json
+++ b/tests/components/plugwise/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,34 +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": {
@@ -113,20 +96,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",
@@ -134,8 +107,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,
@@ -147,12 +118,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"
     },
@@ -166,14 +131,81 @@
       "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": {
     "cooling_present": true,
     "gateway_id": "da224107914542988a88561b4452b0f6",
     "heater_id": "056ee145a816487eaa69243c3280f8bf",
-    "item_count": 157,
+    "item_count": 89,
     "notifications": {},
     "reboot": true,
     "smile_name": "Adam"
diff --git a/tests/components/plugwise/fixtures/m_adam_heating/all_data.json b/tests/components/plugwise/fixtures/m_adam_heating/all_data.json
index 7a3fb6e3b5c..fab2cea5fdc 100644
--- a/tests/components/plugwise/fixtures/m_adam_heating/all_data.json
+++ b/tests/components/plugwise/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,34 +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": {
@@ -112,20 +95,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",
@@ -133,8 +106,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,
@@ -146,12 +117,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"
     },
@@ -165,14 +130,81 @@
       "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": {
     "cooling_present": false,
     "gateway_id": "da224107914542988a88561b4452b0f6",
     "heater_id": "056ee145a816487eaa69243c3280f8bf",
-    "item_count": 157,
+    "item_count": 89,
     "notifications": {},
     "reboot": true,
     "smile_name": "Adam"
diff --git a/tests/components/plugwise/fixtures/m_adam_jip/all_data.json b/tests/components/plugwise/fixtures/m_adam_jip/all_data.json
index 61d6baaf88f..4516ce2c2d0 100644
--- a/tests/components/plugwise/fixtures/m_adam_jip/all_data.json
+++ b/tests/components/plugwise/fixtures/m_adam_jip/all_data.json
@@ -1,13 +1,56 @@
 {
   "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,7 +58,6 @@
       "model": "Lisa",
       "model_id": "158-01",
       "name": "Slaapkamer",
-      "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"],
       "sensors": {
         "battery": 92,
         "setpoint": 13.0,
@@ -27,18 +69,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",
@@ -62,7 +98,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",
@@ -102,13 +138,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",
@@ -116,7 +149,6 @@
       "model": "Lisa",
       "model_id": "158-01",
       "name": "Kinderkamer",
-      "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"],
       "sensors": {
         "battery": 79,
         "setpoint": 13.0,
@@ -128,18 +160,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",
@@ -162,13 +188,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",
@@ -176,7 +199,6 @@
       "model": "Lisa",
       "model_id": "158-01",
       "name": "Logeerkamer",
-      "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"],
       "sensors": {
         "battery": 80,
         "setpoint": 13.0,
@@ -188,12 +210,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"
     },
@@ -219,9 +235,32 @@
       "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",
@@ -243,6 +282,29 @@
       "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": {
@@ -280,13 +342,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",
@@ -294,7 +353,6 @@
       "model": "Jip",
       "model_id": "168-01",
       "name": "Woonkamer",
-      "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"],
       "sensors": {
         "battery": 100,
         "humidity": 56.2,
@@ -307,12 +365,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"
     }
@@ -321,7 +373,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/tests/components/plugwise/fixtures/m_adam_multiple_devices_per_zone/all_data.json b/tests/components/plugwise/fixtures/m_adam_multiple_devices_per_zone/all_data.json
index 7c3962b832f..67e8c235cc3 100644
--- a/tests/components/plugwise/fixtures/m_adam_multiple_devices_per_zone/all_data.json
+++ b/tests/components/plugwise/fixtures/m_adam_multiple_devices_per_zone/all_data.json
@@ -21,6 +21,73 @@
       "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 +109,28 @@
       "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 +178,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 +202,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,8 +213,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,
@@ -147,12 +224,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"
     },
@@ -176,6 +247,37 @@
       "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
@@ -216,7 +318,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",
@@ -241,7 +343,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",
@@ -264,20 +366,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",
@@ -285,8 +377,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,
@@ -298,14 +388,41 @@
         "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,
@@ -333,7 +450,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",
@@ -357,20 +474,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",
@@ -378,8 +485,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,
@@ -391,22 +496,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",
@@ -414,7 +511,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,
@@ -428,39 +524,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,
@@ -472,12 +550,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"
     },
@@ -505,7 +577,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/tests/components/plugwise/fixtures/stretch_v31/all_data.json b/tests/components/plugwise/fixtures/stretch_v31/all_data.json
index a875324fc13..b1675116bdf 100644
--- a/tests/components/plugwise/fixtures/stretch_v31/all_data.json
+++ b/tests/components/plugwise/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/tests/components/plugwise/snapshots/test_diagnostics.ambr b/tests/components/plugwise/snapshots/test_diagnostics.ambr
index 2a8223a2568..bf7d4260a32 100644
--- a/tests/components/plugwise/snapshots/test_diagnostics.ambr
+++ b/tests/components/plugwise/snapshots/test_diagnostics.ambr
@@ -23,6 +23,90 @@
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A15',
       }),
+      '08963fec7c53423ca5680aa4cb502c63': dict({
+        'active_preset': 'away',
+        'available_schedules': list([
+          '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': list([
+          'home',
+          'asleep',
+          'away',
+          'vacation',
+          'no_frost',
+        ]),
+        'select_schedule': 'Badkamer Schema',
+        'sensors': dict({
+          'temperature': 18.9,
+        }),
+        'thermostat': dict({
+          'lower_bound': 0.0,
+          'resolution': 0.01,
+          'setpoint': 14.0,
+          'upper_bound': 100.0,
+        }),
+        'thermostats': dict({
+          'primary': list([
+            'f1fee6043d3642a9b0a65297455f008e',
+            '680423ff840043738f42cc7f1ff97a36',
+          ]),
+          'secondary': list([
+          ]),
+        }),
+        'vendor': 'Plugwise',
+      }),
+      '12493538af164a409c6a1c79e38afe1c': dict({
+        'active_preset': 'away',
+        'available_schedules': list([
+          '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': list([
+          'home',
+          'asleep',
+          'away',
+          'vacation',
+          'no_frost',
+        ]),
+        'select_schedule': 'off',
+        'sensors': dict({
+          'electricity_consumed': 0.0,
+          'electricity_produced': 0.0,
+          'temperature': 16.5,
+        }),
+        'thermostat': dict({
+          'lower_bound': 0.0,
+          'resolution': 0.01,
+          'setpoint': 13.0,
+          'upper_bound': 100.0,
+        }),
+        'thermostats': dict({
+          'primary': list([
+            'df4a4a8169904cdb9c03d61a21f42140',
+          ]),
+          'secondary': list([
+            'a2c3583e0a6349358998b760cea82d2a',
+          ]),
+        }),
+        'vendor': 'Plugwise',
+      }),
       '21f2b542c49845e6bb416884c55778d6': dict({
         'available': True,
         'dev_class': 'game_console_plug',
@@ -44,6 +128,37 @@
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A12',
       }),
+      '446ac08dd04d4eff8ac57489757b7314': dict({
+        'active_preset': 'no_frost',
+        'climate_mode': 'heat',
+        'dev_class': 'climate',
+        'model': 'ThermoZone',
+        'name': 'Garage',
+        'preset_modes': list([
+          'home',
+          'asleep',
+          'away',
+          'vacation',
+          'no_frost',
+        ]),
+        'sensors': dict({
+          'temperature': 15.6,
+        }),
+        'thermostat': dict({
+          'lower_bound': 0.0,
+          'resolution': 0.01,
+          'setpoint': 5.5,
+          'upper_bound': 100.0,
+        }),
+        'thermostats': dict({
+          'primary': list([
+            'e7693eb9582644e5b865dba8d4447cf1',
+          ]),
+          'secondary': list([
+          ]),
+        }),
+        'vendor': 'Plugwise',
+      }),
       '4a810418d5394b3f82727340b91ba740': dict({
         'available': True,
         'dev_class': 'router_plug',
@@ -91,13 +206,13 @@
         'binary_sensors': dict({
           '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': dict({
           'battery': 51,
           'setpoint': 14.0,
@@ -115,20 +230,10 @@
         'zigbee_mac_address': 'ABCD012345670A17',
       }),
       '6a3bf693d05e48e0b460c815a4fdd09d': dict({
-        'active_preset': 'asleep',
         'available': True,
-        'available_schedules': list([
-          'CV Roan',
-          'Bios Schema met Film Avond',
-          'GF7  Woonkamer',
-          'Badkamer Schema',
-          'CV Jessie',
-          'off',
-        ]),
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'climate_mode': 'auto',
         'dev_class': 'zone_thermostat',
         'firmware': '2016-10-27T02:00:00+02:00',
         'hardware': '255',
@@ -136,14 +241,6 @@
         'model': 'Lisa',
         'model_id': '158-01',
         'name': 'Zone Thermostat Jessie',
-        'preset_modes': list([
-          'home',
-          'asleep',
-          'away',
-          'vacation',
-          'no_frost',
-        ]),
-        'select_schedule': 'CV Jessie',
         'sensors': dict({
           'battery': 37,
           'setpoint': 15.0,
@@ -155,12 +252,6 @@
           'setpoint': 0.0,
           'upper_bound': 2.0,
         }),
-        'thermostat': dict({
-          'lower_bound': 0.0,
-          'resolution': 0.01,
-          'setpoint': 15.0,
-          'upper_bound': 99.9,
-        }),
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A03',
       }),
@@ -184,6 +275,47 @@
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A05',
       }),
+      '82fa13f017d240daa0d0ea1775420f24': dict({
+        'active_preset': 'asleep',
+        'available_schedules': list([
+          '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': list([
+          'home',
+          'asleep',
+          'away',
+          'vacation',
+          'no_frost',
+        ]),
+        'select_schedule': 'CV Jessie',
+        'sensors': dict({
+          'temperature': 17.2,
+        }),
+        'thermostat': dict({
+          'lower_bound': 0.0,
+          'resolution': 0.01,
+          'setpoint': 15.0,
+          'upper_bound': 100.0,
+        }),
+        'thermostats': dict({
+          'primary': list([
+            '6a3bf693d05e48e0b460c815a4fdd09d',
+          ]),
+          'secondary': list([
+            'd3da73bde12a47d5a6b8f9dad971f2ec',
+          ]),
+        }),
+        'vendor': 'Plugwise',
+      }),
       '90986d591dcd426cae3ec3e8111ff730': dict({
         'binary_sensors': dict({
           'heating_state': True,
@@ -224,7 +356,7 @@
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'dev_class': 'thermo_sensor',
+        'dev_class': 'thermostatic_radiator_valve',
         'firmware': '2019-03-27T01:00:00+01:00',
         'hardware': '1',
         'location': '12493538af164a409c6a1c79e38afe1c',
@@ -249,7 +381,7 @@
       }),
       'b310b72a0e354bfab43089919b9a88bf': dict({
         'available': True,
-        'dev_class': 'thermo_sensor',
+        'dev_class': 'thermostatic_radiator_valve',
         'firmware': '2019-03-27T01:00:00+01:00',
         'hardware': '1',
         'location': 'c50f167537524366a5af7aa3942feb1e',
@@ -272,20 +404,10 @@
         'zigbee_mac_address': 'ABCD012345670A02',
       }),
       'b59bcebaf94b499ea7d46e4a66fb62d8': dict({
-        'active_preset': 'home',
         'available': True,
-        'available_schedules': list([
-          'CV Roan',
-          'Bios Schema met Film Avond',
-          'GF7  Woonkamer',
-          'Badkamer Schema',
-          'CV Jessie',
-          'off',
-        ]),
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'climate_mode': 'auto',
         'dev_class': 'zone_thermostat',
         'firmware': '2016-08-02T02:00:00+02:00',
         'hardware': '255',
@@ -293,14 +415,6 @@
         'model': 'Lisa',
         'model_id': '158-01',
         'name': 'Zone Lisa WK',
-        'preset_modes': list([
-          'home',
-          'asleep',
-          'away',
-          'vacation',
-          'no_frost',
-        ]),
-        'select_schedule': 'GF7  Woonkamer',
         'sensors': dict({
           'battery': 34,
           'setpoint': 21.5,
@@ -312,14 +426,51 @@
           'setpoint': 0.0,
           'upper_bound': 2.0,
         }),
+        'vendor': 'Plugwise',
+        'zigbee_mac_address': 'ABCD012345670A07',
+      }),
+      'c50f167537524366a5af7aa3942feb1e': dict({
+        'active_preset': 'home',
+        'available_schedules': list([
+          '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': list([
+          'home',
+          'asleep',
+          'away',
+          'vacation',
+          'no_frost',
+        ]),
+        'select_schedule': 'GF7  Woonkamer',
+        'sensors': dict({
+          'electricity_consumed': 35.6,
+          'electricity_produced': 0.0,
+          'temperature': 20.9,
+        }),
         'thermostat': dict({
           'lower_bound': 0.0,
           'resolution': 0.01,
           'setpoint': 21.5,
-          'upper_bound': 99.9,
+          'upper_bound': 100.0,
+        }),
+        'thermostats': dict({
+          'primary': list([
+            'b59bcebaf94b499ea7d46e4a66fb62d8',
+          ]),
+          'secondary': list([
+            'b310b72a0e354bfab43089919b9a88bf',
+          ]),
         }),
         'vendor': 'Plugwise',
-        'zigbee_mac_address': 'ABCD012345670A07',
       }),
       'cd0ddb54ef694e11ac18ed1cbce5dbbd': dict({
         'available': True,
@@ -347,7 +498,7 @@
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'dev_class': 'thermo_sensor',
+        'dev_class': 'thermostatic_radiator_valve',
         'firmware': '2019-03-27T01:00:00+01:00',
         'hardware': '1',
         'location': '82fa13f017d240daa0d0ea1775420f24',
@@ -371,20 +522,10 @@
         'zigbee_mac_address': 'ABCD012345670A10',
       }),
       'df4a4a8169904cdb9c03d61a21f42140': dict({
-        'active_preset': 'away',
         'available': True,
-        'available_schedules': list([
-          'CV Roan',
-          'Bios Schema met Film Avond',
-          'GF7  Woonkamer',
-          'Badkamer Schema',
-          'CV Jessie',
-          'off',
-        ]),
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'climate_mode': 'heat',
         'dev_class': 'zone_thermostat',
         'firmware': '2016-10-27T02:00:00+02:00',
         'hardware': '255',
@@ -392,14 +533,6 @@
         'model': 'Lisa',
         'model_id': '158-01',
         'name': 'Zone Lisa Bios',
-        'preset_modes': list([
-          'home',
-          'asleep',
-          'away',
-          'vacation',
-          'no_frost',
-        ]),
-        'select_schedule': 'off',
         'sensors': dict({
           'battery': 67,
           'setpoint': 13.0,
@@ -411,22 +544,14 @@
           'setpoint': 0.0,
           'upper_bound': 2.0,
         }),
-        'thermostat': dict({
-          'lower_bound': 0.0,
-          'resolution': 0.01,
-          'setpoint': 13.0,
-          'upper_bound': 99.9,
-        }),
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A06',
       }),
       'e7693eb9582644e5b865dba8d4447cf1': dict({
-        'active_preset': 'no_frost',
         'available': True,
         'binary_sensors': dict({
           'low_battery': False,
         }),
-        'climate_mode': 'heat',
         'dev_class': 'thermostatic_radiator_valve',
         'firmware': '2019-03-27T01:00:00+01:00',
         'hardware': '1',
@@ -434,13 +559,6 @@
         'model': 'Tom/Floor',
         'model_id': '106-03',
         'name': 'CV Kraan Garage',
-        'preset_modes': list([
-          'home',
-          'asleep',
-          'away',
-          'vacation',
-          'no_frost',
-        ]),
         'sensors': dict({
           'battery': 68,
           'setpoint': 5.5,
@@ -454,45 +572,21 @@
           'setpoint': 0.0,
           'upper_bound': 2.0,
         }),
-        'thermostat': dict({
-          'lower_bound': 0.0,
-          'resolution': 0.01,
-          'setpoint': 5.5,
-          'upper_bound': 100.0,
-        }),
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A11',
       }),
       'f1fee6043d3642a9b0a65297455f008e': dict({
-        'active_preset': 'away',
         'available': True,
-        'available_schedules': list([
-          'CV Roan',
-          'Bios Schema met Film Avond',
-          'GF7  Woonkamer',
-          'Badkamer Schema',
-          'CV Jessie',
-          'off',
-        ]),
         'binary_sensors': dict({
           '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': list([
-          'home',
-          'asleep',
-          'away',
-          'vacation',
-          'no_frost',
-        ]),
-        'select_schedule': 'Badkamer Schema',
+        'name': 'Thermostatic Radiator Badkamer 2',
         'sensors': dict({
           'battery': 92,
           'setpoint': 14.0,
@@ -504,12 +598,6 @@
           'setpoint': 0.0,
           'upper_bound': 2.0,
         }),
-        'thermostat': dict({
-          'lower_bound': 0.0,
-          'resolution': 0.01,
-          'setpoint': 14.0,
-          'upper_bound': 99.9,
-        }),
         'vendor': 'Plugwise',
         'zigbee_mac_address': 'ABCD012345670A08',
       }),
@@ -537,7 +625,7 @@
       'cooling_present': False,
       'gateway_id': 'fe799307f1624099878210aa0b9f1475',
       'heater_id': '90986d591dcd426cae3ec3e8111ff730',
-      'item_count': 340,
+      'item_count': 364,
       'notifications': dict({
         'af82e4ccf9c548528166d38e560662a4': dict({
           '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/tests/components/plugwise/test_climate.py b/tests/components/plugwise/test_climate.py
index f846e818b6e..c0c1c00c68d 100644
--- a/tests/components/plugwise/test_climate.py
+++ b/tests/components/plugwise/test_climate.py
@@ -28,7 +28,7 @@ async def test_adam_climate_entity_attributes(
     hass: HomeAssistant, mock_smile_adam: MagicMock, init_integration: MockConfigEntry
 ) -> None:
     """Test creation of adam climate device environment."""
-    state = hass.states.get("climate.zone_lisa_wk")
+    state = hass.states.get("climate.woonkamer")
     assert state
     assert state.state == HVACMode.AUTO
     assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
@@ -46,7 +46,7 @@ async def test_adam_climate_entity_attributes(
     assert state.attributes["max_temp"] == 35.0
     assert state.attributes["target_temp_step"] == 0.1
 
-    state = hass.states.get("climate.zone_thermostat_jessie")
+    state = hass.states.get("climate.jessie")
     assert state
     assert state.state == HVACMode.AUTO
     assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
@@ -68,7 +68,7 @@ async def test_adam_2_climate_entity_attributes(
     hass: HomeAssistant, mock_smile_adam_2: MagicMock, init_integration: MockConfigEntry
 ) -> None:
     """Test creation of adam climate device environment."""
-    state = hass.states.get("climate.anna")
+    state = hass.states.get("climate.living_room")
     assert state
     assert state.state == HVACMode.HEAT
     assert state.attributes["hvac_action"] == "preheating"
@@ -78,7 +78,7 @@ async def test_adam_2_climate_entity_attributes(
         HVACMode.HEAT,
     ]
 
-    state = hass.states.get("climate.lisa_badkamer")
+    state = hass.states.get("climate.bathroom")
     assert state
     assert state.state == HVACMode.AUTO
     assert state.attributes["hvac_action"] == "idle"
@@ -96,7 +96,7 @@ async def test_adam_3_climate_entity_attributes(
     freezer: FrozenDateTimeFactory,
 ) -> None:
     """Test creation of adam climate device environment."""
-    state = hass.states.get("climate.anna")
+    state = hass.states.get("climate.living_room")
     assert state
     assert state.state == HVACMode.COOL
     assert state.attributes["hvac_action"] == "cooling"
@@ -109,7 +109,7 @@ async def test_adam_3_climate_entity_attributes(
     data.devices["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = (
         "heating"
     )
-    data.devices["ad4838d7d35c4d6ea796ee12ae5aedf8"]["control_state"] = "heating"
+    data.devices["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = "heating"
     data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
         "cooling_state"
     ] = False
@@ -121,7 +121,7 @@ async def test_adam_3_climate_entity_attributes(
         async_fire_time_changed(hass)
         await hass.async_block_till_done()
 
-        state = hass.states.get("climate.anna")
+        state = hass.states.get("climate.living_room")
         assert state
         assert state.state == HVACMode.HEAT
         assert state.attributes["hvac_action"] == "heating"
@@ -135,7 +135,7 @@ async def test_adam_3_climate_entity_attributes(
     data.devices["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = (
         "cooling"
     )
-    data.devices["ad4838d7d35c4d6ea796ee12ae5aedf8"]["control_state"] = "cooling"
+    data.devices["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = "cooling"
     data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
         "cooling_state"
     ] = True
@@ -147,7 +147,7 @@ async def test_adam_3_climate_entity_attributes(
         async_fire_time_changed(hass)
         await hass.async_block_till_done()
 
-        state = hass.states.get("climate.anna")
+        state = hass.states.get("climate.living_room")
         assert state
         assert state.state == HVACMode.COOL
         assert state.attributes["hvac_action"] == "cooling"
@@ -168,7 +168,7 @@ async def test_adam_climate_adjust_negative_testing(
         await hass.services.async_call(
             CLIMATE_DOMAIN,
             SERVICE_SET_TEMPERATURE,
-            {"entity_id": "climate.zone_lisa_wk", "temperature": 25},
+            {"entity_id": "climate.woonkamer", "temperature": 25},
             blocking=True,
         )
 
@@ -180,7 +180,7 @@ async def test_adam_climate_entity_climate_changes(
     await hass.services.async_call(
         CLIMATE_DOMAIN,
         SERVICE_SET_TEMPERATURE,
-        {"entity_id": "climate.zone_lisa_wk", "temperature": 25},
+        {"entity_id": "climate.woonkamer", "temperature": 25},
         blocking=True,
     )
     assert mock_smile_adam.set_temperature.call_count == 1
@@ -192,7 +192,7 @@ async def test_adam_climate_entity_climate_changes(
         CLIMATE_DOMAIN,
         SERVICE_SET_TEMPERATURE,
         {
-            "entity_id": "climate.zone_lisa_wk",
+            "entity_id": "climate.woonkamer",
             "hvac_mode": "heat",
             "temperature": 25,
         },
@@ -207,14 +207,14 @@ async def test_adam_climate_entity_climate_changes(
         await hass.services.async_call(
             CLIMATE_DOMAIN,
             SERVICE_SET_TEMPERATURE,
-            {"entity_id": "climate.zone_lisa_wk", "temperature": 150},
+            {"entity_id": "climate.woonkamer", "temperature": 150},
             blocking=True,
         )
 
     await hass.services.async_call(
         CLIMATE_DOMAIN,
         SERVICE_SET_PRESET_MODE,
-        {"entity_id": "climate.zone_lisa_wk", "preset_mode": "away"},
+        {"entity_id": "climate.woonkamer", "preset_mode": "away"},
         blocking=True,
     )
     assert mock_smile_adam.set_preset.call_count == 1
@@ -225,7 +225,7 @@ async def test_adam_climate_entity_climate_changes(
     await hass.services.async_call(
         CLIMATE_DOMAIN,
         SERVICE_SET_HVAC_MODE,
-        {"entity_id": "climate.zone_lisa_wk", "hvac_mode": "heat"},
+        {"entity_id": "climate.woonkamer", "hvac_mode": "heat"},
         blocking=True,
     )
     assert mock_smile_adam.set_schedule_state.call_count == 2
@@ -238,7 +238,7 @@ async def test_adam_climate_entity_climate_changes(
             CLIMATE_DOMAIN,
             SERVICE_SET_HVAC_MODE,
             {
-                "entity_id": "climate.zone_thermostat_jessie",
+                "entity_id": "climate.jessie",
                 "hvac_mode": "dry",
             },
             blocking=True,
diff --git a/tests/components/plugwise/test_init.py b/tests/components/plugwise/test_init.py
index 5b276d5018d..3b9881c9e3d 100644
--- a/tests/components/plugwise/test_init.py
+++ b/tests/components/plugwise/test_init.py
@@ -34,17 +34,18 @@ SECONDARY_ID = (
 TOM = {
     "01234567890abcdefghijklmnopqrstu": {
         "available": True,
-        "dev_class": "thermo_sensor",
+        "dev_class": "thermostatic_radiator_valve",
         "firmware": "2020-11-04T01:00:00+01:00",
         "hardware": "1",
         "location": "f871b8c4d63549319221e294e4f88074",
         "model": "Tom/Floor",
-        "name": "Tom Zolder",
+        "name": "Tom Badkamer 2",
         "binary_sensors": {
             "low_battery": False,
         },
         "sensors": {
             "battery": 99,
+            "setpoint": 18.0,
             "temperature": 18.6,
             "temperature_difference": 2.3,
             "valve_position": 0.0,
@@ -246,7 +247,7 @@ async def test_update_device(
                 entity_registry, mock_config_entry.entry_id
             )
         )
-        == 31
+        == 38
     )
     assert (
         len(
@@ -254,11 +255,19 @@ async def test_update_device(
                 device_registry, mock_config_entry.entry_id
             )
         )
-        == 6
+        == 8
     )
 
     # Add a 2nd Tom/Floor
     data.devices.update(TOM)
+    data.devices["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
+        {
+            "secondary": [
+                "01234567890abcdefghijklmnopqrstu",
+                "1772a4ea304041adb83f357b751341ff",
+            ]
+        }
+    )
     with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
         freezer.tick(timedelta(minutes=1))
         async_fire_time_changed(hass)
@@ -270,7 +279,7 @@ async def test_update_device(
                     entity_registry, mock_config_entry.entry_id
                 )
             )
-            == 37
+            == 45
         )
         assert (
             len(
@@ -278,7 +287,7 @@ async def test_update_device(
                     device_registry, mock_config_entry.entry_id
                 )
             )
-            == 7
+            == 9
         )
         item_list: list[str] = []
         for device_entry in list(device_registry.devices.values()):
@@ -286,6 +295,9 @@ async def test_update_device(
         assert "01234567890abcdefghijklmnopqrstu" in item_list
 
     # Remove the existing Tom/Floor
+    data.devices["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
+        {"secondary": ["01234567890abcdefghijklmnopqrstu"]}
+    )
     data.devices.pop("1772a4ea304041adb83f357b751341ff")
     with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
         freezer.tick(timedelta(minutes=1))
@@ -298,7 +310,7 @@ async def test_update_device(
                     entity_registry, mock_config_entry.entry_id
                 )
             )
-            == 31
+            == 38
         )
         assert (
             len(
@@ -306,7 +318,7 @@ async def test_update_device(
                     device_registry, mock_config_entry.entry_id
                 )
             )
-            == 6
+            == 8
         )
         item_list: list[str] = []
         for device_entry in list(device_registry.devices.values()):
diff --git a/tests/components/plugwise/test_select.py b/tests/components/plugwise/test_select.py
index f521787714b..0fab41cdbae 100644
--- a/tests/components/plugwise/test_select.py
+++ b/tests/components/plugwise/test_select.py
@@ -18,7 +18,7 @@ async def test_adam_select_entities(
 ) -> None:
     """Test a thermostat Select."""
 
-    state = hass.states.get("select.zone_lisa_wk_thermostat_schedule")
+    state = hass.states.get("select.woonkamer_thermostat_schedule")
     assert state
     assert state.state == "GF7  Woonkamer"
 
@@ -32,7 +32,7 @@ async def test_adam_change_select_entity(
         SELECT_DOMAIN,
         SERVICE_SELECT_OPTION,
         {
-            ATTR_ENTITY_ID: "select.zone_lisa_wk_thermostat_schedule",
+            ATTR_ENTITY_ID: "select.woonkamer_thermostat_schedule",
             ATTR_OPTION: "Badkamer Schema",
         },
         blocking=True,
-- 
GitLab