From cc2fc275328e68552deefb6e72da2e5d19195112 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 27 Feb 2026 18:44:54 +0000 Subject: [PATCH 1/8] Changed the Glance behaviour and design to avoid out of memory errors Store the smaller "glance" subsection of the JSON menu in Storage under a new key (scStorageKeyGlance) and read the glance template from that cache to prevent out-of-memory errors from large menus. Removed menu status field from the Glance UI and simplified the status view to a single API status line when no custom template is present. Documentation and images updated to reflect changes. --- HISTORY.md | 5 +- README.md | 2 +- examples/Glance.md | 16 ++--- images/Venu2_Glance_good.png | Bin 17253 -> 0 bytes images/Venu2_glance2.png | Bin 0 -> 8933 bytes images/Venu2_glance_custom.png | Bin 8464 -> 9842 bytes images/Venu2_glance_default.png | Bin 8933 -> 8408 bytes images/Venu2_glance_no_api.png | Bin 0 -> 8460 bytes images/Venu2_glance_no_bt.png | Bin 8428 -> 9797 bytes images/Venu2_glance_no_menu.png | Bin 8985 -> 0 bytes source/HomeAssistantApp.mc | 109 ++++++++---------------------- source/HomeAssistantGlanceView.mc | 57 +++------------- 12 files changed, 49 insertions(+), 140 deletions(-) delete mode 100644 images/Venu2_Glance_good.png create mode 100644 images/Venu2_glance2.png create mode 100644 images/Venu2_glance_no_api.png delete mode 100644 images/Venu2_glance_no_menu.png diff --git a/HISTORY.md b/HISTORY.md index 0277698..c22e8c5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -42,7 +42,7 @@ | 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.28 | Added support for Vivoactive 6 device which also required an SDK update to 8.1.0. | | 2.29 | Added support for three new devices, Forerunners 570 42mm & 47mm and 970. | -| 2.30 |
Extensive re-work of the [Glance](examples/Glance.md) view, including the ability to customise it with a user supplied template. | +| 2.30 |
Extensive re-work of the [Glance](examples/Glance.md) view, including the ability to customise it with a user supplied template. | | 2.31 | Adding [two new options](./examples/Actions.md#exit-on-tap) to the menu items: 1) The ability to disable a menu item, e.g. temporarily for seasonal changes, 2) The option to exit after a menu item has been select. | | 2.32 | Bug fix for a breaking change extracting options caused by the need to rearrange function parameters for an [annoying compiler error](https://github.com/house-of-abbey/GarminHomeAssistant/issues/253). | | 3.0 | First version with the ability to use [Wi-Fi or LTE](Wi-Fi.md) instead of Bluetooth but with limited functionality, thanks to [@vincentezw](https://github.com/vincentezw). | @@ -55,4 +55,5 @@ | 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.9 | Small update to warn users with empty menu definitions to read the instructions! | -| 3.10 | Bug avoidance for a fatal "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 |
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"_. | diff --git a/README.md b/README.md index 9496fb2..8147380 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ As of version 2.0, there are now two installable versions. For older devices bef | Version | Explanation | |------------------------|-------------| -| Application (original) | For newer devices that allow glance views in their applications, e.g. Venu 2, the GarminHomeAssistant application can be started either from a glance or from the list of applications and activities. Head over to the [GarminHomeAssistant](https://apps.garmin.com/en-US/apps/61c91d28-ec5e-438d-9f83-39e9f45b199d) application page on the [Connect IQ application store](https://apps.garmin.com/en-US/) to download the application. The application can be started two different ways, either from the glance in the carousel, or as an application from the list of applications & activities. With the latter, it is worth marking the application as a favourite.

If you place the application on your list of favourites, and rearrange it to appear near the top, then the item is just one button press away from the watch face. This second picture here shows the application menu on a Vivoactive 3 watch.

On newer watches, you can also start the application from the glance carousel. The glance view here typically displays some trackable status, so ours provides some early indication of availability. Older watches will still allow you to start this application from the list of applications and activities. | +| Application (original) | For newer devices that allow glance views in their applications, e.g. Venu 2, the GarminHomeAssistant application can be started either from a glance or from the list of applications and activities. Head over to the [GarminHomeAssistant](https://apps.garmin.com/en-US/apps/61c91d28-ec5e-438d-9f83-39e9f45b199d) application page on the [Connect IQ application store](https://apps.garmin.com/en-US/) to download the application. The application can be started two different ways, either from the glance in the carousel, or as an application from the list of applications & activities. With the latter, it is worth marking the application as a favourite.

If you place the application on your list of favourites, and rearrange it to appear near the top, then the item is just one button press away from the watch face. This second picture here shows the application menu on a Vivoactive 3 watch.

On newer watches, you can also start the application from the glance carousel. The glance view here typically displays some trackable status, so ours provides some early indication of API availability or something custom as shown here. Older watches will still allow you to start this application from the list of applications and activities. | | Widget | **"Maintenance only mode"** so no new features will be added to this version.
For older devices that use widgets, e.g. Venu (1) as opposed to applications with "glances", the GarminHomeAssistant application can instead be started from the widget carousel. This is a separate item in the Connect IQ AppStore and with this installation, the application will no longer appear in the list of applications and activities. Head over to the [GarminHomeAssistant](https://apps.garmin.com/en-US/apps/) widget page on the [Connect IQ application store](https://apps.garmin.com/en-US/) to download the widget.

Typically the widget view implements something similar to the glance view, e.g. status, and exists in a widget carousel to allow you to select an application to launch.
**Please note that memory in widgets is more limited than applications. This means a large menu definition can crash the widget without the code catching the error.**
This version was born out of the application version and from Ver 2.0 shared the same source code repository until Ver 2.8 when they were [separated](https://github.com/house-of-abbey/GarminHomeAssistantWidget) to allow the application version to take advantage of its increase memory availability. | ### Features diff --git a/examples/Glance.md b/examples/Glance.md index 4319415..035a2e6 100644 --- a/examples/Glance.md +++ b/examples/Glance.md @@ -5,13 +5,13 @@ Since [version 2.30](../History.md), it is possible to ovverride the text displayed on the Glance view. This page explains how to customise the text. -## Default View +## Status View -The default view has always been to display the status of the menu and API availability to indicate if there's a problem. This view has now been updated to be more colourful. +The status view displays the accessibility of HomeAssistant API to indicate if there's a problem. -When either the API or the menu file is inaccessible, the fields will turn red. +When API is inaccessible the field will turn red. ## Customised View @@ -45,9 +45,9 @@ For example: } ``` -You may make this as complicated as you like! But you have limited space and only ASCII text characters. **It is best to turn on menu caching in order to speed up the display of the template**. The display is then nearly instantaneous. +The 'status' view will persist showing until the API becomes available as without the API the custom template cannot be evaluated. -The default view will persist showing until the errors are resolved. In order to extract the custom glance template both the menu and the API are required. So it is logical that the two tests must pass first. The exception here is if the menu is cached, in which case only the API needs to pass. +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] > 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". @@ -71,10 +71,10 @@ So the glance view object has a `type` field with two possible values: `info` an ## Displayed Errors -The following shows the default glance when the menu file is not available at the specified URL. +The following shows the status Glance view when the API not available at the specified URL. - + -Once the custom glance template has been retrieved and evaluated the display will change. Should the connectivity to your HomeAssistant then be lost, e.g. you move out of range of your phone, the glance reflects this in the colour of the residual two rectangles. The top one remains an indicator for the API, and the bottom rectangle remains an indicator for the menu availability, reflecting the original placement in the default glance view that has now been replaced. +It is possible to loose connectivity with your HomeAssistant API after connecting and evaluating the Glance template. When the API connection is re-established, the Glance view will update. diff --git a/images/Venu2_Glance_good.png b/images/Venu2_Glance_good.png deleted file mode 100644 index 733cd9f937a46aa8d57bfed3b002246f2b536868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17253 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 OP<^7Q{0(Xu`u_l%N)DC) literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_custom.png b/images/Venu2_glance_custom.png index e5bb73ee2c2cfe0ed6f796ee4f193b0a305753b5..13a2d8a11195879593ae494c926b0057601ff709 100644 GIT binary patch literal 9842 zcmaKS2UL^6vu{E|FA1RZ61qwaAiaYKigW~#7MdWv34|7U=qOT@DkvZzO{JI6q$x#d z(tDNO`}_Fcd+vMhoOj+iNxt3L$?ojze7iHh*(hzzhvXy-Bp?uoTwP5?7X$+50Of2V z0^qmVi98v2Ks=Px^@)gxCg!wefhyQT_n{J~w2x^Gs6byRK2ZdLDiTO9Q20Qd*j4SB z2M9#Nb@K(Q>vHY@e~7f#H}W)kq9JAF;v|5wcCoY(@NselxIrKpc^_Alm4l5Z!qVo2 zy|XOOc6~Ds!roez$MF6Wp(n1&Hg@)EXm=Yuw5Gll+QCZFnnzxaoJ7V)3h2Sf#uJ6` zadLF_kn)jb|4+wKK>3C&$Sx=2Zfz^2tD^ef96(K$-Okg~RZ39M+uK{fTSUOc{e>V> zQc_Y-NLWx=Na_waT0MEUSLdvN@B2P!rmR_^w$p7t)zh?@>kmM&hNvg}@7_SRCi zDBJs%*4Fp=Em0!Y{79rViXUYyg508e^#9QRwLbl#S<Cf`gZ@7oQ4uUEB?kTO$yHAc%l= zC6Iw^gMU3MkDr9Rav`p5dtlLrSO3Kvb29o~@lTx5D9^OG=EdCDAy#iMB7P%z`AYEm zC>))-Lfv;L1Uf-)Tg}uSt>fopmohQ7q{dIUKQ}S*1xCpVgplUs{`{SA|*})i@j)(3dB48x+FU{$JDTiaT%?s zpMq|?f|xF1s871K}9SWdY5x)2LxMV_T$jm98}CN9IFzeBSealW&L^Idn+kkz$+Z zt-cXMjerV4)ZYobJy-vHjd-*`nv9xXB9;Y9G1c$U>)jY&4X|&O`@vv~D)NoRyK|?W zTvvrJOB>>9tJq_KwWGVMC#dkV>a}z& zk&)z%ps`(`YqAV0u*7s}&fp#)qi{cq+!v@fQv>%YbtpMR(6_7V=Sa{c$79faP zV-{>=!w>|vX#6`6L@K0&X@C-zNyX6Fi%YL=cS9*B+|OI~O=3ar+oWARfdJ&B^xP>< z6%}ayQ;bnWu+1d%mwKj2;);R^(XU2>%Gg4_EJHah?dzlO&rdbr5aI85(ENr!Jd34Z zC{ovRkj=#sHXM@`7WnSlQGVFkZ3Nb4jH>BL{}mi*DXg0`|HQEFvRdbJ&N5u>}~NLE2>DbKdjVPViF{USr44$ zEOx**lM4elCkn6RyUJ6>S-Nwa=tY|a-YD9)rIe)<2S!@6wiJ}2%3{`}tREJ*>t}$8QWo5N7v4~2wm*4tN3xfl&sV|G`Tp_;Iez? zH*iXpJ~I?Z9h$;A)V#Brp5q@l`rw*EeGd6ylv!Vp%oi(XM-;CXLCSa)0zTFh>%yvs z^wgEJ_3VkzX*q8-*QbUd#bT0O`}Yf%)F3jeLMCZ}yBkS`r=fJ-r*Cx3QhCHLdr9;N zkZ?`~l?x`p((Q^ia;cQ(#KFN78G0q?1ttZ7O zGlI`$WUMe%{>S1!QONH)T!kh7HRpSy;!_-phsVmteVhSiiT&TXfL#lVr8QN%h}AL5 z+j^LtI){qA7|*E|Co>~3;_n?wDGy=%fhbbek! z!^X#kuwmB?U;Tq{m@D~ZQu-WOz|e(aY`uTC+i@}trzkZsF?`Y+VsoGnB9sFYM>9*E zCBAQRZS(9bT^X!h6o8Cu=#e+F{?}|07+I_X|4wll^a-wcQGcGFCDr~BaK4s-zhOsw z6k1?W_7)}I5cW(OHtmQ_A&d{c9c}THqU+}y3CfU-E!}OQ$UY(O zRn)$ka#`8DF`48w)y>-7GdGX8#MXz6i#Di#d=tu}pzFF!T7G>1wxA+e9+q;vJU}DXGP&j8O&l0@#PM?{Wm$5_cr;-?>_{x)Zofe5?8RPV@`j za;+?ovWC=XdsaZ5Fr8L42fLKSR7<4PJc%&V;hut3QU? ze#`blfjfNb{f(G$4_ck`xd)E2`<~l{mpkk)<^93mS!LqJMYQs+{)`S>E#3a+;y>wU zBi_3#DG2P#XhWwzZ}g^l4N2yqu>TQC zo+$r{L$_^_L_39ePSP;KYY%F>nX%)_M7WtyHQ>K+f5`lTl0n`N|4Vg|t6U95(-hu} zeXumez#K~?q-g=;Qa$Ux!@{tUI(V|SQFuK{t9|{~!EUC8K!PF>Y`e18#m|S6@+BF$ zkX@t;K>4`kBPNt zK`XQIkd+@a3>&%e0K-4Abr9wmFX7XBEockMpM6Q zou?HZgOR-O)U;N@GenRd(2QsKsZ`&y%5C0_GgUPXj8o;uaUYx=h^=L%(3*Lv zb_cPwpJQ_0!rD$B14i*E&)xLdxO3eVs#Gg&JJIm@!G`Jq63GHj7sR1=zQMD}aNfqQ z(*dwA-ldos$C|A8EQeT6u&0DiUhs%u8TQpb35AH@Df{5$M~mdAyC3R#D@U1yOhPTr zDtLk&%UDN~KjDPPNZ-Y#)1r+V`2z00>pOhn5*kgp2xEVF${I2DNoMu^Nk`m!p-rx% z*MTrB(&*u1OX34Q2q8}XZ^)lQ(m{3VX9NyS&|-Zm_HOXi18Vv_i$I1dbHiYC)q8$oVG!>vi(fMkkfly*Jaq!mYY-*$ zwfk=#g)JEpK2i`)zBp=Wh>iT^dY3}UTj}{eQZI=UO^=He>Pr6`Z}|OhGcC|+9au=iguj53R@Ampmw>JNqdQFcUIjk9{wFf{mya&!UC*X zE?#?@G*L&bPiNoTK|evt|BQ8}wxy{516N7bC4|CK?*#UgT|z)PXJgfeg(ntdj(y|Q zh`T*H#CPqQV7XW1nA@NSvg{Zsj2B3LfP*ZX;NaQVnD>{Fjf5yF~hJ!v^^4#npiTf5?ZPi`IdC#(#4KPS z9XWQkP?B4fTJ_E1*y}s(grGgp7HCKQkO%~mBjJ-LZ8)Ub=`jbz@yp^X!tEFScn4n_ z;M=ZXf_7a%D=})#Q`Ry$d=MOHXKZH8%H039#L{lj)#sWoGpkQP zxX+bpNznBj^WVJls$6n`KLxQU@el-e((!2fwgetAQDTPm$}YX}4+~)Ai)m`~Pq~vu zp0HHWq7D#h%^k@~@FbR-SrD22YcK<*s3F{pmfdUp0EKp4GP+~$2ybO1l&$1>6!GnG zB9s&^veeL-r=;Zak`?lzZ=M-;Du3E;Iu-L#_&F=&yPMcxKuiSDY{0wKd7*{NfI-SdJIixQJk82g(hAz!C3%LZ5&RhlqInEu8R$^s z;$&+pblKllL;+chWouuteA@0yHIb1h1^d`Z2~}ibnx{q#*Cce8pZz*jdsVN{n-jz@ zFz+8_rK#owA#bCEx?!SRc*4j$BFlf2pM$MhrHSFJ-ADo%k$&x-=xYb&+3<8G)<~xj zKZ9>(ObgR)Tbh)7yyuQYA?-sQHPo$z&6FZ&5JubuoRG$j*^55*Dk(KQM6`C4&3J~K z>G1dRZvGfo-QM3@cQ0vhXBsT8X;jboT-DjTeAa8C8o)78)M!_ zI?CEvFA9?-{3YwBrAt{(TS>89aD-H3_qv#G1#mCWu&l)uW_^shV-|DIB;6sGB}sxZ z%(@bP)j`%;bdi2%Qf5aVd}ji;k3Sm~aw_@3?R&5gwe>&`@6zp z7MB|KMT@+wL?1mJd{)680xzqvFR;5|!&k%1WN1z5fX}9#DkLbD=gw*!FR*Ecf>O zhd+okA8>2ftg7iKWA|+29ZQ`ot(@{kVW~4s8q+W&obV|ot$uDbCznn9?(pArP(-RB zwbkN@UdIGgogsA+P$Jn)@GEK-%gh$_j6}nrtK?! z#lm5r`d=+Mh>S-Xs+(r>i&wjw7vagE*hA^XulHZS4!EUk{)t}lCnv0X`D|GZ!V_mn z2azJVXo$|@v7xI9jdT-RB4&^h315RI2ZI|~)q!E3zq`}%wt>}Bd!9OH+C-i1E?t%h zfzP~<>y?meD^(0p);&-M=4A~1?7P;i6O+H-tj6x$e^26L$m0{F(eZ9n17mj;r=RsI zGn_|vdMFe<)Op2oY_K5pNYym|<;i8l7Qq8%?gLBsc4xw``@0P(f#d*;aROC4WclIq z!bOoN;ZamnTZ}(}PZ7=)t$7hNOv$1Z2e}`ABE!0x{_#u{O;U4lw3JoYCGBj_$s0lJ zcL$c>Tj6Jqe8sSPWt`r|>{=ka~F z*f-hGd=Qyebh5j(%OF8fO#bIsBX~gD?9{To>isuo{@oFkp2mk++;LeCsVujCBnaW< zqt%K=3y+-Wv{VlRt>3-8hVk~aw{V+*qfsn{Q@2^jMrBGrNiIv0y|7W4DBS|ly5Rld z^!|{4nysKgV9=P9nzaAhL--Tx?c3gm>7z)Zb(zGMJCTPPAyADkdGi9W)Q2+}&oMlA zBbA2@TyoHXGxpV;$9{2zHa5|_&^{4W^gePEUhg2%b(>)^s*H zX)z-qWaAKfn!S6}&&keH&6O|hX9^$sP^**6VDe|+cRBTT9h-P22VT{@PX9AOm!Y%< zR=cdZJB=#y7L?7P4k6gbKLk5@G@Z#KSv>mhCYmP{=hX(;Ho=p%gk{4vXY+W&1Jmxu zR)6+a3q1sW=S0RCu83Jn4-?uVKh7DD*QOq`*oZh2%e9z!mQ9nu) zo!(O)=BcH|ubiNaJy{xFl6#$)3#v9N`_!-4CEVCRdpYSfBo>=qgc>FCT1u~Dk4JdU z`*9RSpZBa4maWKLA73+$3ZDj7L4JXKT5TnQjC@cHq%sqrQnE8u{bMps&-9v$m1~Uz zhKv&Y<*LYE_Ap^`xHMPxtN0|! z95P5+&B6*Z&$kNE7DvXVYq_z6%$yO0VfxflaVY8a$`uwyzx( z0{mY8<1w`jQ3Aq}1K_%nM5w36NMG}%Z{0SJtqqv%yNp%x$3`g&SS0R?o9)X(-4fL_ zF%sKTpF|v>9xT++65h3EPSN2$Jvy{P8fTL*#V{^OFdl9x^mA-2DRq8q$#)*9KmYKl z8Uy~Q`D5+bYb6o1VlR%{BVELm`b{-t=rPO!Shi}n4392hdkVl&`4Dv?tvLk2n>28B zC9iba7$l^zr3Hx<69S&L26+@IT!N5^5XWaE#v_vpp-BJQQu1tk2ZO+V=Jo}@F@w9* zn`vJu2tKj^f*%Pj4*>Gjko^otc!Gfdd*75zDSW=gSb=9YuJgLi150`0|XU&vYB`ShbkiC@WKRe znKUQAqz3Sf#0WQ5k>#f$S;B|qO5l-zPF&@d`$jxu+Wt=i3~&$c;S;&*D3SL4V!(M% zohJENFq>z@ZoZ@o1rQH_8>9SFHk-Rfd0rW=&TjtZ;m6Q+Z>61%fG1#SUA*3v_Vo%u zW{K=8f(DdNh&=wy2!nnYuq}IB@I-xLkZ>&iz#eN*xfBn|^E9 z(@48GSS+Bbf}N>gU86y$r?k8m1R`7ujfN_Wc)F{zWAOIJ1p^Alz7VgOn|QsVkz!@` z31Nc);WnqxipU(^$1SoiBAe%*x{vXFk(-wb_{0NrL?_IIulv{}GASbWpON<+I?R7C zunnFv4GG96+i1~?lB?s#-?79AKSHh1#0x1vq#-!@;1oHxq|q!YwT2%2qn!kvEPmSHvC6cbuXcAs$|PBBc? zF)hojGwT3O{A{8p(tw)~3v3e8NRM-}Ll{y=BOZiu>4XCCi1D@=__~3>Gx!;A~hxBqTwj}f7OG(?Nu9hs{;(JL&T_PpwHWY%^&XV~PF< zy*bMjtLvRfkb0P6yB&uRa>L_XBXTJ`EOxNFw4~lNCSP^`X-s3g64NE`$>QxT(S^jfqy(qi0ZB(C5aboy>g}xC)N6JazcH>_;sHPSBViQub)!!+prqluzxd3 zO&Ks4953+bEM0|{H`y#r)A!RPqj6GXmVkzDC6la+HWQiCn9;<}E!}7Fh7Gj8N%!6> z|Cz8@C%m8O7;0F5Ij^z0);0vQG4f24(paMI7NL)UUvw$_BnGlm%P|(8sBAZLeU4O{ z912KXYd6VP#-{9#{O$;w5-8ZxeD&}XjJBe$W}@x$4t`3yxykMGm003#KoyU*-|s4- z4<#D6BHw8=FCp2QYn%SAkQXk!PfYra>e1`{&GYqgUd*57>B)D)ge0efb=GFFuuZ}+ zHPUKwGy8)&%G{rd8{)%rqy1ERa+X9gft{##8Zfm_8*;OM?Q#xVyuJmRJ-B>PmUr66 zJ)V7~N*0OqPTg$tE!QPJO)7XD)FsPergX)2EaAm)niNyMB@jGi0R6hJkP-|)iOxfV zSF;S`%{3v*^@c6gRX9e`NwJsup$xXd0W)~`-h&}h`h+%`DnI%sh_oR(cgTOi>zn)+up>>wX3o_Q2fM3_N{Q*(kdgE4meT_(iMYD4j-0QL zvotkUf8~QqqHY77bcggt z4gt?Hf#`>{$vuxgx!}M5msF#+Ck0;%fnw8$ipE0=laqTCempm&=i(`dq$i0Exy3eI z{8$(J20=a=tOf%T4n>K|!e(S5-*PE-^}kKsK45Ed;|SMhHDgMpwO|-8uHkKKh!A5`YSa;vO^K#}*?k0(r{Y-=8z1ffu@ z+HFMwYkgI;iO=_mjVS-atr^~JM4?$kYPCcWaZm^rNYuQ(H?;JJG% zr{YHygw~)(J?}tJM>0gX$_q7*s(U&Eax7`?QB#l>NLxr)y6ucCDF0mh*Zd; z*kSsGi+uM>ne*W{H@JL!xdWFJsTIBloHfKmH@!8H=ed1((aKIs=kuYIGwj1A_Z-9RHj_w{P$mai zfCgv(qKm2&=g%rsHa|yD6`on~hgWM{vfb9ydu-$1oK#;bQG5zR_9)ti&U=OYChYJ- zIyUL#Qs{I{#n<%7m!k7iz=56IY8W-lLC#Eu4=bhO)S^?V7bGCTT)!hKb1+Yof-V5xcOfv>6(atY< zI1&C!4FB6EN;tG2DT}}pKLn*7k77>oXD4IOK)T$1WikfWSkM7LPC;a|Wrw)Wv*`k^ zegu(CUbJJ?(KyyC*1Begkn6rdJx%VJRj_Scvv|ffIp~@Rm%UC2*%QFXk3vitp5y*8 z?PPXhIv!%24Z{E|)~v6QDC4pp*KBfoet-FaY=?rzW@sS@$47efj%%?$rKNe%Ze~nr zgMa&rK6msTSni`M0vrh@mxWS+87GBdU8N)ddYJTPD38JM{c59BDf;UK`6A`IaBpXS zd!qs(GK?2SX2C2Ue({&f$U7A$?~-$RWgsCgH=?J>k_QJcUMy0$(L=#?C79vH`rw~ruB&jV>jJiAF7D(z9sv3b zM+zO{g}Kz>wxw~*kwR^Bl{5F|tK{D+E^BS69J4-Oy;Afw@_KV~9fN%-5d>a!kKfW{ zJXyZBT#o0f3_^=L*IUtiJ*@}*ytyopascER;VM0BVE47F520J~f#4kq+eKHCS2U4V zK)yPYMtH`P$016L7!F{pFX{|i=x?0LZ_tfk>aM9~kXSFSc@eXK*%rOI1L0DIlXe2p zeeo7;(bEi8k*Y?LhpN8RBa3Ya;P}`1x|*NC-+D7@>>-CkCtRh-54#_)pN)ZbL9PCC zY~nA*r{I9|^DE83(ri7`s)S$W48Fvx^ZjDl{Nrb}xU=vL%WGPN$6t$`GwKAJwJsa4 z$xjcf?w< zlL+#C?bi6A?LoN`Wr>l>mMdl2R~$v{^A~<}99Q2XDL2D?+l%Lf77aT3dKD;c6{x*1 z_i1)L2oj^SD zw$;yXGO&BqcucUelmho&A|j!7aAA-z;bMoPm3R>W8xxn6i@YLy0mv)^fV^7R+H`c} mO@ZwHdEe&$dl_f$8uBm6JLi5gdE?DZFZBnSDy2#mA^!_B+A&%H literal 8464 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 diff --git a/images/Venu2_glance_default.png b/images/Venu2_glance_default.png index e0bcf140151018b06d0fd4c02a9763ebe0ceea9c..87549035c1052b52c660a6e3c1d0ac89e7b2eb2f 100644 GIT binary patch literal 8408 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 literal 8933 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 OP<^7Q{0(Xu`u_l%N)DC) diff --git a/images/Venu2_glance_no_api.png b/images/Venu2_glance_no_api.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a7d1f66953d9d9b10e29dc7167fcac7afd68a7 GIT binary patch literal 8460 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 S1fKl|LHC9sqD0Fk;{O2ERN?;s literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_no_bt.png b/images/Venu2_glance_no_bt.png index 512b9104b86b64d03b5659d6fcd7eef277739c07..5e43c8d629f57f70011d218e312f46cde9cb4dfa 100644 GIT binary patch literal 9797 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 literal 8428 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

$xcYM2sV{lNy6(DX@+M zx4xvUH8JM+{%`SX)*QPm_mJndwC6K7zpl&iPqN+QO9gYlH>>+6vw(d=)q5w*9Sn%53Lp-1DUp(p-7B;UTFm*JX(o`f_iWkK-wdAgJ zvVD$-dfA@DMg`LoR!xEbZHoh3FN*VD zL&BCGC4?Yx*z8Bvm9A0ty>BvCKcoAY#!P2?({4AN#HDczZvtVxhq{>sqi9SOY2Liy zP-YINmQ@^No)c$R2=ceY=M1IJ>dS>Uk)iqVJf;I?%O<^z-)f|of&YWsUtNcv?5DBr zZ%CGN6Od+oUu?HiLHn(8Z=0l*e=PjZUbto$sV3>EG5z`S#~;TVK+=zn^lH8mvA!2- z02R1J=&d9)D5U(lhtzmWGhq>H60?UPN35i@*2~>I`CV$CAF`DXV8}S}HBW_K7wmaR zF{7Y=|HNtb41&>QMRN~vW$#mo^*wi##C`2DGQfep!YQTwcuJ}2U$czWroUA7UE(&9 z<`^ZWiLUjhbib=K5x%b#VYjytSD`MIDbeOQq$;P?Ho=p!X*sZiWwZIdv&~|%y_`{` z^>(>**Twpu2bmEk?tM?&@nUY;kUsSRy;e-Q!oPVlE7H87ttg32&QIUEV{?YW*tV#> zdLfX8JFO8})BTM4rLx-JAR`YWdT?c1j$KH0Mm$zGIF<@1sVAzV`0}l#0_4k&th&4* zFr*U7@?*`Td%_hjl_dv{r5+}UYI-X2$dw+Zr2cs!|^0uEW{bIQwFFFc^-$Rm)K zPG#_(ukioC82m^_Yx(f4;=9;KgLYXqjBk=yoIB#Dg!CEBw}wP%a!jU%Pq=P7gH&A0 zG3Z}1;U3?te{HGbro&Y_#1r-v?f<6-{9iZtf4z=z;pZPugCAb=zk>$in%)4V7i#jQ IvZjIm56hb6%>V!Z diff --git a/images/Venu2_glance_no_menu.png b/images/Venu2_glance_no_menu.png deleted file mode 100644 index b6e93266537e2b851a83cc200258d46ab29bad24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8985 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 diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index 1be312c..e919c3a 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -27,11 +27,11 @@ using Toybox.Timer; // (:glance, :background) class HomeAssistantApp extends Application.AppBase { - static const scStorageKeyMenu as Lang.String = "menu"; + static const scStorageKeyMenu as Lang.String = "menu"; + static const scStorageKeyGlance as Lang.String = "glance"; private var mHasToast as Lang.Boolean = false; private var mApiStatus as Lang.String?; - private var mMenuStatus as Lang.String?; private var mHaMenu as HomeAssistantView?; private var mGlanceTemplate as Lang.String? = null; private var mGlanceText as Lang.String? = null; @@ -111,7 +111,6 @@ class HomeAssistantApp extends Application.AppBase { mQuitTimer = new QuitTimer(); mUpdateTimer = new Timer.Timer(); mApiStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String; - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String; mHasToast = WatchUi has :showToast; Settings.update(); @@ -166,7 +165,6 @@ class HomeAssistantApp extends Application.AppBase { // System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: " + responseCode); // System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Data: " + data); - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Unavailable) as Lang.String; switch (responseCode) { case Communications.BLE_HOST_TIMEOUT: case Communications.BLE_CONNECTION_UNAVAILABLE: @@ -205,12 +203,8 @@ class HomeAssistantApp extends Application.AppBase { break; case 200: - if (data == null) { - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Unavailable) as Lang.String; - } else { - if (hasCachedMenu()) { - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Cached) as Lang.String; - } else if (mIsApp) { + if (data != null) { + if (mIsApp) { // var stats = System.getSystemStats(); // stats.* values in bytes // System.println("HomeAssistantApp onReturnFetchMenuConfig() Memory: total=" + stats.totalMemory + ", used=" + stats.usedMemory + ", free=" + stats.freeMemory); @@ -219,14 +213,14 @@ class HomeAssistantApp extends Application.AppBase { // "Keys and values are limited to 8 KB each, and a total of 128 KB of storage is available." // "Storage.setValue() fails with an uncatchable out-of-memory error." Storage.setValue(scStorageKeyMenu, data as Lang.Dictionary); - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Cached) as Lang.String; - } else { - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Available) as Lang.String; + // Store the smaller glance section of the menu separately so the Glance view can retrieve it within memory limits. + var glance = (data as Lang.Dictionary)["glance"]; + if (glance != null) { + Storage.setValue(scStorageKeyGlance, glance as Lang.Dictionary); + } } } - if (!mIsApp) { - glanceTemplate(data); - } else { + if (mIsApp) { if (data == null) { ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoJson) as Lang.String); } else if (data.size() == 0) { @@ -268,13 +262,13 @@ class HomeAssistantApp extends Application.AppBase { function fetchMenuConfig() as Lang.Boolean { // System.println("Menu URL = " + Settings.getConfigUrl()); if (Settings.getConfigUrl().equals("")) { - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Unconfigured) as Lang.String; WatchUi.requestUpdate(); } else { var menu = Storage.getValue(scStorageKeyMenu) as Lang.Dictionary; if (menu != null and (Settings.getClearCache() || !Settings.getCacheConfig())) { // System.println("HomeAssistantApp fetchMenuConfig(): Clearing cached menu on user request."); Storage.deleteValue(scStorageKeyMenu); + Storage.deleteValue(scStorageKeyGlance); menu = null; Settings.unsetClearCache(); } @@ -282,13 +276,8 @@ class HomeAssistantApp extends Application.AppBase { // System.println("HomeAssistantApp fetchMenuConfig(): Menu not cached, fetching."); fetchMenuConfigBasic(method(:onReturnFetchMenuConfig)); } else { - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Cached) as Lang.String; WatchUi.requestUpdate(); - if (!mIsApp) { - glanceTemplate(menu); - } else { - buildMenu(menu); - } + buildMenu(menu); return true; } } @@ -329,7 +318,6 @@ class HomeAssistantApp extends Application.AppBase { } else { ErrorView.show(WatchUi.loadResource(errorRez) as Lang.String); } - mMenuStatus = WatchUi.loadResource(errorRez) as Lang.String; } else { Communications.makeWebRequest( Settings.getConfigUrl(), @@ -368,19 +356,17 @@ class HomeAssistantApp extends Application.AppBase { //! Extract the optional template to override the default glance view. // - function glanceTemplate(menu as Lang.Dictionary) { - if (menu != null) { - if (menu["glance"] != null) { - var glance = menu["glance"] as Lang.Dictionary; - if (glance["type"].equals("info")) { - mGlanceTemplate = glance["content"] as Lang.String; - // System.println("HomeAssistantApp glanceTemplate() " + mGlanceTemplate); - } else { // if glance["type"].equals("status") - mGlanceTemplate = null; - } + function glanceTemplate() { + var glance = Storage.getValue(scStorageKeyGlance) as Lang.Dictionary; + if ((glance != null) && (glance["type"] != null)) { + if (glance["type"].equals("info")) { + mGlanceTemplate = glance["content"] as Lang.String; + // System.println("HomeAssistantApp glanceTemplate() " + mGlanceTemplate); + } else { // if glance["type"].equals("status") + mGlanceTemplate = null; } } - } + } //! Test if two dictionaries are structurally equal. Used to see if the JSON menu has been //! amended but yet to be updated in the application cache. @@ -539,6 +525,11 @@ class HomeAssistantApp extends Application.AppBase { if (menu == null || !structuralEquals(data, menu)) { // System.println("HomeAssistantApp onReturnCheckMenuConfig() New menu found."); Storage.setValue(scStorageKeyMenu, data as Lang.Dictionary); + // Store the smaller glance section of the menu separately so the Glance view can retrieve it within memory limits. + var glance = (data as Lang.Dictionary)["glance"]; + if (glance != null) { + Storage.setValue(scStorageKeyGlance, glance as Lang.Dictionary); + } if (menu != null) { // Notify the the user we have just got a newer menu file var toast = WatchUi.loadResource($.Rez.Strings.MenuUpdated) as Lang.String; @@ -897,51 +888,18 @@ class HomeAssistantApp extends Application.AppBase { switch (responseCode) { case Communications.BLE_HOST_TIMEOUT: case Communications.BLE_CONNECTION_UNAVAILABLE: - // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: BLE_HOST_TIMEOUT or BLE_CONNECTION_UNAVAILABLE, Bluetooth connection severed."); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoPhone) as Lang.String); - } - break; - case Communications.BLE_QUEUE_FULL: - // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: BLE_QUEUE_FULL, API calls too rapid."); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.ApiFlood) as Lang.String); - } - break; - case Communications.NETWORK_REQUEST_TIMED_OUT: - // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: NETWORK_REQUEST_TIMED_OUT, check Internet connection."); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoResponse) as Lang.String); - } - break; - case Communications.INVALID_HTTP_BODY_IN_NETWORK_RESPONSE: - // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: INVALID_HTTP_BODY_IN_NETWORK_RESPONSE, check JSON is returned."); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoJson) as Lang.String); - } - break; - case 404: - // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: 404, page not found. Check Configuration URL setting."); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.ConfigUrlNotFound) as Lang.String); - } break; case 200: if ((data != null) && (data instanceof Lang.Dictionary)) { mGlanceText = data["glanceTemplate"]; } + WatchUi.requestUpdate(); break; - - default: - // System.println("HomeAssistantApp onReturnFetchGlanceContent(): Unhandled HTTP response code = " + responseCode); - if (mIsApp) { - ErrorView.show(WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + responseCode); - } } WatchUi.requestUpdate(); } @@ -989,14 +947,6 @@ class HomeAssistantApp extends Application.AppBase { return mApiStatus; } - //! Return the Menu status result. - //! - //! @return A string describing the Menu status - // - function getMenuStatus() as Lang.String { - return mMenuStatus; - } - //! Return the optional glance text that overrides the default glance content. This //! is derived from the glance template. //! @@ -1047,11 +997,12 @@ class HomeAssistantApp extends Application.AppBase { function getGlanceView() as [ WatchUi.GlanceView ] or [ WatchUi.GlanceView, WatchUi.GlanceViewDelegate ] or Null { mIsApp = false; // A bit unnecessary given the default mApiStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String; - mMenuStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String; Settings.update(); updateStatus(); mGlanceTimer = new Timer.Timer(); mGlanceTimer.start(method(:updateStatus), Globals.scApiBackoffMs, true); + // Although this is now known immediately, wait before displaying so the status can be seen first. + glanceTemplate(); return [new HomeAssistantGlanceView(self)]; } @@ -1066,8 +1017,6 @@ class HomeAssistantApp extends Application.AppBase { //! Update the menu and API statuses. Required for the Glance update timer. // function updateStatus() as Void { - mGlanceTimer = null; - fetchMenuConfig(); fetchApiStatus(); if (!Settings.getWebhookId().equals("") && !Settings.getClearWebhookId()) { fetchGlanceContent(); diff --git a/source/HomeAssistantGlanceView.mc b/source/HomeAssistantGlanceView.mc index 015b367..f5ceaa8 100644 --- a/source/HomeAssistantGlanceView.mc +++ b/source/HomeAssistantGlanceView.mc @@ -47,8 +47,6 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { private var mTitle as WatchUi.Text?; private var mApiText as WatchUi.Text?; private var mApiStatus as WatchUi.Text?; - private var mMenuText as WatchUi.Text?; - private var mMenuStatus as WatchUi.Text?; private var mGlanceContent as WatchUi.TextArea?; private var mAntiAlias as Lang.Boolean = false; @@ -69,7 +67,7 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { function onLayout(dc as Graphics.Dc) as Void { var h = dc.getHeight(); - mTextWidth = dc.getTextWidthInPixels(WatchUi.loadResource($.Rez.Strings.GlanceMenu) as Lang.String + ":", Graphics.FONT_XTINY); + mTextWidth = dc.getTextWidthInPixels("API:", Graphics.FONT_XTINY); mTitle = new WatchUi.Text({ :text => WatchUi.loadResource($.Rez.Strings.AppName) as Lang.String, @@ -86,7 +84,7 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, :locX => scLeftRectMargin + scRectWidth + scRightRectMargin, - :locY => 3 * h / 6 + :locY => 4 * h / 6 }); mApiStatus = new WatchUi.Text({ :text => WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String, @@ -94,28 +92,11 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, :locX => scLeftRectMargin + scRectWidth + scRightRectMargin + scMidSep + mTextWidth, - :locY => 3 * h / 6 - }); - - mMenuText = new WatchUi.Text({ - :text => WatchUi.loadResource($.Rez.Strings.GlanceMenu) as Lang.String + ":", - :color => Graphics.COLOR_WHITE, - :font => Graphics.FONT_XTINY, - :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftRectMargin + scRectWidth + scRightRectMargin, - :locY => 5 * h / 6 - }); - mMenuStatus = new WatchUi.Text({ - :text => WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String, - :color => Graphics.COLOR_WHITE, - :font => Graphics.FONT_XTINY, - :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftRectMargin + scRectWidth + scRightRectMargin + scMidSep + mTextWidth, - :locY => 5 * h / 6 + :locY => 4 * h / 6 }); mGlanceContent = new WatchUi.TextArea({ - :text => "A longer piece of text to wrap.", + :text => "", :color => Graphics.COLOR_WHITE, :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, @@ -134,10 +115,8 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { var h = dc.getHeight(); var w = dc.getWidth() - scLeftRectMargin - scRightGlanceMargin; var apiStatus = mApp.getApiStatus(); - var menuStatus = mApp.getMenuStatus(); var glanceText = mApp.getGlanceText(); var apiCol; - var menuCol; // System.println("HomeAssistantGlanceView onUpdate() glanceText=" + glanceText); GlanceView.onUpdate(dc); @@ -160,33 +139,15 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { apiCol = Graphics.COLOR_RED; } - if (menuStatus.equals(WatchUi.loadResource($.Rez.Strings.Checking))) { - menuCol = Graphics.COLOR_YELLOW; - } else if (menuStatus.equals(WatchUi.loadResource($.Rez.Strings.Available))) { - menuCol = Graphics.COLOR_GREEN; - } else if (menuStatus.equals(WatchUi.loadResource($.Rez.Strings.Cached))) { - menuCol = Graphics.COLOR_GREEN; - } else { - menuCol = Graphics.COLOR_RED; - } - if (glanceText == null) { - // Default Glance View + // Status Glance View mApiText.draw(dc); mApiStatus.setText(apiStatus); mApiStatus.setColor(apiCol); dc.setColor(apiCol, apiCol); - dc.drawRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, w, 2 * h / 6 - (2 * scVertMargin), scRectRadius); - dc.fillRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, scRectWidth, 2 * h / 6 - (2 * scVertMargin), scRectRadius); + dc.drawRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, w, 4 * h / 6 - (2 * scVertMargin), scRectRadius); + dc.fillRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, scRectWidth, 4 * h / 6 - (2 * scVertMargin), scRectRadius); mApiStatus.draw(dc); - - mMenuText.draw(dc); - mMenuStatus.setText(menuStatus); - mMenuStatus.setColor(menuCol); - dc.setColor(menuCol, menuCol); - dc.drawRoundedRectangle(scLeftRectMargin, 4 * h / 6 + scVertMargin, w, 2 * h / 6 - (2 * scVertMargin), scRectRadius); - dc.fillRoundedRectangle(scLeftRectMargin, 4 * h / 6 + scVertMargin, scRectWidth, 2 * h / 6 - (2 * scVertMargin), scRectRadius); - mMenuStatus.draw(dc); } else { // Customised Glance View dc.setColor(Graphics.COLOR_BLUE, Graphics.COLOR_BLUE); @@ -198,9 +159,7 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { scRectRadius ); dc.setColor(apiCol, apiCol); - dc.fillRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, scRectWidth, 2 * h / 6 - (2 * scVertMargin), scRectRadius); - dc.setColor(menuCol, menuCol); - dc.fillRoundedRectangle(scLeftRectMargin, 4 * h / 6 + scVertMargin, scRectWidth, 2 * h / 6 - (2 * scVertMargin), scRectRadius); + dc.fillRoundedRectangle(scLeftRectMargin, 2 * h / 6 + scVertMargin, scRectWidth, 4 * h / 6 - (2 * scVertMargin), scRectRadius); mGlanceContent.setText(glanceText); mGlanceContent.draw(dc); } From b94343de4f9e5d5c27c66160b0f1c4c61184d673 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sat, 28 Feb 2026 16:47:20 +0000 Subject: [PATCH 2/8] Revise troubleshooting guide for API and SSL issues Updated troubleshooting documentation for API testing and SSL certificate issues, including clearer instructions and formatting improvements. Signed-off-by: Philip Abbey --- TroubleShooting.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/TroubleShooting.md b/TroubleShooting.md index 9d3f8ee..251189d 100644 --- a/TroubleShooting.md +++ b/TroubleShooting.md @@ -117,6 +117,7 @@ pause #### API: On-line There's an online way of testing the API URL too, thanks to [REQBIN](https://reqbin.com/post-online). This has less setup and it can be saved if you log into the web site. Please note two things: + 1. The URL entere below must include a trailing '/' unlike the URL entered into the watch settings. 2. The service imposes a limit on the number requests you can submit without a subscription, so click with purpose! NB. Changing browser buys you a few more clicks. @@ -125,13 +126,10 @@ There's an online way of testing the API URL too, thanks to [REQBIN](https://req #### 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 HomeAssistant application. -3. The Garmin HomeAssistant application reports: -``` -API: not available -Menu: not available -``` +3. The Garmin HomeAssistant application reports neither the API nor the menu are 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.** @@ -147,7 +145,6 @@ To verify if you have this issue you can use a tool like [SSL Shoppers's SSL Che ![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...) @@ -158,17 +155,11 @@ To verify if you have this issue you can use a tool like [SSL Shoppers's SSL Che The [editor](https://house-of-abbey.github.io/GarminHomeAssistant/web/) provides the following functions: 1. Syntax highlighting - 2. Schema checking - ![Schema checking](images/editor/schema_check.png) - 3. Entity name completion - ![Entity name completion](images/editor/entity_name_completion.png) - 4. Rendering previews, to aid HA 'template' creation - ![Syntax highlightingL](images/editor/template_preview1.png) ![Syntax highlightingL](images/editor/template_preview2.png) @@ -185,6 +176,7 @@ On (1) you will initially be presented with the following message. Please do not

# GarminHomeAssistant Web Editor + This is the web editor for the GarminHomeAssistant watch app, it offers enhanced schema checking and validation over the original JSON schema by using the HomeAssistant API to create a schema based on your HomeAssistant configuration. This editor makes use of the same credentials as the watch app (these can be pasted in the top bar of this page). However in order for this editor to work, you will need to amend the CORS settings of your HomeAssistant instance. Add this to your configuration.yaml file: @@ -215,7 +207,7 @@ For directions on how to write your menu.json file, please see the README in the For this you will need to have already got the main application or widget working with a menu in order to prove that the API calls are successful. We have proven this works with both our home brew infrastructure as well as Nabu Casa. Now with a script similar to one of the following two, you should be able to fake the watch API call and verify receipt by HomeAssistant. -#### Battery: Linux, MacOS, UNIX, Cygwin etc +### Battery: Linux, MacOS, UNIX, Cygwin etc Assume a file called: `send_battery.bash` @@ -248,13 +240,13 @@ curl -s -X POST \ Execute: -``` +```text $ ./send_battery.bash 45 1 ``` The output looks like this: -``` +```text Battery Level = 45 Battery Charging? = true @@ -315,13 +307,13 @@ pause Execute: -``` +```text > home_assistant_battery_level.cmd 41 1 ``` The output looks like this: -``` +```text "Battery Level = 41" "Battery Charging? = true" @@ -345,7 +337,7 @@ There's an online way of testing the API URL too, thanks to [REQBIN](https://req URL for copy & paste: -``` +```text https:///api/webhook/ ``` @@ -399,7 +391,7 @@ As a desperate measure to assist with debugging the HomeAssistant Application, y The figure above shows how to find the file on Windows by attaching your watch by USB cable. Inside the `CIQ_LOG.YML` file there are often multiple entries, each looking like this: -``` +```text Error: Unexpected Type Error Details: 'Failed invoking ' Time: 2024-08-30T12:00:25Z From b6cec5a6d42893fedf8aacffc50f1668d20df54f Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sat, 28 Feb 2026 18:10:49 +0000 Subject: [PATCH 3/8] Update Glance.md Fixed typo. --- examples/Glance.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/Glance.md b/examples/Glance.md index ea1e8d7..afe6da0 100644 --- a/examples/Glance.md +++ b/examples/Glance.md @@ -2,7 +2,7 @@ # Glance -Since [version 2.30](../History.md), it is possible to ovverride the text displayed on the Glance view. This page explains how to customise the text. +Since [version 2.30](../History.md), it is possible to override the text displayed on the Glance view. This page explains how to customise the text. ## Status View @@ -12,7 +12,6 @@ The status view displays the accessibility of HomeAssistant API to indicate if t When API is inaccessible the field will turn red. - ## Customised View In order to customise the Glance view you need to add a `glance` field to the top level of the JSON menu file as illustrated here: From 6721a13e99d5120f1e356c53f9fb29214c57e37f Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sat, 28 Feb 2026 18:51:42 +0000 Subject: [PATCH 4/8] Update HomeAssistantApp.mc Faster custom Glance update. --- source/HomeAssistantApp.mc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index e919c3a..1cf7806 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -998,11 +998,11 @@ class HomeAssistantApp extends Application.AppBase { mIsApp = false; // A bit unnecessary given the default mApiStatus = WatchUi.loadResource($.Rez.Strings.Checking) as Lang.String; Settings.update(); + glanceTemplate(); updateStatus(); mGlanceTimer = new Timer.Timer(); mGlanceTimer.start(method(:updateStatus), Globals.scApiBackoffMs, true); // Although this is now known immediately, wait before displaying so the status can be seen first. - glanceTemplate(); return [new HomeAssistantGlanceView(self)]; } From 7daa07f52f86671a25c4df52a4044c74f6e7a04f Mon Sep 17 00:00:00 2001 From: poaudet Date: Sat, 28 Feb 2026 14:15:09 -0500 Subject: [PATCH 5/8] first commit --- source/HomeAssistantNumericPicker.mc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/HomeAssistantNumericPicker.mc b/source/HomeAssistantNumericPicker.mc index 4b49196..ce0b733 100644 --- a/source/HomeAssistantNumericPicker.mc +++ b/source/HomeAssistantNumericPicker.mc @@ -43,15 +43,17 @@ class HomeAssistantNumericPicker extends WatchUi.Picker { step = 1.0; } - WatchUi.Picker.initialize({ - :title => new WatchUi.Text({ + WatchUi.Picker.initialize( + new WatchUi.Text({ :text => haItem.getLabel(), :locX => WatchUi.LAYOUT_HALIGN_CENTER, :locY => WatchUi.LAYOUT_VALIGN_BOTTOM }), - :pattern => [factory], - :defaults => [((val - min) / step).toNumber()] - }); + [factory], + { + :defaults => [((val - min) / step).toNumber()] + } + ); } //! Called when the user has completed picking. From adc04ea9a2ec7f69991d4e0e12033bcca1835df0 Mon Sep 17 00:00:00 2001 From: poaudet Date: Sat, 28 Feb 2026 16:50:28 -0500 Subject: [PATCH 6/8] Refactor HomeAssistantNumericPicker to improve value parsing and initialization --- .gitignore | 1 + source/HomeAssistantNumericPicker.mc | 31 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 320a50f..c0b365d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ Thumbs.db source/ClientId.mc # Gemini API key for automated translations gemini_api_key.txt +developer_key \ No newline at end of file diff --git a/source/HomeAssistantNumericPicker.mc b/source/HomeAssistantNumericPicker.mc index ce0b733..715861c 100644 --- a/source/HomeAssistantNumericPicker.mc +++ b/source/HomeAssistantNumericPicker.mc @@ -32,28 +32,29 @@ class HomeAssistantNumericPicker extends WatchUi.Picker { ) { mItem = haItem; var picker = mItem.getPicker(); - var min = (picker.get("min") as Lang.String).toFloat(); - var step = (picker.get("step") as Lang.String).toFloat(); + var minStr = picker.get("min"); + var stepStr = picker.get("step"); var val = haItem.getValue(); - - if (min == null) { - min = 0.0; + + var min = 0.0; + var step = 1.0; + + if (minStr != null) { + min = (minStr as Lang.String).toFloat(); } - if (step == null) { - step = 1.0; + if (stepStr != null) { + step = (stepStr as Lang.String).toFloat(); } - WatchUi.Picker.initialize( - new WatchUi.Text({ + WatchUi.Picker.initialize({ + :title => new WatchUi.Text({ :text => haItem.getLabel(), :locX => WatchUi.LAYOUT_HALIGN_CENTER, :locY => WatchUi.LAYOUT_VALIGN_BOTTOM }), - [factory], - { - :defaults => [((val - min) / step).toNumber()] - } - ); + :pattern => [factory], + :defaults => [((val - min) / step).toNumber()] + }); } //! Called when the user has completed picking. @@ -97,4 +98,4 @@ class HomeAssistantNumericPickerDelegate extends WatchUi.PickerDelegate { mPicker.onConfirm(values[0]); return true; } -} +} \ No newline at end of file From 8893e596ecd8a2a069c20d5602b2ea917e4a4b9a Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sun, 1 Mar 2026 08:29:39 +0000 Subject: [PATCH 7/8] Update HomeAssistantNumericPicker.mc Code tidy --- source/HomeAssistantNumericPicker.mc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/HomeAssistantNumericPicker.mc b/source/HomeAssistantNumericPicker.mc index 715861c..79a9cd8 100644 --- a/source/HomeAssistantNumericPicker.mc +++ b/source/HomeAssistantNumericPicker.mc @@ -30,11 +30,11 @@ class HomeAssistantNumericPicker extends WatchUi.Picker { factory as HomeAssistantNumericFactory, haItem as HomeAssistantNumericMenuItem ) { - mItem = haItem; - var picker = mItem.getPicker(); - var minStr = picker.get("min"); + mItem = haItem; + var picker = mItem.getPicker(); + var minStr = picker.get("min"); var stepStr = picker.get("step"); - var val = haItem.getValue(); + var val = haItem.getValue(); var min = 0.0; var step = 1.0; @@ -47,12 +47,12 @@ class HomeAssistantNumericPicker extends WatchUi.Picker { } WatchUi.Picker.initialize({ - :title => new WatchUi.Text({ + :title => new WatchUi.Text({ :text => haItem.getLabel(), :locX => WatchUi.LAYOUT_HALIGN_CENTER, :locY => WatchUi.LAYOUT_VALIGN_BOTTOM }), - :pattern => [factory], + :pattern => [factory], :defaults => [((val - min) / step).toNumber()] }); } From ca854cab75ee9814420e9b3cef1edd6256c91d9e Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sun, 1 Mar 2026 15:22:07 +0000 Subject: [PATCH 8/8] Create Venu2_Glance_good.png Actually a replacement for the one deleted that is used in the App Store. --- images/Venu2_Glance_good.png | Bin 0 -> 15793 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/Venu2_Glance_good.png diff --git a/images/Venu2_Glance_good.png b/images/Venu2_Glance_good.png new file mode 100644 index 0000000000000000000000000000000000000000..f930d2d77de791de76afeeefcbed74cdaf48ae69 GIT binary patch literal 15793 zcmdVBcTf~j*X}z*X2@BRO1$=TXoK@``0aos-CW%wRd-~-o2jZw|6vDSB(fl2LXXVL>lVK1|Sd^ zdH0Wp1MJxqt2YI{gu|4Spc+a_%x)g8FJVr0AP{$AU}C#g7nJh5-jgC$GF<6W3ENU# zZ+)_EgYT>++|J=o8MQ4guyyE?C~4HbG%hW5+x-0U-P9P@Sb_8k^oN9$ONEB#PekoqXv(+|#;)8iyyg}aa%G`U%?N1rH--^uPMv!*aD3J0yW_ICz^_SH3hgCKHJ4K)0 z9`WCH$T`YCFd@WK|MuwRd$B(_e|C$V-4?ir>+34X^C7t+yz?r4+m;9 zbcQJ+ql*k^_?{2+6|2f9G3blt9EE3h^KL#EGHV=~Ia?E?B)HIw_}%a$p_4pGT_Gey zinsKuYKnIbB>_w-{_Re+p@-~YGm*KukBA*f^Bg!Lk8nEWIgh#)H+Art z@I|rALob4p8b43RywwwM&sb%eDNb0jk0v9HiA#h)C zY_!yrLAQ5*$o7(CU=O~Vx~V4!L_l%(4+dps-vf5ydTHpW;O=08Nhk>XyrI8hVvqdn~OBE6=NpnunrUz<5{#g4#7mzN+Rs67oxepJuPMEU_;p% zqv~|Ag#`!pWUYL#T)&Ns(c_H8W7jkgLkOuNUhjKc6Ra>&MQ&zAJQhk)7GM)hrik|e zfd_0tqJSf?m4QvD{Qo>A41@Lm#WDXC@?V^PA^%gH|9H%QHT$ov|L)rVBhG(3=0A4- zUz|GDZdP>@O-%(J>@`X#w72QC+LYz4SkeMqb$;?*HwVbjp-<>qh@pf5pM?_od2AHQ zK@@mOR(dQ-nO-5Up_C)V%j{>l!uLpg<9KSgZKsanPsTSVuEfjVVSB@Sggudj0hV7+ zui@W5e!f9TtBoI)2y-(f`fU~e#)((6SxjyYgz5qplA;8OOs^QxlZ{?^L4zDJxsK_f zN+Y?u#M=d$bQgcLxaFD_XyWk-*X2)tZ|#b+ID?rJE~~!a-*0iuwHhDByL8`QSjOi9 zelRYGkKO3><;@$S^^(aqEABh58{lsAM_rGjX03$@??S>N9z!mih}P|YeGsh9j4FW@ z{5^eE>xvQ$8vDQwoaRV?vh16pS8K=LI67fpre~FonHCXKIu`%(K!^MMBmWjxu1KO@ zEB0o$zXSZ5Q(3A_3XjD$g#T1|A|yoi46jd5)-K|(!@dALD9+7vmpPnF*OYn9cw4M% z9kCmzj^3Bz|MqI@Dj44nuKtPeCh({s-n=|Gj9~^+%;D>3{8Q+rqx=Uvn508so~I3v zZWw)v@=s~Mr}B>M%b#Ys?O)T^;QR~X%!F-c3bp4~?^du!4e z-y#GsoQ1bj!VHC)hzEb8_m-PlUiS!Tw+7gAEDG+v4|t*+hC#;y>fOC|NV zw!i3+-MmR4#IGn6u)tne$hmH_L=n#IZv@>x(gLzoU0%$ZZ1k^WuiSSfgB36}n8lQ! zXY$J1pG#JVHH?guh2kqc*xS9pl6J8}@?2on($s&EsF*5kX!SQI2Ca9{jk8*>t4T+@ z%o|0zPqagMc@~*U8+KEBp-BuU^M%`Ly_2ZGi4N7rg4UDJslV>m9-q-1kJCW>bH1i_ zrnR}x)X*(NJq!0wt5E@U#1EG{A=9qkZY3-a=W{GgHJ^UqnCCp7XKwQO8gzdD#(JT~ z>08PA`YL*Fi_9L_HooUR%Lz0uwIF-lom7||+AY`j=iTQ(lbdn%AShZjbx>lH!~`u4_R zI%>gqY6)Qlzn<;hvxg=R@8x{akq>)V`}&K)TIG0|A^kn<1<{+56hFi zDr@=n{--*^`@;|I#P?5=hZdVRIW%wd%}u2;b(1)ags2(9>3A6ZY$U>j&rpTz$m)1!y&Ed(02>n6VE>-<6 zQAD#{qExZ1*A3%Lr<{>c`8BMBLUMd>!aQ~X7Z43e_pGe0$<5hH7`;>O$q|+40ngqZ z?xXFKE_ETgIAECOXaCZARN8t{cx^E$nANjlgH)1p!Eni(<@#)zVRdoipol@?W_F$_%UfzhW=a~_Aj`%Rh0J4*^6G*~K0^*jl zrR{Bgj{h2qG`Qgz!nxpu`0_+nXE2dFPhm^6%*$Xa&)GdJKKb(|of*Twr`5DZ8>rt* zFAsk-&)Vm}la{Z5fe5Pz$!Ao0T)~}Ng@H|E)I;CvTL%V_NqCRrvE!DScch0kGbX19 zc&`^C4QWSIN>k}#;xo8Pyy;%6w-bMKj`H%wwtfd$yTDlU*^>Udw>9df5%JLy72s7H zW@)qPB3J1&t}CbO0<@GJ5+Q3GDvOF~Gs1#=_E+{(Zw(!SGunu=3`!O1<9<_?T+vMF zMW&EtmQNs=criI*uRN$U*FQj1mMRrH3{*Ce_-J>`I!kd@8$*!*6*6NqA>Ah#N3_mw z-N2D=Q`R(5Dt)th(%1U^xxl+7T1_GES-7kvrWcuCk@m!jgoEf#Li^($I0dV&o>VWX zdh2CPAbs3qVF{&S5hSo90%(kzdrix3jX=e#oJzeN44a@O3tYBtipPEDLtL8e7Yz4(IubAJul>%bjnMKMs- z)p=oM94{y&X=J@1BU{4pp6mAc?QuukU#sJ1bYldNIr?7=Y3Zd@G(V={Q}plj$4H9F z80M*)@|x9nZC^j3O0yJN#4s>ZlJmyjVd*F21~JDU?Vddy_v^DxxJ1F=QsiaTZlu$27Em)%jtn3N4__H^XFAxR z@Hgk%PjF~#$y#!%6pYGWk}9=g+VZg6RdL{0c?E^M=b{vfqru~)N_3~BN@ez83`kz8 ztyDE_yG0i;uC5q){=bNLN2X<9vn|t+#$snb@K)>M z!7e&#JHlfj7}lP9Tajc(O%hJ)#vB*80x=_YVw+j_@JTeRW>Ukm#u9msb|9jRnb-X6 z=fRry5Pw?in~V3)VeY$g(Rp-Za1F-Yi!(LY3{%6lnN9E}h?%?(lrfneCzv1;LNw@M zpknNP=-xTE8&FV-5M7p9kfbn391Hh~P~qddEiqin-BoL*=#twMgMsrSsbqPE5>zf@ z0kdKchER^a+s&4}=8@^`j1LIZnulI9GWmzktV7d zUK;VWCS|nal5^?hBK5{+`TZ`)d8a5*ehVdGO0D*MUU<*#15gDIg9&YCD5zs_@c|20 zh%4q4_F)AGPSdFen#*azD@B61K}l%gz)BiR++1^#+r!q@TFZ;j?d++Lh`x-d+DUft zD!eTk&{$^v#EwN}SVHo5IiK5`3Ey5@X*`z5>VS7ab%jSXx1ujh;Io9DOCh>{=yARP`{nE=Jy)rq1e%G=Mu|*eZVF~_^Zfn-s(yb{i+s1iNNmNt zW_#4MebrGy3TA1w28OM?sU9wN@;ceeBSUtP*q#JZ#bT8o#|Xn>AM~%hHi(Sp>vN*K zmRFy0LJ;2s+3xDov1rx0w(s%3k9jr_TG-*h$3{Skysts8=Wi;}wbEU2Y&5F-)XP0k zRusF#yGB+lN% zM6P0ZN8LI-%KM(Al9wPy;uOIKq?+*kYeL~++)nyWRyFfMt~JgJT1oXz7h&A@fdox~ zW2JbX2!EBy^TC>G9IO*x$qYgXYv;&q%d(tek^w!OE;(BH%{F)pQ@N6UG;A(<$r(mk z=Zj$mWGFMuWbvnM_WoU| zpJ@bcm&@?#hn&|#4h?;(M=}X^sVOa77??^QmdTJR_OL!|(s2{|Flti)X*S%twOmJt z#*T3Khq3(vgvcK(5gx;#wyP}$q>0F#FeOUC)BYw@Dbl8*89E2UB(9-S#M4N1xZX^c=brw^pk5$hUtR5uao1zY{U4SGE1r{< zyVs~A`rp1g@s@ONZd-%SHRc-j42KW~5I5}d+UC*WpY}EPDGbQn=dOMXzF2&A`{RvV z=I4*0MO8cv$4(JfL39{X7+EcN*c0&~ZTMxN6r7m?!DF6Jv013&k00yC&rb#D78i0B zXt}q-N`sh3~PED#ks``C0q?kc?s9UN9y@L=3!ISy}n!U_lXu;*L6- ze)-KivSYG}Y^)m*K%^}Embdll2+<5^>G+^-871?g;$vnKOauOENH zi%41ev7st>q50tA&n@Fq+Do>=hrMAcdRdPQq~7%mZzQ0ZI0NIA7!EE!r;c{uV~b>m z7Fzxhuvt`7I4i1OI)=A7Y;K6VM8v@6N?#d}J+T2>%TuPXCqYzcEiR0$E_|!seasUX zC%L?-dUvYBjr>r6WI$^EvJsVA2N{iBOX?G}oj#jtW6)Dx73o5+ry2@qFJF6jc6&ib5P_N*^>_28yw^WUHl~%FmsHJEu_{B`&8disE1-+Wb2k_OZTE z*g_;Z4G}`M^$US#Pw=OLTUkXJW;6sVmK)%f@3UL>wVI(#_=KrmL64oPcY?$!5}okK zaBTm;G_U+fS9osd*U-5RY_*50+JFhr-Q{Das?qab9SY`f0F8&6y2>H}i6evJG$R-! z+F5$b4Z`PU=^azUG79~jdNMRhR%~qaB64W12JNNAz26MFSm(#YgnUh#&7jK)hRE#u z>ywQk)%&z&Z_!Uf0*U$ZG>Y|lDwX9q3CW}O-a|}zw(1*`MTM%D@P?4)$Xk z4Zb?{s43-D0G^$DY=AO%9-AXdg`aSTi1Xe{=jM!r;Z$&{zqxRBP|;S^`)h4YJXndG zHj3Cd7KtdP!)s(jj)qA+3m=1AjMA-HFxm`nc4FQ6M~=`InQwa_=RPj}^5|EJv-30G zmp82SOoYcL#7gt$W6G>Z0vDM?==Rx-zCL41rt#gW#Rb| zmbe-(3|^7{u!!M;O(c1V%sma!oS|n-+u;7_KDJ2cB<#da!*IC76zFnkd}J$HFB%d0<7ci-w8;z1)nO^48&R;t414_gj&GI<3N;hRSB(pvo`ut4 zo@a5i9ghiCcwk#2L2om&eMv=FC3Z z=?oU8@2cbhJaKH176&{{B~!YKIc!R%>dejGYXJrh1cesjp`hL3GN<{q?TYmn)2tz0 zC8LTSnubK(p?6M7vkKiViVGD=PPnYXA|nXEeum1^Mwb?TFfNBS(j7hhIndtwn$L#j zC3z`Vap=YSY9ALpzIbYk=oCcQO-98cA~Gk<}94X%BIbkRRTVp>9$Vo{RY4>MvQMnquqS<=P@Wo&I>*c(iC$ZTU!&E1n!UF|UT^PLZ zkh=5sF*2Xp7J{(3i@;S#O}o;_J}3tPx;i1nC`{@FZAP1Y7I!bUn^nQ87xS5OCrn`m zL%qq>-eTkE&b5a)JPn&jH6VscVmF#c!2em!%zveJg3xBD73xQ139}iCy#+ukw!~N| z&!R#+z|FL1=t>PT!sYL>0O$N^w;0aKe|@2jdXGB@ z-k?b<_8B82K$JYVN9V<#*_%`g3d1@t~lmac4Qg?&x=2nJfrN2qpTe}gHQ z5l_HkuY@iUZ?5cOVDm5B$vsxig%FEahp!}hH`535g zJ_E^qzl#*TnFqe|0f~dJ_Rcjns6Rabd614wu5D(-A?p(w?$3l#= z75~Y4IQ)()ESt~_Lb=n5p_DcIUWS{NaM?rKEcbEw<{$q7 zo)k*#=+4IuV5TeFwEO(XLr0R;iBP|_eiE=r$dt~VaOXziYi!XtH_Nqx4^i1WCInk>k zNb2OvqgQH(Pve3CG^Aendhh5xLgs5Jcs_D9t^ROcj7B}2i@L@=-oO#)Uh+POd>%$# zKRlFptL2t8vd3P`&~?VK@TWV~f5P6ygo88sOy^E1aZScX00v1auVG`%ipNiFlgCvy zd~5*eIUr}{Go|HD%H5sA3ZXsE(93ZN8%Z+!7JR0pa(shW^}+4obqacP@Yik(Ke0MY z3y{<7Z=~<^Q*=~{*a{EThXx!&S<`!O*6MY4#X`XPPgbsrYGb9D)qRxWU?UxK@7Z+C zBYHoPP0Bo1O1PR*9by8W(LPPpo}2_+T%9(9RLNn$7r2909yZHtE%^VL!~O60*&WaO z-yQScjP1Yq**{kIf6mzc8|~cCG>V|<1NbQ&@%4$ zZf0($rz2P0;>_O3#{Wny1q9Ada1qU=vo`K>=bC0(qVN-mYls!`GML{!CTm0@haZO= zCF^Cdv>i-4z>kUg0QJa?>{XNd&Lx2H8L!2)0A1r+Hy!)$X-|GKlB$Mu6h+R5%vE%u zZ=~B;|EYGjlLD#Is4K5RwFaXGOl1pVgM)U`ZXQQaXME_dj=bVXPw@7g#jy zJtL6jT%;uXfKbIlctCh3pO4N^MUAhdl6HS5N>kXed-Gbh|4hB3=17Jd;^2#k&fV^^ zbL`<)&ly!_3Zi^WvM%I`&S9bU;RrLo&5*4dZjobG`pR4O);PGy$6oGWQV_GL6`dD( zMGlN@U?t)p@6xse;Fs~9* zTcTF+l>U$05KVy3rg2)5k%LAPK3u#9piWF3kwNdz_~`$@{LsE|={Mh|fo&?)xlbBE zSK^xVZa=c~Y%cwY_mC-YVM@Cd8Dlc+(6`Ul7!PU@R&u7~HG zH*CPFsj-#S&Fi(1Bx`*Jw}1P7ILKXDN!@79qfo|T`DavO63p){Z%^GXX(!e^{q5Z- zbdzEp?)!f2bD7&qR<}+$sj=J-5`1;3k&|9}jXi#thq68fSgKI51WtR>QjJwtrrN^7 zV>5k@GMTSq_>SKAVwY|0^bbNxuW+)mt1Wf!e__!0{qh_YS;ZgPEv!8afUm-1@qNGO zq##P;w7BBrLXFgS*tjeSwuPg%>*g(Je16BDjWo3O0z5+G? zxM_7TL<@OG)R3ytQZpJY6TO0K(Wx-Ps6W#MaxwiR6xl!3D0*0SaxIRz;Fx3(l|&EZ zl+c>@S3K@*#?3tz)^gMLg|z95>{M2U$FsHih7WDJPTh1=07kTT64~AhjFXaJ_A=!V z#xAbtxAdLgyZ(HNr%1bPmsrNh;%X028T8lmzf{ncx_+4SE`kjhgb6ebt7Ucs9>Y+R z0FbL|zPB|JpM}WUIE{9B%K5$n#W22;#ZEagp~;L}9ixNe>Hn=yV2UQGaExJMIqho$9ArnRs!BQHwVscJK>B!yxDdH z7rSiGpOB-cRGOQE!iba*siHTFp?#R3J`z(^As1ssMzAvT9<|l%)|3uVEV)@JnL}VM ztnsGIQ*++ZUm&D6&dFj%?d^`Lspx}?NZPhX`=_QQdA1UA9}q$cJX@MnJ6F6h_7(C9 zN>oRxLb*;Ld91j35sY3iZ~6fTi%U0q(c9;eJlsY&USzL|B352(^p@qQG8)t7WRoL+nn*M%|+#vef@(BpVv>VAu>k{`m=$$RqD5Y@5WR({bIPi8?O8W?a!9*?jt8 zcoOtn*@B0nQG(bkR?60uq;4@RYCKt22y1Nr#&I!XRdkyN+o()2uZ9I>jtzmJ4QSDd zWI3;}4P52vUaKl=9LAr#vF2(^f)H=!ZZNuxWgJ?JC*Ar+WcX$&ztIT0*E9?yfYQ`z zArp-s_W1J32g(t4j|$^gBNf1`7);)H8A{-FC*ia2#bI^fYVcuJkexN5)n}=#)!w$j zU{CeA-P&ui()ABRCT{RHTuBEZx)`=8EYIH$Yh|Z?uD;dQHF_@|KMcd)=na~@ZL4|l zc*)hch?HL=@y|ov z^ax=>KDb>Qsw}Gb zn(dT&L_5h+&%|0szDtDdhiDfz_C7FGASJ!wf3$ereIV!>I|Z*Z>wa*@)I2{@ zXPcGD2d(h1ZA62EFub@ve z>ML=KcHDiYYMcg!MrM|HhxF@CYKpVHpQPn26<~ZlB0sBbc5h<(*1XMSS`;uM*(>Cs zn`BAe=OjmF#IxloTDs0_XrTb=Avx%TO~iV=j1CbR3~kIzEChL=@TY6+7unN)Q0UjQ z?~eA=53pZ6Do#z;VA3)})31~5jmt1O!LwY!JXIftyxF3kfXpy9aa|P{>^~JWx;$YS zau7aWhVxyr%pP<8Q@p|s!fj?$F`SuGu3!Cp1lzx0n<~2io=Ivs?YEJAkf~>o^;nD_7l8;%>{|ZCy#QBqVD8rymh1M5o z6OzmN!Bb*|^C2sZYCuU-%y10?Q7g%UwDX_^msZlUknB4#)g@a#iOGRGbfqn%qoRnx zAfa}vcUKHPz1fy4q7?3E8)7Hz-mbCl1_)stLff7)TkawwDc~3Clo8aqZ!arpgkP4l z|JGy>Iy{mNcETtnZh6kwNexKC!+E_RY?BsHWhDlhH7GW0KT%L;7I``uV4qH#o=j{QIpT8@3!X?M+`%=GtR|RCLUSN)#|XrVG!JNKxPi? z#cb$P-~jydVHAPHS@+G}OC~TC zB?wzyD5yC8@5=AaP%dtvPYT<6W2k z_V;la&(hDBufI1DlfxN7ldNX5LI)Hc@v2I9a;ivy`dSY2B7hRnnDn*WweYxH>_CN= zvtO1)oK1s5vByS5KG`*dequ9u82l3>u3Bs)P>@OdR=8f4B}k4`Q1`AU7AL}AVqP!F zFo76pYL%|+-=g``_%Fh){H%llKLI22&zAjrKUvU1Ew=yOjlaM1u|-n0-8h%>pSvpl zgbmqHkVm$GZe#1Lc1~+2o4mTrvEI4TIK%(QbjQI5Wm9P^nP9nkd@GC5ejDY};sF2q zPBC&Z*@4;8EY^74|GjZRI2@16-(YKO~N^AK%$K zBbAV?>)yg=PdoFB5G9{I!+)7uH6af@R?p?bHP!)9K^@%U9FmM5Oa08KvqmxyZKg;Dyo;;j^nO* zpQU_Rc%^AwfMp1I86GN5jPRKWrSI>PTsrQDIHvU;Sonk%gMwZVn7RD0XYYQSe0L`h zUaREc8bc?78wfcwoLpXXm?7xq%EFS{+R(FeldsQdlMWVG)%r4ik5w9dvhr{KWbTHezpB!X9E|D!&Vf zmRm5hdfMXB(&_l=9tj$9|1X#0kdC zS3S1?@mNTUquf2MGKgCT0YWuVqXltT!ANpZsX%1E6J>aoV-QUbToc$!ib;{~?G#?W z*Stkx9_50{Dwxgy)cUdUyo=- zkti7%@8<%6zR}@w7}H{3TI9_J-O^9oz9GOKw$#(LY)|3O}MkT;Mw|plRWMQFQws+{AC*(B!q=*c{xZ zE}C>d3A!2^xm>*N(pxEZF7d!gF+lJ^!@s8uUu?Xo5yDfIYJJu^6;a0T?Xs&~waxDw zC;Hd?w{Z-87JaAaQv;1ZZ@;}YznUDpgO6`>yQ-TMW_=g8uLIexq%3ZKNM${-*Ojjp zXQ4uj$@`z!$$tOje(WPF_S73djVi0NPukQWnWK8|mz3bmz|E*Pwyt!|ont!7XRx0U z7rZ$l;2TDcT+d?lOT5Z5LBB?Aiq;&p5xtbEux_>4zan_`k?(oYXFIE#_ALr%Xee=# zI?vRu`+0xYg5$)?gujD-m0^C1vmGB}fz1V6`wAd8MSKIikCj}QDqW%XKR zuJTlJq+MH^&&Ie>?rYTHlTMp~la85ep_17@v|xdy{J){8m0hrP>lr~i)5upXHaFFV zWBw1g{KGf+_T;QDn_u6%xVhN4SY8$+ApvfWZ*xaWZZpI6YiH|u-g2gB`u&9YPbY?Wzq zA{Uo^h5lV_R3H=fJX1htanlQ*>MlaD!+352Z(>|Iz09;p7DjD80lft=m}N7!vFp>B-Fqg%t{i48QdU4w8fhSm4 zOVHE{pPQZs(39j)$^BH#&xym?YVy`TqqE|lUa-X!j=qzNEp=WQgS0-oFKTnV$m6;= zC3{3C>hbn-7L!*x)0yAQI$2|l!srrrqMJzuvFENk+HBEWuCD3~t*9c$qay!g?=`>} zjcT=n68-_uhaGjih(1i0$R;@!pE~-ft$EW^sSsCYFJkD_e7#&%j=hhKnsE4@Kl!zo ze%PSTQ5@I%4GA^CB;d!Nj&H!r8!aw!XvfCoFdCIL+J4j%F1 z^ZWuUVii;*WXM920+N)NCO6<9(A)(3B=M~bqQcTXrN!xx&b55>bn>t=#LiU}Mxs2l z{pH}J=UMI5vi^<6!7eW@r<8m6kHr(~+DC^k*>MQYBW*6@t;dwkd|Y-JT40AmL~38Z zA9pqg1Jg_so{B?wm0*E31kYeZjpi=_U?pJLI``Z2(3snrtt=#v=F3@RnRYvwid(yfy_z#C*Cd&RcY78uVvSE&DsoBS|80T{W?s+k1$G<1mn4kb>K ztjUSP-o+FmIHL)Af-w{05}`$Jgm5`1QzSoC2YmbfEtk-roGl;t6-oBbTpWGAN49}& zUm$PNj?!@!-2J-AUt>P1#QK^ar|+Vu8VlHrCqw;(uB6<^k6p~cQ*mVpsen-^ZA#92 z9W0?M$`Y)Z>3PEf1y{58P zP)n=#rDLD1|ES4X+z;6d*B{|0zyr+?+oD`J%XqN^z5j0Uf<5_|hyq=x`lPAJDE1N$ zrF-8mPgEh(VAkB0`U*ygv4dL#W zFWr-;(*Ys=Vb~PALFZ-O{t&nmRXJ1ylXxa&Sc1x8?zyeuv8I`hjH$2|TDNtZS3;h7 z@C5^Va`TqB_NhhzlLrPC77b}PAmT6ukPwwEPa5P?-eayjO>AJE=1Z?Un&rl4yJs4{ zYIMJ>8N?LEZ&%}=CHlUPVljzEXLWGKPDV4PA5Xgf#=XEI) z%HgQJ1@3VDYvu#o>$OL+uHKaL#FFg*JB3KsCt5p2`ziLR=Au_CoUd4yl_&JmNi~z? zl(mN#HjWiGUrZd`YZw@+)%t^VoVoT{!=U)y!#|?$Urrn;Eh$fwP7>BoL+gnD*2uwl zkMt}bH^BV|D>ENfIJO$`M*ecG$!LRL?0BsSZ(@8!{O!(v`6JTkhX!vB`(<3Fz8nwu zd)3WD?VGQsR8KQVE@aA`R&CP^sonV)3HgxLHJF99#g<78sv7qCSPg5Y4le;uJC)9` z>X*MuoCvVYVj-A8LO4;yXlx|j0ua@eJ0LRk@!+Y~>i&>GS^O-tEsE?uNr}c3bJ?@V z&Q#lil8Bs<^j|&Yrg`cTuUeD?>dIMXfgPEW2%x z81jsNxcx%_{cPDQ{a0#jpD{|9k?c;DRw>Gv?+NnHcrV>e&wktv#^q9%Ukm$m>2uj~ z&i(s4^+E zrcVS^@VWbij{KWr+62z-??A}BfW;>Z6_^V##9;~Qe+GV!_$J97k7Cgj>lA(9Ckouh zh#@f^Ec}_R2XPLb_)Xdhv$%|1Q|to+FPvY+^?d+*Kf-n{On$iLKCI0+a*9~_ zCHIas1w)3yRaZaP&od<#zsR5$9ZTb0J~T_)}x5hE71oBECZV_8?WKJSUJs!`@oCX$qI$vvM9oK@G?-65%4uh zRpn_}G05m8YOTe0I%k_cq~J7!@TPvae`oovwJI7sCEIyt_sM@)Oh1WWsZ+IkTYi5Q zF&@%@o#3)a%*F^%*x0#f8D3+A7_&3I1gLNnw9h-7wRZ?{!4359=#z-CHs4{H9h z;gV5+TPTU|=++B@GCmFvM*WP~%=0e|I>PjTf^hN!y!boj@IM!x{V&AmzZaGLM^JS~ zEblaYFmI|U-kpfDL%6)$2k2HHS^{!<55eeA0*8+uzZ&XX0 z#7hkW1#SJ*g52?MaA4PmI!n=x{Emtnsa(|=i;u8HFa(%&3C28-x{hn<)3_6>MU>;8 zY5v@txq$d8I!jPrk2q}??iBX1UdG~|_W^jFG}P4~Ik#YvO}C2z5{1A9$kod2muncs z(UZ+E21`YfTmCiQ1B`P$5Zrk{CV-%`gjLpY4t&J1)Fg{(-iFa!?H5lfG`r%r9|XEx z&rBSyqUqN4!0%jUO)DCs`z7oMEF2?7w;*4i5$~dAB_EMlkOL3w_45C)7Y?Kl4?sbg zhkz@_(^-z;ciKfJH11`Fc#gZ@fgfjSWn}W(p!--~5GSs#bu{$shZ>eg$Ck z9hjr7Z9Ybr%hUO9wYB0#fznjnUsIKTlXeHVe#rM-%p->Xh@rJn-`a$9nE)aPOm8-v z5IC$CJ6wYC^Mrp@tC0BHN$$ZUiFw8)HfQJ)} z05l6oi?mhajwxb`u;5?k6PXtgogDcNI8Qk2>N$ zx{{(b)=GXN#W#q@X_XjnY(C)yU4x+bMifQ5b)EA!QN2l0cDYZ9$9INTT@slG*V-2a ziW)<^p<_K@5Af_|o1Ck={Qnsv|HIKNtB1GXxC$xn1-<9^z`|XShKjCowW3wX{{