Add entity translations to incomfort (#118876)
This commit is contained in:
parent
60c06732b1
commit
c4cfd9adf0
6 changed files with 83 additions and 127 deletions
|
@ -32,7 +32,7 @@ class IncomfortBinarySensorEntityDescription(BinarySensorEntityDescription):
|
||||||
SENSOR_TYPES: tuple[IncomfortBinarySensorEntityDescription, ...] = (
|
SENSOR_TYPES: tuple[IncomfortBinarySensorEntityDescription, ...] = (
|
||||||
IncomfortBinarySensorEntityDescription(
|
IncomfortBinarySensorEntityDescription(
|
||||||
key="failed",
|
key="failed",
|
||||||
name="Fault",
|
translation_key="fault",
|
||||||
device_class=BinarySensorDeviceClass.PROBLEM,
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
||||||
value_key="is_failed",
|
value_key="is_failed",
|
||||||
extra_state_attributes_fn=lambda status: {"fault_code": status["fault_code"]},
|
extra_state_attributes_fn=lambda status: {"fault_code": status["fault_code"]},
|
||||||
|
|
|
@ -22,10 +22,6 @@ from . import InComfortConfigEntry
|
||||||
from .coordinator import InComfortDataCoordinator
|
from .coordinator import InComfortDataCoordinator
|
||||||
from .entity import IncomfortBoilerEntity
|
from .entity import IncomfortBoilerEntity
|
||||||
|
|
||||||
INCOMFORT_HEATER_TEMP = "CV Temp"
|
|
||||||
INCOMFORT_PRESSURE = "CV Pressure"
|
|
||||||
INCOMFORT_TAP_TEMP = "Tap Temp"
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
class IncomfortSensorEntityDescription(SensorEntityDescription):
|
class IncomfortSensorEntityDescription(SensorEntityDescription):
|
||||||
|
@ -33,15 +29,11 @@ class IncomfortSensorEntityDescription(SensorEntityDescription):
|
||||||
|
|
||||||
value_key: str
|
value_key: str
|
||||||
extra_key: str | None = None
|
extra_key: str | None = None
|
||||||
# IncomfortSensor does not support UNDEFINED or None,
|
|
||||||
# restrict the type to str
|
|
||||||
name: str = ""
|
|
||||||
|
|
||||||
|
|
||||||
SENSOR_TYPES: tuple[IncomfortSensorEntityDescription, ...] = (
|
SENSOR_TYPES: tuple[IncomfortSensorEntityDescription, ...] = (
|
||||||
IncomfortSensorEntityDescription(
|
IncomfortSensorEntityDescription(
|
||||||
key="cv_pressure",
|
key="cv_pressure",
|
||||||
name=INCOMFORT_PRESSURE,
|
|
||||||
device_class=SensorDeviceClass.PRESSURE,
|
device_class=SensorDeviceClass.PRESSURE,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
native_unit_of_measurement=UnitOfPressure.BAR,
|
native_unit_of_measurement=UnitOfPressure.BAR,
|
||||||
|
@ -49,7 +41,6 @@ SENSOR_TYPES: tuple[IncomfortSensorEntityDescription, ...] = (
|
||||||
),
|
),
|
||||||
IncomfortSensorEntityDescription(
|
IncomfortSensorEntityDescription(
|
||||||
key="cv_temp",
|
key="cv_temp",
|
||||||
name=INCOMFORT_HEATER_TEMP,
|
|
||||||
device_class=SensorDeviceClass.TEMPERATURE,
|
device_class=SensorDeviceClass.TEMPERATURE,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
|
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
|
||||||
|
@ -58,7 +49,7 @@ SENSOR_TYPES: tuple[IncomfortSensorEntityDescription, ...] = (
|
||||||
),
|
),
|
||||||
IncomfortSensorEntityDescription(
|
IncomfortSensorEntityDescription(
|
||||||
key="tap_temp",
|
key="tap_temp",
|
||||||
name=INCOMFORT_TAP_TEMP,
|
translation_key="tap_temperature",
|
||||||
device_class=SensorDeviceClass.TEMPERATURE,
|
device_class=SensorDeviceClass.TEMPERATURE,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
|
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
|
||||||
|
|
|
@ -52,5 +52,17 @@
|
||||||
"title": "YAML import failed because of timeout issues",
|
"title": "YAML import failed because of timeout issues",
|
||||||
"description": "Configuring {integration_title} using YAML is being removed but there was a timeout while connecting to your {integration_title} while importing your existing configuration.\nSetup will not proceed.\n\nVerify that your {integration_title} is operating correctly and restart Home Assistant to attempt the import again.\n\nAlternatively, you may remove the `{domain}` configuration from your configuration.yaml entirely, restart Home Assistant, and add the {integration_title} integration manually."
|
"description": "Configuring {integration_title} using YAML is being removed but there was a timeout while connecting to your {integration_title} while importing your existing configuration.\nSetup will not proceed.\n\nVerify that your {integration_title} is operating correctly and restart Home Assistant to attempt the import again.\n\nAlternatively, you may remove the `{domain}` configuration from your configuration.yaml entirely, restart Home Assistant, and add the {integration_title} integration manually."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"binary_sensor": {
|
||||||
|
"fault": {
|
||||||
|
"name": "Fault"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sensor": {
|
||||||
|
"tap_temperature": {
|
||||||
|
"name": "Tap temperature"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
'platform': 'incomfort',
|
'platform': 'incomfort',
|
||||||
'previous_unique_id': None,
|
'previous_unique_id': None,
|
||||||
'supported_features': 0,
|
'supported_features': 0,
|
||||||
'translation_key': None,
|
'translation_key': 'fault',
|
||||||
'unique_id': 'c0ffeec0ffee_failed',
|
'unique_id': 'c0ffeec0ffee_failed',
|
||||||
'unit_of_measurement': None,
|
'unit_of_measurement': None,
|
||||||
})
|
})
|
||||||
|
@ -47,50 +47,3 @@
|
||||||
'state': 'off',
|
'state': 'off',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_setup_platforms[binary_sensor.boiler_fault-entry]
|
|
||||||
EntityRegistryEntrySnapshot({
|
|
||||||
'aliases': set({
|
|
||||||
}),
|
|
||||||
'area_id': None,
|
|
||||||
'capabilities': None,
|
|
||||||
'config_entry_id': <ANY>,
|
|
||||||
'device_class': None,
|
|
||||||
'device_id': <ANY>,
|
|
||||||
'disabled_by': None,
|
|
||||||
'domain': 'binary_sensor',
|
|
||||||
'entity_category': None,
|
|
||||||
'entity_id': 'binary_sensor.boiler_fault',
|
|
||||||
'has_entity_name': True,
|
|
||||||
'hidden_by': None,
|
|
||||||
'icon': None,
|
|
||||||
'id': <ANY>,
|
|
||||||
'labels': set({
|
|
||||||
}),
|
|
||||||
'name': None,
|
|
||||||
'options': dict({
|
|
||||||
}),
|
|
||||||
'original_device_class': None,
|
|
||||||
'original_icon': None,
|
|
||||||
'original_name': 'Fault',
|
|
||||||
'platform': 'incomfort',
|
|
||||||
'previous_unique_id': None,
|
|
||||||
'supported_features': 0,
|
|
||||||
'translation_key': None,
|
|
||||||
'unique_id': 'c0ffeec0ffee_failed',
|
|
||||||
'unit_of_measurement': None,
|
|
||||||
})
|
|
||||||
# ---
|
|
||||||
# name: test_setup_platforms[binary_sensor.boiler_fault-state]
|
|
||||||
StateSnapshot({
|
|
||||||
'attributes': ReadOnlyDict({
|
|
||||||
'fault_code': None,
|
|
||||||
'friendly_name': 'Boiler Fault',
|
|
||||||
}),
|
|
||||||
'context': <ANY>,
|
|
||||||
'entity_id': 'binary_sensor.boiler_fault',
|
|
||||||
'last_changed': <ANY>,
|
|
||||||
'last_reported': <ANY>,
|
|
||||||
'last_updated': <ANY>,
|
|
||||||
'state': 'off',
|
|
||||||
})
|
|
||||||
# ---
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# serializer version: 1
|
# serializer version: 1
|
||||||
# name: test_setup_platform[sensor.boiler_cv_pressure-entry]
|
# name: test_setup_platform[sensor.boiler_pressure-entry]
|
||||||
EntityRegistryEntrySnapshot({
|
EntityRegistryEntrySnapshot({
|
||||||
'aliases': set({
|
'aliases': set({
|
||||||
}),
|
}),
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'domain': 'sensor',
|
'domain': 'sensor',
|
||||||
'entity_category': None,
|
'entity_category': None,
|
||||||
'entity_id': 'sensor.boiler_cv_pressure',
|
'entity_id': 'sensor.boiler_pressure',
|
||||||
'has_entity_name': True,
|
'has_entity_name': True,
|
||||||
'hidden_by': None,
|
'hidden_by': None,
|
||||||
'icon': None,
|
'icon': None,
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
}),
|
}),
|
||||||
'original_device_class': <SensorDeviceClass.PRESSURE: 'pressure'>,
|
'original_device_class': <SensorDeviceClass.PRESSURE: 'pressure'>,
|
||||||
'original_icon': None,
|
'original_icon': None,
|
||||||
'original_name': 'CV Pressure',
|
'original_name': 'Pressure',
|
||||||
'platform': 'incomfort',
|
'platform': 'incomfort',
|
||||||
'previous_unique_id': None,
|
'previous_unique_id': None,
|
||||||
'supported_features': 0,
|
'supported_features': 0,
|
||||||
|
@ -34,23 +34,23 @@
|
||||||
'unit_of_measurement': <UnitOfPressure.BAR: 'bar'>,
|
'unit_of_measurement': <UnitOfPressure.BAR: 'bar'>,
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_setup_platform[sensor.boiler_cv_pressure-state]
|
# name: test_setup_platform[sensor.boiler_pressure-state]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'pressure',
|
'device_class': 'pressure',
|
||||||
'friendly_name': 'Boiler CV Pressure',
|
'friendly_name': 'Boiler Pressure',
|
||||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||||
'unit_of_measurement': <UnitOfPressure.BAR: 'bar'>,
|
'unit_of_measurement': <UnitOfPressure.BAR: 'bar'>,
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
'entity_id': 'sensor.boiler_cv_pressure',
|
'entity_id': 'sensor.boiler_pressure',
|
||||||
'last_changed': <ANY>,
|
'last_changed': <ANY>,
|
||||||
'last_reported': <ANY>,
|
'last_reported': <ANY>,
|
||||||
'last_updated': <ANY>,
|
'last_updated': <ANY>,
|
||||||
'state': '1.86',
|
'state': '1.86',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_setup_platform[sensor.boiler_cv_temp-entry]
|
# name: test_setup_platform[sensor.boiler_tap_temperature-entry]
|
||||||
EntityRegistryEntrySnapshot({
|
EntityRegistryEntrySnapshot({
|
||||||
'aliases': set({
|
'aliases': set({
|
||||||
}),
|
}),
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
'disabled_by': None,
|
'disabled_by': None,
|
||||||
'domain': 'sensor',
|
'domain': 'sensor',
|
||||||
'entity_category': None,
|
'entity_category': None,
|
||||||
'entity_id': 'sensor.boiler_cv_temp',
|
'entity_id': 'sensor.boiler_tap_temperature',
|
||||||
'has_entity_name': True,
|
'has_entity_name': True,
|
||||||
'hidden_by': None,
|
'hidden_by': None,
|
||||||
'icon': None,
|
'icon': None,
|
||||||
|
@ -76,7 +76,59 @@
|
||||||
}),
|
}),
|
||||||
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
||||||
'original_icon': None,
|
'original_icon': None,
|
||||||
'original_name': 'CV Temp',
|
'original_name': 'Tap temperature',
|
||||||
|
'platform': 'incomfort',
|
||||||
|
'previous_unique_id': None,
|
||||||
|
'supported_features': 0,
|
||||||
|
'translation_key': 'tap_temperature',
|
||||||
|
'unique_id': 'c0ffeec0ffee_tap_temp',
|
||||||
|
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_setup_platform[sensor.boiler_tap_temperature-state]
|
||||||
|
StateSnapshot({
|
||||||
|
'attributes': ReadOnlyDict({
|
||||||
|
'device_class': 'temperature',
|
||||||
|
'friendly_name': 'Boiler Tap temperature',
|
||||||
|
'is_tapping': False,
|
||||||
|
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||||
|
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||||
|
}),
|
||||||
|
'context': <ANY>,
|
||||||
|
'entity_id': 'sensor.boiler_tap_temperature',
|
||||||
|
'last_changed': <ANY>,
|
||||||
|
'last_reported': <ANY>,
|
||||||
|
'last_updated': <ANY>,
|
||||||
|
'state': '30.21',
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_setup_platform[sensor.boiler_temperature-entry]
|
||||||
|
EntityRegistryEntrySnapshot({
|
||||||
|
'aliases': set({
|
||||||
|
}),
|
||||||
|
'area_id': None,
|
||||||
|
'capabilities': dict({
|
||||||
|
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||||
|
}),
|
||||||
|
'config_entry_id': <ANY>,
|
||||||
|
'device_class': None,
|
||||||
|
'device_id': <ANY>,
|
||||||
|
'disabled_by': None,
|
||||||
|
'domain': 'sensor',
|
||||||
|
'entity_category': None,
|
||||||
|
'entity_id': 'sensor.boiler_temperature',
|
||||||
|
'has_entity_name': True,
|
||||||
|
'hidden_by': None,
|
||||||
|
'icon': None,
|
||||||
|
'id': <ANY>,
|
||||||
|
'labels': set({
|
||||||
|
}),
|
||||||
|
'name': None,
|
||||||
|
'options': dict({
|
||||||
|
}),
|
||||||
|
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
||||||
|
'original_icon': None,
|
||||||
|
'original_name': 'Temperature',
|
||||||
'platform': 'incomfort',
|
'platform': 'incomfort',
|
||||||
'previous_unique_id': None,
|
'previous_unique_id': None,
|
||||||
'supported_features': 0,
|
'supported_features': 0,
|
||||||
|
@ -85,72 +137,20 @@
|
||||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_setup_platform[sensor.boiler_cv_temp-state]
|
# name: test_setup_platform[sensor.boiler_temperature-state]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
'device_class': 'temperature',
|
'device_class': 'temperature',
|
||||||
'friendly_name': 'Boiler CV Temp',
|
'friendly_name': 'Boiler Temperature',
|
||||||
'is_pumping': False,
|
'is_pumping': False,
|
||||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
'entity_id': 'sensor.boiler_cv_temp',
|
'entity_id': 'sensor.boiler_temperature',
|
||||||
'last_changed': <ANY>,
|
'last_changed': <ANY>,
|
||||||
'last_reported': <ANY>,
|
'last_reported': <ANY>,
|
||||||
'last_updated': <ANY>,
|
'last_updated': <ANY>,
|
||||||
'state': '35.34',
|
'state': '35.34',
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
# name: test_setup_platform[sensor.boiler_tap_temp-entry]
|
|
||||||
EntityRegistryEntrySnapshot({
|
|
||||||
'aliases': set({
|
|
||||||
}),
|
|
||||||
'area_id': None,
|
|
||||||
'capabilities': dict({
|
|
||||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
|
||||||
}),
|
|
||||||
'config_entry_id': <ANY>,
|
|
||||||
'device_class': None,
|
|
||||||
'device_id': <ANY>,
|
|
||||||
'disabled_by': None,
|
|
||||||
'domain': 'sensor',
|
|
||||||
'entity_category': None,
|
|
||||||
'entity_id': 'sensor.boiler_tap_temp',
|
|
||||||
'has_entity_name': True,
|
|
||||||
'hidden_by': None,
|
|
||||||
'icon': None,
|
|
||||||
'id': <ANY>,
|
|
||||||
'labels': set({
|
|
||||||
}),
|
|
||||||
'name': None,
|
|
||||||
'options': dict({
|
|
||||||
}),
|
|
||||||
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
|
||||||
'original_icon': None,
|
|
||||||
'original_name': 'Tap Temp',
|
|
||||||
'platform': 'incomfort',
|
|
||||||
'previous_unique_id': None,
|
|
||||||
'supported_features': 0,
|
|
||||||
'translation_key': None,
|
|
||||||
'unique_id': 'c0ffeec0ffee_tap_temp',
|
|
||||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
|
||||||
})
|
|
||||||
# ---
|
|
||||||
# name: test_setup_platform[sensor.boiler_tap_temp-state]
|
|
||||||
StateSnapshot({
|
|
||||||
'attributes': ReadOnlyDict({
|
|
||||||
'device_class': 'temperature',
|
|
||||||
'friendly_name': 'Boiler Tap Temp',
|
|
||||||
'is_tapping': False,
|
|
||||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
|
||||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
|
||||||
}),
|
|
||||||
'context': <ANY>,
|
|
||||||
'entity_id': 'sensor.boiler_tap_temp',
|
|
||||||
'last_changed': <ANY>,
|
|
||||||
'last_reported': <ANY>,
|
|
||||||
'last_updated': <ANY>,
|
|
||||||
'state': '30.21',
|
|
||||||
})
|
|
||||||
# ---
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ async def test_coordinator_updates(
|
||||||
assert state.attributes["current_temperature"] == 21.4
|
assert state.attributes["current_temperature"] == 21.4
|
||||||
mock_incomfort().mock_room_status["room_temp"] = 20.91
|
mock_incomfort().mock_room_status["room_temp"] = 20.91
|
||||||
|
|
||||||
state = hass.states.get("sensor.boiler_cv_pressure")
|
state = hass.states.get("sensor.boiler_pressure")
|
||||||
assert state is not None
|
assert state is not None
|
||||||
assert state.state == "1.86"
|
assert state.state == "1.86"
|
||||||
mock_incomfort().mock_heater_status["pressure"] = 1.84
|
mock_incomfort().mock_heater_status["pressure"] = 1.84
|
||||||
|
@ -54,7 +54,7 @@ async def test_coordinator_updates(
|
||||||
assert state is not None
|
assert state is not None
|
||||||
assert state.attributes["current_temperature"] == 20.9
|
assert state.attributes["current_temperature"] == 20.9
|
||||||
|
|
||||||
state = hass.states.get("sensor.boiler_cv_pressure")
|
state = hass.states.get("sensor.boiler_pressure")
|
||||||
assert state is not None
|
assert state is not None
|
||||||
assert state.state == "1.84"
|
assert state.state == "1.84"
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ async def test_coordinator_update_fails(
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the incomfort coordinator update fails."""
|
"""Test the incomfort coordinator update fails."""
|
||||||
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||||
state = hass.states.get("sensor.boiler_cv_pressure")
|
state = hass.states.get("sensor.boiler_pressure")
|
||||||
assert state is not None
|
assert state is not None
|
||||||
assert state.state == "1.86"
|
assert state.state == "1.86"
|
||||||
|
|
||||||
|
@ -88,6 +88,6 @@ async def test_coordinator_update_fails(
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
await hass.async_block_till_done(wait_background_tasks=True)
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
|
|
||||||
state = hass.states.get("sensor.boiler_cv_pressure")
|
state = hass.states.get("sensor.boiler_pressure")
|
||||||
assert state is not None
|
assert state is not None
|
||||||
assert state.state == STATE_UNAVAILABLE
|
assert state.state == STATE_UNAVAILABLE
|
||||||
|
|
Loading…
Add table
Reference in a new issue