mirror of
				https://github.com/house-of-abbey/GarminHomeAssistant.git
				synced 2025-11-04 00:48:14 +00:00 
			
		
		
		
	Merge branch 'main' of https://github.com/house-of-abbey/GarminHomeAssistant
This commit is contained in:
		@@ -29,3 +29,4 @@
 | 
				
			|||||||
|   2.14  | Cautionary bug fix for the background service code where refactorisation spoilt some API level guard clauses. |
 | 
					|   2.14  | Cautionary bug fix for the background service code where refactorisation spoilt some API level guard clauses. |
 | 
				
			||||||
|   2.15  | Better support for templates by isolating erroneous returns and marking the menu item. |
 | 
					|   2.15  | Better support for templates by isolating erroneous returns and marking the menu item. |
 | 
				
			||||||
|   2.16  | Bug fix for lack of phone connection when starting the application. Includes new activity reporting features from [KPWhiver](https://github.com/KPWhiver) covering steps, heart rate, floors climbed and descended, and respiration rate. |
 | 
					|   2.16  | Bug fix for lack of phone connection when starting the application. Includes new activity reporting features from [KPWhiver](https://github.com/KPWhiver) covering steps, heart rate, floors climbed and descended, and respiration rate. |
 | 
				
			||||||
 | 
					|   2.17  | Bug fix for reporting activity metrics that are not found on some devices. |
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -150,20 +150,26 @@ class BackgroundServiceDelegate extends System.ServiceDelegate {
 | 
				
			|||||||
                "type"      => "sensor",
 | 
					                "type"      => "sensor",
 | 
				
			||||||
                "unique_id" => "heart_rate",
 | 
					                "unique_id" => "heart_rate",
 | 
				
			||||||
                "icon"      => "mdi:heart-pulse"
 | 
					                "icon"      => "mdi:heart-pulse"
 | 
				
			||||||
            },
 | 
					            }
 | 
				
			||||||
            {
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ActivityMonitor.Info has :floorsClimbed) {
 | 
				
			||||||
 | 
					            data.add({
 | 
				
			||||||
                "state"     => activityInfo.floorsClimbed == null ? "unknown" : activityInfo.floorsClimbed,
 | 
					                "state"     => activityInfo.floorsClimbed == null ? "unknown" : activityInfo.floorsClimbed,
 | 
				
			||||||
                "type"      => "sensor",
 | 
					                "type"      => "sensor",
 | 
				
			||||||
                "unique_id" => "floors_climbed_today",
 | 
					                "unique_id" => "floors_climbed_today",
 | 
				
			||||||
                "icon"      => "mdi:stairs-up"
 | 
					                "icon"      => "mdi:stairs-up"
 | 
				
			||||||
            },
 | 
					            });
 | 
				
			||||||
            {
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ActivityMonitor.Info has :floorsDescended) {
 | 
				
			||||||
 | 
					            data.add({
 | 
				
			||||||
                "state"     => activityInfo.floorsDescended == null ? "unknown" : activityInfo.floorsDescended,
 | 
					                "state"     => activityInfo.floorsDescended == null ? "unknown" : activityInfo.floorsDescended,
 | 
				
			||||||
                "type"      => "sensor",
 | 
					                "type"      => "sensor",
 | 
				
			||||||
                "unique_id" => "floors_descended_today",
 | 
					                "unique_id" => "floors_descended_today",
 | 
				
			||||||
                "icon"      => "mdi:stairs-down"
 | 
					                "icon"      => "mdi:stairs-down"
 | 
				
			||||||
            }
 | 
					            });
 | 
				
			||||||
        ];
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ActivityMonitor.Info has :respirationRate) {
 | 
					        if (ActivityMonitor.Info has :respirationRate) {
 | 
				
			||||||
            data.add({
 | 
					            data.add({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -208,7 +208,7 @@ class WebhookManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    function registerWebhookSensors() {
 | 
					    function registerWebhookSensors() {
 | 
				
			||||||
        var activityInfo = ActivityMonitor.getInfo();
 | 
					        var activityInfo = ActivityMonitor.getInfo();
 | 
				
			||||||
        var heartRate = Activity.getActivityInfo().currentHeartRate;
 | 
					        var heartRate    = Activity.getActivityInfo().currentHeartRate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var sensors = [
 | 
					        var sensors = [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -224,23 +224,23 @@ class WebhookManager {
 | 
				
			|||||||
                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "device_class"    => "battery_charging",
 | 
					                "device_class"        => "battery_charging",
 | 
				
			||||||
                "name"            => "Battery is Charging",
 | 
					                "name"                => "Battery is Charging",
 | 
				
			||||||
                "state"           => System.getSystemStats().charging,
 | 
					                "state"               => System.getSystemStats().charging,
 | 
				
			||||||
                "type"            => "binary_sensor",
 | 
					                "type"                => "binary_sensor",
 | 
				
			||||||
                "unique_id"       => "battery_is_charging",
 | 
					                "unique_id"           => "battery_is_charging",
 | 
				
			||||||
                "icon"            => System.getSystemStats().charging ? "mdi:battery-plus" : "mdi:battery-minus",
 | 
					                "icon"                => System.getSystemStats().charging ? "mdi:battery-plus" : "mdi:battery-minus",
 | 
				
			||||||
                "entity_category" => "diagnostic",
 | 
					                "entity_category"     => "diagnostic",
 | 
				
			||||||
                "disabled"        => !Settings.isSensorsLevelEnabled()
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "name"        => "Steps today",
 | 
					                "name"                => "Steps today",
 | 
				
			||||||
                "state"       => activityInfo.steps == null ? "unknown" : activityInfo.steps,
 | 
					                "state"               => activityInfo.steps == null ? "unknown" : activityInfo.steps,
 | 
				
			||||||
                "type"        => "sensor",
 | 
					                "type"                => "sensor",
 | 
				
			||||||
                "unique_id"   => "steps_today",
 | 
					                "unique_id"           => "steps_today",
 | 
				
			||||||
                "icon"        => "mdi:walk",
 | 
					                "icon"                => "mdi:walk",
 | 
				
			||||||
                "state_class" => "total",
 | 
					                "state_class"         => "total",
 | 
				
			||||||
                "disabled"    => !Settings.isSensorsLevelEnabled()
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "name"                => "Heart rate",
 | 
					                "name"                => "Heart rate",
 | 
				
			||||||
@@ -251,27 +251,32 @@ class WebhookManager {
 | 
				
			|||||||
                "unit_of_measurement" => "bpm",
 | 
					                "unit_of_measurement" => "bpm",
 | 
				
			||||||
                "state_class"         => "measurement",
 | 
					                "state_class"         => "measurement",
 | 
				
			||||||
                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "name"        => "Floors climbed today",
 | 
					 | 
				
			||||||
                "state"       => activityInfo.floorsClimbed == null ? "unknown" : activityInfo.floorsClimbed,
 | 
					 | 
				
			||||||
                "type"        => "sensor",
 | 
					 | 
				
			||||||
                "unique_id"   => "floors_climbed_today",
 | 
					 | 
				
			||||||
                "icon"        => "mdi:stairs-up",
 | 
					 | 
				
			||||||
                "state_class" => "total",
 | 
					 | 
				
			||||||
                "disabled"    => !Settings.isSensorsLevelEnabled()
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "name"        => "Floors descended today",
 | 
					 | 
				
			||||||
                "state"       => activityInfo.floorsDescended == null ? "unknown" : activityInfo.floorsDescended,
 | 
					 | 
				
			||||||
                "type"        => "sensor",
 | 
					 | 
				
			||||||
                "unique_id"   => "floors_descended_today",
 | 
					 | 
				
			||||||
                "icon"        => "mdi:stairs-down",
 | 
					 | 
				
			||||||
                "state_class" => "total",
 | 
					 | 
				
			||||||
                "disabled"    => !Settings.isSensorsLevelEnabled()
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ActivityMonitor.Info has :floorsClimbed) {
 | 
				
			||||||
 | 
					            sensors.add({
 | 
				
			||||||
 | 
					                "name"                => "Floors climbed today",
 | 
				
			||||||
 | 
					                "state"               => activityInfo.floorsClimbed == null ? "unknown" : activityInfo.floorsClimbed,
 | 
				
			||||||
 | 
					                "type"                => "sensor",
 | 
				
			||||||
 | 
					                "unique_id"           => "floors_climbed_today",
 | 
				
			||||||
 | 
					                "icon"                => "mdi:stairs-up",
 | 
				
			||||||
 | 
					                "state_class"         => "total",
 | 
				
			||||||
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ActivityMonitor.Info has :floorsDescended) {
 | 
				
			||||||
 | 
					            sensors.add({
 | 
				
			||||||
 | 
					                "name"                => "Floors descended today",
 | 
				
			||||||
 | 
					                "state"               => activityInfo.floorsDescended == null ? "unknown" : activityInfo.floorsDescended,
 | 
				
			||||||
 | 
					                "type"                => "sensor",
 | 
				
			||||||
 | 
					                "unique_id"           => "floors_descended_today",
 | 
				
			||||||
 | 
					                "icon"                => "mdi:stairs-down",
 | 
				
			||||||
 | 
					                "state_class"         => "total",
 | 
				
			||||||
 | 
					                "disabled"            => !Settings.isSensorsLevelEnabled()
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ActivityMonitor.Info has :respirationRate) {
 | 
					        if (ActivityMonitor.Info has :respirationRate) {
 | 
				
			||||||
            sensors.add({
 | 
					            sensors.add({
 | 
				
			||||||
@@ -287,14 +292,15 @@ class WebhookManager {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Activity has :getProfileInfo) {
 | 
					        if (Activity has :getProfileInfo) {
 | 
				
			||||||
            var activity = Activity.getProfileInfo().sport;
 | 
					            var activity     = Activity.getProfileInfo().sport;
 | 
				
			||||||
            var sub_activity = Activity.getProfileInfo().subSport;
 | 
					            var sub_activity = Activity.getProfileInfo().subSport;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ((Activity.getActivityInfo() != null) and
 | 
					            if ((Activity.getActivityInfo() != null) and
 | 
				
			||||||
                ((Activity.getActivityInfo().elapsedTime == null) or
 | 
					                ((Activity.getActivityInfo().elapsedTime == null) or
 | 
				
			||||||
                    (Activity.getActivityInfo().elapsedTime == 0))) {
 | 
					                    (Activity.getActivityInfo().elapsedTime == 0))) {
 | 
				
			||||||
                // Indicate no activity with -1, not part of Garmin's activity codes.
 | 
					                // Indicate no activity with -1, not part of Garmin's activity codes.
 | 
				
			||||||
                // https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity.html#Sport-module
 | 
					                // https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity.html#Sport-module
 | 
				
			||||||
                activity = -1;
 | 
					                activity     = -1;
 | 
				
			||||||
                sub_activity = -1;
 | 
					                sub_activity = -1;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            sensors.add({
 | 
					            sensors.add({
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user