From 003a4c57ef31f6982f4d0f2e5fbfafdb2dff2d5e Mon Sep 17 00:00:00 2001 From: kruemelro Date: Tue, 2 Apr 2024 11:24:46 +0200 Subject: [PATCH 01/10] changed get_body_composition changed get_body_composition to load data of past week not only today --- custom_components/garmin_connect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index 26183e0..d063a1e 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -120,7 +120,7 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): _LOGGER.debug(f"Summary data: {summary}") body = await self.hass.async_add_executor_job( - self._api.get_body_composition, date.today().isoformat() + self._api.get_body_composition, (date.today()-timedelta(days=7)).isoformat(), date.today().isoformat()) ) _LOGGER.debug(f"Body data: {body}") From 83ceb35666e6f9b4b76d6711240c2be96d88bfac Mon Sep 17 00:00:00 2001 From: kruemelro Date: Tue, 2 Apr 2024 11:26:08 +0200 Subject: [PATCH 02/10] Update garminconnect to 0.2.15 --- custom_components/garmin_connect/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/garmin_connect/manifest.json b/custom_components/garmin_connect/manifest.json index 7733882..4073328 100644 --- a/custom_components/garmin_connect/manifest.json +++ b/custom_components/garmin_connect/manifest.json @@ -7,6 +7,6 @@ "documentation": "https://github.com/cyberjunky/home-assistant-garmin_connect", "iot_class": "cloud_polling", "issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues", - "requirements": ["garminconnect==0.2.12", "tzlocal"], + "requirements": ["garminconnect==0.2.15", "tzlocal"], "version": "0.2.19" } From 3bf77a9056e710d7ac8cc3d9373dac0f49b8df18 Mon Sep 17 00:00:00 2001 From: kruemelro Date: Tue, 2 Apr 2024 11:40:38 +0200 Subject: [PATCH 03/10] Update manifest.json --- custom_components/garmin_connect/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/garmin_connect/manifest.json b/custom_components/garmin_connect/manifest.json index 4073328..0d5a918 100644 --- a/custom_components/garmin_connect/manifest.json +++ b/custom_components/garmin_connect/manifest.json @@ -7,6 +7,6 @@ "documentation": "https://github.com/cyberjunky/home-assistant-garmin_connect", "iot_class": "cloud_polling", "issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues", - "requirements": ["garminconnect==0.2.15", "tzlocal"], - "version": "0.2.19" + "requirements": ["garminconnect==0.2.12", "tzlocal"], + "version": "0.2.20b1" } From 9136466115e0c99a619dad98406cb053b132bf94 Mon Sep 17 00:00:00 2001 From: kruemelro Date: Tue, 2 Apr 2024 11:49:48 +0200 Subject: [PATCH 04/10] fixed typo --- custom_components/garmin_connect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index d063a1e..f624aee 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -120,7 +120,7 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): _LOGGER.debug(f"Summary data: {summary}") body = await self.hass.async_add_executor_job( - self._api.get_body_composition, (date.today()-timedelta(days=7)).isoformat(), date.today().isoformat()) + self._api.get_body_composition, (date.today()-timedelta(days=7)).isoformat(), date.today().isoformat() ) _LOGGER.debug(f"Body data: {body}") From 62377b5d5543b28d71530607d81668ba7652a658 Mon Sep 17 00:00:00 2001 From: kruemelro Date: Tue, 2 Apr 2024 12:16:16 +0200 Subject: [PATCH 05/10] changed body return values instead of the total average, take the first measurement --- custom_components/garmin_connect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index f624aee..05796f8 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -181,7 +181,7 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): return { **summary, - **body["totalAverage"], + **body["dateWeightList"][0], "nextAlarm": alarms, "gear": gear, "gear_stats": gear_stats, From 09e80e4255cdebf127d7a88fc39a79c73be0ba9d Mon Sep 17 00:00:00 2001 From: kruemelro Date: Wed, 3 Apr 2024 08:04:11 +0200 Subject: [PATCH 06/10] Update manifest.json --- custom_components/garmin_connect/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/garmin_connect/manifest.json b/custom_components/garmin_connect/manifest.json index 0d5a918..7733882 100644 --- a/custom_components/garmin_connect/manifest.json +++ b/custom_components/garmin_connect/manifest.json @@ -8,5 +8,5 @@ "iot_class": "cloud_polling", "issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues", "requirements": ["garminconnect==0.2.12", "tzlocal"], - "version": "0.2.20b1" + "version": "0.2.19" } From 47096eabebaa921cf5011f83468c50250ac997f8 Mon Sep 17 00:00:00 2001 From: kruemelro Date: Fri, 5 Apr 2024 09:43:52 +0200 Subject: [PATCH 07/10] added blood_pressure function --- custom_components/garmin_connect/__init__.py | 15 +++++++++++ custom_components/garmin_connect/sensor.py | 15 +++++++++++ .../garmin_connect/services.yaml | 25 +++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index 05796f8..580f5d1 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -257,3 +257,18 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): service_data.data.get("visceral_fat_rating", None), service_data.data.get("bmi", None) ) + + async def add_blood_pressure(self, entity, service_data): + """Record a blood pressure measurement""" + if not await self.async_login(): + raise IntegrationError( + "Failed to login to Garmin Connect, unable to update" + ) + + await self.hass.async_add_executor_job( + self._api.set_blood_pressure, + service_data.data.get("systolic"), + service_data.data.get("diastolic"), + service_data.data.get("pulse"), + service_data.data.get("note", None) + ) diff --git a/custom_components/garmin_connect/sensor.py b/custom_components/garmin_connect/sensor.py index 81ce3b5..a8e9e4c 100644 --- a/custom_components/garmin_connect/sensor.py +++ b/custom_components/garmin_connect/sensor.py @@ -108,6 +108,10 @@ async def async_setup_entry( "add_body_composition", BODY_COMPOSITION_SERVICE_SCHEMA, coordinator.add_body_composition ) + platform.async_register_entity_service( + "add_blood_pressure", BLOOD_PRESSURE_SERVICE_SCHEMA, coordinator.add_blood_pressure + ) + ENTITY_SERVICE_SCHEMA = vol.Schema( { vol.Required(ATTR_ENTITY_ID): str, @@ -135,6 +139,17 @@ BODY_COMPOSITION_SERVICE_SCHEMA = vol.Schema( } ) +BLOOD_PRESSURE_SERVICE_SCHEMA = vol.Schema( + { + vol.Required(ATTR_ENTITY_ID): str, + vol.Required("systolic"): float, + vol.Required("diastolic"): float, + vol.Required("pulse"): float, + vol.Optional("note"): str + + } +) + class GarminConnectSensor(CoordinatorEntity, SensorEntity): """Representation of a Garmin Connect Sensor.""" diff --git a/custom_components/garmin_connect/services.yaml b/custom_components/garmin_connect/services.yaml index d82e9c2..ca9a4e1 100644 --- a/custom_components/garmin_connect/services.yaml +++ b/custom_components/garmin_connect/services.yaml @@ -114,3 +114,28 @@ add_body_composition: entity: integration: garmin_connect device_class: weight + +add_blood_pressure: + name: Adds updated blood pressure metrics + description: Adds updated blood pressure metrics. + fields: + systolic: + required: true + name: Systolic + description: Systolic value + example: 120 + diastolic: + required: true + name: Diastolic + description: Diastolic value + example: 80 + pulse: + required: true + name: Pulse + description: Pulse + example: 60 + notes: + required: false + name: Notes + description: Add a note to the measurement + example: "Measured with Beurer BC54" \ No newline at end of file From e4331ecf8c91f54060c03c728c6717c504de87fa Mon Sep 17 00:00:00 2001 From: kruemelro Date: Fri, 5 Apr 2024 10:05:43 +0200 Subject: [PATCH 08/10] added missing entity_id --- custom_components/garmin_connect/services.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/custom_components/garmin_connect/services.yaml b/custom_components/garmin_connect/services.yaml index ca9a4e1..0082446 100644 --- a/custom_components/garmin_connect/services.yaml +++ b/custom_components/garmin_connect/services.yaml @@ -119,6 +119,14 @@ add_blood_pressure: name: Adds updated blood pressure metrics description: Adds updated blood pressure metrics. fields: + entity_id: + name: entity + description: entity + required: true + selector: + entity: + integration: garmin_connect + device_class: weight systolic: required: true name: Systolic From 3d5200581d05ac52990ff861a0195813e0356b9c Mon Sep 17 00:00:00 2001 From: kruemelro Date: Fri, 5 Apr 2024 10:17:20 +0200 Subject: [PATCH 09/10] try and error ;-) --- custom_components/garmin_connect/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index 580f5d1..c51d674 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -267,8 +267,8 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): await self.hass.async_add_executor_job( self._api.set_blood_pressure, - service_data.data.get("systolic"), - service_data.data.get("diastolic"), - service_data.data.get("pulse"), - service_data.data.get("note", None) + service_data.data.get('systolic'), + service_data.data.get('diastolic'), + service_data.data.get('pulse'), + service_data.data.get('note', None) ) From 14c669423989f984a7d0102a47bf1af5055873dc Mon Sep 17 00:00:00 2001 From: kruemelro Date: Mon, 8 Apr 2024 08:57:53 +0200 Subject: [PATCH 10/10] changed value datatype to int --- custom_components/garmin_connect/__init__.py | 1 + custom_components/garmin_connect/sensor.py | 6 +++--- custom_components/garmin_connect/services.yaml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/custom_components/garmin_connect/__init__.py b/custom_components/garmin_connect/__init__.py index c51d674..b4d79f1 100644 --- a/custom_components/garmin_connect/__init__.py +++ b/custom_components/garmin_connect/__init__.py @@ -260,6 +260,7 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator): async def add_blood_pressure(self, entity, service_data): """Record a blood pressure measurement""" + if not await self.async_login(): raise IntegrationError( "Failed to login to Garmin Connect, unable to update" diff --git a/custom_components/garmin_connect/sensor.py b/custom_components/garmin_connect/sensor.py index a8e9e4c..ec5ea95 100644 --- a/custom_components/garmin_connect/sensor.py +++ b/custom_components/garmin_connect/sensor.py @@ -142,9 +142,9 @@ BODY_COMPOSITION_SERVICE_SCHEMA = vol.Schema( BLOOD_PRESSURE_SERVICE_SCHEMA = vol.Schema( { vol.Required(ATTR_ENTITY_ID): str, - vol.Required("systolic"): float, - vol.Required("diastolic"): float, - vol.Required("pulse"): float, + vol.Required("systolic"): int, + vol.Required("diastolic"): int, + vol.Required("pulse"): int, vol.Optional("note"): str } diff --git a/custom_components/garmin_connect/services.yaml b/custom_components/garmin_connect/services.yaml index 0082446..1fe30b6 100644 --- a/custom_components/garmin_connect/services.yaml +++ b/custom_components/garmin_connect/services.yaml @@ -146,4 +146,4 @@ add_blood_pressure: required: false name: Notes description: Add a note to the measurement - example: "Measured with Beurer BC54" \ No newline at end of file + example: 'Measured with Beurer BC54' \ No newline at end of file