Added Age sensors

Only store last 10 activities in attribute
This commit is contained in:
Ron Klinkien
2025-04-18 18:04:20 +00:00
parent 4a9901958e
commit a179131a94
5 changed files with 53 additions and 3 deletions

View File

@@ -124,6 +124,10 @@ Visceral Fat
Metabolic Age
Last Activities
Last Activity
Chronological Age
Fitness Age
Achievable Fitness Age
Previous Fitness Age
```
## Screenshots

View File

@@ -233,6 +233,15 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator):
else:
_LOGGER.debug("No HRV data found")
# Fitness age data
fitnessage_data = await self.hass.async_add_executor_job(
self.api.get_fitnessage_data, today.isoformat()
)
if fitnessage_data:
_LOGGER.debug("Fitness age data fetched: %s", fitnessage_data)
else:
_LOGGER.debug("No fitness age data found")
except GarminConnectAuthenticationError as err:
_LOGGER.error(
"Authentication error occurred during update: %s", err.response.text)
@@ -333,6 +342,7 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator):
"sleepScore": sleep_score,
"sleepTimeSeconds": sleep_time_seconds,
"hrvStatus": hrv_status,
**fitnessage_data,
}

View File

@@ -657,6 +657,38 @@ GARMIN_ENTITY_LIST = {
None,
True,
],
"chronologicalAge": [
"Chronological Age",
UnitOfTime.YEARS,
"mdi:calendar-heart",
None,
SensorStateClass.MEASUREMENT,
True,
],
"fitnessAge": [
"Fitness Age",
UnitOfTime.YEARS,
"mdi:calendar-heart",
None,
SensorStateClass.MEASUREMENT,
True,
],
"achievableFitnessAge": [
"Achievable Fitness Age",
UnitOfTime.YEARS,
"mdi:calendar-heart",
None,
SensorStateClass.MEASUREMENT,
True,
],
"previousFitnessAge": [
"Previous Fitness Age",
UnitOfTime.YEARS,
"mdi:calendar-heart",
None,
SensorStateClass.MEASUREMENT,
True,
],
}
GEAR_ICONS = {

View File

@@ -8,5 +8,5 @@
"iot_class": "cloud_polling",
"issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues",
"requirements": ["garminconnect>=0.2.26"],
"version": "0.2.31-beta-01"
"version": "0.2.31-beta-02"
}

View File

@@ -239,13 +239,17 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity):
"last_synced": self.coordinator.data["lastSyncTimestampGMT"],
}
# Only keep the last 10 activities for performance reasons
if self._type == "lastActivities":
attributes["last_activities"] = self.coordinator.data[self._type]
activities = self.coordinator.data.get(self._type, [])
sorted_activities = sorted(
activities, key=lambda x: x["activityId"])
attributes["last_activities"] = sorted_activities[-10:]
if self._type == "lastActivity":
attributes = {**attributes, **self.coordinator.data[self._type]}
# Only show the last 10 badges for performance reasons
# Only keep the last 10 badges for performance reasons
if self._type == "badges":
badges = self.coordinator.data.get(self._type, [])
sorted_badges = sorted(badges, key=lambda x: x["badgeEarnedDate"])