From 47a930828a141944ce662aca2752a230d375618f Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sun, 6 Jul 2025 14:44:53 +0100 Subject: [PATCH] Revised glance view Refreshed default view and new customisable view. --- BackgroundService.md | 2 +- HISTORY.md | 3 +- README.md | 4 +- TroubleShooting.md | 2 +- config.schema.json | 57 ++++++++--- examples/Actions.md | 3 +- examples/Glance.md | 80 +++++++++++++++ examples/Switches.md | 3 +- examples/Templates.md | 2 +- images/Venu2_app_start.png | Bin 24832 -> 23686 bytes images/Venu2_glance_custom.png | Bin 0 -> 8464 bytes images/Venu2_glance_default.png | Bin 0 -> 8933 bytes images/Venu2_glance_no_bt.png | Bin 0 -> 8428 bytes images/Venu2_glance_no_menu.png | Bin 0 -> 8985 bytes images/Venu2_glance_start.png | Bin 9310 -> 0 bytes source/HomeAssistantApp.mc | 164 +++++++++++++++++++++++++++--- source/HomeAssistantGlanceView.mc | 137 ++++++++++++++++++++----- source/WebLog.mc | 2 +- 18 files changed, 398 insertions(+), 61 deletions(-) create mode 100644 examples/Glance.md create mode 100644 images/Venu2_glance_custom.png create mode 100644 images/Venu2_glance_default.png create mode 100644 images/Venu2_glance_no_bt.png create mode 100644 images/Venu2_glance_no_menu.png delete mode 100644 images/Venu2_glance_start.png diff --git a/BackgroundService.md b/BackgroundService.md index a2dbdbe..15fa8bf 100644 --- a/BackgroundService.md +++ b/BackgroundService.md @@ -1,4 +1,4 @@ -[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | Battery Reporting | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) +[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Glance](examples/Glance.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) # Background Service diff --git a/HISTORY.md b/HISTORY.md index 19907d0..7a0b4fc 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,4 @@ -[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | Version History +[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Glance](examples/Glance.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) # Version History @@ -42,3 +42,4 @@ | 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 view, including the ability to customise it with a user supplied template. | diff --git a/README.md b/README.md index fd4b76d..59543d2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Home | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) +[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Glance](examples/Glance.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) # GarminHomeAssistant @@ -24,7 +24,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 availability. 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/TroubleShooting.md b/TroubleShooting.md index 8dadb38..b61b839 100644 --- a/TroubleShooting.md +++ b/TroubleShooting.md @@ -1,4 +1,4 @@ -[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Background Service](BackgroundService.md) | Trouble Shooting | [Version History](HISTORY.md) +[Home](README.md) | [Switches](examples/Switches.md) | [Actions](examples/Actions.md) | [Templates](examples/Templates.md) | [Glance](examples/Glance.md) | [Background Service](BackgroundService.md) | [Trouble Shooting](TroubleShooting.md) | [Version History](HISTORY.md) # Troubleshooting Guides diff --git a/config.schema.json b/config.schema.json index 92dbf8f..cf8088d 100644 --- a/config.schema.json +++ b/config.schema.json @@ -2,17 +2,22 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { + "$schema": { + "type": "string", + "description": "The schema will prevent JSON file errors." + }, "title": { - "type": "string" + "type": "string", + "description": "Top level menu title" + }, + "glance": { + "$ref": "#/$defs/glance" }, "items": { "$ref": "#/$defs/items" - }, - "$schema": { - "type": "string" } }, - "required": ["title", "items"], + "required": ["$schema", "title", "items"], "additionalProperties": false, "$defs": { "toggle": { @@ -29,8 +34,7 @@ "const": "toggle" }, "content": { - "$ref": "#/$defs/content", - "description": "Optional in a toggle." + "$ref": "#/$defs/content" }, "tap_action": { "type": "object", @@ -135,8 +139,7 @@ "const": "tap" }, "content": { - "$ref": "#/$defs/content", - "description": "Optional in a tap." + "$ref": "#/$defs/content" }, "service": { "$ref": "#/$defs/entity", @@ -174,8 +177,7 @@ "const": "group" }, "content": { - "$ref": "#/$defs/content", - "description": "Optional in a group." + "$ref": "#/$defs/content" }, "items": { "$ref": "#/$defs/items" @@ -190,7 +192,6 @@ }, "items": { "type": "array", - "maxItems": 16, "items": { "oneOf": [ { @@ -248,7 +249,8 @@ "required": ["service"] }, "content": { - "title": "Jinja2 template defining the text to display.", + "title": "Home Assistant Template", + "description": "Jinja2 template defining the text to display. Must be included in an 'info'. Optional in a 'toggle', 'tap' and 'group'. Special characters may not render in the glance context.", "type": "string" }, "confirm": { @@ -262,6 +264,35 @@ "default": false, "title": "PIN Confirmation", "description": "Optional PIN confirmation of the action before execution as a precaution. Has precedence over 'confirm': true if both are set." + }, + "glance": { + "type": "object", + "title": "Glance customisation", + "oneOf": [ + { + "properties": { + "type": { + "title": "Glance type", + "description": "One of 'info' or 'status'. 'info' renders the template specified in the 'content' field inside the glance view. 'status' reverts to the default glance view and ignores the 'content' field. This allows for disabling the template temporarily.", + "const": "info" + }, + "content": { + "$ref": "#/$defs/content" + } + }, + "required": ["type", "content"] + }, + { + "properties": { + "type": { + "title": "Glance type", + "description": "One of 'info' or 'status'.", + "const": "status" + } + }, + "required": ["type"] + } + ] } } } diff --git a/examples/Actions.md b/examples/Actions.md index b67e50b..cb2154c 100644 --- a/examples/Actions.md +++ b/examples/Actions.md @@ -1,4 +1,5 @@ -[Home](../README.md) | [Switches](Switches.md) | Actions | [Templates](Templates.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) +[Home](../README.md) | [Switches](Switches.md) | [Actions](Actions.md) | [Templates](Templates.md) | [Glance](Glance.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) + # Actions diff --git a/examples/Glance.md b/examples/Glance.md new file mode 100644 index 0000000..5594e8f --- /dev/null +++ b/examples/Glance.md @@ -0,0 +1,80 @@ +[Home](../README.md) | [Switches](Switches.md) | [Actions](Actions.md) | [Templates](Templates.md) | [Glance](Glance.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) + +# 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. + + +## Default 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. + + + +When either the API or the menu file is inaccessible, the fields 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: + +```json +{ + "$schema": "https://raw.githubusercontent.com/house-of-abbey/GarminHomeAssistant/main/config.schema.json", + "title": "Home", + "glance": { + "type": "info", + "content": "Text: {% .. %}" + }, + "items": [...] +} +``` + +For example: + + + +```json +{ + "$schema": "https://raw.githubusercontent.com/house-of-abbey/GarminHomeAssistant/main/config.schema.json", + "glance": { + "type": "info", + "content": "Solar Battery: {{ states('sensor.battery_capacity_charge') }}%" + }, + : +} +``` + +You may make this as complicated as you like! But you have limited space and only ASCII text characters. + +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. + +> [!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". + +It is possible to revert to the default glance content without deleting the template by changing the `type` to `status`. + +```json +{ + "$schema": "https://raw.githubusercontent.com/house-of-abbey/GarminHomeAssistant/main/config.schema.json", + "title": "Home", + "glance": { + "type": "status", + "content": "Text: {% .. %}" + }, + "items": [...] +} +``` + +So the glance view object has a `type` field with two possible values: `info` and `status`. When the type is `status` the `content` field is not required. + + +## Displayed Errors + +The following shows the default glance when the menu file is 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 Home Assistant 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. + + diff --git a/examples/Switches.md b/examples/Switches.md index fa22fa5..9b200e1 100644 --- a/examples/Switches.md +++ b/examples/Switches.md @@ -1,4 +1,5 @@ -[Home](../README.md) | Switches | [Actions](Actions.md) | [Templates](Templates.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) +[Home](../README.md) | [Switches](Switches.md) | [Actions](Actions.md) | [Templates](Templates.md) | [Glance](Glance.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) + # Switches diff --git a/examples/Templates.md b/examples/Templates.md index 743c267..d09390b 100644 --- a/examples/Templates.md +++ b/examples/Templates.md @@ -1,4 +1,4 @@ -[Home](../README.md) | [Switches](Switches.md) | [Actions](Actions.md) | Templates | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) +[Home](../README.md) | [Switches](Switches.md) | [Actions](Actions.md) | [Templates](Templates.md) | [Glance](Glance.md) | [Background Service](../BackgroundService.md) | [Trouble Shooting](../TroubleShooting.md) | [Version History](../HISTORY.md) # Templates diff --git a/images/Venu2_app_start.png b/images/Venu2_app_start.png index f82c6de9c60318588b9a625547bfd56827b6a72b..7fcbafddeaf65bcff8a3ecd39b121787c2c8aade 100644 GIT binary patch literal 23686 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 Si@{$l5HUY$Nh_ne$Ne9PK`u%F diff --git a/images/Venu2_glance_custom.png b/images/Venu2_glance_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..e5bb73ee2c2cfe0ed6f796ee4f193b0a305753b5 GIT binary patch literal 8464 zcmZvB2Q*w?^zNNu)L``9g+YYqb&Nr@V3g=Bkwo+!L>nc71S2FwFCj!HdQA|7AWB4? z5PkGsf;WC|{nvVLt^c}n_d4s`JNKNs&)NHa`}<;0dKwgDEMx!xP-tnY83F((2j9*k zA;MeY80KYsN2H^wDoRULmCM7+{fVQ?V*r391}7?Mb|ToiZH;OzgeadueS1-v8+knO z1+nUts422C`BbYjZb?T?Ln}7OM0f<}tNX-^4%X~e5S1N*E^7}%pG2Cg6grD8e~+02 zzhe%+Z6Md+!KX=j0^=XzBQXuB{T0z+ri8;0Tz7{B?ilGmVW{3=vpwF~J-q$Bre)|t z?(A)NACRrdX5aLHx`KAd#X^21ctK29hiq4FH&TU>FJ!T4V~=&^O(%Hh2J7Sjn`f%o zE#JzSFQqO;U87yp>f4=+bUC!-qkZgc|G`WUy zPCwfx+)*YlwV1Yb1!}TCOiWuWk}&-yx?Mh<)k|Z|WiVZ@o{yHUI`JAY5g8jxkO^`E-^J{sZsw!v?&|v3 z%?D8Rdi=oW@gpujN1vx$8d|z2(=bX#0N_~FQd2SZpW4iHkLFzo?rF!Z4)F4(XsB!4 zt>mXM@9b+NsPOFYE1S+3jr5OsC9>IcB3<#ukVKdKnWoXx8z2EuBpYWzU-~aC+s}a@ ztdspyPn`@aupoSt5UYZm!0^)etEjqFMX9OjZx)X;Cfrp}P>^8J+Si!62zkAe^q(Dw1atQB*x7{DC~eIxEyNlL;Ui9-L6fs#S-{r?#xh$j;Ie+>+QZ~bRTAkk3d z|6{Z=+0yO8-_d}PBwPaM@aU{xS$QqPl0t1>g(A*TI71-PeNgCJI-`J{l$$QcUtI&4 z%(wXdoNI6#WmOKoN$R;?2^9O?_ZN8bGKk~s{iyX30o;gt&Dbs=xP5QqGWB^;)wXbZ zHI|~mWcuRja$a%f^mU1b9edR2)Ev$rce}V!9Hxh#Kg~xju9OlCqiEjA9|GvdxQO^( z6BkY-NiNWx0MqJyc{}Hy+6BTtIegs$6)19WERRxxAXH|z;)iyIi{w-$hUk{eWZZY6 zXz{N(Ss#TqleSZAirUL}=AEyy5b+6p#=gGNjCz*s#`NDa9gj$QC8Ux$OH{LL#~Ji{ z)Q%4)>}*0^chz39DD{_7D&J$bpQN`m)7e~eWA8>5U<5btC(lKPW#?zvHU%=N0G zSip~x4Xld6t?)4$;$LM~^R)ln{9#-J!9>*MNbt!$w|!z^6rpL%@u`M_1oG6$3y4)m zFob2<_-F^ozfU1LJ3KgAbhKfqr1BZIAnL9fuDt7<1bq!D=MC(Q(=8J^?E0`t#g(I?DV>`qa=? zTlKgf9{tf!3q&MeBrWJ!o98gIZM%3#^5#})=Jxabz5bQlraA<_$WZ39w6nAE>Ee7| z&7`LJnM39!xd+z#y4&=9p4hmwP|QiwDDhjV&EVa@sDD`r{kYvuD~*yywKJonBl6*fJg*~l;D7|Gjk ztNjn)9z46&`JH)XuW^oT`)kYyb(D32?evc{cr5H*($&&o#5SZrf4zDjwE-1`rkPjs_=E}pcCsw{AJCF#7}k6AFhY1GL@NRugR#XqOlGrRj-eYL6o<{nBZ z2+j-3#_5Kpq{wW-NIC@QrZVA0s4bijD#_={dbfI( zs$kBwPeIf)cIxVzuPMzTMsBBGz2Bee&2j6|GO&-$$9cD_*XB_+zPJrZSd5rK)D$KN zk!dY$bKH=v;8W+;oFNh6dc!lpYk@G($e0kQELwh$_{1zY-v_O-Rj*YBtLTo}?6Xp@ zDIAi&(ju0_Z^w9$fjsqg*N*2x5P__6sz`9ET_cv9)~X_Kq}X)0>0`ra0`J;(~NjaxbIhQZ{?j72~IW_UhJ^0>hmwx zpPUR>LFW0S{pD{Ft#B4zTf@Y|2b?mcg6XKW#Y2^MJ;9_i3iiX|dB9`g+u%GduGivf zeSjV#HyKSp{*Cc9Ko0cxrxZf4gUEO&ylED4i~Q3^;6PCCQ5~gsnx5EtOUmfaK!wGk zebJgi{iYBDwP2GwymUEc5Qj;$qBo~nZFq~p3rs*T5e5qV*tHr64FC|Q9ICHgE79e) zf$@3N7c{Dd-RN-gMF-Py4lf7W$^cLSK$V;#SLcorWoNt&d%JFNDHCU$ihVYq$UiL9-_sb@AaL ztKa2=g}X3Bu@MI2;EY)@NtB62s8Ci2QH|sB+b6=s6;PQB#?26z>k`ZoBFG#$9L_H! z)f@O7p~cf~^#U3Yjii?4#Z(yo#BL)lswrwGMv!VHPxs<^O81!=>lED&c?7>ny@ z^0bG6pI`DbMC~KB1&h*U>{=U3x}O%ve{TBT+s}jQSIv;NyYOOkYFBlJ-KZd6E(mi7 zt<=$wc|Tw*R>5XHx=@xBICk~f`Qa=sU{j>)1DXRBl_|ksr;et9CNF6 zm0n-tjWwN7OQyEfzrlPTB7=6oT}n}uFd%12Bvob(E&juR&N2^{!1VS;?>Q&B$OI(F zH8h^%mXhmM>jMz%_5_9uNpQ0p{8E1CK=1>0=u6l?1d)tky)!_uLhm6^8enC;psl(6&fIUc;DSR*VQ)q!xk8AvV)1Z7!$>LIWY|CakN) zK4p}w2z`~>X|bz)dh3K>oo1Y#PP7HZSD1Ifc!QpjOXLO8J_PC9+AK>PQxGV#)L?Dy z)}jG98Nazv*KN=}Cq#{c<+xjCv=9O_TGXU-&%sg{r=J?WK!o8bFOlBi<2X^W%A_v0q*I zPj-6qE`;&JgT~Ba72{9x(YX`EBXr!?Xbmh0!2^dU_eDw6IZc`&@BSKZWX99wCv3O1qvjOpV;L&81PY9=N13;1&cFp4{gEapukK%)H~nG zZ1yrPWG^XiGfcMrFe&k5to=e2=ooZ>rxlaLyitTcyrUtZYD-WF%8`H2#DFdV+L-2> z^@G{X0su2}$e#Ko59xacxB7#tiV(=juHTcv+s&C!GQ$d)+Qha)UP7Uv5Zd*Yxmpt| ztjc-g(Bow=onbr!mV-?Y&Req;xf2XEt}CzHY*%0W(r8*{{e`q!qd!M#fd{{n}=b2_F$uZQ4N=lS{^2jj6<(?ni=WPg+_71X`&z))S%wW0PmdEo$x$b%8hc@lJ#s84{i1-Bh5?v&|+ zHd+69(u!~YTe$zH-47i^dXle9P&zGf@vNo_O$J5-IflxkJ^n}Pe;&?Wb#iWY1Z@q~ zG*&@K6Gs{5dvB(^g&atu8(JP%1MS=Umo-xtF)Q%zoKoDcG;g%eA4EXCm|_!tWlI+S zyJ#nVMFm)u;n zL-vqbWOd~YQf@wSaWi5*L-r+B+Y|ns-vxcN@Ml^de<0Awmap+O4wx=M>di7#*=6u! zD#2|!Li{hb(M|_8F2_ARE;(m(0+VT?my(X8>%32=*R@et|c z%QEi&3IG+BeP#RQAVPHQn~qPyBLVlqw+)U(;#3Vfi-P{gmm03v|0*!+y zx245`L^z6Q&( zwSJuf{@upEH`!b2r$@Kdi_PV|k#ro_{|+ICx#1jQec|pfyPmP>Ihf_u#W%j-kP&ZW z1~Cu5B3jP=UL&ekJNS`x$L|qG^M`(XIC$+57F}*~A~S9KOM`qvTzv}hsRPs3E8?}J z;Kv%XWIaGSrh~W-R2-sl=ies`wW}$wYmYQj&~ushLH*#9X0n}LkFw!3iVZr#EO$-{ zW6e+aJG^GhpE71>!z^6x1B_(ER}6A?x?lbJIl7~zkR);e;AA?UkG5`)D4{Ma*UpQh zr+)hCvEfe-X~9FUd}6a88xn3l>5+7T>X!utsE4{FlG=!Z96wqA$DIE8GIQo8gP?3% z1~UntV8557@?vg%iP=lT+;2+D?0T@3_@QhS&frM7jQW`;kRSnvG zL(pgA^|od_@;VcVyr!3&QkQ4k)K;fF8K|Zd2hbC@{*<^r;)UPFX*}}q!_QrJgaTQa zl+s#WCc?B-)$mIjJPt%4DMhNC&pT@B(R%NiQQns?@s6~(*Q^6N`IYsx{^&q)ur^ra zHY4B8Tl%n1Sfad6x$KI%`*jQ6n&{OK-bgn05q1Y*2;CbhwWpIE?}{;;Ho4|B4WDn6 zGN9eFK=9+``9Y;oxoloPdo!7JD(*-I6pb_)jq;p@%C^^RZJ7IeC!c@F`+%+aPZd&h z$TmIs&2*jilf zI&%aSeM>bR0DG?OcJ{cJx|jF7^Ybnt1+C~q1QAB07?x+B!M(-rzgBe%QcosM)Yhi!PEN54*sm{k7pIDUk0DT@V-_Cv z2HI$iZ0Z+EejWXiW?_xv-KLTzdg>w_uTH#4k|Sz~*mp`|H+y|!j``j{#Z#r1adAXx z3FlZ=cjkyV(7P?Ghktp=88axlmZF-u1SA-mhPN7o1EU|azv=iXr7`NjA8&y)-yH&M z;<&R-K|zWkyN))lc~z4L`(7|!&i$X+4%eUYVHV@nM zeZ@Fdk`twugBOl2lJSZWddzV@i1355yq$NQ_&YPW{}?29#tS6Uq9n{zOyQT@B%O#0 zP5}ivH(d6!oyPv5_)F{4BzcZg+zS8g&=pa5tZ*T7zcmyI)P=(a`eufDKtU88MErg| zwSX05r~AZ;Z!lp_L43BcDZ+JCFSl`gV8E9_M#D-zojB9hJ|E=bb&$~|F^;h3gCEA7 zQ49Bqz~gKGh7gG=h4f8$dCg5XHW9d-P83{vU34{?*HCj!n`6ijnmIBT(%Ii7J(u*A zC5?Qilz*$76En}9glBN#dVVnerA=(uIS;c5IQ?E^zk`#ECl^?fAMJSGj&~IY^ROhR z`&n$vbW`Kr9z8aY*4N|DWfrf$z;4Ksde*wKgWh&7y=Pr1&`#;$P;Zcvhr^v1Simf6 zgdb7<#OJN}v%5-$HiO6bePMttN@!CkdF3(Vd$%~-sN&~p=<0}fo6OdJ!*u6``EaZE z$ct9S`r+oXOvkNmS+@F2Zwj|#td>1yTt`z58g&PH(;o9!N!*p7lPP*B_A<192J0+0 zC0yei>Igk;#{0u=XV6Z}-$AU%ee9$5%JJUv(&goc0QFP1flNy%B#1 z%FkmYr!x3{cPJ%pWD*{Qa7c+dEKH`Gnq_84dRm0fQTvabv6Id*g@j73bM6PsY*Ihb zYM6cGY0i;kF`+V)E0fu*^slsd*@Sl5ayoz8I^dM7EW1>M3m`C%XFBEe3op%PJMgVA zUZ@R<&xI_?#Lmr4QP#rpEF`uR^Iiu<+#T8adGeVdJy5NswKjNFs%&Z5w7v2;KZwIG zknpY4AWO#5Y5LJw3q$JhC85%*t-XvU(UwEn2uN}xpb{Ms?|-`3u+Zi8m}_thhLDIJ zmdvymiyx`jC|ZhKqP>sKYx-JPj4cIAI<6>{D-~)<;DlqNiQaCqLkAW(vhHg#TBED8 z_e{ttZ{-+A!4|`4a*lr3yL!dG0deo6GZ*9idq(N&eSFt?ksZq>`@K9Jm86U2vuL+t z!4-fa6Lfg31q8*Q~^E zPBc8@#1Y%!y)~)zDze$0Ln!w-Lr#;t&>&1zGr)z_N|Ut8YB^)*20kk#EVIpIqHX!! z`fYtZzvRm-rrjN%af-LmnlB~rvcaX}^7TgCzt~S5dauvNqrJapnRxX4xazVA9SXAZ zE|EJ5@F=gSn(R1RK3g^SS!cfab)?a6P!V&U)lDs;1xll1MV&JwuRBwJGEQ(nAyrnL zSz{Bb6My$r3Uu>WV6CXEV>lR96z+ToZk?lip0&XGw-wvPpap4jm z@>YvT(hb)m@>H);i;4|~XnTSQ7Z;i3CIrr`{E!K+DoL?(`INyxS{MS%S2>Eker`=Nuo;T05DoLo^Mzx2% zo<8&3+n=jQdI*`lV_Lgrjwd@?HSgoe%959Uq-JKji5Le{?hI!GZOg#@!3p3WS(3iU zrBkYOxt`x@7Ri~xnXlm>RlpmuY1l)l1o+u!9HYZ@l)0bdt8+~=+Rts*>G`!#a-{ymmiZ&{UxTYj?!w;1XVRhNy?b_CzW@wFkq3Vp$|I7!T9 zBJ@fC{+4X5RN*DNW=OZ=*I2#^ELitALD6MpUh5W-d(Yoz z!8hY1%-K!0Kd-O2S+>XfO~v@Q_pm)lqt1PE2NUXV;J2u6&BByzHQLNSfCGelINw-)sd_)^^?(b-kqJD2tC5;VL+-leJn^{qDW#xZj0O2m> z)z?OU+bj=bV$6%0t$$&WA)gP3$O%bK&=D?bQ{k_vJU zmLumZm42IjcKC8lAxSi&BkXS@7E=d_Z>%)>KRWD#=5)&i-xVxsl`hSKcoq_wTS6XD zd)1PRIibp=OKn>~wJC$r@Q0JbU#Q2)xS~{uK2aT-usT)LFnuA49H7?o&@`E!;0tEJ zok%$JM5fE+9LZxGwj+vuVN%o=O84=`*6?5U@obMIcn zGadu0xj<1JWc0J$Y%)gpKAxQj$R{%pLNWnD_g&@W@WB4XWyp#LaVG0>3IV2{*H&H@ zrnk8F(n6~kZkM*Y<(nhV-ch~k#`}n9#@P)9|BPl}S-BOC60?`!k(A?aGIdMK9gNFGmG$nUw$)sN;v@R%2p%%iO$Nc&sn zL7im>Zh||K@BvD|IPz#w7Yc=dZWsj&|H`#oTkm>By(yn|dEZ&~ z75;OP?E(@m=`gZ&2&Aoks(9%8XNLF8Pmy4oU}uST61_dyktsKG5f;b=M?pf4Lo2ac zh*nqjB;2c_&i38Lxpd$X=pc3|?JNP{96RRcL>N&}_Q?&8ORbK&!@x+)DMOaPCBw;I zT@kpbl7i7Q9e_xnR^&yp7>A|mX^i}sJAIRkd&fVU{oiK(2B^TzKUD2Rb_59Duho`7 zIr!vZ7xCGp29Qs-C`YByYc;wJenQ?5Kyk9g_+)TPjU4KQ4qD~;u3xG$XBlz!m^Cxo zD#CZ4;+kIK8|bqkenjx8_0?s1GujZ%ZD3{n0_Mr5N5ZY;?X`ktqd3c?h-TB9eXEiC zTohvo-fClQwXHpD>Bt*1`4ThMXhsIpM{(hYcoVmqU9yb=b`atIdeb|?wVkyX>F$Q5)WK4Pify3xT77Gj67pqcn?tB_ z$pmXcSFzvIzsY2hIci*0CwpH!*yK2Pzc~?8-23=iZQM;_wNUN9AFWNFXQA%dNS4gk zHOuo^!f^Z3jsen6pyV4_pXSB}30UGtBE@G46wXk8l;;JBDA@u6MU_q^72bVgXNNGP)PfXi)|KqSDP5`{opDWpl%Ef=5 z->X&2WxZJM>g2lwH$@>2oYR{^{^QIZM$X)klZEZ--52q{zzet6G1WuE(WiSIsA~UX g{#VslocfAt>7mf&l*Nrpyf6-Esq3kgBkjWf4*+SO`v3p{ literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_default.png b/images/Venu2_glance_default.png new file mode 100644 index 0000000000000000000000000000000000000000..e0bcf140151018b06d0fd4c02a9763ebe0ceea9c GIT binary patch literal 8933 zcmaiabyQSQ*Y_QA7+ShZq!kdQYd{eY7+M;XkZy)%qy?ozdO#FJkZuqp1VtL@4u=}L zhxmr)S>Lsn5vQzyPJort-X^C0PrRTCCWbQRABD5(5*G*C-b53?uF%S7jVXXig{82 zn}(E0eK5V?5VL=#W6F#_5gNu8t4~O0XU1ZRuegWXW#*>im3ZeSo!Yp|*KIZ)e##2p z1@g76N~UOV_4-9e-Zp&bE02C-h&L3*{&a{(L|4m}wrY>r;&gBS`2O$emcc8@i`39x zK;ARvS4~!w113~bC(a-V)6@~O`-c~T-W9Vy zN}Ytq|UXEzD(he^C|Zqb6*!aKgMI0dM20VTL?{e041#^>t}JRMSRq;?HGn2T~_)Q{Lrs1 zu4O^la)8mM!v=wb1l~{el-7UyJM#nc*RrFVyM(%bJTeRDeYvsSLhw>uMH#rcy^yU% z$yf=I+cP6i03fEiy+J@`Ha%8I=%uRhgm8n90K$q_`QlOjXFzbDP@m8<+Fu%m#!C|xZYl+2;{CdvRhSZ>> zchkk?mfwJ&A;@FLd8q3r-A#WF+f zpdChsK{F=e_+fOx&7o{>+m6y7j!xlQv0j`3% z>#(~-9Ms6}y}+77Z}mXAAR6Hd;gi#0%)V^&{Hq(Rcky|7P({WOCmVKxgLXqv`+Y%2 z=B>Di9MVw~P>)bzZFR_WcM&Y$pOHYssToTv+uX;q|NIrQTXeZ0fG~)Z85zce$iJF= zPk}XDQWrM#I5%|sH4rAZYDM?6t)=^G=zm@W$Y+K&jR9&l&lVJJEE?`b-bzO)kPf74 zhu)UL;mjwNGMD(}U??~rSSyo*lo&@y8Agzhl8`sIFoNIq71d1=hU18d-~(%-$kaD) zYS&ZFNJOQ%wvIdIR&9KqZg-Yq;O5g;FMAxsBcfr5du|8_q{MRfwKJq^{m=otqLv(# z;FmZ5;?K40@D9@@GZ8*-BTi%PMyIo5uS~R5>)The=0}`IeFe2}%@^n#3P{i3QKHhf zD-PW**MueyTwhQ4^-S=VRE1rA2<5c;?P!aiJo8hor!BmqW=#Uk#zZA#fD;5R>n4a! z-+}W9m7i%!FjyL9_Jr-v=d3q7om!%qw`$kyP`V~*gh@4W@F~^ltqGT+_i^mpq@9g3 z59=~2gjD+io``NvHk^cYO_<3Qe^ZsGYjf<~y=d^3ojJJ!v@;@7|D@{w85}j^xKB{iVAIm$Kecrhvd=PWKVL4^=`4x%U2<{z zIVI4)2jVJq%09W6a^LjIQ_l`Q$-TLYdT8(0c4B8GUlI~_ajze>+#1Qe^j7z@5Y7FH zK9sBa(7yw(voZO7a~kjOabmcTi52e8*qp`YX^F7@RNIzg85ijRAX|)tuE?U};;!>~ z%S`&J)bCACze*|>$HZ|5Z3LKzxX<^WLfu51MY$LcW;p=eKPOXwD-QPG!eVBF)zJUEM@3j`#V?oAKk7mC)a)<3_x{sM@9L%cQz=7~+}QQnY{f z583vM2$lI+SxHzogUsdjS%g`ORh~FJEP}nbbv|LVY-?Zk16AG5*-frj#Zj(S(yh|n zlTTNsp}Rr#&N-p$RZ!3uwD!NhJn1G(f^!AULQBN|h(C;4t1Q82K{@Uj8r10d3n31%++N(lw$#5LyG=xN0 zH2kG+M#Bi+w|66{!&I|DpQ*PLgd)1a(1<0G!nh>fjALFz3m8@P25Nj0~o>4{kD)vn1=yxWgtKjw-v4sCw-H2>&aNIP5bV5FoY;g z_A!4Av6kXraaieieoetK3HvAHK=Hmi>isd6PQ^pMCy?a{f42Kc;%gCCB1!zBD|U@ z%%XY|3@LR;*y|0Dt#5b7b_wh{yH#Jcd0$yqg`0GZq-pWj8O@MWiDP{!#Z5ZhO;Dqr z#cR-~pjtgx0%jn=uKLg;*20MhW-m}>3$qCKvtP&*?$-_yv`S?uvlhB|^Ky{ODyfJ;2SJ(?{)8O$F9&`Y9KhX50 zu8GYWy8j3$dsm>7Ht~{voz05_gGuOQReo2w-lfEji>X&)iKH6Qg*bd9L+jvnA4|b> zcnutQ(|*&Bi?h$+_9~{cYBSGfm_P8jB;<3IIu+b?Tlp3ahpO)!s#fhij$7}h?5dC& zO&f$(j82jtwzT*(`0?WN#?v~Yn1&vUzlk9z=8S>Svz}Pawz0;YG z3@|5Qh_=1r_IW(?Zq!_*;u5N$+7WGKB~gx$w(r+={#6nOyK3dxc65heM({{PFT}41|BH2pqME=b>>*^9nIAOz|R2vlROce0KboxNM zu$Ij({h)ZzIy2WZ`y@&C&kdD!YN$^osMb7+pC1gIPhf<}n$p()P;uKt5HgXf-^EW* zk?pmDUvM-E=0;0tT(Z8G8C(^K7x`MZ8g$>N)-_3`X7J$9^31ss|Cv4G82(JM1TOM{ zaPT!jm+(K6hiDkbfW5&%=f~?K-8woAEc&8GHY!$+eAWNrYlL(({KF12Sqc>cy zq&Sta;0?P|Q{)|zDvXwb4swEe6Tdgu_v63F@SxlF%YXBnMiHptI*>{0t%MJu3hn;L7%E*pPi=l9PU$b zm_@D2np|(-Q(|$-!=oQ#?j1iYUps%PUNwKSE@eFwwS26CHMD;c0|H7T&wz@5;bhx{ zGyB^A0d0a~D(~&`S9@P%Klz*yodBr({B=Wx1zWF;FFY?(bpD*5Ncpixy0_%9w6a5c zV?>$-CF)Nfa_vuD49J53pPR+%hcq1e!*LNW`iK7vk%KPpBShPH!zlnW45|G-L>5N=xOQ>Gu#Ea7{uWk-vnm-*N{FyQjpeoEmS(GnfN$T#E0 z)@~DQM`XnKoxqZ%-4h5VS+te%WW(J{-N2YZc&SUzPv3w7#mx4?gDZnYrHOYU$%I{C_w;9w7`Q7tHMJ1v`f$md@_7j9lvoB{0*O~ys4+gYx&yq_{p z^xT0K_|mkGZan{^fXG($$(UF8N?r0Gh{y#6{liXbqH%n`?ZR;3`8_!@i-tE2 zsv2<3UTP$g9Z0#7<{(z>yPg_of2t#GG^UXTL!<~?KE{81ea(j3>9U41R54TiAoTmj zE|IfdiNx9AjT|?~S5%!A=k-c@jHUZ={|N4~`xqK8xH?iJ(3LreArTntq;WkT%?d%qi`k_UBGPz1fG_ zj?>Sv_$YM_Ifl*?D>xz-5%#FOX8fFoJw$6 zZTh-T!`k7E5m+J1oIthbsA>_C+kD9!ZHmIRe2vo-f4%XtmF~CLI8ozF#Y<`H_*UAP zkNXgvJ6ONIo_D(NH&o|RKuaEmf-_7&zeh2uRRe_WvSt z&G;P|7 z)(ts58g_c5>t~^R9Nf`@th+ijK=ewK*9`(__$4n=wk#a2^>V=~eALrITDK%iFpMyT zoC!OO&!7iC3fT4noW8qtmSkCnuAs5bVzIDN+tOcK6X`caP%Pnh?-#b1N4^SS8fPB# ziSe(h*@a&Yq-@@!M(X1JfnO7OtWE#fOc$8=IY`a9AwymcmVl<*BSF!YH!N43>^~B7 zeaxlXZpSa@E{nXo8xTKrGM3mKsLP0%UrC0j%%h&(dztT9>Tmb8aq2!DbsfKg8OW6c z(aN=doO0mQS+Ypl_8x!bq*5V*C^|3QYb91(llzfi3(qR*$``*7%_XeJAt7(#_l-~O zRU6CxjjC)N(z*^WP0-RuoG!`K|kr`*Qv6tU&>6Bp?6&LgZYkK^qozZL8pLi@$ z0+^1Lq60qvjnwCG%DtyS|7~>Vk1Max`?GM;P1Q~}#jv_$?z*sFRkH=XGr@ZDaqWT< z{tAb&{4XAe8!t&DW?M%|2aY$+F+|N>hV%Cl8?Os_-=jq4M6ZO(6!L2Qu0#j7v3wjT zTuv?uf|9?!uZ)-0lcXp18-LMZ!|MwMw|((ANz%PFt5G91myn!yQ=*)ZI!zVTQvZJC z*Tv(iDSHlAjJsRaLa4d5sw}&mNe188Bn;9IsnD+Sk!XP9wLFR@OZy9Hw#jUZfMZ=au3P8kmOa;as0^gut$?`{5|Hw3E{N!(euL& z;Dn4e!ZC3n@~1Ma6SXl=S%p(E%(=9@G>*AH_{g@A_!u&9qa5*fb{Dmg@yEvZ!LMYk zk2?n|BqKARj`VI9Q1Uc9-7#V^_T@}byfM`@XNGVVPXQF6c%k^+A9I6Sd-0`hg1Eh! zCgSO@gS)wZOF>uH?U}@zF^k4emcBCiG}X$Y4&N)O?wlVr4Y^+X_yp-y{ri=obF$0V zE%*CXb~R5y68>S+XJ`4ZKK*@M{d74I{+uPfzKH&Zl=+T0_1=oZa!RcQZm(D-1wjif zz~zQC5226UK#};?ToG}*gv_reD%NQ=sIlMx#ew*)mjqjg)k&t`jcIbF3A6I+qQRF? zGmwRBNOlVQJ-5O3?QTMP9v0q--Ea!g^gzCk0XttryN?yff`EmgGO@j~k~N~g=s7a$ z+}uXp4^+EFEFA29O}PzaebYKW!OhkiPCk#$1={iyccRZoZw_alw+cdtI0JS zYJopzZi*QMhU!IYjuRGip=ojDpfhHKA)O`yQQF~VSZh51WiyZ%pv)gz4jXlhyC?ox zGXPq>+z0H~S)v{Rc_?^l!lygAdBB+?00#me6TpaY|xq7jbXNL2<~9~293@2c3=Gu82p=Y*)1 z`TR`R@nLH>=jo13x~16Y68FuTMru;8fKpGxS0Y%_5i+DF)|>hcX8hwveIZLM*~HZ? zqxEnv6oM$xGZeVg1N5Fqn^ScUF=1&xF&k2kI}{Lur!ytU5+(%y0pyl{wB5vKAV6S) zJSRVB-+j4M{uF~%AJ<#eroM_J^{vQh9Ug98jWFYK_W>*&2g-~!_<&$$pkOfOtkJd@ zC=5@k8tA8G6G{9PM{r7i;opH8q)nm2DG(!K z#fRPkvPQs4&QvGpEX-iqeZs>6G{3Ah{rwSYpV|z#FxjfAYP;bg2~&<0ht%~ z$a~R5`d^0z#DOxB4>*#WoxW}hnerKqYuZC{jYRroAUojFnBCu1Dp!k^bqE7g85fMz zKQMsydhAnS>|#{D{V4||ISZ#aN{y#}vtnvND`*RBr1o!e%MT*qSd?`7ej`@P81(xf z1_@ABWd{@6-YC8VbMl{In1qk#;Jz<01n6YL{M?Fq>N{_a zNTTQa<(DjT@p~J8gE{(oc;`+7MDV~BtR}EBC?=maA2QoFGE-L1mRhDcf%$4A3S*;rU=<4~ZNn$y)OW zpM6oipcP*&aR%tTEP{D}ef24b^HBMJfmL3GH!0M5pCIUEUDz=}%t`3qe6Zz_Q2F|8 z=#~2gEW!78I@z1LcKS?2j^f8&1>wrv{l)EdVMkhJM4hq8$^v|*Iq~ysPmfUb817{$ z;WP^dRafLJ%`hAI{3XxVCM>D?n<;bzS;ANoo30&P6@1`6&Ph*(H-a`+1^fpYo%+vC z{$51ZiksCE=$C(dF(Nq3$J;m1-VWPUoJT{wa5=Ber;P0s@m?SOaJT8t>VKx#7=XE- zS#}RVj_xd8^lyE|bi=#s0wOurX_1fdqj6FK=`Ef+ff8_Wn_Sv`k&4n5Q4V6agb}|@ zF+bvcQ|&}{HTpd`Ql&K+*9)|Qx|0u6uJpJ>O6c?Eu5%}HAh*`pPS{)Lk7(1r0pj0% zxpWZB`$qQ0ptiv~k3luO)$9?Uk^GN}c^qJ={4uGbFsv7Ciaqte&Ner#ac2N=UL@~1 zRujqSgL)N!N|ev~#_DeaM}Z;YCM=HLX0Hco(F=Cm3gLyTm7ioE>SD=;IIrGLTzdJ1 zu;6u6%+0_>E-b}@=URir_asoV@QmjA-3x!yc~SQT&+FXjSkD0Y84znC zW|D<@@U5@=yd!=JQ=_>w)uf7YbHO&Ib|NUyvEw?c&;?4)o5Ma;fTzGd&K%Fhk1O!! zsjW)UoFdjgB%O_fE~rWN{f*h3vzUqEM;+5W6M;{h#~5=i0;>OZ83zcx0K0OI2bh$V zQK2C-+uhX1oznp@P_r9lrMyPI)&B>NKIA;$FaaG%Q-lAh~2 zSzgzoVjgu&aL?}ZFD}?TQ{OIrWB1R&YBys259wam=xV>cZDyXd79AbGuy3>kHYurb zZ>yC@NB?-ZgPDI-C+n?@rTMQ5Pg;9;XyRH1-@_2S9=?k6d&aZfC06D-3263a?ViCd zs)NJeX-Zu8p+!b(N2c>Kf&YQa5}X>m3fAZDK4Fnk%G1+;ajh8?9`oz>YZLsh^@%Zpy2ftKe~t#uhXcHrJNCOxoE^ z+Lp72*mkNzPK@{|X!rQZA}gLt!5!)z8ZA71Ol)>o$41D55n6wOZEUT3tVYtFiQeZK z9bfFgC~vT8$f4Nn5qgeh9^_J2j3uTb#imcXeo!)i10cYhHb4vtupJu}l~cC3exl zNORn{@@z}DH9e)~!8Td0fJz+G--@X5Y<@UD+CQ}-MEsyzDDF1Eys8kCR>{sR`)7UJ zgGG^%OVc6*_B@RoeS(!@CnmX~sG3oTV)B{1_Oca4(nDirUM@{8~3#RT};Z2X}yXnGh= zLPFm3U#{1CLv$}egbQf50p#)a7yvt-ntjRA*Kyn&>S}E5AjA#+qU%VOi9IOk4d~;H zQsqp>eL0`$wld7cS9hRW` zl@$*<`>p0Ugt>==NF4f7e!56jup*TRpbZO=2A+GmYi)o0fV#>3;R?FNTUl?W@#dL; z_`L2+9o{Qj7CTlGr6uu!AD5|Qhe6nR@}I=#gJ*dEwAs$qp@(p;?{4p(j`^j#{!J9~tGqb!M zMPU2q1wy`jww)mo0eO-(;XjCrR_BMZ=^yK7qk`%3!^b3L_Cxm5_Jw#juGTHmB~WbR zyNbIR!C@b|zGdBF+1yYxY1u^n<4xGH6gKPa_+!(EMvDGd)ScjT3W;8|N_Vdt?16#G z+p_?L3GccG-f;*g?lu;Vl2Fu0;8vn`ze5kLy3VsGU#=Ni^e)78Td#99EkEce>UtL1 zcgvRQQgVJW>d@s=vS&ob?9UES?UE|>fjL_~PafOAe!g=X(a7_RDd{7TT$v1_FMs!8 zeDo3C{-E>n$?eahcetq2R(~iql9yC1qIs|=8Jjj2^o08~|6^0b)Lv~)Oq?Z!49 OP<^7Q{0(Xu`u_l%N)DC) literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_no_bt.png b/images/Venu2_glance_no_bt.png new file mode 100644 index 0000000000000000000000000000000000000000..512b9104b86b64d03b5659d6fcd7eef277739c07 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_no_menu.png b/images/Venu2_glance_no_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e93266537e2b851a83cc200258d46ab29bad24 GIT binary patch literal 8985 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 literal 0 HcmV?d00001 diff --git a/images/Venu2_glance_start.png b/images/Venu2_glance_start.png deleted file mode 100644 index 57238dad27ea79ed8f007b9eef1211f86ee4703e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9310 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 or Null; - private var mIsGlance as Lang.Boolean = false; - private var mIsApp as Lang.Boolean = false; // Or Widget - private var mUpdating as Lang.Boolean = false; // Don't start a second chain of updates - private var mTemplates as Lang.Dictionary = {}; + private var mItemsToUpdate as Lang.Array or Null; + private var mIsGlance as Lang.Boolean = false; + private var mIsApp as Lang.Boolean = false; // Or Widget + private var mUpdating as Lang.Boolean = false; // Don't start a second chain of updates + private var mTemplates as Lang.Dictionary = {}; //! Class Constructor // @@ -203,7 +205,9 @@ class HomeAssistantApp extends Application.AppBase { mMenuStatus = WatchUi.loadResource($.Rez.Strings.Available) as Lang.String; } } - if (!mIsGlance) { + if (mIsGlance) { + glanceTemplate(data); + } else { if (data == null) { ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoJson) as Lang.String); } else { @@ -272,7 +276,9 @@ class HomeAssistantApp extends Application.AppBase { } else { mMenuStatus = WatchUi.loadResource($.Rez.Strings.Cached) as Lang.String; WatchUi.requestUpdate(); - if (!mIsGlance) { + if (mIsGlance) { + glanceTemplate(menu); + } else { buildMenu(menu); } return true; @@ -303,6 +309,22 @@ 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.get("glance") != null) { + var glance = menu.get("glance") as Lang.Dictionary; + if (glance.get("type").equals("info")) { + mGlanceTemplate = glance.get("content") as Lang.String; + // System.println("HomeAssistantApp glanceTemplate() " + mGlanceTemplate); + } else { // if glance.get("type").equals("status") + mGlanceTemplate = null; + } + } + } + } + //! Callback function for each menu update GET request. //! //! @param responseCode Response code. @@ -416,10 +438,9 @@ class HomeAssistantApp extends Application.AppBase { } } // https://developers.home-assistant.io/docs/api/native-app-integration/sending-data/#render-templates - var url = Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(); // System.println("HomeAssistantApp updateMenuItems() URL=" + url + ", Template='" + mTemplate + "'"); Communications.makeWebRequest( - url, + Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(), { "type" => "render_template", "data" => mTemplates @@ -548,6 +569,100 @@ class HomeAssistantApp extends Application.AppBase { } } + + //! Callback function after completing the GET request to render the glance template. + //! + //! @param responseCode Response code. + //! @param data Response data. + // + (:glance) + function onReturnFetchGlanceContent( + responseCode as Lang.Number, + data as Null or Lang.Dictionary or Lang.String + ) as Void { + // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Code: " + responseCode); + // System.println("HomeAssistantApp onReturnFetchGlanceContent() Response Data: " + data); + + 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 (!mIsGlance) { + 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 (!mIsGlance) { + 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 (!mIsGlance) { + 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 (!mIsGlance) { + 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 (!mIsGlance) { + ErrorView.show(WatchUi.loadResource($.Rez.Strings.ConfigUrlNotFound) as Lang.String); + } + break; + + case 200: + if (data != null) { + mGlanceText = data.get("glanceTemplate"); + } + break; + + default: + // System.println("HomeAssistantApp onReturnFetchGlanceContent(): Unhandled HTTP response code = " + responseCode); + if (!mIsGlance) { + ErrorView.show(WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + responseCode); + } + } + WatchUi.requestUpdate(); + } + + //! Construct the GET request to convert the optional glance template to text for display. + // + (:glance) + function fetchGlanceContent() as Void { + if (mGlanceTemplate != null) { + // https://developers.home-assistant.io/docs/api/native-app-integration/sending-data/#render-templates + Communications.makeWebRequest( + Settings.getApiUrl() + "/webhook/" + Settings.getWebhookId(), + { + "type" => "render_template", + "data" => { + "glanceTemplate" => { + "template" => mGlanceTemplate + } + } + }, + { + :method => Communications.HTTP_REQUEST_METHOD_POST, + :headers => { + "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }, + method(:onReturnFetchGlanceContent) + ); + } + } + //! Record the API status result. //! //! @param s A string describing the API status @@ -574,6 +689,16 @@ class HomeAssistantApp extends Application.AppBase { return mMenuStatus; } + //! Return the optional glance text that overrides the default glance content. This + //! is derived from the glance template. + //! + //! @return A string derived from the glance template + // + (:glance) + function getGlanceText() as Lang.String or Null { + return mGlanceText; + } + //! Return the Menu construction status. //! //! @return A Boolean indicating if the menu is loaded into the application. @@ -623,12 +748,21 @@ class HomeAssistantApp extends Application.AppBase { return [new HomeAssistantGlanceView(self)]; } + //! Return the glance theme. + //! + //! @return The glance colour + // + function getGlanceTheme() as Application.AppBase.GlanceTheme { + return Application.AppBase.GLANCE_THEME_LIGHT_BLUE; + } + //! Update the menu and API statuses. Required for the Glance update timer. // function updateStatus() as Void { mGlanceTimer = null; fetchMenuConfig(); fetchApiStatus(); + fetchGlanceContent(); } //! Code for when the application settings are updated. diff --git a/source/HomeAssistantGlanceView.mc b/source/HomeAssistantGlanceView.mc index 1a29822..9f7cd6d 100644 --- a/source/HomeAssistantGlanceView.mc +++ b/source/HomeAssistantGlanceView.mc @@ -21,15 +21,34 @@ using Toybox.Graphics; // (:glance) class HomeAssistantGlanceView extends WatchUi.GlanceView { - private static const scLeftMargin = 5; // in pixels - private static const scMidSep = 10; // Middle Separator "text:_text" in pixels - private var mApp as HomeAssistantApp; - private var mTitle as WatchUi.Text or Null; - private var mApiText as WatchUi.Text or Null; - private var mApiStatus as WatchUi.Text or Null; - private var mMenuText as WatchUi.Text or Null; - private var mMenuStatus as WatchUi.Text or Null; - private var mAntiAlias as Lang.Boolean = false; + //! Margin left of the filled rectangle in pixels. + private static const scLeftRectMargin = 5; + //! Filled rectangle width in pixels. + private static const scRectWidth = 20; + //! Margin right of the filled rectangle in pixels. + private static const scRightRectMargin = 5; + //! Separator between the first column of text and the second in pixels. + //! i.e. Middle Separator "text:_text" + private static const scMidSep = 10; + //! Margin on the right side of the glance in pixels. + private static const scRightGlanceMargin = 15; + //! Margin top and bottom of the rectangles in pixels. + private static const scVertMargin = 5; + //! Size of the rounded rectangle corners in pixels. + private static const scRectRadius = 5; + + //! Dynamically scale the width of the first column of text based on the + //! language selection for the word "Menu". + private var mTextWidth as Lang.Number = 0; + // Re-usable text items for drawing + private var mApp as HomeAssistantApp; + private var mTitle as WatchUi.Text or Null; + private var mApiText as WatchUi.Text or Null; + private var mApiStatus as WatchUi.Text or Null; + private var mMenuText as WatchUi.Text or Null; + private var mMenuStatus as WatchUi.Text or Null; + private var mGlanceContent as WatchUi.TextArea or Null; + private var mAntiAlias as Lang.Boolean = false; //! Class Constructor // @@ -46,15 +65,16 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { //! @param dc Device context // function onLayout(dc as Graphics.Dc) as Void { - var h = dc.getHeight(); - var tw = dc.getTextWidthInPixels(WatchUi.loadResource($.Rez.Strings.GlanceMenu) as Lang.String, Graphics.FONT_XTINY); + var h = dc.getHeight(); + + mTextWidth = dc.getTextWidthInPixels(WatchUi.loadResource($.Rez.Strings.GlanceMenu) as Lang.String + ":", Graphics.FONT_XTINY); mTitle = new WatchUi.Text({ :text => WatchUi.loadResource($.Rez.Strings.AppName) as Lang.String, :color => Graphics.COLOR_WHITE, :font => Graphics.FONT_TINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftMargin, + :locX => scLeftRectMargin, :locY => 1 * h / 6 }); @@ -63,7 +83,7 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { :color => Graphics.COLOR_WHITE, :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftMargin, + :locX => scLeftRectMargin + scRectWidth + scRightRectMargin, :locY => 3 * h / 6 }); mApiStatus = new WatchUi.Text({ @@ -71,15 +91,16 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { :color => Graphics.COLOR_WHITE, :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftMargin + scMidSep + tw, + :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 => scLeftMargin, + :locX => scLeftRectMargin + scRectWidth + scRightRectMargin, :locY => 5 * h / 6 }); mMenuStatus = new WatchUi.Text({ @@ -87,9 +108,20 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { :color => Graphics.COLOR_WHITE, :font => Graphics.FONT_XTINY, :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, - :locX => scLeftMargin + scMidSep + tw, + :locX => scLeftRectMargin + scRectWidth + scRightRectMargin + scMidSep + mTextWidth, :locY => 5 * h / 6 }); + + mGlanceContent = new WatchUi.TextArea({ + :text => "A longer piece of text to wrap.", + :color => Graphics.COLOR_WHITE, + :font => Graphics.FONT_XTINY, + :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER, + :locX => scLeftRectMargin + scRectWidth + scRightRectMargin + scMidSep, + :locY => (2 * h / 6) + scVertMargin, + :width => dc.getWidth() - scLeftRectMargin - scRightGlanceMargin, + :height => (4 * h / 6) - (2 * scVertMargin) + }); } //! Update the view with the latest status text. @@ -97,8 +129,17 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { //! @param dc Device context // function onUpdate(dc as Graphics.Dc) as Void { + 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); - if(mAntiAlias) { + if (mAntiAlias) { dc.setAntiAlias(true); } dc.setColor( @@ -106,12 +147,60 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView { Graphics.COLOR_TRANSPARENT ); dc.clear(); + mTitle.setColor(Graphics.COLOR_BLUE); mTitle.draw(dc); - mApiText.draw(dc); - mApiStatus.setText(mApp.getApiStatus()); - mApiStatus.draw(dc); - mMenuText.draw(dc); - mMenuStatus.setText(mApp.getMenuStatus()); - mMenuStatus.draw(dc); - } + + if (apiStatus.equals(WatchUi.loadResource($.Rez.Strings.Checking))) { + apiCol = Graphics.COLOR_YELLOW; + } else if (apiStatus.equals(WatchUi.loadResource($.Rez.Strings.Available))) { + apiCol = Graphics.COLOR_GREEN; + } else { + 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 + 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); + 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); + dc.drawRoundedRectangle( + scLeftRectMargin + scRectWidth + scRightRectMargin, + 2 * h / 6 + scVertMargin, + w - scRectWidth - scRightRectMargin, + 4 * h / 6 - (2 * scVertMargin), + 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); + mGlanceContent.setText(glanceText); + mGlanceContent.draw(dc); + } + } } diff --git a/source/WebLog.mc b/source/WebLog.mc index 53858f9..7af8bf1 100644 --- a/source/WebLog.mc +++ b/source/WebLog.mc @@ -167,7 +167,7 @@ class WebLog { // } } - // Callback function to print the outcome of a clear() method. Typically used for debugging this class. + //! Callback function to print the outcome of a clear() method. Typically used for debugging this class. //! //! @param responseCode Response code. //! @param data Response data.