Add plate sensors for Miele hobs (#144400)

* Add plate sensors for miele hobs

* Address review comments

* Update snapshot
This commit is contained in:
Åke Strandberg 2025-05-14 13:02:05 +02:00 committed by GitHub
parent 2fdda91cb8
commit 48520d90ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 939 additions and 4 deletions

View File

@ -53,6 +53,35 @@
"spin_speed": { "spin_speed": {
"default": "mdi:sync" "default": "mdi:sync"
}, },
"plate": {
"default": "mdi:circle-outline",
"state": {
"0": "mdi:circle-outline",
"110": "mdi:alpha-w-circle-outline",
"220": "mdi:alpha-w-circle-outline",
"1": "mdi:circle-slice-1",
"2": "mdi:circle-slice-1",
"3": "mdi:circle-slice-2",
"4": "mdi:circle-slice-2",
"5": "mdi:circle-slice-3",
"6": "mdi:circle-slice-3",
"7": "mdi:circle-slice-4",
"8": "mdi:circle-slice-4",
"9": "mdi:circle-slice-5",
"10": "mdi:circle-slice-5",
"11": "mdi:circle-slice-5",
"12": "mdi:circle-slice-6",
"13": "mdi:circle-slice-6",
"14": "mdi:circle-slice-6",
"15": "mdi:circle-slice-7",
"16": "mdi:circle-slice-7",
"17": "mdi:circle-slice-8",
"18": "mdi:circle-slice-8",
"117": "mdi:alpha-b-circle-outline",
"118": "mdi:alpha-b-circle-outline",
"217": "mdi:alpha-b-circle-outline"
}
},
"program_type": { "program_type": {
"default": "mdi:state-machine" "default": "mdi:state-machine"
}, },

View File

@ -45,6 +45,56 @@ _LOGGER = logging.getLogger(__name__)
DISABLED_TEMPERATURE = -32768 DISABLED_TEMPERATURE = -32768
PLATE_POWERS = [
"0",
"110",
"220",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"117",
"118",
"217",
]
DEFAULT_PLATE_COUNT = 4
PLATE_COUNT = {
"KM7678": 6,
"KM7697": 6,
"KM7878": 6,
"KM7897": 6,
"KMDA7633": 5,
"KMDA7634": 5,
"KMDA7774": 5,
"KMX": 6,
}
def _get_plate_count(tech_type: str) -> int:
"""Get number of zones for hob."""
stripped = tech_type.replace(" ", "")
for prefix, plates in PLATE_COUNT.items():
if stripped.startswith(prefix):
return plates
return DEFAULT_PLATE_COUNT
def _convert_duration(value_list: list[int]) -> int | None: def _convert_duration(value_list: list[int]) -> int | None:
"""Convert duration to minutes.""" """Convert duration to minutes."""
@ -56,7 +106,7 @@ class MieleSensorDescription(SensorEntityDescription):
"""Class describing Miele sensor entities.""" """Class describing Miele sensor entities."""
value_fn: Callable[[MieleDevice], StateType] value_fn: Callable[[MieleDevice], StateType]
zone: int | None = None zone: int = 1
@dataclass @dataclass
@ -341,7 +391,6 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
), ),
description=MieleSensorDescription( description=MieleSensorDescription(
key="state_temperature_1", key="state_temperature_1",
zone=1,
device_class=SensorDeviceClass.TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS, native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -389,7 +438,6 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
description=MieleSensorDescription( description=MieleSensorDescription(
key="state_core_target_temperature", key="state_core_target_temperature",
translation_key="core_target_temperature", translation_key="core_target_temperature",
zone=1,
device_class=SensorDeviceClass.TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS, native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -433,7 +481,6 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
description=MieleSensorDescription( description=MieleSensorDescription(
key="state_core_temperature", key="state_core_temperature",
translation_key="core_temperature", translation_key="core_temperature",
zone=1,
device_class=SensorDeviceClass.TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS, native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -443,6 +490,25 @@ SENSOR_TYPES: Final[tuple[MieleSensorDefinition, ...]] = (
), ),
), ),
), ),
*(
MieleSensorDefinition(
types=(
MieleAppliance.HOB_HIGHLIGHT,
MieleAppliance.HOB_INDUCT_EXTR,
MieleAppliance.HOB_INDUCTION,
),
description=MieleSensorDescription(
key="state_plate_step",
translation_key="plate",
translation_placeholders={"plate_no": str(i)},
zone=i,
device_class=SensorDeviceClass.ENUM,
options=PLATE_POWERS,
value_fn=lambda value: value.state_plate_step[0].value_raw,
),
)
for i in range(1, 7)
),
MieleSensorDefinition( MieleSensorDefinition(
types=( types=(
MieleAppliance.WASHER_DRYER, MieleAppliance.WASHER_DRYER,
@ -492,6 +558,8 @@ async def async_setup_entry(
entity_class = MieleProgramIdSensor entity_class = MieleProgramIdSensor
case "state_program_phase": case "state_program_phase":
entity_class = MielePhaseSensor entity_class = MielePhaseSensor
case "state_plate_step":
entity_class = MielePlateSensor
case _: case _:
entity_class = MieleSensor entity_class = MieleSensor
if ( if (
@ -499,6 +567,10 @@ async def async_setup_entry(
== SensorDeviceClass.TEMPERATURE == SensorDeviceClass.TEMPERATURE
and definition.description.value_fn(device) and definition.description.value_fn(device)
== DISABLED_TEMPERATURE / 100 == DISABLED_TEMPERATURE / 100
) or (
definition.description.key == "state_plate_step"
and definition.description.zone
> _get_plate_count(device.tech_type)
): ):
# Don't create entity if API signals that datapoint is disabled # Don't create entity if API signals that datapoint is disabled
continue continue
@ -552,6 +624,33 @@ class MieleSensor(MieleEntity, SensorEntity):
return self.entity_description.value_fn(self.device) return self.entity_description.value_fn(self.device)
class MielePlateSensor(MieleSensor):
"""Representation of a Sensor."""
entity_description: MieleSensorDescription
def __init__(
self,
coordinator: MieleDataUpdateCoordinator,
device_id: str,
description: MieleSensorDescription,
) -> None:
"""Initialize the plate sensor."""
super().__init__(coordinator, device_id, description)
self._attr_unique_id = f"{device_id}-{description.key}-{description.zone}"
@property
def native_value(self) -> StateType:
"""Return the state of the plate sensor."""
# state_plate_step is [] if all zones are off
plate_power = (
self.device.state_plate_step[self.entity_description.zone - 1].value_raw
if self.device.state_plate_step
else 0
)
return str(plate_power)
class MieleStatusSensor(MieleSensor): class MieleStatusSensor(MieleSensor):
"""Representation of the status sensor.""" """Representation of the status sensor."""

View File

@ -191,6 +191,35 @@
"energy_consumption": { "energy_consumption": {
"name": "Energy consumption" "name": "Energy consumption"
}, },
"plate": {
"name": "Plate {plate_no}",
"state": {
"0": "0",
"110": "Warming",
"220": "%key::component::miele::sensor::plate::state::110%",
"1": "1",
"2": "1\u2022",
"3": "2",
"4": "2\u2022",
"5": "3",
"6": "3\u2022",
"7": "4",
"8": "4\u2022",
"9": "5",
"10": "5\u2022",
"11": "6",
"12": "6\u2022",
"13": "7",
"14": "7\u2022",
"15": "8",
"16": "8\u2022",
"17": "9",
"18": "9\u2022",
"117": "Boost",
"118": "%key::component::miele::sensor::plate::state::117%",
"217": "%key::component::miele::sensor::plate::state::117%"
}
},
"drying_step": { "drying_step": {
"name": "Drying step", "name": "Drying step",
"state": { "state": {

View File

@ -0,0 +1,168 @@
{
"DummyAppliance_hob_w_extr": {
"ident": {
"type": {
"key_localized": "Device type",
"value_raw": 74,
"value_localized": "Hob with vapour extraction"
},
"deviceName": "KDMA7774 | APP2-2",
"protocolVersion": 2,
"deviceIdentLabel": {
"fabNumber": "**REDACTED**",
"fabIndex": "00",
"techType": "KMDA7774-1 R01",
"matNumber": "10974770",
"swids": [
"4088",
"20269",
"25122",
"4194",
"20270",
"25077",
"4194",
"20270",
"25077",
"4215",
"20270",
"25134",
"4438",
"20314",
"25128"
]
},
"xkmIdentLabel": {
"techType": "EK039W",
"releaseVersion": "02.72"
}
},
"state": {
"ProgramID": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program name"
},
"status": {
"value_raw": 5,
"value_localized": "In use",
"key_localized": "status"
},
"programType": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program type"
},
"programPhase": {
"value_raw": 0,
"value_localized": "",
"key_localized": "Program phase"
},
"remainingTime": [0, 0],
"startTime": [0, 0],
"targetTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTargetTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"temperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
},
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"coreTemperature": [
{
"value_raw": -32768,
"value_localized": null,
"unit": "Celsius"
}
],
"signalInfo": false,
"signalFailure": false,
"signalDoor": false,
"remoteEnable": {
"fullRemoteControl": true,
"smartGrid": false,
"mobileStart": false
},
"ambientLight": null,
"light": null,
"elapsedTime": [],
"spinningSpeed": {
"unit": "rpm",
"value_raw": null,
"value_localized": null,
"key_localized": "Spin speed"
},
"dryingStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Drying level"
},
"ventilationStep": {
"value_raw": null,
"value_localized": "",
"key_localized": "Fan level"
},
"plateStep": [
{
"value_raw": 0,
"value_localized": 0,
"key_localized": "Power level"
},
{
"value_raw": 110,
"value_localized": 2,
"key_localized": "Power level"
},
{
"value_raw": 8,
"value_localized": 4,
"key_localized": "Power level"
},
{
"value_raw": 15,
"value_localized": 8,
"key_localized": "Power level"
},
{
"value_raw": 117,
"value_localized": 10,
"key_localized": "Power level"
}
],
"ecoFeedback": null,
"batteryLevel": null
}
}
}

View File

@ -1,4 +1,599 @@
# serializer version: 1 # serializer version: 1
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'pause',
'program_ended',
'program_interrupted',
'programmed',
'rinse_hold',
'service',
'supercooling',
'supercooling_superfreezing',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': 'mdi:pot-steam-outline',
'original_name': None,
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'status',
'unique_id': 'DummyAppliance_hob_w_extr-state_status',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction',
'icon': 'mdi:pot-steam-outline',
'options': list([
'autocleaning',
'failure',
'idle',
'in_use',
'not_connected',
'off',
'on',
'pause',
'program_ended',
'program_interrupted',
'programmed',
'rinse_hold',
'service',
'supercooling',
'supercooling_superfreezing',
'superfreezing',
'superheating',
'waiting_to_start',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'in_use',
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_1-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction_plate_1',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Plate 1',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'plate',
'unique_id': 'DummyAppliance_hob_w_extr-state_plate_step-1',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_1-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction Plate 1',
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction_plate_1',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0',
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_2-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction_plate_2',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Plate 2',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'plate',
'unique_id': 'DummyAppliance_hob_w_extr-state_plate_step-2',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_2-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction Plate 2',
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction_plate_2',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '110',
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_3-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction_plate_3',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Plate 3',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'plate',
'unique_id': 'DummyAppliance_hob_w_extr-state_plate_step-3',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_3-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction Plate 3',
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction_plate_3',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '8',
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_4-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction_plate_4',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Plate 4',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'plate',
'unique_id': 'DummyAppliance_hob_w_extr-state_plate_step-4',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_4-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction Plate 4',
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction_plate_4',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '15',
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_5-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.hob_with_extraction_plate_5',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Plate 5',
'platform': 'miele',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'plate',
'unique_id': 'DummyAppliance_hob_w_extr-state_plate_step-5',
'unit_of_measurement': None,
})
# ---
# name: test_hob_sensor_states[platforms0-hob.json][sensor.hob_with_extraction_plate_5-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Hob with extraction Plate 5',
'options': list([
'0',
'110',
'220',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'117',
'118',
'217',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.hob_with_extraction_plate_5',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '117',
})
# ---
# name: test_sensor_states[platforms0][sensor.freezer-entry] # name: test_sensor_states[platforms0][sensor.freezer-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@ -24,3 +24,18 @@ async def test_sensor_states(
"""Test sensor state.""" """Test sensor state."""
await snapshot_platform(hass, entity_registry, snapshot, setup_platform.entry_id) await snapshot_platform(hass, entity_registry, snapshot, setup_platform.entry_id)
@pytest.mark.parametrize("load_device_file", ["hob.json"])
@pytest.mark.parametrize("platforms", [(SENSOR_DOMAIN,)])
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_hob_sensor_states(
hass: HomeAssistant,
mock_miele_client: MagicMock,
snapshot: SnapshotAssertion,
entity_registry: er.EntityRegistry,
setup_platform: None,
) -> None:
"""Test sensor state."""
await snapshot_platform(hass, entity_registry, snapshot, setup_platform.entry_id)