Migrate Rova to has entity name (#114303)

This commit is contained in:
Joost Lekkerkerker 2024-03-27 16:20:51 +01:00 committed by GitHub
parent 4d27f4be51
commit 6289082dab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 89 additions and 59 deletions

View File

@ -0,0 +1,18 @@
{
"entity": {
"sensor": {
"bio": {
"default": "mdi:leaf"
},
"paper": {
"default": "mdi:file"
},
"plastic": {
"default": "mdi:recycle"
},
"residual": {
"default": "mdi:delete"
}
}
}
}

View File

@ -17,6 +17,7 @@ from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_NAME
from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
@ -27,28 +28,24 @@ from .coordinator import RovaCoordinator
ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=rova"} ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=rova"}
SENSOR_TYPES = { SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
"bio": SensorEntityDescription( SensorEntityDescription(
key="gft", key="gft",
name="bio", translation_key="bio",
icon="mdi:recycle",
), ),
"paper": SensorEntityDescription( SensorEntityDescription(
key="papier", key="papier",
name="paper", translation_key="paper",
icon="mdi:recycle",
), ),
"plastic": SensorEntityDescription( SensorEntityDescription(
key="pmd", key="pmd",
name="plastic", translation_key="plastic",
icon="mdi:recycle",
), ),
"residual": SensorEntityDescription( SensorEntityDescription(
key="restafval", key="restafval",
name="residual", translation_key="residual",
icon="mdi:recycle",
), ),
} )
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{ {
@ -119,14 +116,16 @@ async def async_setup_entry(
unique_id = entry.unique_id unique_id = entry.unique_id
async_add_entities( async_add_entities(
RovaSensor(unique_id, description, coordinator) RovaSensor(unique_id, description, coordinator) for description in SENSOR_TYPES
for key, description in SENSOR_TYPES.items()
) )
class RovaSensor(CoordinatorEntity[RovaCoordinator], SensorEntity): class RovaSensor(CoordinatorEntity[RovaCoordinator], SensorEntity):
"""Representation of a Rova sensor.""" """Representation of a Rova sensor."""
_attr_device_class = SensorDeviceClass.TIMESTAMP
_attr_has_entity_name = True
def __init__( def __init__(
self, self,
unique_id: str, unique_id: str,
@ -136,10 +135,11 @@ class RovaSensor(CoordinatorEntity[RovaCoordinator], SensorEntity):
"""Initialize the sensor.""" """Initialize the sensor."""
super().__init__(coordinator) super().__init__(coordinator)
self.entity_description = description self.entity_description = description
self._attr_name = f"{unique_id}_{description.key}"
self._attr_unique_id = f"{unique_id}_{description.key}" self._attr_unique_id = f"{unique_id}_{description.key}"
self._attr_device_class = SensorDeviceClass.TIMESTAMP self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, unique_id)},
entry_type=DeviceEntryType.SERVICE,
)
@property @property
def native_value(self) -> datetime | None: def native_value(self) -> datetime | None:

View File

@ -33,5 +33,21 @@
"title": "Rova does not collect at this address anymore", "title": "Rova does not collect at this address anymore",
"description": "Rova does not collect at {zip_code} anymore.\n\nPlease remove the integration." "description": "Rova does not collect at {zip_code} anymore.\n\nPlease remove the integration."
} }
},
"entity": {
"sensor": {
"bio": {
"name": "Bio"
},
"paper": {
"name": "Paper"
},
"plastic": {
"name": "Plastic"
},
"residual": {
"name": "Residual"
}
}
} }
} }

View File

@ -1,5 +1,5 @@
# serializer version: 1 # serializer version: 1
# name: test_all_entities[sensor.8381be13_gft-entry] # name: test_all_entities[sensor.8381be_13_bio-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
}), }),
@ -11,8 +11,8 @@
'disabled_by': None, 'disabled_by': None,
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.8381be13_gft', 'entity_id': 'sensor.8381be_13_bio',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -22,32 +22,31 @@
'options': dict({ 'options': dict({
}), }),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>, 'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': 'mdi:recycle', 'original_icon': None,
'original_name': '8381BE13_gft', 'original_name': 'Bio',
'platform': 'rova', 'platform': 'rova',
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'bio',
'unique_id': '8381BE13_gft', 'unique_id': '8381BE13_gft',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_gft-state] # name: test_all_entities[sensor.8381be_13_bio-state]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'timestamp', 'device_class': 'timestamp',
'friendly_name': '8381BE13_gft', 'friendly_name': '8381BE 13 Bio',
'icon': 'mdi:recycle',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.8381be13_gft', 'entity_id': 'sensor.8381be_13_bio',
'last_changed': <ANY>, 'last_changed': <ANY>,
'last_reported': <ANY>, 'last_reported': <ANY>,
'last_updated': <ANY>, 'last_updated': <ANY>,
'state': '2024-02-20T23:00:00+00:00', 'state': '2024-02-20T23:00:00+00:00',
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_papier-entry] # name: test_all_entities[sensor.8381be_13_paper-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
}), }),
@ -59,8 +58,8 @@
'disabled_by': None, 'disabled_by': None,
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.8381be13_papier', 'entity_id': 'sensor.8381be_13_paper',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -70,32 +69,31 @@
'options': dict({ 'options': dict({
}), }),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>, 'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': 'mdi:recycle', 'original_icon': None,
'original_name': '8381BE13_papier', 'original_name': 'Paper',
'platform': 'rova', 'platform': 'rova',
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'paper',
'unique_id': '8381BE13_papier', 'unique_id': '8381BE13_papier',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_papier-state] # name: test_all_entities[sensor.8381be_13_paper-state]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'timestamp', 'device_class': 'timestamp',
'friendly_name': '8381BE13_papier', 'friendly_name': '8381BE 13 Paper',
'icon': 'mdi:recycle',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.8381be13_papier', 'entity_id': 'sensor.8381be_13_paper',
'last_changed': <ANY>, 'last_changed': <ANY>,
'last_reported': <ANY>, 'last_reported': <ANY>,
'last_updated': <ANY>, 'last_updated': <ANY>,
'state': '2024-03-05T23:00:00+00:00', 'state': '2024-03-05T23:00:00+00:00',
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_pmd-entry] # name: test_all_entities[sensor.8381be_13_plastic-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
}), }),
@ -107,8 +105,8 @@
'disabled_by': None, 'disabled_by': None,
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.8381be13_pmd', 'entity_id': 'sensor.8381be_13_plastic',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -118,32 +116,31 @@
'options': dict({ 'options': dict({
}), }),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>, 'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': 'mdi:recycle', 'original_icon': None,
'original_name': '8381BE13_pmd', 'original_name': 'Plastic',
'platform': 'rova', 'platform': 'rova',
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'plastic',
'unique_id': '8381BE13_pmd', 'unique_id': '8381BE13_pmd',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_pmd-state] # name: test_all_entities[sensor.8381be_13_plastic-state]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'timestamp', 'device_class': 'timestamp',
'friendly_name': '8381BE13_pmd', 'friendly_name': '8381BE 13 Plastic',
'icon': 'mdi:recycle',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.8381be13_pmd', 'entity_id': 'sensor.8381be_13_plastic',
'last_changed': <ANY>, 'last_changed': <ANY>,
'last_reported': <ANY>, 'last_reported': <ANY>,
'last_updated': <ANY>, 'last_updated': <ANY>,
'state': '2024-03-11T23:00:00+00:00', 'state': '2024-03-11T23:00:00+00:00',
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_restafval-entry] # name: test_all_entities[sensor.8381be_13_residual-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
}), }),
@ -155,8 +152,8 @@
'disabled_by': None, 'disabled_by': None,
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.8381be13_restafval', 'entity_id': 'sensor.8381be_13_residual',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -166,25 +163,24 @@
'options': dict({ 'options': dict({
}), }),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>, 'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': 'mdi:recycle', 'original_icon': None,
'original_name': '8381BE13_restafval', 'original_name': 'Residual',
'platform': 'rova', 'platform': 'rova',
'previous_unique_id': None, 'previous_unique_id': None,
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'residual',
'unique_id': '8381BE13_restafval', 'unique_id': '8381BE13_restafval',
'unit_of_measurement': None, 'unit_of_measurement': None,
}) })
# --- # ---
# name: test_all_entities[sensor.8381be13_restafval-state] # name: test_all_entities[sensor.8381be_13_residual-state]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'timestamp', 'device_class': 'timestamp',
'friendly_name': '8381BE13_restafval', 'friendly_name': '8381BE 13 Residual',
'icon': 'mdi:recycle',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.8381be13_restafval', 'entity_id': 'sensor.8381be_13_residual',
'last_changed': <ANY>, 'last_changed': <ANY>,
'last_reported': <ANY>, 'last_reported': <ANY>,
'last_updated': <ANY>, 'last_updated': <ANY>,