Compare commits

...

11 Commits

Author SHA1 Message Date
Joseph Abbey
3e3f60c47c Added support for 4 new devices (#360)
Added support for new devices: `d2mach2pro`, `fr170`, `fr170m`, `fr70`.
2026-06-13 12:27:20 +01:00
Philip Abbey
7c4a23866c Added support for 4 new devices 2026-06-13 12:25:57 +01:00
Philip Abbey
dbd2b4a568 Amended documentation about special characters in the glance view
And a couple of code tidy items too.
2026-05-15 09:41:44 +01:00
Philip Abbey
ed89d1da74 Revise bug report template for clarity
Updated bug report template to clarify issue attribution and wording.

Signed-off-by: Philip Abbey <philipabbey@users.noreply.github.com>
2026-04-12 12:56:52 +01:00
Philip Abbey
799288f36f Added new review to Etiquette documentation. 2026-04-02 16:41:50 +01:00
Philip Abbey
2a68fcc95d Send last known location in Background Service (#350)
Changes to location sending and accuracy.
2026-03-16 19:56:39 +00:00
Joseph Abbey
b781c054d2 Merge branch 'main' into 348-send-gps-location-with-last-known-quality 2026-03-16 18:33:36 +00:00
Philip Abbey
cc32abab28 Amended documentation to cover Glance view crash 2026-03-13 10:34:47 +00:00
Philip Abbey
c8953021e3 Commentry and documentation 2026-03-11 18:08:50 +00:00
Philip Abbey
5ddcc14c54 Update BackgroundServiceDelegate.mc
Added comment about reasoning for accuracy.
2026-03-11 14:39:36 +00:00
Philip Abbey
6d0f449904 Update BackgroundServiceDelegate.mc
Amended accuracy for QUALITY_LAST_KNOWN.
2026-03-11 14:34:50 +00:00
15 changed files with 225 additions and 182 deletions

View File

@@ -2,13 +2,19 @@
name: Bug report name: Bug report
about: Create a report to help us improve about: Create a report to help us improve
title: '' title: ''
labels: bug labels: question
assignees: '' assignees: ''
--- ---
**Describe the bug** The majority of bug reports submitted are solved without changes to the Garmin application's code. This means that reporters are too often keen to attribute their issue to a problem with the application instead of:
A clear and concise description of what the bug is. 1. Their own lack of reading documentation
2. Their own infrastructure
Therefore in the first place make your report as if it were a **question** in order to establish if the authors agree there is really a bug!
**Describe your issue**
A clear and concise description of what the issue is.
**IMPORTANT!** **IMPORTANT!**
I have: I have:
@@ -17,8 +23,9 @@ I have:
- [ ] Checked that my JSON Syntax is correct ([options 2, 3, or 4](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file) or otherwise) - [ ] Checked that my JSON Syntax is correct ([options 2, 3, or 4](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file) or otherwise)
- [ ] Checked that my JSON follows the schema ([options 2, 3, or 4](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file)) - [ ] Checked that my JSON follows the schema ([options 2, 3, or 4](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file))
- [ ] Used the online editor to check my JSON against HomeAssistant ([option 1](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file)) - [ ] Used the online editor to check my JSON against HomeAssistant ([option 1](https://github.com/house-of-abbey/GarminHomeAssistant#editing-the-json-file))
- [ ] Checked the [Docs](https://github.com/house-of-abbey/GarminHomeAssistant) - [ ] Read the [Documentation](https://github.com/house-of-abbey/GarminHomeAssistant)
- [ ] Checked the [Troubleshooting Guide](https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/TroubleShooting.md) - [ ] Run through the [Troubleshooting Guide](https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/TroubleShooting.md)
- [ ] Checked the [Known Issues](https://github.com/house-of-abbey/GarminHomeAssistant?tab=readme-ov-file#known-issues), i.e. the problems beyond the control of this Garmin application and must therefore be tolerated!
**To Reproduce** **To Reproduce**
Steps to reproduce the behavior: Steps to reproduce the behavior:

View File

@@ -33,11 +33,13 @@ From version 2.6 the application includes reporting your location. The location
You get whatever your device provides at the moment, i.e. at the accuracy the device currently provides. If your watch is not calibrated you get poor data. It might mean that you get more accurate location data when you are in a location tracking activity (i.e. not swimming pool lengths). The device [indicates an accuracy](https://developer.garmin.com/connect-iq/api-docs/Toybox/Position.html#Quality-module) in units of: You get whatever your device provides at the moment, i.e. at the accuracy the device currently provides. If your watch is not calibrated you get poor data. It might mean that you get more accurate location data when you are in a location tracking activity (i.e. not swimming pool lengths). The device [indicates an accuracy](https://developer.garmin.com/connect-iq/api-docs/Toybox/Position.html#Quality-module) in units of:
- `Position.QUALITY_NOT_AVAILABLE` - No update provided - `Position.QUALITY_NOT_AVAILABLE` - No update provided
- `Position.QUALITY_LAST_KNOWN` - No update provided - `Position.QUALITY_LAST_KNOWN` - We translate that to 200 m arbitrarily
- `Position.QUALITY_POOR` - We translate that to 500 m arbitrarily - `Position.QUALITY_POOR` - We translate that to 100 m arbitrarily
- `Position.QUALITY_USABLE` - We translate that to 100 m arbitrarily - `Position.QUALITY_USABLE` - We translate that to 50 m arbitrarily
- `Position.QUALITY_GOOD` - We translate that to 10 m arbitrarily - `Position.QUALITY_GOOD` - We translate that to 10 m arbitrarily
NB. These values have been revised as of Ver 3.12.
**You cannot rely on the radius of the circle of accuracy in any resulting maps as any meaningful indication of error.** **You cannot rely on the radius of the circle of accuracy in any resulting maps as any meaningful indication of error.**
## Activity Reporting ## Activity Reporting

View File

@@ -18,7 +18,7 @@ A user has reported a maximum of 26 items with Ver 3.5. This measurement has sho
As a worked example, for Ver 3.6 working on an `instinct2x` device: As a worked example, for Ver 3.6 working on an `instinct2x` device:
| Feature | Memory (bytes) | Cost (bytes) | | Feature | Memory (bytes) | Cost (bytes) |
|--------------------------------------|---------------:|-------------:| |:-------------------------------------|---------------:|-------------:|
| Declared available to application | 98,304 | | | Declared available to application | 98,304 | |
| Measured available to application | 94,112 | (4,192 less) | | Measured available to application | 94,112 | (4,192 less) |
| Application used | 65,696 | | | Application used | 65,696 | |
@@ -28,167 +28,188 @@ As a worked example, for Ver 3.6 working on an `instinct2x` device:
Our test menu presently contains a mix of 28 items, consisting of nested group, toggle, tap, info and numeric items with templates. So each item requires (12,624 + 14,856) / 28 = 982 bytes. Our test menu presently contains a mix of 28 items, consisting of nested group, toggle, tap, info and numeric items with templates. So each item requires (12,624 + 14,856) / 28 = 982 bytes.
## Glance Memory Usage
Using a `venu2` device the Glance view memory statistics are:
| Measure | Memory (bytes) |
|:----------|----------------:|
| Total | 61,344 |
| Peak Used | 32,224 |
| Free | 29,120 |
This means that for older devices listed below, with only 32 kB of Glance memory, the Glance view crashes with an "_Out Of Memory Error_". There is no opportunity in the code to intervene and no way to catch this fatal error. Nor is there any way to disable the Glance view on a device by device basis. Therefore, the only answer at present is to allow the Glance view to crash. It may display "HomeAssistant" as the Glance view text before crashing.
This problem has been explored via a [Github issue](https://github.com/house-of-abbey/GarminHomeAssistant/issues/347). This is now listed as a [known issue](./README.md#known-issues).
## Garmin Devices ## Garmin Devices
The following table details all the devices as at 1 October 2025 and whether they are supported by Garmin HomeAssistant. The available application memory is also detailed so that it can be compared to an application version listed above. Of particular concern are the 'Instinct' range of devices, being the smallest we currently support. New feature requests are now being vetted against how they might affect our ability to support the 'Instinct' range of devices. At some point support may have to be withdrawn in order to allow the Garmin HomeAssistant application to grow further. The following table details all the devices as at March 2026 and whether they are supported by Garmin HomeAssistant. The available application and glance memory is also detailed so that it can be compared to an application version listed above. Of particular concern are the 'Instinct' range of devices, being the smallest we currently support. New feature requests are now being vetted against how they might affect our ability to support the 'Instinct' range of devices. At some point support may have to be withdrawn in order to allow the Garmin HomeAssistant application to grow further.
| Device | Supported | Application Memory | | Device | Supported | Application Memory | Glance Memory |
|----------------------------|:---------:|--------------------:| |:---------------------------|:---------:|-------------------:|---------------:|
| d2bravo | N | 65,536 | | approachs50 | Y | 786,432 | 65,536 |
| d2bravo_titanium | N | 65,536 | | approachs60 | N | 131,072 | |
| fenix3 | N | 65,536 | | approachs62 | N | 1,048,576 | |
| fenix3_hr | N | 65,536 | | approachs7042mm | Y | 786,432 | 65,536 |
| fr230 | N | 65,536 | | approachs7047mm | Y | 786,432 | 65,536 |
| fr235 | N | 65,536 | | d2air | Y | 1,048,576 | |
| fr630 | N | 65,536 | | d2airx10 | Y | 786,432 | 65,536 |
| fr920xt | N | 65,536 | | d2bravo | N | 65,536 | |
| vivoactive | N | 65,536 | | d2bravo_titanium | N | 65,536 | |
| descentg1 | Y | 98,304 | | d2charlie | N | 1,310,720 | |
| instinct2 | Y | 98,304 | | d2delta | Y | 1,310,720 | |
| instinct2s | Y | 98,304 | | d2deltapx | Y | 1,310,720 | |
| instinct2x | Y | 98,304 | | d2deltas | Y | 1,310,720 | |
| instinctcrossover | Y | 98,304 | | d2mach1 | Y | 786,432 | 65,536 |
| approachs60 | N | 131,072 | | d2mach2 | Y | 786,432 | 65,536 |
| enduro | Y | 131,072 | | descentg1 | Y | 98,304 | 32,768 |
| fenix5 | Y | 131,072 | | descentg2 | Y | 786,432 | 65,536 |
| fenix5s | Y | 131,072 | | descentmk1 | N | 1,310,720 | |
| fenix6 | Y | 131,072 | | descentmk2 | Y | 1,310,720 | 32,768 |
| fenix6s | Y | 131,072 | | descentmk2s | Y | 1,310,720 | 32,768 |
| fenixchronos | Y | 131,072 | | descentmk343mm | Y | 786,432 | 65,536 |
| fr245 | Y | 131,072 | | descentmk351mm | Y | 786,432 | 65,536 |
| fr55 | Y | 131,072 | | edge1030 | Y | 1,048,576 | |
| fr645 | Y | 131,072 | | edge1030bontrager | Y | 1,048,576 | |
| fr735xt | N | 131,072 | | edge1030plus | Y | 1,048,576 | |
| fr935 | Y | 131,072 | | edge1040 | Y | 1,048,576 | 65,536 |
| instinct3solar45mm | Y | 131,072 | | edge1050 | Y | 1,048,576 | 65,536 |
| instincte40mm | Y | 131,072 | | edge130 | N | | |
| instincte45mm | Y | 131,072 | | edge130plus | N | | |
| venusq | Y | 131,072 | | edge520plus | Y | 1,048,576 | |
| vivoactive3 | Y | 131,072 | | edge530 | Y | 1,048,576 | |
| vivoactive3d | N | 131,072 | | edge540 | Y | 1,048,576 | 65,536 |
| vivoactive_hr | N | 131,072 | | edge550 | Y | 1,048,576 | 65,536 |
| edge_520 | N | 262,144 | | edge820 | Y | 1,048,576 | |
| fr255 | Y | 524,288 | | edge830 | Y | 1,048,576 | |
| fr255s | Y | 524,288 | | edge840 | Y | 1,048,576 | 65,536 |
| approachs50 | Y | 786,432 | | edge850 | Y | 1,048,576 | 65,536 |
| approachs7042mm | Y | 786,432 | | edgeexplore | Y | 1,048,576 | |
| approachs7047mm | Y | 786,432 | | edgeexplore2 | Y | 1,048,576 | 65,536 |
| d2airx10 | Y | 786,432 | | edgemtb | Y | 1,048,576 | 65,536 |
| d2mach1 | Y | 786,432 | | edge_1000 | N | 1,048,576 | |
| descentg2 | Y | 786,432 | | edge_520 | N | 262,144 | |
| descentmk343mm | Y | 786,432 | | enduro | Y | 131,072 | 32,768 |
| descentmk351mm | Y | 786,432 | | enduro3 | Y | 786,432 | 65,536 |
| enduro3 | Y | 786,432 | | epix | N | 1,048,576 | |
| epix2 | Y | 786,432 | | epix2 | Y | 786,432 | 65,536 |
| epix2pro42mm | Y | 786,432 | | epix2pro42mm | Y | 786,432 | 65,536 |
| epix2pro47mm | Y | 786,432 | | epix2pro47mm | Y | 786,432 | 65,536 |
| epix2pro47mmsystem7preview | Y | 786,432 | | epix2pro47mmsystem7preview | Y | 786,432 | 65,536 |
| epix2pro51mm | Y | 786,432 | | epix2pro51mm | Y | 786,432 | 65,536 |
| fenix7 | Y | 786,432 | | etrextouch | Y | 2,359,296 | |
| fenix7pro | Y | 786,432 | | fenix3 | N | 65,536 | |
| fenix7pronowifi | Y | 786,432 | | fenix3_hr | N | 65,536 | |
| fenix7s | Y | 786,432 | | fenix5 | Y | 131,072 | |
| fenix7spro | Y | 786,432 | | fenix5plus | Y | 1,310,720 | |
| fenix7x | Y | 786,432 | | fenix5s | Y | 131,072 | |
| fenix7xpro | Y | 786,432 | | fenix5splus | Y | 1,310,720 | |
| fenix7xpronowifi | Y | 786,432 | | fenix5x | Y | 1,310,720 | |
| fenix843mm | Y | 786,432 | | fenix5xplus | Y | 1,310,720 | |
| fenix847mm | Y | 786,432 | | fenix6 | Y | 131,072 | 32,768 |
| fenix8pro47mm | Y | 786,432 | | fenix6pro | Y | 1,310,720 | 32,768 |
| fenix8solar47mm | Y | 786,432 | | fenix6s | Y | 131,072 | 32,768 |
| fenix8solar51mm | Y | 786,432 | | fenix6spro | Y | 1,310,720 | 32,768 |
| fenixe | Y | 786,432 | | fenix6xpro | Y | 1,310,720 | 32,768 |
| fr165 | Y | 786,432 | | fenix7 | Y | 786,432 | 65,536 |
| fr165m | Y | 786,432 | | fenix7pro | Y | 786,432 | 65,536 |
| fr255m | Y | 786,432 | | fenix7pronowifi | Y | 786,432 | 65,536 |
| fr255sm | Y | 786,432 | | fenix7s | Y | 786,432 | 65,536 |
| fr265 | Y | 786,432 | | fenix7spro | Y | 786,432 | 65,536 |
| fr265s | Y | 786,432 | | fenix7x | Y | 786,432 | 65,536 |
| fr57042mm | Y | 786,432 | | fenix7xpro | Y | 786,432 | 65,536 |
| fr57047mm | Y | 786,432 | | fenix7xpronowifi | Y | 786,432 | 65,536 |
| fr955 | Y | 786,432 | | fenix843mm | Y | 786,432 | 65,536 |
| fr965 | Y | 786,432 | | fenix847mm | Y | 786,432 | 65,536 |
| fr970 | Y | 786,432 | | fenix8pro47mm | Y | 786,432 | 65,536 |
| instinct3amoled45mm | Y | 786,432 | | fenix8solar47mm | Y | 786,432 | 65,536 |
| instinct3amoled50mm | Y | 786,432 | | fenix8solar51mm | Y | 786,432 | 65,536 |
| instinctcrossoveramoled | Y | 786,432 | | fenixchronos | Y | 131,072 | |
| marq2 | Y | 786,432 | | fenixe | Y | 786,432 | 65,536 |
| marq2aviator | Y | 786,432 | | fr165 | Y | 786,432 | 65,536 |
| system8preview | N | 786,432 | | fr165m | Y | 786,432 | 65,536 |
| venu2 | Y | 786,432 | | fr230 | N | 65,536 | |
| venu2plus | Y | 786,432 | | fr235 | N | 65,536 | |
| venu2s | Y | 786,432 | | fr245 | Y | 131,072 | 32,768 |
| venu3 | Y | 786,432 | | fr245m | Y | 1,310,720 | 32,768 |
| venu3s | Y | 786,432 | | fr255 | Y | 524,288 | 65,536 |
| venu441mm | Y | 786,432 | | fr255m | Y | 786,432 | 65,536 |
| venu445mm | Y | 786,432 | | fr255s | Y | 524,288 | 65,536 |
| venusq2 | Y | 786,432 | | fr255sm | Y | 786,432 | 65,536 |
| venusq2m | Y | 786,432 | | fr265 | Y | 786,432 | 65,536 |
| venux1 | Y | 786,432 | | fr265s | Y | 786,432 | 65,536 |
| vivoactive5 | Y | 786,432 | | fr45 | N | | |
| vivoactive6 | Y | 786,432 | | fr55 | Y | 131,072 | 32,768 |
| approachs62 | N | 1,048,576 | | fr57042mm | Y | 786,432 | 65,536 |
| d2air | Y | 1,048,576 | | fr57047mm | Y | 786,432 | 65,536 |
| edge1030 | Y | 1,048,576 | | fr630 | N | 65,536 | |
| edge1030bontrager | Y | 1,048,576 | | fr645 | Y | 131,072 | |
| edge1030plus | Y | 1,048,576 | | fr645m | Y | 1,048,576 | |
| edge1040 | Y | 1,048,576 | | fr735xt | N | 131,072 | |
| edge1050 | Y | 1,048,576 | | fr745 | Y | 1,310,720 | 32,768 |
| edge520plus | Y | 1,048,576 | | fr920xt | N | 65,536 | |
| edge530 | Y | 1,048,576 | | fr935 | Y | 131,072 | |
| edge540 | Y | 1,048,576 | | fr945 | Y | 1,310,720 | 32,768 |
| edge550 | Y | 1,048,576 | | fr945lte | Y | 1,310,720 | 32,768 |
| edge820 | Y | 1,048,576 | | fr955 | Y | 786,432 | 65,536 |
| edge830 | Y | 1,048,576 | | fr965 | Y | 786,432 | 65,536 |
| edge840 | Y | 1,048,576 | | fr970 | Y | 786,432 | 65,536 |
| edge850 | Y | 1,048,576 | | garminswim2 | N | | |
| edgeexplore | Y | 1,048,576 | | gpsmap66 | Y | 2,359,296 | |
| edgeexplore2 | Y | 1,048,576 | | gpsmap67 | Y | 2,359,296 | |
| edgemtb | Y | 1,048,576 | | gpsmap86 | N | 2,359,296 | |
| edge_1000 | N | 1,048,576 | | gpsmaph1 | Y | 2,359,296 | |
| epix | N | 1,048,576 | | instinct2 | Y | 98,304 | 32,768 |
| fr645m | Y | 1,048,576 | | instinct2s | Y | 98,304 | 32,768 |
| legacyherocaptainmarvel | Y | 1,048,576 | | instinct2x | Y | 98,304 | 32,768 |
| legacyherofirstavenger | Y | 1,048,576 | | instinct3amoled45mm | Y | 786,432 | 65,536 |
| legacysagadarthvader | Y | 1,048,576 | | instinct3amoled50mm | Y | 786,432 | 65,536 |
| legacysagarey | Y | 1,048,576 | | instinct3solar45mm | Y | 131,072 | 32,768 |
| venu | Y | 1,048,576 | | instinctcrossover | Y | 98,304 | 32,768 |
| venud | Y | 1,048,576 | | instinctcrossoveramoled | Y | 786,432 | 65,536 |
| venusqm | Y | 1,048,576 | | instincte40mm | Y | 131,072 | 32,768 |
| vivoactive3m | Y | 1,048,576 | | instincte45mm | Y | 131,072 | 32,768 |
| vivoactive3mlte | Y | 1,048,576 | | legacyherocaptainmarvel | Y | 1,048,576 | |
| vivoactive4 | Y | 1,048,576 | | legacyherofirstavenger | Y | 1,048,576 | |
| vivoactive4s | Y | 1,048,576 | | legacysagadarthvader | Y | 1,048,576 | |
| d2charlie | N | 1,310,720 | | legacysagarey | Y | 1,048,576 | |
| d2delta | Y | 1,310,720 | | marq2 | Y | 786,432 | 65,536 |
| d2deltapx | Y | 1,310,720 | | marq2aviator | Y | 786,432 | 65,536 |
| d2deltas | Y | 1,310,720 | | marqadventurer | Y | 1,310,720 | 32,768 |
| descentmk1 | N | 1,310,720 | | marqathlete | Y | 1,310,720 | 32,768 |
| descentmk2 | Y | 1,310,720 | | marqaviator | Y | 1,310,720 | 32,768 |
| descentmk2s | Y | 1,310,720 | | marqcaptain | Y | 1,310,720 | 32,768 |
| fenix5plus | Y | 1,310,720 | | marqcommander | Y | 1,310,720 | 32,768 |
| fenix5splus | Y | 1,310,720 | | marqdriver | Y | 1,310,720 | 32,768 |
| fenix5x | Y | 1,310,720 | | marqexpedition | Y | 1,310,720 | 32,768 |
| fenix5xplus | Y | 1,310,720 | | marqgolfer | Y | 1,310,720 | 32,768 |
| fenix6pro | Y | 1,310,720 | | montana7xx | Y | 2,359,296 | |
| fenix6spro | Y | 1,310,720 | | oregon7xx | N | 2,359,296 | |
| fenix6xpro | Y | 1,310,720 | | rino7xx | N | 2,359,296 | |
| fr245m | Y | 1,310,720 | | system8preview | N | 786,432 | 65,536 |
| fr745 | Y | 1,310,720 | | venu | Y | 1,048,576 | |
| fr945 | Y | 1,310,720 | | venu2 | Y | 786,432 | 65,536 |
| fr945lte | Y | 1,310,720 | | venu2plus | Y | 786,432 | 65,536 |
| marqadventurer | Y | 1,310,720 | | venu2s | Y | 786,432 | 65,536 |
| marqathlete | Y | 1,310,720 | | venu3 | Y | 786,432 | 65,536 |
| marqaviator | Y | 1,310,720 | | venu3s | Y | 786,432 | 65,536 |
| marqcaptain | Y | 1,310,720 | | venu441mm | Y | 786,432 | 65,536 |
| marqcommander | Y | 1,310,720 | | venu445mm | Y | 786,432 | 65,536 |
| marqdriver | Y | 1,310,720 | | venud | Y | 1,048,576 | |
| marqexpedition | Y | 1,310,720 | | venusq | Y | 131,072 | |
| marqgolfer | Y | 1,310,720 | | venusq2 | Y | 786,432 | 65,536 |
| gpsmap66 | Y | 2,359,296 | | venusq2m | Y | 786,432 | 65,536 |
| gpsmap67 | Y | 2,359,296 | | venusqm | Y | 1,048,576 | |
| gpsmap86 | N | 2,359,296 | | venux1 | Y | 786,432 | 65,536 |
| gpsmaph1 | Y | 2,359,296 | | vivoactive | N | 65,536 | |
| montana7xx | Y | 2,359,296 | | vivoactive3 | Y | 131,072 | |
| oregon7xx | N | 2,359,296 | | vivoactive3d | N | 131,072 | |
| rino7xx | N | 2,359,296 | | vivoactive3m | Y | 1,048,576 | |
| vivoactive3mlte | Y | 1,048,576 | |
| vivoactive4 | Y | 1,048,576 | |
| vivoactive4s | Y | 1,048,576 | |
| vivoactive5 | Y | 786,432 | 65,536 |
| vivoactive6 | Y | 786,432 | 65,536 |
| vivoactive_hr | N | 131,072 | |
| vivolife | N | | |

View File

@@ -142,6 +142,8 @@ On Mon, 6 May 2024 at 09:01, <noreply@garmin.com> wrote:
![Please help me set this up](images/etiquette/2024-05-06_GHA_Bad_Review.png) ![Please help me set this up](images/etiquette/2024-05-06_GHA_Bad_Review.png)
<img src="images/etiquette/2026-04-02_GHA_Bad_Review.png" width="70%" title="Not working">
Answer: Make sure you meet the [minimum requirements for being a user](#etiquette) please! Provide more information on what the problem actually is. Clearly the support reply pointing to the documentation was either not read or not considered helpful, hence the point about meeting the minimum user requirements. Answer: Make sure you meet the [minimum requirements for being a user](#etiquette) please! Provide more information on what the problem actually is. Clearly the support reply pointing to the documentation was either not read or not considered helpful, hence the point about meeting the minimum user requirements.
On Fri, 31 Oct 2025 at 11:45, <noreply@garmin.com> wrote: On Fri, 31 Oct 2025 at 11:45, <noreply@garmin.com> wrote:
@@ -390,10 +392,10 @@ Don't get an embarrassing retort, I call out those who "click & complain" withou
Two words. Perhaps too lazy to consider why others gave rave reviews and ponder what he was doing wrong? Perhaps did not consider there might be some documentation to assist or support routes (subject to [getting a polite reply](getting-help-with-a-polite-reply))? Two words. Perhaps too lazy to consider why others gave rave reviews and ponder what he was doing wrong? Perhaps did not consider there might be some documentation to assist or support routes (subject to [getting a polite reply](getting-help-with-a-polite-reply))?
<img src="images/etiquette/2026-01-21 GHA_Bad_Review.png" width="70%" title="Two words"> <img src="images/etiquette/2026-01-21_GHA_Bad_Review.png" width="70%" title="Two words">
--- ---
Blaming the wrong application. Just rude. Please get your facts straight. And it was such a simple workaround for the Garmin Connect IQ app bug. Blaming the wrong application. Just rude. Please get your facts straight. And it was such a simple workaround for the Garmin Connect IQ app bug.
<img src="images/etiquette/2025-11-19%20GHA_Bad_Review.png" width="85%" title="Misplaced blame"> <img src="images/etiquette/2025-11-19_GHA_Bad_Review.png" width="85%" title="Misplaced blame">

View File

@@ -36,7 +36,7 @@
| 2.21 | Added 7 new devices (`edge1050`, `enduro3`, `fenix843mm`, `fenix847mm`, `fenix8solar47mm`, `fenix8solar51mm`, `fenixe`) and upgraded the SDK to 7.3.0. Fix for a bug on Edge devices introduced by v2.16 activity reporting improvements. | | 2.21 | Added 7 new devices (`edge1050`, `enduro3`, `fenix843mm`, `fenix847mm`, `fenix8solar47mm`, `fenix8solar51mm`, `fenixe`) and upgraded the SDK to 7.3.0. Fix for a bug on Edge devices introduced by v2.16 activity reporting improvements. |
| 2.22 | <img src="images/pin_view.png" width="200" title="PIN Entry View"/><br/>Major feature release adding an optional PIN to menu items. This significant new feature has been provided by [@moesterheld](https://github.com/moesterheld). Please do not rely on this application for security. Use at your own risk! | | 2.22 | <img src="images/pin_view.png" width="200" title="PIN Entry View"/><br/>Major feature release adding an optional PIN to menu items. This significant new feature has been provided by [@moesterheld](https://github.com/moesterheld). Please do not rely on this application for security. Use at your own risk! |
| 2.23 | Added "info" menu item for displaying information via a template without a tap or toggle. Essentially like the old 'template' type that was deprecated when all items were amended to display evaluated templates. That action removed the display only items too hastily. Added 5 new devices in the model range Instinct 3 and Instinct E. | | 2.23 | Added "info" menu item for displaying information via a template without a tap or toggle. Essentially like the old 'template' type that was deprecated when all items were amended to display evaluated templates. That action removed the display only items too hastily. Added 5 new devices in the model range Instinct 3 and Instinct E. |
| 2.24 | Experiment to prevent new Webhook IDs being created unnecessarily. Reduced the latency for the first menu update. Added 4 new devices: approachs50, descentg2, descentmk1, and gpsmap66. | | 2.24 | Experiment to prevent new Webhook IDs being created unnecessarily. Reduced the latency for the first menu update. Added 4 new devices: `approachs50`, `descentg2`, ~~`descentmk1`~~ (subsequently withdrawn in v3.6), and `gpsmap66`. |
| 2.25 | 2 Bug fixes. First time startup issues caused by v2.24 change and a fix for pure numbers in returned templates. | | 2.25 | 2 Bug fixes. First time startup issues caused by v2.24 change and a fix for pure numbers in returned templates. |
| 2.26 | Retry responsive menu fix failed in v2.24. Cosmetic internal class changes. | | 2.26 | Retry responsive menu fix failed in v2.24. Cosmetic internal class changes. |
| 2.27 | Trivial bug fix for the glance view to prevent the "Unconfigured" result being erroneously displayed because the settings were not yet pulled from persistent storage. | | 2.27 | Trivial bug fix for the glance view to prevent the "Unconfigured" result being erroneously displayed because the settings were not yet pulled from persistent storage. |
@@ -51,9 +51,11 @@
| 3.3 | Providing automatic detection for menu definition updates, but still requires an application restart. | | 3.3 | Providing automatic detection for menu definition updates, but still requires an application restart. |
| 3.4 | Fixed a bug where templates failed to display in toggle menu items (at least on some devices). Fixed a bug where a menu item requesting to exit on completion appeared to indicate failure when using Wi-Fi or LTE. The fix uses a delay in exiting the application modelled as sufficient for a Venu 2 device, so this might need tweaking for other devices. Attempt to fixed an "Out of Memory" bug caused by v3.3 by making automatic checking for menu updates both optional and automatically turned off when insufficient memory is available. This last bug is device dependent and may require another attempt. Internationalisation improvements with thanks to [@krzys_h](https://github.com/krzys-h) for a new automated translations script. | | 3.4 | Fixed a bug where templates failed to display in toggle menu items (at least on some devices). Fixed a bug where a menu item requesting to exit on completion appeared to indicate failure when using Wi-Fi or LTE. The fix uses a delay in exiting the application modelled as sufficient for a Venu 2 device, so this might need tweaking for other devices. Attempt to fixed an "Out of Memory" bug caused by v3.3 by making automatic checking for menu updates both optional and automatically turned off when insufficient memory is available. This last bug is device dependent and may require another attempt. Internationalisation improvements with thanks to [@krzys_h](https://github.com/krzys-h) for a new automated translations script. |
| 3.5 | Added support for Edge 550, 850 & MTB, Fenix 8 Pro 47mm, GPSMAP H1, Instinct Crossover AMOLED, Venu 4 41mm & 45mm, & Venu X1 devices which also required an SDK update to 8.3.0. The simulation of the Edge 850 device was off, as it failed to update the display and text was the wrong colour, but the buttons menu items operated HA correctly. The assumption is the simulation model is buggy until someone [reports](https://github.com/house-of-abbey/GarminHomeAssistant/issues) otherwise. | | 3.5 | Added support for Edge 550, 850 & MTB, Fenix 8 Pro 47mm, GPSMAP H1, Instinct Crossover AMOLED, Venu 4 41mm & 45mm, & Venu X1 devices which also required an SDK update to 8.3.0. The simulation of the Edge 850 device was off, as it failed to update the display and text was the wrong colour, but the buttons menu items operated HA correctly. The assumption is the simulation model is buggy until someone [reports](https://github.com/house-of-abbey/GarminHomeAssistant/issues) otherwise. |
| 3.6 | Added `numeric` menu item type thanks to [@thmichel](https://github.com/thmichel). This allows you to select a numeric value to set for an entity. Confirmations can now display a user supplied message. [Schema update](README.md#old-deprecated-formats) to keep pace with HomeAssistant and correct a previous decision. Schema changes for consistency. | | 3.6 | Added `numeric` menu item type thanks to [@thmichel](https://github.com/thmichel). This allows you to select a numeric value to set for an entity. Confirmations can now display a user supplied message. [Schema update](README.md#old-deprecated-formats) to keep pace with HomeAssistant and correct a previous decision. Schema changes for consistency. `descentmk1` device removed as the simulation does not read the settings and therefore we cannot support the device. |
| 3.7 | Bug fix for `numeric` menu items not working over Wi-Fi & LTE. | | 3.7 | Bug fix for `numeric` menu items not working over Wi-Fi & LTE. |
| 3.8 | Added icon for `numeric` menu items and revised icons in general. | | 3.8 | Added icon for `numeric` menu items and revised icons in general. |
| 3.9 | Small update to warn users with empty menu definitions to read the instructions! | | 3.9 | Small update to warn users with empty menu definitions to read the instructions! |
| 3.10 | Bug avoidance for a fatal _"Error: Out Of Memory Error"_ in the glance when caching the menu to [`Storage`](https://developer.garmin.com/connect-iq/api-docs/Toybox/Application/Storage.html). This is now delayed until the main application is opened. Added support for two new devices, D2 Mach 2 and eTrex Touch. | | 3.10 | Bug avoidance for a fatal _"Error: Out Of Memory Error"_ in the glance when caching the menu to [`Storage`](https://developer.garmin.com/connect-iq/api-docs/Toybox/Application/Storage.html). This is now delayed until the main application is opened. Added support for two new devices, D2 Mach 2 and eTrex Touch. |
| 3.11 | <img src="images/Venu2_glance_default.png" width="200" title="Default Glance"/><br/>Better handling of menus larger than the Glance view can handle. As a result the Glance can no longer verify the availability of the JSON menu as fetching it might cause an _"Error: Out Of Memory Error"_. Provide two user supplied HTTP Headers. Bug fix for the numeric picker. | | 3.11 | <img src="images/Venu2_glance_default.png" width="200" title="Default Glance"/><br/>Better handling of menus larger than the Glance view can handle. As a result the Glance can no longer verify the availability of the JSON menu as fetching it might cause an _"Error: Out Of Memory Error"_. Provide two user supplied HTTP Headers. Bug fix for the numeric picker. |
| 3.12 | Amended GPS accuracy values used by the background service. |
| 3.13 | Added support for new devices: `d2mach2pro`, `fr170`, `fr170m`, `fr70`. |

View File

@@ -467,7 +467,7 @@ Check the latest unresolved [issues](https://github.com/house-of-abbey/GarminHom
10. There are memory limits, particularly for older devices. Please see the [explanation of the memory limits](Devices.md) and device support. 10. There are memory limits, particularly for older devices. Please see the [explanation of the memory limits](Devices.md) and device support.
11. There is a 32 kB memory limit for any Glance views that mean too large a menu definition can cause the Glance view to crash. The symptom is that a previously 'Available' menu (green text) now appears as 'Unavailable' (red text) because the HTTP request to both retrieve the menu and convert it to `Dictionary` objects (from which the glance view can extract the `glance` field) ran out of memory. Out of memory exceptions are fatal and cannot be caught in order to code around them. Therefore the Glance status does not get updated to 'Available' as you would expect. The solution is to limit the size of your JSON menu definition by experimentation. For the same reason, the Glance view can no longer cache the menu to `Storage` ahead of the main application as the keys in that storage are limited to 8 kB. Remember its an app running on your watch not a desktop! 11. There is a 32 kB memory limit for Glance views on some devices that mean the code and data for the Glance view is too large to load and the Glance view crashes before any code can intervene to prevent the fatal "Out Of Memory Error". Nor is it possible to disable the Glance view in the [application manifest](./manifest.xml) on a per device basis. The simple advice is, for older watches affected, do not try to use the Glance view. To see if your device is affected, please trawl the [devices page](./Devices.md).
# Authors & Contributors # Authors & Contributors

View File

@@ -48,7 +48,7 @@ The 'status' view will persist showing until the API becomes available as withou
You may make this as complicated as you like! But you have limited space and only ASCII text characters. **It is essential to turn on menu caching in order to display of the template**. This is a change in v3.11 where multiple users are now making larger JSON menus than was originally envisaged for this watch application. As a result the Glance view would fail with an untrapable (fatal) _"Error: Out Of Memory Error"_. A work around is to pull out the glance subsection of the menu and cache that separately during execution of the full application, but that means any changes to the customised Glance view do not show until after the full application has been run. You may make this as complicated as you like! But you have limited space and only ASCII text characters. **It is essential to turn on menu caching in order to display of the template**. This is a change in v3.11 where multiple users are now making larger JSON menus than was originally envisaged for this watch application. As a result the Glance view would fail with an untrapable (fatal) _"Error: Out Of Memory Error"_. A work around is to pull out the glance subsection of the menu and cache that separately during execution of the full application, but that means any changes to the customised Glance view do not show until after the full application has been run.
> [!IMPORTANT] > [!IMPORTANT]
> Sadly what you cannot do is use special characters like: 🌞🔋⛅🪫. Whilst these do display in menu items, they do not seem to work on the Glance view. We really like them, so have tried but failed. Only ASCII text appears to be supported by the Garmin Connect IQ SDK's Glance View. This is not something we have any control over, please do not request this to be "fixed". > Sadly support for special characters like 🌞🔋⛅🪫 in the glance view is device dependent. For example they are not available on a Venu2 device but are available on a Venu X1 device. The application documentation shows them displaying in menu items. Only ASCII text appears to be universally supported by the Garmin Connect IQ (as you might hope). This is not something we have any control over, please do not request this to be "fixed".
It is possible to revert to the default glance content without deleting the template by changing the `type` to `status`. It is possible to revert to the default glance content without deleting the template by changing the `type` to `status`.

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@@ -43,6 +43,7 @@
<iq:product id="d2deltas"/> <iq:product id="d2deltas"/>
<iq:product id="d2mach1"/> <iq:product id="d2mach1"/>
<iq:product id="d2mach2"/> <iq:product id="d2mach2"/>
<iq:product id="d2mach2pro"/>
<iq:product id="descentg1"/> <iq:product id="descentg1"/>
<iq:product id="descentg2"/> <iq:product id="descentg2"/>
<iq:product id="descentmk2"/> <iq:product id="descentmk2"/>
@@ -101,6 +102,8 @@
<iq:product id="fenixe"/> <iq:product id="fenixe"/>
<iq:product id="fr165"/> <iq:product id="fr165"/>
<iq:product id="fr165m"/> <iq:product id="fr165m"/>
<iq:product id="fr170"/>
<iq:product id="fr170m"/>
<iq:product id="fr245"/> <iq:product id="fr245"/>
<iq:product id="fr245m"/> <iq:product id="fr245m"/>
<iq:product id="fr255"/> <iq:product id="fr255"/>
@@ -114,6 +117,7 @@
<iq:product id="fr57047mm"/> <iq:product id="fr57047mm"/>
<iq:product id="fr645"/> <iq:product id="fr645"/>
<iq:product id="fr645m"/> <iq:product id="fr645m"/>
<iq:product id="fr70"/>
<iq:product id="fr745"/> <iq:product id="fr745"/>
<iq:product id="fr935"/> <iq:product id="fr935"/>
<iq:product id="fr945"/> <iq:product id="fr945"/>

View File

@@ -52,12 +52,13 @@ d2deltas.resourcePath = $(d2deltas.resourcePath);resources-launcher-40-40;resour
d2mach1.resourcePath = $(d2mach1.resourcePath);resources-launcher-60-60;resources-icons-48 d2mach1.resourcePath = $(d2mach1.resourcePath);resources-launcher-60-60;resources-icons-48
# Screen Size 454x454 launcher icon size 65x65 # Screen Size 454x454 launcher icon size 65x65
d2mach2.resourcePath = $(d2mach2.resourcePath);resources-launcher-65-65;resources-icons-53 d2mach2.resourcePath = $(d2mach2.resourcePath);resources-launcher-65-65;resources-icons-53
d2mach2pro.resourcePath = $(d2mach2pro.resourcePath);resources-launcher-65-65;resources-icons-53
# Screen Size 176x176 launcher icon size 62x62 # Screen Size 176x176 launcher icon size 62x62
descentg1.resourcePath = $(descentg1.resourcePath);resources-launcher-62-62;resources-icons-21 descentg1.resourcePath = $(descentg1.resourcePath);resources-launcher-62-62;resources-icons-21
# Screen Size 390x390 launcher icon size 60x60 # Screen Size 390x390 launcher icon size 60x60
descentg2.resourcePath = $(descentg2.resourcePath);resources-launcher-60-60;resources-icons-46 descentg2.resourcePath = $(descentg2.resourcePath);resources-launcher-60-60;resources-icons-46
# Screen Size 240x240 launcher icon size 40x40 # Screen Size 240x240 launcher icon size 40x40 - Does not work in simulation
descentmk1.resourcePath = $(descentmk1.resourcePath);resources-launcher-40-40;resources-icons-28 #descentmk1.resourcePath = $(descentmk1.resourcePath);resources-launcher-40-40;resources-icons-28
# Screen Size 280x280 launcher icon size 40x40 # Screen Size 280x280 launcher icon size 40x40
descentmk2.resourcePath = $(descentmk2.resourcePath);resources-launcher-40-40;resources-icons-32 descentmk2.resourcePath = $(descentmk2.resourcePath);resources-launcher-40-40;resources-icons-32
# Screen Size 240x240 launcher icon size 40x40 # Screen Size 240x240 launcher icon size 40x40
@@ -150,6 +151,8 @@ fenixe.resourcePath = $(fenixe.resourcePath);resources-launcher-60-60;resources-
# Screen Size 390x390 launcher icon size 54x54 # Screen Size 390x390 launcher icon size 54x54
fr165.resourcePath = $(descentmk2s.resourcePath);resources-launcher-54-54;resources-icons-46 fr165.resourcePath = $(descentmk2s.resourcePath);resources-launcher-54-54;resources-icons-46
fr165m.resourcePath = $(descentmk2s.resourcePath);resources-launcher-54-54;resources-icons-46 fr165m.resourcePath = $(descentmk2s.resourcePath);resources-launcher-54-54;resources-icons-46
fr170.resourcePath = $(fr170.resourcePath);resources-launcher-54-54;resources-icons-46
fr170m.resourcePath = $(fr170m.resourcePath);resources-launcher-54-54;resources-icons-46
# Screen Size 240x240 launcher icon size 40x40 # Screen Size 240x240 launcher icon size 40x40
fr245.resourcePath = $(fr245.resourcePath);resources-launcher-40-40;resources-icons-28 fr245.resourcePath = $(fr245.resourcePath);resources-launcher-40-40;resources-icons-28
fr245m.resourcePath = $(fr245m.resourcePath);resources-launcher-40-40;resources-icons-28 fr245m.resourcePath = $(fr245m.resourcePath);resources-launcher-40-40;resources-icons-28
@@ -171,6 +174,8 @@ fr57047mm.resourcePath = $(fr57047mm.resourcePath);resources-launcher-65-65;reso
# Screen Size 240x240 launcher icon size 40x40 # Screen Size 240x240 launcher icon size 40x40
fr645.resourcePath = $(fr645.resourcePath);resources-launcher-40-40;resources-icons-28 fr645.resourcePath = $(fr645.resourcePath);resources-launcher-40-40;resources-icons-28
fr645m.resourcePath = $(fr645m.resourcePath);resources-launcher-40-40;resources-icons-28 fr645m.resourcePath = $(fr645m.resourcePath);resources-launcher-40-40;resources-icons-28
# Screen Size 390x390 launcher icon size 54x54
fr70.resourcePath = $(fr70.resourcePath);resources-launcher-54-54;resources-icons-46
# Screen Size 240x240 launcher icon size 40x40 # Screen Size 240x240 launcher icon size 40x40
fr745.resourcePath = $(fr745.resourcePath);resources-launcher-40-40;resources-icons-28 fr745.resourcePath = $(fr745.resourcePath);resources-launcher-40-40;resources-icons-28
fr935.resourcePath = $(fr935.resourcePath);resources-launcher-40-40;resources-icons-28 fr935.resourcePath = $(fr935.resourcePath);resources-launcher-40-40;resources-icons-28

View File

@@ -119,7 +119,8 @@ class BackgroundServiceDelegate extends System.ServiceDelegate {
var accuracy = 0; var accuracy = 0;
switch (position.accuracy) { switch (position.accuracy) {
case Position.QUALITY_LAST_KNOWN: case Position.QUALITY_LAST_KNOWN:
accuracy = 100; // Location is no longer tied to the timestamp, hence the larger inaccuracy.
accuracy = 200;
break; break;
case Position.QUALITY_POOR: case Position.QUALITY_POOR:
accuracy = 100; accuracy = 100;

View File

@@ -122,6 +122,7 @@ class HomeAssistantService {
//! //!
//! @param action The Home Assistant action to be run, e.g. from the JSON `action` field. //! @param action The Home Assistant action to be run, e.g. from the JSON `action` field.
//! @param data Data to be supplied to the action call. //! @param data Data to be supplied to the action call.
//! @param exit Whether to exit the app after making the call.
// //
function call( function call(
action as Lang.String, action as Lang.String,

View File

@@ -228,9 +228,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
// If there's no response body, let's assume that what we did actually happened and flip the toggle. // If there's no response body, let's assume that what we did actually happened and flip the toggle.
if (data.size() == 0) { if (data.size() == 0) {
setEnabled(!isEnabled()); setEnabled(!isEnabled());
} } else {
else {
for(var i = 0; i < data.size(); i++) { for(var i = 0; i < data.size(); i++) {
if ((data[i].get("entity_id") as Lang.String).equals(mData.get("entity_id"))) { if ((data[i].get("entity_id") as Lang.String).equals(mData.get("entity_id"))) {
var state = data[i].get("state") as Lang.String; var state = data[i].get("state") as Lang.String;