diff --git a/homeassistant/components/ouman_eh_800/__init__.py b/homeassistant/components/ouman_eh_800/__init__.py index d90b6f4b0a6b..59c0f0c17345 100644 --- a/homeassistant/components/ouman_eh_800/__init__.py +++ b/homeassistant/components/ouman_eh_800/__init__.py @@ -6,6 +6,7 @@ from homeassistant.core import HomeAssistant from .coordinator import OumanEh800ConfigEntry, OumanEh800Coordinator _PLATFORMS: list[Platform] = [ + Platform.NUMBER, Platform.SENSOR, Platform.VALVE, ] diff --git a/homeassistant/components/ouman_eh_800/number.py b/homeassistant/components/ouman_eh_800/number.py new file mode 100644 index 000000000000..0ff24577790f --- /dev/null +++ b/homeassistant/components/ouman_eh_800/number.py @@ -0,0 +1,260 @@ +"""Number platform for the Ouman EH-800 integration.""" + +from dataclasses import dataclass + +from ouman_eh_800_api import ( + FloatControlOumanEndpoint, + IntControlOumanEndpoint, + L1BaseEndpoints, + L1ConstantTempMode, + L1FivePointCurve, + L1NoRoomSensor, + L1RoomSensor, + L1ThreePointCurve, + L2BaseEndpoints, + L2FivePointCurve, + L2NoRoomSensor, + L2RoomSensor, + L2ThreePointCurve, + SystemEndpoints, +) + +from homeassistant.components.number import ( + NumberDeviceClass, + NumberEntity, + NumberEntityDescription, + NumberMode, +) +from homeassistant.const import EntityCategory, UnitOfTemperature, UnitOfTime +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback + +from .const import OumanDevice +from .coordinator import OumanEh800ConfigEntry, OumanEh800Coordinator +from .entity import OumanEh800Entity, OumanEh800EntityDescription + +PARALLEL_UPDATES = 1 + + +@dataclass(frozen=True, kw_only=True) +class OumanEh800NumberEntityDescription( + OumanEh800EntityDescription, NumberEntityDescription +): + """Number description with main/L1/L2 device assignment.""" + + +def _temperature_number( + *, + device: OumanDevice, + key: str, + device_class: NumberDeviceClass = NumberDeviceClass.TEMPERATURE, + entity_category: EntityCategory | None = EntityCategory.CONFIG, + enabled_by_default: bool = True, +) -> OumanEh800NumberEntityDescription: + return OumanEh800NumberEntityDescription( + device=device, + key=key, + translation_key=key, + device_class=device_class, + native_unit_of_measurement=UnitOfTemperature.CELSIUS, + mode=NumberMode.BOX, + entity_category=entity_category, + entity_registry_enabled_default=enabled_by_default, + ) + + +NUMBER_DESCRIPTIONS: dict[ + IntControlOumanEndpoint | FloatControlOumanEndpoint, + OumanEh800NumberEntityDescription, +] = { + SystemEndpoints.TREND_SAMPLE_INTERVAL: OumanEh800NumberEntityDescription( + device=OumanDevice.MAIN, + key="trend_sampling_interval", + translation_key="trend_sampling_interval", + native_unit_of_measurement=UnitOfTime.SECONDS, + mode=NumberMode.BOX, + entity_category=EntityCategory.CONFIG, + entity_registry_enabled_default=False, + ), + # L1 base water-out temperature limits. + L1BaseEndpoints.WATER_OUT_MIN_TEMP: _temperature_number( + device=OumanDevice.L1, key="water_out_minimum_temperature" + ), + L1BaseEndpoints.WATER_OUT_MAX_TEMP: _temperature_number( + device=OumanDevice.L1, key="water_out_maximum_temperature" + ), + # L1 heating curve. Three-point and five-point variants share keys + # where their meaning overlaps. + L1ThreePointCurve.CURVE_MINUS_20_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_minus_20_temperature" + ), + L1ThreePointCurve.CURVE_0_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_0_temperature" + ), + L1ThreePointCurve.CURVE_20_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_20_temperature" + ), + L1FivePointCurve.CURVE_MINUS_20_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_minus_20_temperature" + ), + L1FivePointCurve.CURVE_MINUS_10_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_minus_10_temperature" + ), + L1FivePointCurve.CURVE_0_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_0_temperature" + ), + L1FivePointCurve.CURVE_10_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_10_temperature" + ), + L1FivePointCurve.CURVE_20_TEMP: _temperature_number( + device=OumanDevice.L1, key="curve_20_temperature" + ), + # L1 no-room-sensor and room-sensor variants share keys for the offsets + # that conceptually mean the same thing on both axes. + L1NoRoomSensor.TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L1, + key="temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1NoRoomSensor.BIG_TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L1, + key="big_temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1NoRoomSensor.ROOM_TEMPERATURE_FINE_TUNING: _temperature_number( + device=OumanDevice.L1, + key="room_temperature_fine_tuning", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1RoomSensor.TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L1, + key="temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1RoomSensor.BIG_TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L1, + key="big_temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1RoomSensor.ROOM_TEMPERATURE_FINE_TUNING: _temperature_number( + device=OumanDevice.L1, + key="room_temperature_fine_tuning", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L1ConstantTempMode.CONSTANT_TEMP_SETPOINT: _temperature_number( + device=OumanDevice.L1, + key="constant_temp_setpoint", + entity_category=None, + ), + # L2 mirrors L1. + L2BaseEndpoints.WATER_OUT_MIN_TEMP: _temperature_number( + device=OumanDevice.L2, key="water_out_minimum_temperature" + ), + L2BaseEndpoints.WATER_OUT_MAX_TEMP: _temperature_number( + device=OumanDevice.L2, key="water_out_maximum_temperature" + ), + L2ThreePointCurve.CURVE_MINUS_20_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_minus_20_temperature" + ), + L2ThreePointCurve.CURVE_0_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_0_temperature" + ), + L2ThreePointCurve.CURVE_20_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_20_temperature" + ), + L2FivePointCurve.CURVE_MINUS_20_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_minus_20_temperature" + ), + L2FivePointCurve.CURVE_MINUS_10_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_minus_10_temperature" + ), + L2FivePointCurve.CURVE_0_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_0_temperature" + ), + L2FivePointCurve.CURVE_10_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_10_temperature" + ), + L2FivePointCurve.CURVE_20_TEMP: _temperature_number( + device=OumanDevice.L2, key="curve_20_temperature" + ), + L2NoRoomSensor.TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L2, + key="temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L2NoRoomSensor.BIG_TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L2, + key="big_temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L2NoRoomSensor.ROOM_TEMPERATURE_FINE_TUNING: _temperature_number( + device=OumanDevice.L2, + key="room_temperature_fine_tuning", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L2RoomSensor.TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L2, + key="temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L2RoomSensor.BIG_TEMPERATURE_DROP: _temperature_number( + device=OumanDevice.L2, + key="big_temperature_drop", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), + L2RoomSensor.ROOM_TEMPERATURE_FINE_TUNING: _temperature_number( + device=OumanDevice.L2, + key="room_temperature_fine_tuning", + device_class=NumberDeviceClass.TEMPERATURE_DELTA, + ), +} + + +async def async_setup_entry( + hass: HomeAssistant, + entry: OumanEh800ConfigEntry, + async_add_entities: AddConfigEntryEntitiesCallback, +) -> None: + """Set up Ouman EH-800 number entities based on a config entry.""" + coordinator = entry.runtime_data + async_add_entities( + OumanEh800NumberEntity(coordinator, endpoint, description) + for endpoint in coordinator.data + if isinstance(endpoint, IntControlOumanEndpoint | FloatControlOumanEndpoint) + and (description := NUMBER_DESCRIPTIONS.get(endpoint)) is not None + ) + + +class OumanEh800NumberEntity(OumanEh800Entity, NumberEntity): + """Ouman EH-800 number entity.""" + + entity_description: OumanEh800NumberEntityDescription + _endpoint: IntControlOumanEndpoint | FloatControlOumanEndpoint + + def __init__( + self, + coordinator: OumanEh800Coordinator, + endpoint: IntControlOumanEndpoint | FloatControlOumanEndpoint, + description: OumanEh800NumberEntityDescription, + ) -> None: + """Initialize the number entity.""" + super().__init__(coordinator, endpoint, description) + self._attr_native_min_value = float(endpoint.min_val) + self._attr_native_max_value = float(endpoint.max_val) + self._attr_native_step = ( + 1 if isinstance(endpoint, IntControlOumanEndpoint) else 0.1 + ) + + @property + def native_value(self) -> float: + """Return the current value.""" + value = self.coordinator.data[self._endpoint] + assert isinstance(value, float) + return value + + async def async_set_native_value(self, value: float) -> None: + """Set a new value on the device.""" + final_value: int | float = ( + int(value) if isinstance(self._endpoint, IntControlOumanEndpoint) else value + ) + await self.coordinator.async_set_endpoint_value(self._endpoint, final_value) diff --git a/homeassistant/components/ouman_eh_800/strings.json b/homeassistant/components/ouman_eh_800/strings.json index 9c7acdb4aab2..42a43ad48920 100644 --- a/homeassistant/components/ouman_eh_800/strings.json +++ b/homeassistant/components/ouman_eh_800/strings.json @@ -31,6 +31,26 @@ } }, "entity": { + "number": { + "big_temperature_drop": { "name": "Big temperature drop" }, + "constant_temp_setpoint": { "name": "Constant temperature setpoint" }, + "curve_0_temperature": { "name": "Curve 0°C temperature" }, + "curve_10_temperature": { "name": "Curve 10°C temperature" }, + "curve_20_temperature": { "name": "Curve 20°C temperature" }, + "curve_minus_10_temperature": { "name": "Curve -10°C temperature" }, + "curve_minus_20_temperature": { "name": "Curve -20°C temperature" }, + "room_temperature_fine_tuning": { + "name": "Room temperature fine tuning" + }, + "temperature_drop": { "name": "Temperature drop" }, + "trend_sampling_interval": { "name": "Trend sampling interval" }, + "water_out_maximum_temperature": { + "name": "Water out maximum temperature" + }, + "water_out_minimum_temperature": { + "name": "Water out minimum temperature" + } + }, "sensor": { "curve_supply_water_temperature": { "name": "Curve supply water temperature" diff --git a/tests/components/ouman_eh_800/snapshots/test_number.ambr b/tests/components/ouman_eh_800/snapshots/test_number.ambr new file mode 100644 index 000000000000..544118aacb48 --- /dev/null +++ b/tests/components/ouman_eh_800/snapshots/test_number.ambr @@ -0,0 +1,3227 @@ +# serializer version: 1 +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_big_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Big temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Big temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'big_temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_big_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_big_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Big temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '16.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_constant_temperature_setpoint-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': None, + 'entity_id': 'number.heating_circuit_1_patterilammitys_constant_temperature_setpoint', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Constant temperature setpoint', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Constant temperature setpoint', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'constant_temp_setpoint', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_constant_temp_setpoint', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_constant_temperature_setpoint-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Constant temperature setpoint', + 'max': 95.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_constant_temperature_setpoint', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 0°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 0°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_0_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_0_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 0°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '41.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_minus_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve -20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '58.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '18.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Room temperature fine tuning', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Room temperature fine tuning', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'room_temperature_fine_tuning', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_room_temperature_fine_tuning', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Room temperature fine tuning', + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '6.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out maximum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out maximum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_maximum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_maximum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out maximum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '75.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out minimum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out minimum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_minimum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_minimum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out minimum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '12.0', + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-l1_constant_temp_relay_summer_stop][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_big_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Big temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Big temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'big_temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_big_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_big_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Big temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '16.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 0°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 0°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_0_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_0_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 0°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '41.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_10degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_10degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -10°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -10°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_10_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_minus_10_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_10degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve -10°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_10degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_10degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_10degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 10°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 10°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_10_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_10_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_10degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 10°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_10degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '30.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_minus_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve -20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '58.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '18.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Room temperature fine tuning', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Room temperature fine tuning', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'room_temperature_fine_tuning', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_room_temperature_fine_tuning', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Room temperature fine tuning', + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '6.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out maximum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out maximum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_maximum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_maximum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out maximum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '75.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out minimum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out minimum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_minimum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_minimum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out minimum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '12.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_big_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_big_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Big temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Big temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'big_temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_big_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_big_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Big temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_big_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '16.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_0degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_0degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 0°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 0°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_0_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_0_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_0degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve 0°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_0degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '28.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_10degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_10degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -10°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -10°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_10_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_minus_10_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_10degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve -10°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_10degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '35.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_10degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_10degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 10°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 10°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_10_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_10_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_10degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve 10°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_10degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '25.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_minus_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve -20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '40.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve 20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '22.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Room temperature fine tuning', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Room temperature fine tuning', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'room_temperature_fine_tuning', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_room_temperature_fine_tuning', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Room temperature fine tuning', + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '6.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_water_out_maximum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_maximum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out maximum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out maximum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_maximum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_water_out_maximum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_water_out_maximum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Water out maximum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_maximum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '75.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_water_out_minimum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_minimum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out minimum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out minimum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_minimum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_water_out_minimum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.heating_circuit_2_lattialammitys_water_out_minimum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Water out minimum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_minimum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '12.0', + }) +# --- +# name: test_entities[number-no_room_sensors][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-no_room_sensors][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-relay_temp_difference][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-relay_temp_difference][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-relay_temperature][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-relay_temperature][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-relay_time_program][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-relay_time_program][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-relay_valve_position][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-relay_valve_position][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_big_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Big temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Big temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'big_temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_big_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_big_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Big temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_big_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '3.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_constant_temperature_setpoint-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': None, + 'entity_id': 'number.heating_circuit_1_patterilammitys_constant_temperature_setpoint', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Constant temperature setpoint', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Constant temperature setpoint', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'constant_temp_setpoint', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_constant_temp_setpoint', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_constant_temperature_setpoint-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Constant temperature setpoint', + 'max': 95.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_constant_temperature_setpoint', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 0°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 0°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_0_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_0_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_0degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 0°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_0degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '41.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_minus_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve -20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '58.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_curve_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Curve 20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_curve_20degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '18.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Room temperature fine tuning', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Room temperature fine tuning', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'room_temperature_fine_tuning', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_room_temperature_fine_tuning', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Room temperature fine tuning', + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out maximum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out maximum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_maximum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_maximum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_water_out_maximum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out maximum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_maximum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '75.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out minimum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out minimum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_minimum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l1_water_out_minimum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_1_patterilammitys_water_out_minimum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 1 Patterilämmitys Water out minimum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_1_patterilammitys_water_out_minimum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '12.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_big_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_big_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Big temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Big temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'big_temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_big_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_big_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Big temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_big_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '3.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_0degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_0degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 0°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 0°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_0_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_0_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_0degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve 0°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_0degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '28.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve -20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve -20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_minus_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_minus_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve -20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '40.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Curve 20°C temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Curve 20°C temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'curve_20_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_curve_20_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Curve 20°C temperature', + 'max': 99.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_curve_20degc_temperature_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '22.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Room temperature fine tuning', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Room temperature fine tuning', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'room_temperature_fine_tuning', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_room_temperature_fine_tuning', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Room temperature fine tuning', + 'max': 4.0, + 'min': -4.0, + 'mode': , + 'step': 0.1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_room_temperature_fine_tuning', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_temperature_drop-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_temperature_drop', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Temperature drop', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Temperature drop', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'temperature_drop', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_temperature_drop', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_temperature_drop-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature_delta', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Temperature drop', + 'max': 90.0, + 'min': 0.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_temperature_drop', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_water_out_maximum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_maximum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out maximum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out maximum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_maximum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_water_out_maximum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_water_out_maximum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Water out maximum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_maximum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '75.0', + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_water_out_minimum_temperature-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_minimum_temperature', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Water out minimum temperature', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water out minimum temperature', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_out_minimum_temperature', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_l2_water_out_minimum_temperature', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.heating_circuit_2_lattialammitys_water_out_minimum_temperature-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'temperature', + 'friendly_name': 'Heating circuit 2 Lattialämmitys Water out minimum temperature', + 'max': 95.0, + 'min': 5.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.heating_circuit_2_lattialammitys_water_out_minimum_temperature', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '12.0', + }) +# --- +# name: test_entities[number-room_sensors][number.ouman_eh_800_trend_sampling_interval-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trend sampling interval', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trend sampling interval', + 'platform': 'ouman_eh_800', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trend_sampling_interval', + 'unique_id': '01JABCDEFGHIJKLMNOPQRSTUVW_main_trend_sampling_interval', + 'unit_of_measurement': , + }) +# --- +# name: test_entities[number-room_sensors][number.ouman_eh_800_trend_sampling_interval-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Ouman EH-800 Trend sampling interval', + 'max': 21600.0, + 'min': 30.0, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.ouman_eh_800_trend_sampling_interval', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '600.0', + }) +# --- diff --git a/tests/components/ouman_eh_800/test_number.py b/tests/components/ouman_eh_800/test_number.py new file mode 100644 index 000000000000..f04ecd9858f6 --- /dev/null +++ b/tests/components/ouman_eh_800/test_number.py @@ -0,0 +1,132 @@ +"""Tests for the Ouman EH-800 number platform.""" + +from unittest.mock import AsyncMock + +from ouman_eh_800_api import ( + FloatControlOumanEndpoint, + IntControlOumanEndpoint, + L1BaseEndpoints, + L1RoomSensor, + L1ThreePointCurve, + OumanClientAuthenticationError, + OumanClientCommunicationError, +) +import pytest +from syrupy.assertion import SnapshotAssertion + +from homeassistant.components.number import ( + ATTR_VALUE, + DOMAIN as NUMBER_DOMAIN, + SERVICE_SET_VALUE, +) +from homeassistant.const import ATTR_ENTITY_ID, Platform +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError +from homeassistant.helpers import entity_registry as er + +from .conftest import SCENARIOS + +from tests.common import MockConfigEntry, snapshot_platform + + +@pytest.mark.parametrize("scenario", SCENARIOS.keys(), indirect=True) +@pytest.mark.parametrize("init_integration", [Platform.NUMBER], indirect=True) +@pytest.mark.usefixtures("entity_registry_enabled_by_default", "init_integration") +async def test_entities( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + entity_registry: er.EntityRegistry, + mock_config_entry: MockConfigEntry, +) -> None: + """Test the number entities for each registry-set scenario.""" + await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) + + +@pytest.mark.parametrize("init_integration", [Platform.NUMBER], indirect=True) +@pytest.mark.usefixtures("init_integration") +@pytest.mark.parametrize( + ("entity_id", "endpoint", "initial_value", "target_value", "set_value"), + [ + pytest.param( + "number.heating_circuit_1_patterilammitys_curve_0degc_temperature", + L1ThreePointCurve.CURVE_0_TEMP, + 41.0, + 42.0, + 42.0, + id="int_setpoint", + ), + pytest.param( + "number.heating_circuit_1_patterilammitys_room_temperature_fine_tuning", + L1RoomSensor.ROOM_TEMPERATURE_FINE_TUNING, + 0.0, + 1.5, + 1.5, + id="float_fine_tuning", + ), + ], +) +async def test_async_set_native_value( + hass: HomeAssistant, + mock_ouman_client: AsyncMock, + entity_id: str, + endpoint: IntControlOumanEndpoint | FloatControlOumanEndpoint, + initial_value: float, + target_value: float, + set_value: float, +) -> None: + """Test that setting a number writes to the device and updates state.""" + assert float(hass.states.get(entity_id).state) == initial_value + + await hass.services.async_call( + NUMBER_DOMAIN, + SERVICE_SET_VALUE, + {ATTR_ENTITY_ID: entity_id, ATTR_VALUE: target_value}, + blocking=True, + ) + + mock_ouman_client.set_endpoint_value.assert_called_once_with(endpoint, set_value) + assert float(hass.states.get(entity_id).state) == target_value + + +@pytest.mark.parametrize("init_integration", [Platform.NUMBER], indirect=True) +@pytest.mark.usefixtures("init_integration") +@pytest.mark.parametrize( + ("client_error", "expected_message"), + [ + pytest.param( + OumanClientAuthenticationError("Wrong username or password"), + "Authentication failed", + id="auth_failure", + ), + pytest.param( + OumanClientCommunicationError("Network error: Connection refused"), + "Error communicating with API", + id="communication_failure", + ), + ], +) +async def test_async_set_native_value_errors( + hass: HomeAssistant, + mock_ouman_client: AsyncMock, + client_error: Exception, + expected_message: str, +) -> None: + """Test that client errors are mapped to HomeAssistantError.""" + mock_ouman_client.set_endpoint_value.side_effect = client_error + + with pytest.raises(HomeAssistantError, match=expected_message): + await hass.services.async_call( + NUMBER_DOMAIN, + SERVICE_SET_VALUE, + { + ATTR_ENTITY_ID: "number.heating_circuit_1_patterilammitys_water_out_minimum_temperature", + ATTR_VALUE: 20, + }, + blocking=True, + ) + + # First positional arg is the endpoint; we only assert the call happened. + mock_ouman_client.set_endpoint_value.assert_called_once() + args, _ = mock_ouman_client.set_endpoint_value.call_args + assert args[0] is L1BaseEndpoints.WATER_OUT_MIN_TEMP + assert args[1] == 20