Merge branch 'main' into 165-templating-content-for-all-types

This commit is contained in:
Philip Abbey
2024-08-25 19:44:58 +01:00
3 changed files with 29 additions and 15 deletions

View File

@ -30,4 +30,5 @@
| 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. | | 2.17 | Bug fix for reporting activity metrics that are not found on some devices. |
| 2.18 | A template to evaluate is now optionally allowed on both `group` and `toggle` menu items. The template to evaluate is non-optional on a `template` menu item. | | 2.18 | Bug fix for reporting activity metrics that might be `null` sometimes. This is unsimulatable situation, so this version is a change based on an informed guess. |
| 2.19 | A template to evaluate is now optionally allowed on both `group` and `toggle` menu items. The template to evaluate is non-optional on a `template` menu item. |

View File

@ -69,6 +69,8 @@ rem -x,--excludes <arg> Add annotations to the exclude list (deprecated)
rem -y,--private-key <arg> Private key to sign builds with rem -y,--private-key <arg> Private key to sign builds with
rem -z,--rez <arg> Resource files (deprecated) rem -z,--rez <arg> Resource files (deprecated)
title Exporting Garmin Home Assistant Application
rem Batch file's directory where the source code is rem Batch file's directory where the source code is
set SRC=%~dp0 set SRC=%~dp0
rem drop last character '\' rem drop last character '\'

View File

@ -79,13 +79,13 @@ class BackgroundServiceDelegate extends System.ServiceDelegate {
private function doUpdate(activity as Lang.Number or Null, sub_activity as Lang.Number or Null) { private function doUpdate(activity as Lang.Number or Null, sub_activity as Lang.Number or Null) {
// System.println("BackgroundServiceDelegate onTemporalEvent(): Making API call."); // System.println("BackgroundServiceDelegate onTemporalEvent(): Making API call.");
var position = Position.getInfo(); var position = Position.getInfo();
// System.println("BackgroundServiceDelegate onTemporalEvent(): gps: " + position.position.toDegrees()); // System.println("BackgroundServiceDelegate onTemporalEvent(): GPS : " + position.position.toDegrees());
// System.println("BackgroundServiceDelegate onTemporalEvent(): speed: " + position.speed); // System.println("BackgroundServiceDelegate onTemporalEvent(): Speed : " + position.speed);
// System.println("BackgroundServiceDelegate onTemporalEvent(): course: " + position.heading + "rad (" + (position.heading * 180 / Math.PI) + "°)"); // System.println("BackgroundServiceDelegate onTemporalEvent(): Course : " + position.heading + " radians (" + (position.heading * 180 / Math.PI) + "°)");
// System.println("BackgroundServiceDelegate onTemporalEvent(): altitude: " + position.altitude); // System.println("BackgroundServiceDelegate onTemporalEvent(): Altitude : " + position.altitude);
// System.println("BackgroundServiceDelegate onTemporalEvent(): battery: " + System.getSystemStats().battery); // System.println("BackgroundServiceDelegate onTemporalEvent(): Battery : " + System.getSystemStats().battery);
// System.println("BackgroundServiceDelegate onTemporalEvent(): charging: " + System.getSystemStats().charging); // System.println("BackgroundServiceDelegate onTemporalEvent(): Charging : " + System.getSystemStats().charging);
// System.println("BackgroundServiceDelegate onTemporalEvent(): activity: " + Activity.getProfileInfo().name); // System.println("BackgroundServiceDelegate onTemporalEvent(): Activity : " + Activity.getProfileInfo().name);
// Don't use Settings.* here as the object lasts < 30 secs and is recreated each time the background service is run // Don't use Settings.* here as the object lasts < 30 secs and is recreated each time the background service is run
@ -102,17 +102,28 @@ class BackgroundServiceDelegate extends System.ServiceDelegate {
accuracy = 10; accuracy = 10;
break; break;
} }
var data = { "gps_accuracy" => accuracy };
// Only add the non-null fields as all the values are optional in Home Assistant, and it avoid submitting fake values.
if (position.position != null) {
data.put("gps", position.position.toDegrees());
}
if (position.speed != null) {
data.put("speed", Math.round(position.speed));
}
if (position.heading != null) {
data.put("course", Math.round(position.heading * 180 / Math.PI));
}
if (position.altitude != null) {
data.put("altitude", Math.round(position.altitude));
}
// System.println("BackgroundServiceDelegate onTemporalEvent(): data = " + data.toString());
Communications.makeWebRequest( Communications.makeWebRequest(
(Properties.getValue("api_url") as Lang.String) + "/webhook/" + (Properties.getValue("webhook_id") as Lang.String), (Properties.getValue("api_url") as Lang.String) + "/webhook/" + (Properties.getValue("webhook_id") as Lang.String),
{ {
"type" => "update_location", "type" => "update_location",
"data" => { "data" => data,
"gps" => position.position.toDegrees(),
"gps_accuracy" => accuracy,
"speed" => Math.round(position.speed),
"course" => Math.round(position.heading * 180 / Math.PI),
"altitude" => Math.round(position.altitude),
}
}, },
{ {
:method => Communications.HTTP_REQUEST_METHOD_POST, :method => Communications.HTTP_REQUEST_METHOD_POST,