More improvements

This commit is contained in:
Ron Klinkien
2026-01-03 11:30:06 +01:00
parent 9edefcd828
commit 57fb7ecfcd
4 changed files with 100 additions and 8 deletions

View File

@@ -0,0 +1,60 @@
{
"entity": {
"sensor": {
"steps": {
"default": "mdi:shoe-print"
},
"daily_step_goal": {
"default": "mdi:flag-checkered"
},
"yesterday_steps": {
"default": "mdi:shoe-print"
},
"weekly_step_average": {
"default": "mdi:chart-line"
},
"floors_ascended": {
"default": "mdi:stairs-up"
},
"floors_descended": {
"default": "mdi:stairs-down"
},
"floors_goal": {
"default": "mdi:flag-checkered"
},
"total_calories": {
"default": "mdi:food"
},
"active_calories": {
"default": "mdi:fire"
},
"resting_heart_rate": {
"default": "mdi:heart-pulse"
},
"max_heart_rate": {
"default": "mdi:heart-flash"
},
"min_heart_rate": {
"default": "mdi:heart-minus"
},
"stress_level": {
"default": "mdi:head-snowflake"
},
"body_battery": {
"default": "mdi:battery-heart"
},
"sleep_duration": {
"default": "mdi:sleep"
},
"weight": {
"default": "mdi:scale-bathroom"
},
"bmi": {
"default": "mdi:human"
},
"device_last_synced": {
"default": "mdi:sync"
}
}
}
}

View File

@@ -28,8 +28,8 @@ rules:
dynamic-devices: exempt # Single cloud account, not device-based
discovery: exempt # Cloud service, not discoverable
diagnostics: done
exception-translations: todo
icon-translations: todo
exception-translations: done
icon-translations: done
stale-devices: exempt # Single device per config entry
# Platinum tier

View File

@@ -48,12 +48,18 @@ def _get_coordinator(hass: HomeAssistant):
"""Get the first available coordinator from config entries."""
entries = hass.config_entries.async_entries(DOMAIN)
if not entries:
raise HomeAssistantError("No Garmin Connect integration configured")
raise HomeAssistantError(
translation_domain=DOMAIN,
translation_key="no_integration_configured",
)
# Use the first config entry's coordinator
entry = entries[0]
if not hasattr(entry, "runtime_data") or entry.runtime_data is None:
raise HomeAssistantError("Garmin Connect integration not fully loaded")
raise HomeAssistantError(
translation_domain=DOMAIN,
translation_key="integration_not_loaded",
)
return entry.runtime_data
@@ -81,7 +87,8 @@ async def async_setup_services(hass: HomeAssistant) -> None:
if not await coordinator.async_login():
raise HomeAssistantError(
"Failed to login to Garmin Connect, unable to update"
translation_domain=DOMAIN,
translation_key="login_failed",
)
try:
@@ -103,7 +110,9 @@ async def async_setup_services(hass: HomeAssistant) -> None:
)
except Exception as err:
raise HomeAssistantError(
f"Failed to add body composition: {err}"
translation_domain=DOMAIN,
translation_key="add_body_composition_failed",
translation_placeholders={"error": str(err)},
) from err
async def handle_add_blood_pressure(call: ServiceCall) -> None:
@@ -118,7 +127,8 @@ async def async_setup_services(hass: HomeAssistant) -> None:
if not await coordinator.async_login():
raise HomeAssistantError(
"Failed to login to Garmin Connect, unable to update"
translation_domain=DOMAIN,
translation_key="login_failed",
)
try:
@@ -132,7 +142,9 @@ async def async_setup_services(hass: HomeAssistant) -> None:
)
except Exception as err:
raise HomeAssistantError(
f"Failed to add blood pressure: {err}"
translation_domain=DOMAIN,
translation_key="add_blood_pressure_failed",
translation_placeholders={"error": str(err)},
) from err
# Register services

View File

@@ -33,5 +33,25 @@
"already_configured": "[%key:common::config_flow::abort::already_configured_account%]",
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
}
},
"exceptions": {
"login_failed": {
"message": "Failed to login to Garmin Connect, unable to update"
},
"add_body_composition_failed": {
"message": "Failed to add body composition: {error}"
},
"add_blood_pressure_failed": {
"message": "Failed to add blood pressure: {error}"
},
"set_active_gear_failed": {
"message": "Failed to set active gear: {error}"
},
"no_integration_configured": {
"message": "No Garmin Connect integration configured"
},
"integration_not_loaded": {
"message": "Garmin Connect integration not fully loaded"
}
}
}