Skip to content

Create miele devices dynamically #143804

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions homeassistant/components/miele/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,13 +263,22 @@ async def async_setup_entry(
) -> None:
"""Set up the binary sensor platform."""
coordinator = config_entry.runtime_data
known_devices: set[str] = set()

async_add_entities(
MieleBinarySensor(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in BINARY_SENSOR_TYPES
if device.device_type in definition.types
)
def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
MieleBinarySensor(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in BINARY_SENSOR_TYPES
if device.device_type in definition.types
)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class MieleBinarySensor(MieleEntity, BinarySensorEntity):
Expand Down
21 changes: 15 additions & 6 deletions homeassistant/components/miele/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,22 @@ async def async_setup_entry(
) -> None:
"""Set up the button platform."""
coordinator = config_entry.runtime_data
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
MieleButton(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in BUTTON_TYPES
if device.device_type in definition.types
)

async_add_entities(
MieleButton(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in BUTTON_TYPES
if device.device_type in definition.types
)
_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class MieleButton(MieleEntity, ButtonEntity):
Expand Down
30 changes: 21 additions & 9 deletions homeassistant/components/miele/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,28 @@ async def async_setup_entry(
) -> None:
"""Set up the climate platform."""
coordinator = config_entry.runtime_data
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
MieleClimate(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in CLIMATE_TYPES
if (
device.device_type in definition.types
and (
definition.description.value_fn(device)
not in DISABLED_TEMP_ENTITIES
)
)
)

async_add_entities(
MieleClimate(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in CLIMATE_TYPES
if (
device.device_type in definition.types
and (definition.description.value_fn(device) not in DISABLED_TEMP_ENTITIES)
)
)
_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class MieleClimate(MieleEntity, ClimateEntity):
Expand Down
21 changes: 15 additions & 6 deletions homeassistant/components/miele/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,22 @@ async def async_setup_entry(
) -> None:
"""Set up the light platform."""
coordinator = config_entry.runtime_data
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
MieleLight(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in LIGHT_TYPES
if device.device_type in definition.types
)

async_add_entities(
MieleLight(coordinator, device_id, definition.description)
for device_id, device in coordinator.data.devices.items()
for definition in LIGHT_TYPES
if device.device_type in definition.types
)
_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class MieleLight(MieleEntity, LightEntity):
Expand Down
41 changes: 25 additions & 16 deletions homeassistant/components/miele/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,22 +123,31 @@ async def async_setup_entry(
) -> None:
"""Set up the sensor platform."""
coordinator = config_entry.runtime_data

entities: list = []
entity_class: type[MieleSensor]
for device_id, device in coordinator.data.devices.items():
for definition in SENSOR_TYPES:
if device.device_type in definition.types:
match definition.description.key:
case "state_status":
entity_class = MieleStatusSensor
case _:
entity_class = MieleSensor
entities.append(
entity_class(coordinator, device_id, definition.description)
)

async_add_entities(entities)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
entities: list = []
entity_class: type[MieleSensor]
for device_id, device in coordinator.data.devices.items():
for definition in SENSOR_TYPES:
if device.device_type in definition.types:
match definition.description.key:
case "state_status":
entity_class = MieleStatusSensor
case _:
entity_class = MieleSensor
entities.append(
entity_class(coordinator, device_id, definition.description)
)

async_add_entities(entities)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


APPLIANCE_ICONS = {
Expand Down
41 changes: 25 additions & 16 deletions homeassistant/components/miele/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,22 +116,31 @@ async def async_setup_entry(
) -> None:
"""Set up the switch platform."""
coordinator = config_entry.runtime_data

entities: list = []
entity_class: type[MieleSwitch]
for device_id, device in coordinator.data.devices.items():
for definition in SWITCH_TYPES:
if device.device_type in definition.types:
match definition.description.key:
case "poweronoff":
entity_class = MielePowerSwitch
case "supercooling" | "superfreezing":
entity_class = MieleSuperSwitch

entities.append(
entity_class(coordinator, device_id, definition.description)
)
async_add_entities(entities)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data.devices)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
entities: list = []
entity_class: type[MieleSwitch]
for device_id, device in coordinator.data.devices.items():
for definition in SWITCH_TYPES:
if device.device_type in definition.types:
match definition.description.key:
case "poweronoff":
entity_class = MielePowerSwitch
case "supercooling" | "superfreezing":
entity_class = MieleSuperSwitch

entities.append(
entity_class(coordinator, device_id, definition.description)
)
async_add_entities(entities)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class MieleSwitch(MieleEntity, SwitchEntity):
Expand Down