Compare commits

...

5 Commits

Author SHA1 Message Date
Ron Klinkien
06ee9e15b7 Bumped version 2025-01-21 08:12:39 +00:00
Ron Klinkien
164fc53b6d Documented services examples 2025-01-21 08:11:52 +00:00
Ron
2eeb42b4da Merge pull request #236 from cyberjunky/dependabot/pip/ruff-0.9.2
Bump ruff from 0.7.2 to 0.9.2
2025-01-20 19:11:01 +01:00
Ron Klinkien
0cb06c7cc4 Fixed selection of 10 last badges 2025-01-20 18:01:57 +00:00
dependabot[bot]
99fe655919 Bump ruff from 0.7.2 to 0.9.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.2 to 0.9.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.2...0.9.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 11:47:00 +00:00
6 changed files with 86 additions and 26 deletions

View File

@@ -89,6 +89,7 @@ Gear Sensors
Disabled by default:
```text
Badges
Consumed KiloCalories
Remaining KiloCalories
Net Remaining KiloCalories
@@ -151,20 +152,20 @@ description: ""
trigger:
- platform: state
entity_id:
- sensor.my_weight
- sensor.weight
condition:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.my_weight
entity_id: sensor.weight
above: 75
- condition: numeric_state
entity_id: sensor.my_weight
entity_id: sensor.weight
below: 88
action:
- service: garmin_connect.add_body_composition
data:
entity_id: sensor.garmin_connect_weight
entity_id: sensor.weight
weight: "{{trigger.to_state.state}}"
timestamp: "{{ as_timestamp(now()) | timestamp_local}}"
bmi: >-
@@ -172,6 +173,46 @@ action:
}}
mode: single
```
### Examples on how to test services from HA GUI
#### Add Body Composition
```
action: garmin_connect.add_body_composition
data:
entity_id: sensor.weight
weight: 87
bmi: 25.5
bone_mass: 4.8
...
```
NOTE: You need to enable Weight entity
#### Set Active Gear
```
action: garmin_connect.set_active_gear
data:
entity_id: sensor.adidas
activity_type: running
setting: set as default
```
#### Add Blood Pressure
```
action: garmin_connect.add_blood_pressure
data:
entity_id: sensor.min_heart_rate
systolic: 120
diastolic: 80
pulse: 60
timestamp: 2025-1-21T07:34:00.000Z
notes: Measured with Beurer BC54
```
## Debugging
Add the relevant lines below to the `configuration.yaml`:

View File

@@ -23,6 +23,19 @@ DAY_TO_NUMBER = {
"Su": 7,
}
LEVEL_POINTS = {
1: 0,
2: 20,
3: 60,
4: 140,
5: 300,
6: 620,
7: 1260,
8: 2540,
9: 5100,
10: 10220,
}
GARMIN_ENTITY_LIST = {
"totalSteps": ["Total Steps", "steps", "mdi:walk", None, SensorStateClass.TOTAL, True],
"dailyStepGoal": ["Daily Step Goal", "steps", "mdi:walk", None, SensorStateClass.TOTAL, True],

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.24"],
"version": "0.2.27"
"version": "0.2.28"
}

View File

@@ -241,7 +241,9 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity):
# Only show the last 10 badges for performance reasons
if self._type == "badges":
attributes["badges"] = self.coordinator.data[self._type][-10:]
badges = self.coordinator.data.get(self._type, [])
sorted_badges = sorted(badges, key=lambda x: x['badgeEarnedDate'])
attributes["badges"] = sorted_badges[-10:]
if self._type == "nextAlarm":
attributes["next_alarms"] = self.coordinator.data[self._type]
@@ -289,7 +291,8 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity):
"""Check for login."""
if not await self.coordinator.async_login():
raise IntegrationError("Failed to login to Garmin Connect, unable to update")
raise IntegrationError(
"Failed to login to Garmin Connect, unable to update")
"""Record a weigh in/body composition."""
await self.hass.async_add_executor_job(
@@ -319,7 +322,8 @@ class GarminConnectSensor(CoordinatorEntity, SensorEntity):
"""Check for login."""
if not await self.coordinator.async_login():
raise IntegrationError("Failed to login to Garmin Connect, unable to update")
raise IntegrationError(
"Failed to login to Garmin Connect, unable to update")
"""Record a blood pressure measurement."""
await self.hass.async_add_executor_job(
@@ -381,7 +385,8 @@ class GarminConnectGearSensor(CoordinatorEntity, SensorEntity):
stats = self._stats()
gear_defaults = self._gear_defaults()
activity_types = self.coordinator.data["activity_types"]
default_for_activity = self._activity_names_for_gear_defaults(gear_defaults, activity_types)
default_for_activity = self._activity_names_for_gear_defaults(
gear_defaults, activity_types)
if not self.coordinator.data or not gear or not stats:
return {}
@@ -458,7 +463,8 @@ class GarminConnectGearSensor(CoordinatorEntity, SensorEntity):
"""Check for login."""
if not await self.coordinator.async_login():
raise IntegrationError("Failed to login to Garmin Connect, unable to update")
raise IntegrationError(
"Failed to login to Garmin Connect, unable to update")
"""Update Garmin Gear settings."""
activity_type_id = next(

View File

@@ -2,6 +2,14 @@ set_active_gear:
name: Set active gear for activity
description: Set active gear for activity.
fields:
entity_id:
name: entity
description: entity
required: true
selector:
entity:
integration: garmin_connect
device_class: garmin_gear
activity_type:
required: true
name: activity type
@@ -28,6 +36,11 @@ set_active_gear:
- set this as default, unset others
- set as default
- unset default
add_body_composition:
name: Adds updated body composition metrics
description: Adds updated body composition metrics.
fields:
entity_id:
name: entity
description: entity
@@ -35,12 +48,7 @@ set_active_gear:
selector:
entity:
integration: garmin_connect
device_class: garmin_gear
add_body_composition:
name: Adds updated body composition metrics
description: Adds updated body composition metrics.
fields:
device_class: weight
weight:
required: true
name: Weight
@@ -106,14 +114,6 @@ add_body_composition:
name: Visceral Fat Rating
description: Visceral Fat Rating
example: 10
entity_id:
name: entity
description: entity
required: true
selector:
entity:
integration: garmin_connect
device_class: weight
add_blood_pressure:
name: Adds updated blood pressure metrics
@@ -126,7 +126,7 @@ add_blood_pressure:
selector:
entity:
integration: garmin_connect
device_class: weight
device_class: min_heart_rate
systolic:
required: true
name: Systolic

View File

@@ -4,5 +4,5 @@ isort==5.13.2
pre-commit==4.0.1
pre-commit-hooks==5.0.0
pyupgrade==3.19.1
ruff==0.7.2
ruff==0.9.2
vulture==2.14