Compare commits

..

7 Commits
v2.26 ... v2.27

Author SHA1 Message Date
1f7090092f 227 enhancement glance info cachingprevious results instead of unconfigured (#228)
Not as the issue requested, but instead pulling the settings from
persistent storage before checking the URL status, preventing
"Unconfigured" being initially displayed when it should be "Checking..."
as coded.
2025-04-21 15:31:30 +01:00
4ed132b9ca Update HISTORY.md
Added ver 2.27 text.
2025-04-21 13:59:13 +01:00
fd213cc210 Update HomeAssistantApp.mc
Update the Settings object from persistent storage before checking the URLs work and reporting the status to the Glance view.
2025-04-21 13:56:08 +01:00
7423e609d8 Update TroubleShooting.md
SSL Certificate Validation Issues

Signed-off-by: Philip Abbey <philipabbey@users.noreply.github.com>
2025-04-21 09:26:33 +01:00
9df43cdb01 Explaining HTTPS Certificate Problems
Partial and Full chain certificates.

Signed-off-by: Philip Abbey <philipabbey@users.noreply.github.com>
2025-04-21 09:15:55 +01:00
5ee8a6cc6a Update index.html
Signed-off-by: __JosephAbbey <me@josephabbey.dev>
2025-03-30 15:25:54 +01:00
5e35276628 Update main.js
Signed-off-by: __JosephAbbey <me@josephabbey.dev>
2025-03-30 15:22:49 +01:00
7 changed files with 37 additions and 9 deletions

View File

@ -39,3 +39,4 @@
| 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.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.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. |

View File

@ -120,6 +120,32 @@ There's an online way of testing the API URL too, thanks to [REQBIN](https://req
![API Test REQBIN](images/api_test_online.png)
#### SSL Certificate Chain
With thanks to [@ziceva](https://github.com/ziceva) for solving this problem. The symptoms are:
1. Using an API URL with SSL (HTTPS), the [web-based editor](https://house-of-abbey.github.io/GarminHomeAssistant/web/) running in a browser on the same phone running Garmin Connect works well.
2. The exact same configuration is set in the Garmin Home Assistant application.
3. The Garmin Home Assistant application reports:
```
API: not available
Menu: not available
```
**Solution: Make sure you use a _full chain_ certificate in your HTTPS proxy as some watches might be unable to validate the site certificate alone.**
Most web browsers and OSes probably have the latest Certificate Authorities (CAs) trusted out-of-the-box and so they do not need the full chain to verify the certificates. Garmin watches may not have the latest CAs and that is why the Troubleshooting web page does not catch this problem. E.g. It turns out some Garmin watches do not have the LetsEncrypt CA marked as trusted.
To verify if you have this issue you can use a tool like [SSL Shoppers's SSL Checker](https://www.sslshopper.com/ssl-checker.html), which will catch this issue. The following two screen captures illustrate the difference between partial and full chain certificates respectively.
##### Partial Chain Certificate
![Partial Chain Certificate](images/HTTPS_partial_chain.png)
##### Full Chain Certificate
![Full Chain Certificate](images/HTTPS_full_chain.png)
### Top Problems
1. Failure to copy & paste keys and URLs leading to minor and hard to see errors in strings, even with protestations they are the same! (No they weren't...)

BIN
images/HTTPS_full_chain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -212,7 +212,7 @@ class HomeAssistantApp extends Application.AppBase {
// asynchronous and affects how the views are managed.
(:glance)
function fetchMenuConfig() as Lang.Boolean {
// System.println("URL = " + Settings.getConfigUrl());
// System.println("Menu URL = " + Settings.getConfigUrl());
if (Settings.getConfigUrl().equals("")) {
mMenuStatus = WatchUi.loadResource($.Rez.Strings.Unconfigured) as Lang.String;
WatchUi.requestUpdate();
@ -468,6 +468,7 @@ class HomeAssistantApp extends Application.AppBase {
(:glance)
function fetchApiStatus() as Void {
// System.println("API URL = " + Settings.getApiUrl());
if (Settings.getApiUrl().equals("")) {
mApiStatus = WatchUi.loadResource($.Rez.Strings.Unconfigured) as Lang.String;
WatchUi.requestUpdate();
@ -546,8 +547,8 @@ class HomeAssistantApp extends Application.AppBase {
mIsGlance = true;
mApiStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String;
mMenuStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String;
updateStatus();
Settings.update();
updateStatus();
mGlanceTimer = new Timer.Timer();
mGlanceTimer.start(method(:updateStatus), Globals.scApiBackoff, true);
return [new HomeAssistantGlanceView(self)];

View File

@ -7,13 +7,13 @@
<link
rel="stylesheet"
data-name="vs/editor/editor.main"
href="https://unpkg.com/monaco-editor@0.45.0/min/vs/editor/editor.main.css" />
href="https://www.unpkg.com/monaco-editor@0.45.0/min/vs/editor/editor.main.css" />
<link
rel="stylesheet"
type="text/css"
href="https://unpkg.com/toastify-js@1.12.0/src/toastify.css" />
href="https://www.unpkg.com/toastify-js@1.12.0/src/toastify.css" />
<style>
@import url('https://unpkg.com/@catppuccin/palette/css/catppuccin.css');
@import url('https://www.unpkg.com/@catppuccin/palette/css/catppuccin.css');
body {
display: flex;
@ -441,9 +441,9 @@ http:
</div>
</dialog>
<script src="https://unpkg.com/monaco-editor@0.45.0/min/vs/loader.js"></script>
<script src="https://unpkg.com/json-ast-comments@1.1.1/lib/json.js"></script>
<script src="https://unpkg.com/toastify-js@1.12.0/src/toastify.js"></script>
<script src="https://www.unpkg.com/monaco-editor@0.45.0/min/vs/loader.js"></script>
<script src="https://www.unpkg.com/json-ast-comments@1.1.1/lib/json.js"></script>
<script src="https://www.unpkg.com/toastify-js@1.12.0/src/toastify.js"></script>
<script type="module" src="./main.js"></script>
</body>
</html>

View File

@ -451,7 +451,7 @@ loadSchema();
// require is provided by loader.min.js.
require.config({
paths: {
vs: 'https://unpkg.com/monaco-editor@0.45.0/min/vs',
vs: 'https://www.unpkg.com/monaco-editor@0.45.0/min/vs',
},
});
require(['vs/editor/editor.main'], async () => {