From 9198f469c20997176e44275a1f94e0ef823cbf83 Mon Sep 17 00:00:00 2001 From: Rony Lutsky <3050627+ronlut@users.noreply.github.com> Date: Thu, 11 Jan 2024 00:01:39 +0200 Subject: [PATCH 1/2] use username for name and entity_id --- custom_components/garmin_connect/sensor.py | 46 +++++++++++++--------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/custom_components/garmin_connect/sensor.py b/custom_components/garmin_connect/sensor.py index cf4b59d..228f6f7 100644 --- a/custom_components/garmin_connect/sensor.py +++ b/custom_components/garmin_connect/sensor.py @@ -9,6 +9,7 @@ import datetime from tzlocal import get_localzone from homeassistant.components.sensor import ( + ENTITY_ID_FORMAT, SensorEntity, SensorDeviceClass, SensorStateClass, @@ -19,10 +20,10 @@ from homeassistant.const import ( ATTR_ENTITY_ID, CONF_ID, ) -from homeassistant.const import ATTR_ATTRIBUTION, CONF_ID +from homeassistant.const import ATTR_ATTRIBUTION, CONF_ID, CONF_USERNAME from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_platform -from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.entity import DeviceInfo, generate_entity_id from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, DataUpdateCoordinator, @@ -48,14 +49,14 @@ async def async_setup_entry( coordinator: DataUpdateCoordinator = hass.data[GARMIN_DOMAIN][entry.entry_id][ DATA_COORDINATOR ] - unique_id = entry.data[CONF_ID] + device_id = entry.data[CONF_ID] + user_identifier = entry.data[CONF_USERNAME].split("@")[0] entities = [] for ( sensor_type, (name, unit, icon, device_class, state_class, enabled_by_default), ) in GARMIN_ENTITY_LIST.items(): - _LOGGER.debug( "Registering entity: %s, %s, %s, %s, %s, %s, %s", sensor_type, @@ -69,7 +70,8 @@ async def async_setup_entry( entities.append( GarminConnectSensor( coordinator, - unique_id, + device_id, + user_identifier, sensor_type, name, unit, @@ -84,7 +86,8 @@ async def async_setup_entry( entities.append( GarminConnectGearSensor( coordinator, - unique_id, + device_id, + user_identifier, gear_item[GEAR.UUID], gear_item["gearTypeName"], gear_item["displayName"], @@ -137,9 +140,10 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity): def __init__( self, coordinator, - unique_id, + device_id, + user_identifier, sensor_type, - name, + sensor_name, unit, icon, device_class, @@ -149,17 +153,22 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity): """Initialize a Garmin Connect sensor.""" super().__init__(coordinator) - self._unique_id = unique_id + self._device_id = device_id self._type = sensor_type self._device_class = device_class self._state_class = state_class self._enabled_default = enabled_default - self._attr_name = name + self._attr_name = f"{user_identifier} {sensor_name}" + self.entity_id = generate_entity_id( + ENTITY_ID_FORMAT, + f"{GARMIN_DOMAIN} {self._attr_name}", + hass=coordinator.hass, + ) self._attr_device_class = self._device_class self._attr_icon = icon self._attr_native_unit_of_measurement = unit - self._attr_unique_id = f"{self._unique_id}_{self._type}" + self._attr_unique_id = f"{self._device_id}_{self._type}" self._attr_state_class = state_class @property @@ -223,7 +232,7 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity): def device_info(self) -> DeviceInfo: """Return device information.""" return { - "identifiers": {(GARMIN_DOMAIN, self._unique_id)}, + "identifiers": {(GARMIN_DOMAIN, self._device_id)}, "name": "Garmin Connect", "manufacturer": "Garmin Connect", } @@ -249,27 +258,28 @@ class GarminConnectGearSensor(CoordinatorEntity, SensorEntity): def __init__( self, coordinator, - unique_id, + device_id, + user_identifier, uuid, sensor_type, - name, + sensor_name, device_class: None, enabled_default: bool = True, ): """Initialize a Garmin Connect sensor.""" super().__init__(coordinator) - self._unique_id = unique_id + self._device_id = device_id self._type = sensor_type self._uuid = uuid self._device_class = device_class self._enabled_default = enabled_default - self._attr_name = name + self._attr_name = f"{user_identifier} {sensor_name}" self._attr_device_class = self._device_class self._attr_icon = GEAR_ICONS[sensor_type] self._attr_native_unit_of_measurement = UnitOfLength.KILOMETERS - self._attr_unique_id = f"{self._unique_id}_{self._uuid}" + self._attr_unique_id = f"{self._device_id}_{self._uuid}" self._attr_state_class = SensorStateClass.TOTAL self._attr_device_class = "garmin_gear" @@ -337,7 +347,7 @@ class GarminConnectGearSensor(CoordinatorEntity, SensorEntity): def device_info(self) -> DeviceInfo: """Return device information.""" return { - "identifiers": {(GARMIN_DOMAIN, self._unique_id)}, + "identifiers": {(GARMIN_DOMAIN, self._device_id)}, "name": "Garmin Connect", "manufacturer": "Garmin Connect", } From 7ad8d099e10c0f0a0a36ea997a217ae2a363ce31 Mon Sep 17 00:00:00 2001 From: Rony Lutsky <3050627+ronlut@users.noreply.github.com> Date: Thu, 11 Jan 2024 00:02:42 +0200 Subject: [PATCH 2/2] unique_id with domain --- custom_components/garmin_connect/sensor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/garmin_connect/sensor.py b/custom_components/garmin_connect/sensor.py index 228f6f7..36d01c2 100644 --- a/custom_components/garmin_connect/sensor.py +++ b/custom_components/garmin_connect/sensor.py @@ -168,7 +168,7 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity): self._attr_device_class = self._device_class self._attr_icon = icon self._attr_native_unit_of_measurement = unit - self._attr_unique_id = f"{self._device_id}_{self._type}" + self._attr_unique_id = f"{GARMIN_DOMAIN}_{self._device_id}_{self._type}" self._attr_state_class = state_class @property @@ -279,7 +279,7 @@ class GarminConnectGearSensor(CoordinatorEntity, SensorEntity): self._attr_device_class = self._device_class self._attr_icon = GEAR_ICONS[sensor_type] self._attr_native_unit_of_measurement = UnitOfLength.KILOMETERS - self._attr_unique_id = f"{self._device_id}_{self._uuid}" + self._attr_unique_id = f"{GARMIN_DOMAIN}_{self._device_id}_{self._uuid}" self._attr_state_class = SensorStateClass.TOTAL self._attr_device_class = "garmin_gear"