Bump plugwise to v1.7.1 and adapt (#137599)

* Bump plugwise v1.7.1

* Refresh test-fixtures

* Adapt integration code

* Adapt test code

* Fixes

* Save updated snapshot

* Ruff fixes

* More ruff fixes
pull/137870/head
Bouwe Westerdijk 2025-02-08 16:02:24 +01:00 committed by GitHub
parent 303ab750ab
commit 7f6855045a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
35 changed files with 2738 additions and 747 deletions

View File

@ -82,7 +82,7 @@ def migrate_sensor_entities(
# Migrating opentherm_outdoor_temperature
# to opentherm_outdoor_air_temperature sensor
for device_id, device in coordinator.data.devices.items():
for device_id, device in coordinator.data.items():
if device["dev_class"] != "heater_central":
continue

View File

@ -100,11 +100,7 @@ async def async_setup_entry(
async_add_entities(
PlugwiseBinarySensorEntity(coordinator, device_id, description)
for device_id in coordinator.new_devices
if (
binary_sensors := coordinator.data.devices[device_id].get(
"binary_sensors"
)
)
if (binary_sensors := coordinator.data[device_id].get("binary_sensors"))
for description in BINARY_SENSORS
if description.key in binary_sensors
)
@ -141,7 +137,8 @@ class PlugwiseBinarySensorEntity(PlugwiseEntity, BinarySensorEntity):
return None
attrs: dict[str, list[str]] = {f"{severity}_msg": [] for severity in SEVERITIES}
if notify := self.coordinator.data.gateway["notifications"]:
gateway_id = self.coordinator.api.gateway_id
if notify := self.coordinator.data[gateway_id]["notifications"]:
for details in notify.values():
for msg_type, msg in details.items():
msg_type = msg_type.lower()

View File

@ -8,7 +8,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import PlugwiseConfigEntry
from .const import GATEWAY_ID, REBOOT
from .const import REBOOT
from .coordinator import PlugwiseDataUpdateCoordinator
from .entity import PlugwiseEntity
from .util import plugwise_command
@ -24,11 +24,10 @@ async def async_setup_entry(
"""Set up the Plugwise buttons from a ConfigEntry."""
coordinator = entry.runtime_data
gateway = coordinator.data.gateway
async_add_entities(
PlugwiseButtonEntity(coordinator, device_id)
for device_id in coordinator.data.devices
if device_id == gateway[GATEWAY_ID] and REBOOT in gateway
for device_id in coordinator.data
if device_id == coordinator.api.gateway_id and coordinator.api.reboot
)

View File

@ -41,18 +41,17 @@ async def async_setup_entry(
if not coordinator.new_devices:
return
if coordinator.data.gateway["smile_name"] == "Adam":
if coordinator.api.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"
if coordinator.data[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
if coordinator.data[device_id]["dev_class"] in MASTER_THERMOSTATS
)
_add_entities()
@ -77,10 +76,8 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
super().__init__(coordinator, device_id)
self._attr_unique_id = f"{device_id}-climate"
self._devices = coordinator.data.devices
self._gateway = coordinator.data.gateway
gateway_id: str = self._gateway["gateway_id"]
self._gateway_data = self._devices[gateway_id]
gateway_id: str = coordinator.api.gateway_id
self._gateway_data = coordinator.data[gateway_id]
self._location = device_id
if (location := self.device.get("location")) is not None:
@ -88,7 +85,10 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
# Determine supported features
self._attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
if self._gateway["cooling_present"] and self._gateway["smile_name"] != "Adam":
if (
self.coordinator.api.cooling_present
and coordinator.api.smile_name != "Adam"
):
self._attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
)
@ -170,7 +170,7 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
if "available_schedules" in self.device:
hvac_modes.append(HVACMode.AUTO)
if self._gateway["cooling_present"]:
if self.coordinator.api.cooling_present:
if "regulation_modes" in self._gateway_data:
if self._gateway_data["select_regulation_mode"] == "cooling":
hvac_modes.append(HVACMode.COOL)

View File

@ -17,7 +17,6 @@ FLOW_SMILE: Final = "smile (Adam/Anna/P1)"
FLOW_STRETCH: Final = "stretch (Stretch)"
FLOW_TYPE: Final = "flow_type"
GATEWAY: Final = "gateway"
GATEWAY_ID: Final = "gateway_id"
LOCATION: Final = "location"
PW_TYPE: Final = "plugwise_type"
REBOOT: Final = "reboot"

View File

@ -3,7 +3,7 @@
from datetime import timedelta
from packaging.version import Version
from plugwise import PlugwiseData, Smile
from plugwise import GwEntityData, Smile
from plugwise.exceptions import (
ConnectionFailedError,
InvalidAuthentication,
@ -22,10 +22,10 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.debounce import Debouncer
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DEFAULT_PORT, DEFAULT_USERNAME, DOMAIN, GATEWAY_ID, LOGGER
from .const import DEFAULT_PORT, DEFAULT_USERNAME, DOMAIN, LOGGER
class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[dict[str, GwEntityData]]):
"""Class to manage fetching Plugwise data from single endpoint."""
_connected: bool = False
@ -63,10 +63,8 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
"""Connect to the Plugwise Smile."""
version = await self.api.connect()
self._connected = isinstance(version, Version)
if self._connected:
self.api.get_all_gateway_entities()
async def _async_update_data(self) -> PlugwiseData:
async def _async_update_data(self) -> dict[str, GwEntityData]:
"""Fetch data from Plugwise."""
try:
if not self._connected:
@ -101,26 +99,28 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
self._async_add_remove_devices(data, self.config_entry)
return data
def _async_add_remove_devices(self, data: PlugwiseData, entry: ConfigEntry) -> None:
def _async_add_remove_devices(
self, data: dict[str, GwEntityData], entry: ConfigEntry
) -> None:
"""Add new Plugwise devices, remove non-existing devices."""
# Check for new or removed devices
self.new_devices = set(data.devices) - self._current_devices
removed_devices = self._current_devices - set(data.devices)
self._current_devices = set(data.devices)
self.new_devices = set(data) - self._current_devices
removed_devices = self._current_devices - set(data)
self._current_devices = set(data)
if removed_devices:
self._async_remove_devices(data, entry)
def _async_remove_devices(self, data: PlugwiseData, entry: ConfigEntry) -> None:
def _async_remove_devices(
self, data: dict[str, GwEntityData], entry: ConfigEntry
) -> None:
"""Clean registries when removed devices found."""
device_reg = dr.async_get(self.hass)
device_list = dr.async_entries_for_config_entry(
device_reg, self.config_entry.entry_id
)
# First find the Plugwise via_device
gateway_device = device_reg.async_get_device(
{(DOMAIN, data.gateway[GATEWAY_ID])}
)
gateway_device = device_reg.async_get_device({(DOMAIN, self.api.gateway_id)})
assert gateway_device is not None
via_device_id = gateway_device.id
@ -130,7 +130,7 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
if identifier[0] == DOMAIN:
if (
device_entry.via_device_id == via_device_id
and identifier[1] not in data.devices
and identifier[1] not in data
):
device_reg.async_update_device(
device_entry.id, remove_config_entry_id=entry.entry_id

View File

@ -14,7 +14,4 @@ async def async_get_config_entry_diagnostics(
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator = entry.runtime_data
return {
"devices": coordinator.data.devices,
"gateway": coordinator.data.gateway,
}
return coordinator.data

View File

@ -34,7 +34,7 @@ class PlugwiseEntity(CoordinatorEntity[PlugwiseDataUpdateCoordinator]):
if entry := self.coordinator.config_entry:
configuration_url = f"http://{entry.data[CONF_HOST]}"
data = coordinator.data.devices[device_id]
data = coordinator.data[device_id]
connections = set()
if mac := data.get("mac_address"):
connections.add((CONNECTION_NETWORK_MAC, mac))
@ -48,18 +48,18 @@ class PlugwiseEntity(CoordinatorEntity[PlugwiseDataUpdateCoordinator]):
manufacturer=data.get("vendor"),
model=data.get("model"),
model_id=data.get("model_id"),
name=coordinator.data.gateway["smile_name"],
name=coordinator.api.smile_name,
sw_version=data.get("firmware"),
hw_version=data.get("hardware"),
)
if device_id != coordinator.data.gateway["gateway_id"]:
if device_id != coordinator.api.gateway_id:
self._attr_device_info.update(
{
ATTR_NAME: data.get("name"),
ATTR_VIA_DEVICE: (
DOMAIN,
str(self.coordinator.data.gateway["gateway_id"]),
str(self.coordinator.api.gateway_id),
),
}
)
@ -68,7 +68,7 @@ class PlugwiseEntity(CoordinatorEntity[PlugwiseDataUpdateCoordinator]):
def available(self) -> bool:
"""Return if entity is available."""
return (
self._dev_id in self.coordinator.data.devices
self._dev_id in self.coordinator.data
and ("available" not in self.device or self.device["available"] is True)
and super().available
)
@ -76,4 +76,4 @@ class PlugwiseEntity(CoordinatorEntity[PlugwiseDataUpdateCoordinator]):
@property
def device(self) -> GwEntityData:
"""Return data for this device."""
return self.coordinator.data.devices[self._dev_id]
return self.coordinator.data[self._dev_id]

View File

@ -8,6 +8,6 @@
"iot_class": "local_polling",
"loggers": ["plugwise"],
"quality_scale": "platinum",
"requirements": ["plugwise==1.6.4"],
"requirements": ["plugwise==1.7.1"],
"zeroconf": ["_plugwise._tcp.local."]
}

View File

@ -73,7 +73,7 @@ async def async_setup_entry(
PlugwiseNumberEntity(coordinator, device_id, description)
for device_id in coordinator.new_devices
for description in NUMBER_TYPES
if description.key in coordinator.data.devices[device_id]
if description.key in coordinator.data[device_id]
)
_add_entities()

View File

@ -71,7 +71,7 @@ async def async_setup_entry(
PlugwiseSelectEntity(coordinator, device_id, description)
for device_id in coordinator.new_devices
for description in SELECT_TYPES
if description.options_key in coordinator.data.devices[device_id]
if description.options_key in coordinator.data[device_id]
)
_add_entities()

View File

@ -420,7 +420,7 @@ async def async_setup_entry(
async_add_entities(
PlugwiseSensorEntity(coordinator, device_id, description)
for device_id in coordinator.new_devices
if (sensors := coordinator.data.devices[device_id].get("sensors"))
if (sensors := coordinator.data[device_id].get("sensors"))
for description in SENSORS
if description.key in sensors
)

View File

@ -72,7 +72,7 @@ async def async_setup_entry(
async_add_entities(
PlugwiseSwitchEntity(coordinator, device_id, description)
for device_id in coordinator.new_devices
if (switches := coordinator.data.devices[device_id].get("switches"))
if (switches := coordinator.data[device_id].get("switches"))
for description in SWITCHES
if description.key in switches
)

2
requirements_all.txt generated
View File

@ -1663,7 +1663,7 @@ plexauth==0.0.6
plexwebsocket==0.0.14
# homeassistant.components.plugwise
plugwise==1.6.4
plugwise==1.7.1
# homeassistant.components.plum_lightpad
plumlightpad==0.0.11

View File

@ -1376,7 +1376,7 @@ plexauth==0.0.6
plexwebsocket==0.0.14
# homeassistant.components.plugwise
plugwise==1.6.4
plugwise==1.7.1
# homeassistant.components.plum_lightpad
plumlightpad==0.0.11

View File

@ -8,7 +8,6 @@ from typing import Any
from unittest.mock import AsyncMock, MagicMock, patch
from packaging.version import Version
from plugwise import PlugwiseData
import pytest
from homeassistant.components.plugwise.const import DOMAIN
@ -30,6 +29,15 @@ def _read_json(environment: str, call: str) -> dict[str, Any]:
return json.loads(fixture)
@pytest.fixture
def cooling_present(request: pytest.FixtureRequest) -> str:
"""Pass the cooling_present boolean.
Used with fixtures that require parametrization of the cooling capability.
"""
return request.param
@pytest.fixture
def chosen_env(request: pytest.FixtureRequest) -> str:
"""Pass the chosen_env string.
@ -48,6 +56,24 @@ def gateway_id(request: pytest.FixtureRequest) -> str:
return request.param
@pytest.fixture
def heater_id(request: pytest.FixtureRequest) -> str:
"""Pass the heater_idstring.
Used with fixtures that require parametrization of the heater_id.
"""
return request.param
@pytest.fixture
def reboot(request: pytest.FixtureRequest) -> str:
"""Pass the reboot boolean.
Used with fixtures that require parametrization of the reboot capability.
"""
return request.param
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return the default mocked config entry."""
@ -82,11 +108,14 @@ def mock_smile_config_flow() -> Generator[MagicMock]:
autospec=True,
) as smile_mock:
smile = smile_mock.return_value
smile.connect.return_value = Version("4.3.2")
smile.smile_hostname = "smile12345"
smile.smile_model = "Test Model"
smile.smile_model_id = "Test Model ID"
smile.smile_name = "Test Smile Name"
smile.connect.return_value = Version("4.3.2")
smile.smile_version = "4.3.2"
yield smile
@ -94,7 +123,7 @@ def mock_smile_config_flow() -> Generator[MagicMock]:
def mock_smile_adam() -> Generator[MagicMock]:
"""Create a Mock Adam environment for testing exceptions."""
chosen_env = "m_adam_multiple_devices_per_zone"
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with (
patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
@ -106,43 +135,45 @@ def mock_smile_adam() -> Generator[MagicMock]:
):
smile = smile_mock.return_value
smile.async_update.return_value = data
smile.cooling_present = False
smile.connect.return_value = Version("3.0.15")
smile.gateway_id = "fe799307f1624099878210aa0b9f1475"
smile.heater_id = "90986d591dcd426cae3ec3e8111ff730"
smile.smile_version = "3.0.15"
smile.smile_type = "thermostat"
smile.reboot = True
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = "smile_open_therm"
smile.smile_name = "Adam"
smile.connect.return_value = Version("3.0.15")
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.smile_type = "thermostat"
smile.smile_version = "3.0.15"
yield smile
@pytest.fixture
def mock_smile_adam_heat_cool(chosen_env: str) -> Generator[MagicMock]:
def mock_smile_adam_heat_cool(
chosen_env: str, cooling_present: bool
) -> Generator[MagicMock]:
"""Create a special base Mock Adam type for testing with different datasets."""
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.async_update.return_value = data
smile.connect.return_value = Version("3.6.4")
smile.cooling_present = cooling_present
smile.gateway_id = "da224107914542988a88561b4452b0f6"
smile.heater_id = "056ee145a816487eaa69243c3280f8bf"
smile.smile_version = "3.6.4"
smile.smile_type = "thermostat"
smile.reboot = True
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = "smile_open_therm"
smile.smile_name = "Adam"
smile.smile_type = "thermostat"
smile.smile_version = "3.6.4"
yield smile
@ -151,49 +182,49 @@ def mock_smile_adam_heat_cool(chosen_env: str) -> Generator[MagicMock]:
def mock_smile_adam_jip() -> Generator[MagicMock]:
"""Create a Mock adam-jip type for testing exceptions."""
chosen_env = "m_adam_jip"
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = data
smile.connect.return_value = Version("3.2.8")
smile.cooling_present = False
smile.gateway_id = "b5c2386c6f6342669e50fe49dd05b188"
smile.heater_id = "e4684553153b44afbef2200885f379dc"
smile.smile_version = "3.2.8"
smile.smile_type = "thermostat"
smile.reboot = True
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = "smile_open_therm"
smile.smile_name = "Adam"
smile.connect.return_value = Version("3.2.8")
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.smile_type = "thermostat"
smile.smile_version = "3.2.8"
yield smile
@pytest.fixture
def mock_smile_anna(chosen_env: str) -> Generator[MagicMock]:
def mock_smile_anna(chosen_env: str, cooling_present: bool) -> Generator[MagicMock]:
"""Create a Mock Anna type for testing."""
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.async_update.return_value = data
smile.connect.return_value = Version("4.0.15")
smile.cooling_present = cooling_present
smile.gateway_id = "015ae9ea3f964e668e490fa39da3870b"
smile.heater_id = "1cbf783bb11e4a7c8a6843dee3a86927"
smile.smile_version = "4.0.15"
smile.smile_type = "thermostat"
smile.reboot = True
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = "smile_thermo"
smile.smile_name = "Smile Anna"
smile.smile_type = "thermostat"
smile.smile_version = "4.0.15"
yield smile
@ -201,18 +232,17 @@ def mock_smile_anna(chosen_env: str) -> Generator[MagicMock]:
@pytest.fixture
def mock_smile_p1(chosen_env: str, gateway_id: str) -> Generator[MagicMock]:
"""Create a base Mock P1 type for testing with different datasets and gateway-ids."""
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.async_update.return_value = data
smile.connect.return_value = Version("4.4.2")
smile.gateway_id = gateway_id
smile.heater_id = None
smile.reboot = True
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = "smile"
@ -227,24 +257,23 @@ def mock_smile_p1(chosen_env: str, gateway_id: str) -> Generator[MagicMock]:
def mock_smile_legacy_anna() -> Generator[MagicMock]:
"""Create a Mock legacy Anna environment for testing exceptions."""
chosen_env = "legacy_anna"
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = data
smile.connect.return_value = Version("1.8.22")
smile.gateway_id = "0000aaaa0000aaaa0000aaaa0000aa00"
smile.heater_id = "04e4cbfe7f4340f090f85ec3b9e6a950"
smile.smile_version = "1.8.22"
smile.smile_type = "thermostat"
smile.reboot = False
smile.smile_hostname = "smile98765"
smile.smile_model = "Gateway"
smile.smile_model_id = None
smile.smile_name = "Smile Anna"
smile.connect.return_value = Version("1.8.22")
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.smile_type = "thermostat"
smile.smile_version = "1.8.22"
yield smile
@ -253,24 +282,23 @@ def mock_smile_legacy_anna() -> Generator[MagicMock]:
def mock_stretch() -> Generator[MagicMock]:
"""Create a Mock Stretch environment for testing exceptions."""
chosen_env = "stretch_v31"
all_data = _read_json(chosen_env, "all_data")
data = _read_json(chosen_env, "data")
with patch(
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
) as smile_mock:
smile = smile_mock.return_value
smile.async_update.return_value = data
smile.connect.return_value = Version("3.1.11")
smile.gateway_id = "259882df3c05415b99c2d962534ce820"
smile.heater_id = None
smile.smile_version = "3.1.11"
smile.smile_type = "stretch"
smile.reboot = False
smile.smile_hostname = "stretch98765"
smile.smile_model = "Gateway"
smile.smile_model_id = None
smile.smile_name = "Stretch"
smile.connect.return_value = Version("3.1.11")
smile.async_update.return_value = PlugwiseData(
all_data["devices"], all_data["gateway"]
)
smile.smile_type = "stretch"
smile.smile_version = "3.1.11"
yield smile

View File

@ -0,0 +1,97 @@
{
"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",
"notifications": {},
"sensors": {
"outdoor_temperature": 20.2
},
"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"],
"climate_mode": "auto",
"control_state": "heating",
"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"
}
}

View File

@ -0,0 +1,60 @@
{
"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"
},
"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."
},
"0d266432d64443e283b5d708ae98b455": {
"active_preset": "home",
"climate_mode": "heat",
"control_state": "heating",
"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"
}
}

View File

@ -0,0 +1,203 @@
{
"056ee145a816487eaa69243c3280f8bf": {
"available": true,
"binary_sensors": {
"cooling_state": true,
"dhw_state": false,
"flame_state": false,
"heating_state": false
},
"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": 17.5,
"water_temperature": 19.0
},
"switches": {
"dhw_cm_switch": false
}
},
"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": 21.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"
},
"ad4838d7d35c4d6ea796ee12ae5aedf8": {
"available": true,
"dev_class": "thermostat",
"location": "f2bf9048bef64cc5b6d5110154e33c81",
"model": "ThermoTouch",
"model_id": "143.1",
"name": "Anna",
"sensors": {
"setpoint": 23.5,
"temperature": 25.8
},
"vendor": "Plugwise"
},
"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",
"notifications": {},
"regulation_modes": [
"bleeding_hot",
"bleeding_cold",
"off",
"heating",
"cooling"
],
"select_gateway_mode": "full",
"select_regulation_mode": "cooling",
"sensors": {
"outdoor_temperature": 29.65
},
"vendor": "Plugwise",
"zigbee_mac_address": "000D6F000D5A168D"
},
"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": 23.5,
"temperature": 23.9
},
"temperature_offset": {
"lower_bound": -2.0,
"resolution": 0.1,
"setpoint": 0.0,
"upper_bound": 2.0
},
"vendor": "Plugwise",
"zigbee_mac_address": "000D6F000C869B61"
},
"e8ef2a01ed3b4139a53bf749204fe6b4": {
"dev_class": "switching",
"members": [
"2568cc4b9c1e401495d4741a5f89bee1",
"29542b2b6a6a4169acecc15c72a599b8"
],
"model": "Switchgroup",
"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": "auto",
"control_state": "cooling",
"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"
}
}

View File

@ -0,0 +1,202 @@
{
"056ee145a816487eaa69243c3280f8bf": {
"available": true,
"binary_sensors": {
"dhw_state": false,
"flame_state": false,
"heating_state": true
},
"dev_class": "heater_central",
"location": "bc93488efab249e5bc54fd7e175a6f91",
"max_dhw_temperature": {
"lower_bound": 40.0,
"resolution": 0.01,
"setpoint": 60.0,
"upper_bound": 60.0
},
"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": 38.1,
"water_temperature": 37.0
},
"switches": {
"dhw_cm_switch": false
}
},
"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": 18.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"
},
"ad4838d7d35c4d6ea796ee12ae5aedf8": {
"available": true,
"dev_class": "thermostat",
"location": "f2bf9048bef64cc5b6d5110154e33c81",
"model": "ThermoTouch",
"model_id": "143.1",
"name": "Anna",
"sensors": {
"setpoint": 20.0,
"temperature": 19.1
},
"vendor": "Plugwise"
},
"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",
"notifications": {},
"regulation_modes": ["bleeding_hot", "bleeding_cold", "off", "heating"],
"select_gateway_mode": "full",
"select_regulation_mode": "heating",
"sensors": {
"outdoor_temperature": -1.25
},
"vendor": "Plugwise",
"zigbee_mac_address": "000D6F000D5A168D"
},
"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": 15.0,
"temperature": 17.9
},
"temperature_offset": {
"lower_bound": -2.0,
"resolution": 0.1,
"setpoint": 0.0,
"upper_bound": 2.0
},
"vendor": "Plugwise",
"zigbee_mac_address": "000D6F000C869B61"
},
"e8ef2a01ed3b4139a53bf749204fe6b4": {
"dev_class": "switching",
"members": [
"2568cc4b9c1e401495d4741a5f89bee1",
"29542b2b6a6a4169acecc15c72a599b8"
],
"model": "Switchgroup",
"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": "idle",
"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"
}
}

View File

@ -0,0 +1,370 @@
{
"06aecb3d00354375924f50c47af36bd2": {
"active_preset": "no_frost",
"climate_mode": "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": "idle",
"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
},
"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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"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",
"notifications": {},
"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": "idle",
"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": "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": "idle",
"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": {
"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."
},
"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"
}
}

View File

@ -0,0 +1,584 @@
{
"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"
},
"08963fec7c53423ca5680aa4cb502c63": {
"active_preset": "away",
"available_schedules": [
"CV Roan",
"Bios Schema met Film Avond",
"GF7 Woonkamer",
"Badkamer Schema",
"CV Jessie",
"off"
],
"climate_mode": "auto",
"control_state": "idle",
"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",
"control_state": "idle",
"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",
"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"
},
"446ac08dd04d4eff8ac57489757b7314": {
"active_preset": "no_frost",
"climate_mode": "heat",
"control_state": "idle",
"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",
"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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"82fa13f017d240daa0d0ea1775420f24": {
"active_preset": "asleep",
"available_schedules": [
"CV Roan",
"Bios Schema met Film Avond",
"GF7 Woonkamer",
"Badkamer Schema",
"CV Jessie",
"off"
],
"climate_mode": "auto",
"control_state": "idle",
"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
},
"dev_class": "heater_central",
"location": "1f9dcf83fd4e4b66b72ff787957bfe5d",
"model": "Unknown",
"name": "OnOff",
"sensors": {
"intended_boiler_temperature": 70.0,
"modulation_level": 1,
"water_temperature": 70.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"
},
"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",
"control_state": "heating",
"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": 100.0
},
"thermostats": {
"primary": ["b59bcebaf94b499ea7d46e4a66fb62d8"],
"secondary": ["b310b72a0e354bfab43089919b9a88bf"]
},
"vendor": "Plugwise"
},
"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"
},
"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",
"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."
}
},
"select_regulation_mode": "heating",
"sensors": {
"outdoor_temperature": 7.81
},
"vendor": "Plugwise",
"zigbee_mac_address": "ABCD012345670101"
}
}

View File

@ -0,0 +1,97 @@
{
"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",
"notifications": {},
"sensors": {
"outdoor_temperature": 28.2
},
"vendor": "Plugwise"
},
"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",
"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": 41.5,
"intended_boiler_temperature": 0.0,
"modulation_level": 40,
"outdoor_air_temperature": 28.0,
"return_temperature": 23.8,
"water_pressure": 1.57,
"water_temperature": 22.7
},
"switches": {
"dhw_cm_switch": false
},
"vendor": "Techneco"
},
"3cb70739631c4d17a86b8b12e8a5161b": {
"active_preset": "home",
"available_schedules": ["standaard", "off"],
"climate_mode": "auto",
"control_state": "cooling",
"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": 26.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"
}
}

View File

@ -0,0 +1,97 @@
{
"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",
"notifications": {},
"sensors": {
"outdoor_temperature": 28.2
},
"vendor": "Plugwise"
},
"1cbf783bb11e4a7c8a6843dee3a86927": {
"available": true,
"binary_sensors": {
"compressor_state": false,
"cooling_enabled": true,
"cooling_state": false,
"dhw_state": false,
"flame_state": false,
"heating_state": false,
"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": 18.0,
"modulation_level": 0,
"outdoor_air_temperature": 28.2,
"return_temperature": 22.0,
"water_pressure": 1.57,
"water_temperature": 19.1
},
"switches": {
"dhw_cm_switch": false
},
"vendor": "Techneco"
},
"3cb70739631c4d17a86b8b12e8a5161b": {
"active_preset": "home",
"available_schedules": ["standaard", "off"],
"climate_mode": "auto",
"control_state": "idle",
"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": 25.0,
"cooling_deactivation_threshold": 4.0,
"illuminance": 86.0,
"setpoint_high": 30.0,
"setpoint_low": 20.5,
"temperature": 23.0
},
"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"
}
}

View File

@ -0,0 +1,43 @@
{
"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",
"notifications": {},
"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."
}
}

View File

@ -0,0 +1,56 @@
{
"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",
"notifications": {
"97a04c0c263049b29350a660b4cdd01e": {
"warning": "The Smile P1 is not connected to a smart meter."
}
},
"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"
}
}

View File

@ -0,0 +1,34 @@
{
"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"
}
}

View File

@ -0,0 +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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"d03738edfcc947f7b8f4573571d90d2d": {
"dev_class": "switching",
"members": [
"059e4d03c7a34d278add5c7a4a781d19",
"cfe95cf3de1948c0b8955125bf754614"
],
"model": "Switchgroup",
"name": "Schakel",
"switches": {
"relay": true
},
"vendor": "Plugwise"
},
"d950b314e9d8499f968e6db8d82ef78c": {
"dev_class": "report",
"members": [
"059e4d03c7a34d278add5c7a4a781d19",
"5871317346d045bc9f6b987ef25ee638",
"aac7b735042c4832ac9ff33aae4f453b",
"cfe95cf3de1948c0b8955125bf754614",
"e1c884e7dede431dadee09506ec4f859"
],
"model": "Switchgroup",
"name": "Stroomvreters",
"switches": {
"relay": true
},
"vendor": "Plugwise"
},
"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"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@ from tests.common import MockConfigEntry
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
@pytest.mark.parametrize(
("entity_id", "expected_state"),
[
@ -35,6 +36,7 @@ async def test_anna_climate_binary_sensor_entities(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_climate_binary_sensor_change(
hass: HomeAssistant, mock_smile_anna: MagicMock, init_integration: MockConfigEntry
) -> None:

View File

@ -80,6 +80,7 @@ async def test_adam_climate_entity_attributes(
@pytest.mark.parametrize("chosen_env", ["m_adam_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [False], indirect=True)
async def test_adam_2_climate_entity_attributes(
hass: HomeAssistant,
mock_smile_adam_heat_cool: MagicMock,
@ -108,6 +109,7 @@ async def test_adam_2_climate_entity_attributes(
@pytest.mark.parametrize("chosen_env", ["m_adam_cooling"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_adam_3_climate_entity_attributes(
hass: HomeAssistant,
mock_smile_adam_heat_cool: MagicMock,
@ -125,18 +127,10 @@ async def test_adam_3_climate_entity_attributes(
HVACMode.COOL,
]
data = mock_smile_adam_heat_cool.async_update.return_value
data.devices["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = (
"heating"
)
data.devices["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = (
HVACAction.HEATING
)
data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
"cooling_state"
] = False
data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
"heating_state"
] = True
data["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = "heating"
data["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = HVACAction.HEATING
data["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["cooling_state"] = False
data["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["heating_state"] = True
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass)
@ -153,18 +147,10 @@ async def test_adam_3_climate_entity_attributes(
]
data = mock_smile_adam_heat_cool.async_update.return_value
data.devices["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = (
"cooling"
)
data.devices["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = (
HVACAction.COOLING
)
data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
"cooling_state"
] = True
data.devices["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"][
"heating_state"
] = False
data["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = "cooling"
data["f2bf9048bef64cc5b6d5110154e33c81"]["control_state"] = HVACAction.COOLING
data["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["cooling_state"] = True
data["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["heating_state"] = False
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass)
@ -323,6 +309,7 @@ async def test_adam_climate_off_mode_change(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_climate_entity_attributes(
hass: HomeAssistant,
mock_smile_anna: MagicMock,
@ -349,6 +336,7 @@ async def test_anna_climate_entity_attributes(
@pytest.mark.parametrize("chosen_env", ["m_anna_heatpump_cooling"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_2_climate_entity_attributes(
hass: HomeAssistant,
mock_smile_anna: MagicMock,
@ -369,6 +357,7 @@ async def test_anna_2_climate_entity_attributes(
@pytest.mark.parametrize("chosen_env", ["m_anna_heatpump_idle"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_3_climate_entity_attributes(
hass: HomeAssistant,
mock_smile_anna: MagicMock,
@ -386,6 +375,7 @@ async def test_anna_3_climate_entity_attributes(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_climate_entity_climate_changes(
hass: HomeAssistant,
mock_smile_anna: MagicMock,
@ -441,7 +431,7 @@ async def test_anna_climate_entity_climate_changes(
)
data = mock_smile_anna.async_update.return_value
data.devices["3cb70739631c4d17a86b8b12e8a5161b"].pop("available_schedules")
data["3cb70739631c4d17a86b8b12e8a5161b"].pop("available_schedules")
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass)

View File

@ -62,6 +62,7 @@ TOM = {
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_load_unload_config_entry(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
@ -82,6 +83,7 @@ async def test_load_unload_config_entry(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
@pytest.mark.parametrize(
("side_effect", "entry_state"),
[
@ -138,6 +140,7 @@ async def test_device_in_dr(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
@pytest.mark.parametrize(
("entitydata", "old_unique_id", "new_unique_id"),
[
@ -232,6 +235,7 @@ async def test_migrate_unique_id_relay(
@pytest.mark.parametrize("chosen_env", ["m_adam_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_update_device(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
@ -265,8 +269,8 @@ async def test_update_device(
)
# Add a 2nd Tom/Floor
data.devices.update(TOM)
data.devices["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
data.update(TOM)
data["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
{
"secondary": [
"01234567890abcdefghijklmnopqrstu",
@ -301,10 +305,10 @@ async def test_update_device(
assert "01234567890abcdefghijklmnopqrstu" in item_list
# Remove the existing Tom/Floor
data.devices["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
data["f871b8c4d63549319221e294e4f88074"]["thermostats"].update(
{"secondary": ["01234567890abcdefghijklmnopqrstu"]}
)
data.devices.pop("1772a4ea304041adb83f357b751341ff")
data.pop("1772a4ea304041adb83f357b751341ff")
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass)

View File

@ -17,6 +17,7 @@ from tests.common import MockConfigEntry
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_number_entities(
hass: HomeAssistant, mock_smile_anna: MagicMock, init_integration: MockConfigEntry
) -> None:
@ -27,6 +28,7 @@ async def test_anna_number_entities(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_max_boiler_temp_change(
hass: HomeAssistant, mock_smile_anna: MagicMock, init_integration: MockConfigEntry
) -> None:
@ -48,6 +50,7 @@ async def test_anna_max_boiler_temp_change(
@pytest.mark.parametrize("chosen_env", ["m_adam_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [False], indirect=True)
async def test_adam_dhw_setpoint_change(
hass: HomeAssistant,
mock_smile_adam_heat_cool: MagicMock,

View File

@ -51,6 +51,7 @@ async def test_adam_change_select_entity(
@pytest.mark.parametrize("chosen_env", ["m_adam_cooling"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_adam_select_regulation_mode(
hass: HomeAssistant,
mock_smile_adam_heat_cool: MagicMock,
@ -95,6 +96,7 @@ async def test_legacy_anna_select_entities(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_adam_select_unavailable_regulation_mode(
hass: HomeAssistant, mock_smile_anna: MagicMock, init_integration: MockConfigEntry
) -> None:

View File

@ -95,6 +95,7 @@ async def test_unique_id_migration_humidity(
@pytest.mark.parametrize("chosen_env", ["anna_heatpump_heating"], indirect=True)
@pytest.mark.parametrize("cooling_present", [True], indirect=True)
async def test_anna_as_smt_climate_sensor_entities(
hass: HomeAssistant, mock_smile_anna: MagicMock, init_integration: MockConfigEntry
) -> None: