mirror of
https://github.com/cyberjunky/home-assistant-garmin_connect.git
synced 2026-01-07 20:13:57 -05:00
More improvements
This commit is contained in:
60
custom_components/garmin_connect/icons.json
Normal file
60
custom_components/garmin_connect/icons.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user