mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2026-08-22 20:53:16 +00:00
Compare commits
26
Commits
v3.13
...
367870ad34
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
367870ad34 | ||
|
|
6218df3acb | ||
|
|
14f1c3bec9 | ||
|
|
82e1fda135 | ||
|
|
58aac9a754 | ||
|
|
a543314f0b | ||
|
|
dcb5c788fb | ||
|
|
b9d7096d88 | ||
|
|
69ea7df5fc | ||
|
|
e38301ef1a | ||
|
|
e912c96734 | ||
|
|
802388aac8 | ||
|
|
f042b59932 | ||
|
|
e0b5c41888 | ||
|
|
41d6a8a5c1 | ||
|
|
f23216d821 | ||
|
|
e1a2ca7c2c | ||
|
|
02a9472ac1 | ||
|
|
e0b5978406 | ||
|
|
c48d74138a | ||
|
|
3404c7f679 | ||
|
|
8c5bdbc1f8 | ||
|
|
a97440b997 | ||
|
|
17690d4349 | ||
|
|
b1fb5d9417 | ||
|
|
2fb59d2a56 |
+20
-1
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
# Etiquette
|
# Etiquette
|
||||||
|
|
||||||
Thank you to all those who have provided positive feedback, code and language translations, you have made the product better. The majority of users that contact us are grateful and we thank you for your courtesy. Sadly not everyone is as reasonable or polite. What follows is what the authors consider reasonable behaviour from users. We are getting a sufficient number of examples that it feels like something has to be called out! There are some users who feel "entitled" to be discourteous, as evidences by some of the Garmin application reviews.
|
Thank you to all those who have provided positive feedback, code and language translations, you have made the product better. The majority of users that contact us are grateful and we thank you for your courtesy. Sadly not everyone is as reasonable or polite. What follows is what the authors consider reasonable behaviour from users. We are getting a sufficient number of examples that it feels like something has to be called out! There are some users who feel "entitled" to be discourteous, as evidences by some of the Garmin application reviews. Its too easy to express an uninformed opinion publicaly these days without being held accountable and having to defend it as reasonable.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> **The intended audience for this application are those comfortable with configuring a HomeAssistant** (e.g. editing the YAML configuration files) and debugging why URLs don't work. It does not require programming skills, but the menu is configured via JSON which feels like "coding" (more like "describing"). If you are not comfortable with this relatively low level of configuration, you may like to try other Garmin applications instead.
|
> **The intended audience for this application are those comfortable with configuring a HomeAssistant** (e.g. editing the YAML configuration files) and debugging why URLs don't work. It does not require programming skills, but the menu is configured via JSON which feels like "coding" (more like "describing"). If you are not comfortable with this relatively low level of configuration, you may like to try other Garmin applications instead.
|
||||||
@@ -200,6 +200,25 @@ Answer: Make sure you meet the [minimum requirements for being a user](#etiquett
|
|||||||
|
|
||||||
(This last email trail does beg the question how this user ever expected to be able to work with their own Home Assistant server...)
|
(This last email trail does beg the question how this user ever expected to be able to work with their own Home Assistant server...)
|
||||||
|
|
||||||
|
**This one is interesting for a different reason.**
|
||||||
|
|
||||||
|
<img src="images/etiquette/2026-07-20_GHA_Opinionated_Italian.png" width="70%" title="Complicated for hobbyist">
|
||||||
|
|
||||||
|
> "I reverse malware for a living"
|
||||||
|
|
||||||
|
- Putting yourself on a pedestal?
|
||||||
|
- Are we supposed to credit you that you opinion carries additional weight?
|
||||||
|
|
||||||
|
> "this is complicated for a hobbyist"
|
||||||
|
|
||||||
|
Not for himself, but speaking on behalf of other users, how noble? Except the app is rated 4.7 in the store presently, so plenty of other users, including 'hobbyists', seem to disagree.
|
||||||
|
- Why did you feel you had to post an opinion on behalf of _any_ other users?
|
||||||
|
- Are hobbyists not as clever as you?
|
||||||
|
|
||||||
|
You're free to voice your opinion, but if you do it publicly, I have the freedom to reply and point out the flaws in your argument.
|
||||||
|
|
||||||
|
Do you not have a clue about writing significant applications in constrained space (i.e. including older devices), and therefore the limits that imposes on the application, e.g. menu building?
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### API Keys
|
### API Keys
|
||||||
|
|||||||
@@ -59,3 +59,5 @@
|
|||||||
| 3.11 | <img src="images/Venu2_glance_default.png" width="200" title="Default Glance"/><br/>Better handling of menus larger than the Glance view can handle. As a result the Glance can no longer verify the availability of the JSON menu as fetching it might cause an _"Error: Out Of Memory Error"_. Provide two user supplied HTTP Headers. Bug fix for the numeric picker. |
|
| 3.11 | <img src="images/Venu2_glance_default.png" width="200" title="Default Glance"/><br/>Better handling of menus larger than the Glance view can handle. As a result the Glance can no longer verify the availability of the JSON menu as fetching it might cause an _"Error: Out Of Memory Error"_. Provide two user supplied HTTP Headers. Bug fix for the numeric picker. |
|
||||||
| 3.12 | Amended GPS accuracy values used by the background service. |
|
| 3.12 | Amended GPS accuracy values used by the background service. |
|
||||||
| 3.13 | Added support for new devices: `d2mach2pro`, `fr170`, `fr170m`, `fr70`. |
|
| 3.13 | Added support for new devices: `d2mach2pro`, `fr170`, `fr170m`, `fr70`. |
|
||||||
|
| 3.14 | Numeric items now support `tap_action.data` fields so service call options like `transition` are catered for. See the documentation on [Additional Action Data](https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/examples/Numeric.md#additional-action-data). This features has been provided by [@StumblingGamer](https://github.com/StumblingGamer). Now prevent PIN enabled menu items from being enabled on non-touch screen devices. The PIN must be removed for the menu item to function. Fix for initialising numeric pickers with no user defined template. |
|
||||||
|
| 3.15 | The prevention of PIN enabled menu items on non-touch screen devices was improperly implemented, this version provides a bug fix. Added an error message to catch empty responses with _insecure HTTP_ usage. |
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ A Garmin application to provide a "dashboard" to control your devices via [HomeA
|
|||||||
|
|
||||||
The application is designed around a simple scrollable menu where menu items have been extended to interface with the [HomeAssistant API](https://developers.home-assistant.io/docs/api/rest/), e.g. to get the status of switches or lights for display on the `toggle` menu item, or a text status for an entity (`info` item). It is possible to nest menus, so there is a menu item to open a sub-menu. This can be arbitrarily deep and nested in the format of a tree of items, although you need to consider if reaching for your phone becomes quicker to select the device what you want to control.
|
The application is designed around a simple scrollable menu where menu items have been extended to interface with the [HomeAssistant API](https://developers.home-assistant.io/docs/api/rest/), e.g. to get the status of switches or lights for display on the `toggle` menu item, or a text status for an entity (`info` item). It is possible to nest menus, so there is a menu item to open a sub-menu. This can be arbitrarily deep and nested in the format of a tree of items, although you need to consider if reaching for your phone becomes quicker to select the device what you want to control.
|
||||||
|
|
||||||
|
The menu is defined in JSON format and needs to be made available via a URL. Note this means the menu definition file is public, i.e anyone who knows or guesses your URL will be able to see entity names from your Home Assistant instance that you use. There is no security or protection provided when using this URL. To mitigate this, one user points out that once you have cached your menu on your watch of device, the menu file can be removed from public view. Any user trying to take advantage of the entity names learned would need secure API access.
|
||||||
|
|
||||||
**The intended audience for this application are those comfortable with configuring a HomeAssistant** (e.g. editing the YAML configuration files) and debugging why URLs don't work. It does not require programming skills, but the menu is configured via JSON which feels like "coding" (more like "describing"). If you are not comfortable with this relatively low level of configuration, you may like to try other Garmin applications instead.
|
**The intended audience for this application are those comfortable with configuring a HomeAssistant** (e.g. editing the YAML configuration files) and debugging why URLs don't work. It does not require programming skills, but the menu is configured via JSON which feels like "coding" (more like "describing"). If you are not comfortable with this relatively low level of configuration, you may like to try other Garmin applications instead.
|
||||||
|
|
||||||
**If you are struggling with getting the application to work, please consult the [troubleshooting guide](TroubleShooting.md) first.** Please also be aware of the [etiquette](Etiquette.md) the developers expect before:
|
**If you are struggling with getting the application to work, please consult the [troubleshooting guide](TroubleShooting.md) first.** Please also be aware of the [etiquette](Etiquette.md) the developers expect before:
|
||||||
@@ -457,17 +459,19 @@ Check the latest unresolved [issues](https://github.com/house-of-abbey/GarminHom
|
|||||||
|
|
||||||
6. We are unable to support Edge 540, Edge 840 and Edge 1050 devices at this time. The simulation of these devices has two unexpected errors when toggling or executing taps. We get both `Communications.NETWORK_RESPONSE_OUT_OF_MEMORY` and `Communications.BLE_QUEUE_FULL` even though the memory usage is about 6% of the available RAM. Based on a lead from user @Petucky, both devices are being re-enabled as testing on a real Edge 840 device has proven successful, however we remain unable to support either devices until the simulator is fixed. The Edge 850 device has different display update issues but is functional. Again the assumption is the simulation model is buggy. Please [report](https://github.com/house-of-abbey/GarminHomeAssistant/issues) your experience on real devices to us so we can withdraw support or confirm they are working.
|
6. We are unable to support Edge 540, Edge 840 and Edge 1050 devices at this time. The simulation of these devices has two unexpected errors when toggling or executing taps. We get both `Communications.NETWORK_RESPONSE_OUT_OF_MEMORY` and `Communications.BLE_QUEUE_FULL` even though the memory usage is about 6% of the available RAM. Based on a lead from user @Petucky, both devices are being re-enabled as testing on a real Edge 840 device has proven successful, however we remain unable to support either devices until the simulator is fixed. The Edge 850 device has different display update issues but is functional. Again the assumption is the simulation model is buggy. Please [report](https://github.com/house-of-abbey/GarminHomeAssistant/issues) your experience on real devices to us so we can withdraw support or confirm they are working.
|
||||||
|
|
||||||
7. We are unable to support HTTP natively (without the workaround specified earlier). This is a limitation placed upon us by the Connect IQ API which for security reasons refuses to work with HTTP requests. There is nothing developers can do about this limitation. See the [Trouble Shooting](TroubleShooting.md#do-it-yourself-setup) guide for an example setup. We would appreciate it if users did not leave poor reviews for the lack of this feature which is beyond our control to fix.
|
7. We are unable to support HTTP natively (without the workaround specified earlier). This is a limitation placed upon us by the Connect IQ API which for security reasons refuses to work with insecure HTTP requests. There is nothing developers can do about this limitation. See the [Trouble Shooting](TroubleShooting.md#do-it-yourself-setup) guide for an example setup. We would appreciate it if users did not leave poor reviews for the lack of this feature which is beyond our control to fix.
|
||||||
|
|
||||||
8. There is a [bug in Garmin Express so that when you use that software to amend the application's settings](https://github.com/house-of-abbey/GarminHomeAssistant/issues/194), the page appears in a random language not of your choice. I would like to thank user [heviiguy](https://github.com/heviiguy) for his work researching the issue, leading to these references that indicate the authors of Garmin HomeAssistant cannot resolve this issue as its a bug in Garmin Express that Garmin are refusing to believe exists! See these pages for details:
|
8. There is a [bug in Garmin Express so that when you use that software to amend the application's settings](https://github.com/house-of-abbey/GarminHomeAssistant/issues/194), the page appears in a random language not of your choice. I would like to thank user [heviiguy](https://github.com/heviiguy) for his work researching the issue, leading to these references that indicate the authors of Garmin HomeAssistant cannot resolve this issue as its a bug in Garmin Express that Garmin are refusing to believe exists! See these pages for details:
|
||||||
- [Garmin Express - Wrong Language](https://forums.garmin.com/developer/connect-iq/i/bug-reports/garmin-express---wrong-language)
|
- [Garmin Express - Wrong Language](https://forums.garmin.com/developer/connect-iq/i/bug-reports/garmin-express---wrong-language)
|
||||||
- [Incorrect language displayed for custom data fields](https://forums.garmin.com/developer/connect-iq/f/discussion/388137/incorrect-language-displayed-for-custom-data-fields)
|
- [Incorrect language displayed for custom data fields](https://forums.garmin.com/developer/connect-iq/f/discussion/388137/incorrect-language-displayed-for-custom-data-fields)
|
||||||
|
|
||||||
9. When using Wi-Fi or LTE to toggle a light, the `toggle` will fail when the default or current state of the application's menu does not match the state of the light. The same applies to a cover or other thing that can be toggled. This is because the application is unable to initialise the menu with the current state without Bluetooth. Hence the Wi-Fi/LTE functionality is best used with `tap` items only.
|
9. Wi-Fi may refuse to work at all for some infrastructures or devices. This problem relates to the implementation of [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) in the Garmin SDK and is beyond our control to fix. See [Wi-Fi "limits of use"](Wi-Fi.md#limits-of-use) for details.
|
||||||
|
|
||||||
10. There are memory limits, particularly for older devices. Please see the [explanation of the memory limits](Devices.md) and device support.
|
10. When using Wi-Fi or LTE to toggle a light, the `toggle` will fail when the default or current state of the application's menu does not match the state of the light. The same applies to a cover or other thing that can be toggled. This is because the application is unable to initialise the menu with the current state without Bluetooth. Hence the Wi-Fi/LTE functionality is best used with `tap` items only.
|
||||||
|
|
||||||
11. There is a 32 kB memory limit for Glance views on some devices that mean the code and data for the Glance view is too large to load and the Glance view crashes before any code can intervene to prevent the fatal "Out Of Memory Error". Nor is it possible to disable the Glance view in the [application manifest](./manifest.xml) on a per device basis. The simple advice is, for older watches affected, do not try to use the Glance view. To see if your device is affected, please trawl the [devices page](./Devices.md).
|
11. There are memory limits, particularly for older devices. Please see the [explanation of the memory limits](Devices.md) and device support.
|
||||||
|
|
||||||
|
12. There is a 32 kB memory limit for Glance views on some devices that mean the code and data for the Glance view is too large to load and the Glance view crashes before any code can intervene to prevent the fatal "Out Of Memory Error". Nor is it possible to disable the Glance view in the [application manifest](./manifest.xml) on a per device basis. The simple advice is, for older watches affected, do not try to use the Glance view. To see if your device is affected, please trawl the [devices page](./Devices.md).
|
||||||
|
|
||||||
# Authors & Contributors
|
# Authors & Contributors
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -150,6 +150,10 @@ To verify if you have this issue you can use a tool like [SSL Shoppers's SSL Che
|
|||||||
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...)
|
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...)
|
||||||
2. Accessibility of URLs, hence the above help guide.
|
2. Accessibility of URLs, hence the above help guide.
|
||||||
|
|
||||||
|
## Wi-Fi Not Working
|
||||||
|
|
||||||
|
This is probably a TLS issue associated with HTTPS. Please see [Wi-Fi "limits of use"](Wi-Fi.md#limits-of-use) section. You may be able to amend your server's TLS settings. As the application is dependent on the Garmin SDK, there is no application code that can be changed to fix the TLS version. The problem is external to this application and specific to your IT setup, therefore you are supporting yourself to resolve it.
|
||||||
|
|
||||||
## Online Web-based Editor
|
## Online Web-based Editor
|
||||||
|
|
||||||
The [editor](https://house-of-abbey.github.io/GarminHomeAssistant/web/) provides the following functions:
|
The [editor](https://house-of-abbey.github.io/GarminHomeAssistant/web/) provides the following functions:
|
||||||
@@ -403,7 +407,7 @@ Store-Id: 61c91d28-ec5e-438d-9f83-39e9f45b199d
|
|||||||
Store-Version: 30
|
Store-Version: 30
|
||||||
Filename: DCRL0437
|
Filename: DCRL0437
|
||||||
Appname: HomeAssistant
|
Appname: HomeAssistant
|
||||||
Stack:
|
Stack:
|
||||||
- pc: 0x10003b5e
|
- pc: 0x10003b5e
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -16,17 +16,47 @@ With version 3.0 onwards the application now includes the ability to temporarily
|
|||||||
|
|
||||||
4. Remember that you need to be within range of your watch's configured Wi-Fi access point to utilize this functionality. If supported by your device, LTE offers a longer range, but network charges may apply.
|
4. Remember that you need to be within range of your watch's configured Wi-Fi access point to utilize this functionality. If supported by your device, LTE offers a longer range, but network charges may apply.
|
||||||
|
|
||||||
5. On some Garmin devices, the HTTPS handshake is performed using **TLS 1.2**. If your server or proxy enforces a higher minimum (e.g., TLS 1.3), you will encounter an SSL handshake error with the message:
|
5. **Transport Layer Security (TLS) settings.** The following insights have been submitted by App users. The authors cannot verify the details in anyway as we don't have the same infrastructure, but we are very grateful these users took the time to share their solutions for others to benefit from.
|
||||||
|
|
||||||
|
Ali Alaei ([@aalaei](https://github.com/aalaei)), [resolved a Cloudflare TLS issue](https://github.com/house-of-abbey/GarminHomeAssistant/pull/266) as follows:
|
||||||
|
|
||||||
|
<div style="margin:30px;padding:20px;background-color:lightgrey;border:1px solid black;border-radius: 10px;">
|
||||||
|
|
||||||
|
On some Garmin devices, the HTTPS handshake is performed using **TLS 1.2**. If your server or proxy enforces a higher minimum (e.g., TLS 1.3), you will encounter an SSL handshake error with the message:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
HTTP request returned error code = 0
|
HTTP request returned error code = 0
|
||||||
```
|
```
|
||||||
|
|
||||||
This limitation only affects **Wi-Fi/LTE connections**. When connected over **Bluetooth**, the watch routes requests through the paired phone, which handles the TLS handshake and supports newer TLS versions (such as 1.3) without issue.
|
This limitation only affects **Wi-Fi/LTE connections**. When connected over **Bluetooth**, the watch routes requests through the paired phone, which handles the TLS handshake and supports newer TLS versions (such as 1.3) without issue.
|
||||||
|
|
||||||
To fix this, lower the minimum TLS setting to allow TLS 1.2. For example, if you are using **Cloudflare Tunneling**, go to:
|
To fix this, lower the minimum TLS setting to allow TLS 1.2. For example, if you are using **Cloudflare Tunneling**, go to:
|
||||||
`SSL/TLS → Edge Certificates → Minimum TLS Version`
|
`SSL/TLS → Edge Certificates → Minimum TLS Version`
|
||||||
and set it to **at most TLS 1.2**. _Reducing below TLS 1.2 is not recommended due to security risks._
|
and set it to **at most TLS 1.2**. _Reducing below TLS 1.2 is not recommended due to security risks._
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Another user, [@xhemart](https://github.com/xhemart), [reports some research](https://github.com/house-of-abbey/GarminHomeAssistant/issues/292#issuecomment-5360598790) to further diagnose this issue:
|
||||||
|
|
||||||
|
<div style="margin:30px;padding:20px;background-color:lightgrey;border:1px solid black;border-radius: 10px;">
|
||||||
|
|
||||||
|
I ran a direct test against my own Nabu Casa endpoint with openssl s_client, forcing specific cipher suites, and it turns out **TLS version was never the actual constraint**. My server accepts TLS 1.2 just fine (confirmed with `ECDHE-RSA-AES128-GCM-SHA256`). What it does _not_ accept is any cipher suite using plain RSA key exchange (no forward secrecy) — regardless of whether the bulk cipher is a modern AEAD one or an old CBC/SHA1 one:
|
||||||
|
|
||||||
|
Test | Forced Configuration | Result
|
||||||
|
:-------------------------------------|:----------------------------------|:-----------------------------------
|
||||||
|
Default negotiation | — | ✅ TLS 1.3, TLS_AES_256_GCM_SHA384
|
||||||
|
TLS 1.2, RSA key exchange, CBC/SHA1 | e.g. `AES128-SHA` | ❌ Handshake failure
|
||||||
|
TLS 1.2, RSA key exchange, GCM (AEAD) | e.g. `AES256-GCM-SHA384` | ❌ Handshake failure
|
||||||
|
TLS 1.2, ECDHE, CBC/SHA1 | e.g. `ECDHE-RSA-AES128-SHA` | ❌ Handshake failure
|
||||||
|
TLS 1.2, ECDHE, GCM (AEAD) | e.g. `ECDHE-RSA-AES128-GCM-SHA256`| ✅ works
|
||||||
|
|
||||||
|
So the actual server-side requirement is **forward secrecy (ECDHE)** — it rejects any RSA-key-exchange `ClientHello` outright, independent of TLS version or bulk cipher.
|
||||||
|
|
||||||
|
This lines up with a bug Garmin itself has acknowledged for the Epix (Gen 2) / Fenix 7: [TLS Certificate issue with Fenix 7 and Epix (Gen 2)](https://forums.garmin.com/developer/connect-iq/i/bug-reports/tls-certificate-issue-with-fenix-7-and-epix-gen-2). Per that thread, when these watches negotiate TLS directly over Wi-Fi (i.e. without the phone relaying via Bluetooth), they only offer legacy RSA-key-exchange cipher suites with no forward secrecy — exactly the class of suite my server rejects. Over Bluetooth the phone performs the TLS handshake instead, which explains why it always works there. Garmin marked that report "Complete," but the thread has follow-up comments disputing that, and no new cipher suites appear to have shown up on affected devices since.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
So, it's a Garmin device side limitation (in some models) of the Connect IQ TLS stack when negotiating directly over Wi-Fi, that might be fixed by amending the TLS settings on the server if you are fortunate. Some Garmin devices only speak cipher suites without forward secrecy, which most modern TLS termination (Nabu Casa, Cloudflare, current nginx/Apache defaults, etc.) rejects by design for good security reasons. There's no app-side workaround available; it would need a firmware fix from Garmin. By "some models" we mean it is confirmed on Epix (Gen 2); likely related on Fenix 7 Pro and Forerunner 265; possibly related on Forerunner 970 (unconfirmed).
|
||||||
|
|
||||||
|
For anyone on the same models looking for a local-network route, of the options in the [README, only #2](https://github.com/house-of-abbey/GarminHomeAssistant#no-https) (local DNS override to `garmincdn.com` serving plain HTTP) sidesteps the cipher-suite issue entirely, since it avoids TLS altogether. You will still need to verify whether these watches actually honour a local DHCP-provided DNS server for that override, or alternatively hard code public resolvers.
|
||||||
|
|
||||||
## Video
|
## Video
|
||||||
|
|
||||||
@@ -40,4 +70,4 @@ We emphasize that the Wi-Fi/LTE functionality should be viewed as a 'last resort
|
|||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
With thanks to Vincent, [@vincentezw](https://github.com/vincentezw) for contributing this solution, and to Ali Alaei, [@aalaei](https://github.com/aalaei) for the finer details on TLS.
|
With thanks to Vincent, [@vincentezw](https://github.com/vincentezw) for contributing this solution, and to Ali Alaei, [@aalaei](https://github.com/aalaei), and [@xhemart](https://github.com/xhemart) for the finer details on TLS and resolving issue [292](https://github.com/house-of-abbey/GarminHomeAssistant/issues/292).
|
||||||
|
|||||||
+21
-4
@@ -251,11 +251,17 @@
|
|||||||
"$ref": "#/$defs/content"
|
"$ref": "#/$defs/content"
|
||||||
},
|
},
|
||||||
"tap_action": {
|
"tap_action": {
|
||||||
"$ref": "#/$defs/tap_action",
|
"title": "Tap Action",
|
||||||
|
"description": "Numeric tap action definition to include the number picker. 'confirm', 'pin' and 'exit' fields are optional.",
|
||||||
"properties": {
|
"properties": {
|
||||||
"action": {
|
"action": {
|
||||||
"$ref": "#/$defs/action"
|
"$ref": "#/$defs/action"
|
||||||
},
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "object",
|
||||||
|
"title": "Additional action data",
|
||||||
|
"description": "Fixed Home Assistant service data. The selected picker value is merged into this object using the picker's data_attribute. Service-specific fields cannot be schema checked here."
|
||||||
|
},
|
||||||
"picker": {
|
"picker": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"title": "Number picker configuration",
|
"title": "Number picker configuration",
|
||||||
@@ -289,13 +295,24 @@
|
|||||||
"max",
|
"max",
|
||||||
"step",
|
"step",
|
||||||
"data_attribute"
|
"data_attribute"
|
||||||
]
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"confirm": {
|
||||||
|
"$ref": "#/$defs/confirm"
|
||||||
|
},
|
||||||
|
"pin": {
|
||||||
|
"$ref": "#/$defs/pin"
|
||||||
|
},
|
||||||
|
"exit": {
|
||||||
|
"$ref": "#/$defs/exit"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
"action",
|
"action",
|
||||||
"picker"
|
"picker"
|
||||||
]
|
],
|
||||||
|
"additionalProperties": false
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"$ref": "#/$defs/enabled"
|
"$ref": "#/$defs/enabled"
|
||||||
@@ -982,7 +999,7 @@
|
|||||||
"tap_action": {
|
"tap_action": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"title": "Tap Action",
|
"title": "Tap Action",
|
||||||
"description": "'confirm' and 'pin' fields are optional.",
|
"description": "'confirm', 'pin' and 'exit' fields are optional.",
|
||||||
"properties": {
|
"properties": {
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"$ref": "#/$defs/confirm"
|
"$ref": "#/$defs/confirm"
|
||||||
|
|||||||
+11
-2
@@ -25,6 +25,8 @@ Two simple examples using a scene and a cover as `tap` menu items.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Confirmation
|
||||||
|
|
||||||
Any menu item with an action (`tap`, `template`, or `toggle`), may have a confirmation view added. For consistency this is always done via the `tap_action` JSON object, even though for a `toggle` menu item there will only ever be a single field inside. For the `toggle` menu item, the confirmation is presented on both `on` and `off` directions. There is no option for asymmetry, i.e. only in one direction.
|
Any menu item with an action (`tap`, `template`, or `toggle`), may have a confirmation view added. For consistency this is always done via the `tap_action` JSON object, even though for a `toggle` menu item there will only ever be a single field inside. For the `toggle` menu item, the confirmation is presented on both `on` and `off` directions. There is no option for asymmetry, i.e. only in one direction.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
@@ -56,6 +58,8 @@ The `confirm` field may contain a string instead of a Boolean in order to provid
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Personal Identification Number (PIN)
|
||||||
|
|
||||||
**The authors do not advise the use of this application for security sensitive devices. But we suspect users are taking that risk anyway, hence a PIN confirmation is provided that can be used for additional menu item security.**
|
**The authors do not advise the use of this application for security sensitive devices. But we suspect users are taking that risk anyway, hence a PIN confirmation is provided that can be used for additional menu item security.**
|
||||||
|
|
||||||
This can be enabled by setting the `pin` field in the `tap_action`. The `pin` field overrides `confirm`. Explicitly setting `confirm` is not necessary.
|
This can be enabled by setting the `pin` field in the `tap_action`. The `pin` field overrides `confirm`. Explicitly setting `confirm` is not necessary.
|
||||||
@@ -70,9 +74,14 @@ The 4-digit PIN is set globally for all actions in the app settings in Connect I
|
|||||||
|
|
||||||
When entering an invalid PIN for the fifth time within 2 minutes, the PIN dialog will be locked for all actions for the next 10 minutes. Entering a valid PIN will always reset the failure counter.
|
When entering an invalid PIN for the fifth time within 2 minutes, the PIN dialog will be locked for all actions for the next 10 minutes. Entering a valid PIN will always reset the failure counter.
|
||||||
|
|
||||||
<img src="../images/pin_view.png" width="200" title="Confirmation View"/>
|
<img src="../images/pin_view.png" width="200" title="PIN View"/>
|
||||||
|
|
||||||
Note that for notify events, you _must_ not supply an `entity_id` or the API call will fail. There are other examples too.
|
> [!IMPORTANT]
|
||||||
|
> The PIN entry requires a touch screen enabled device.
|
||||||
|
|
||||||
|
## Additional Data
|
||||||
|
|
||||||
|
Some `action`s require additional `data` to be supplied. The following example shows how we handle this scenario. Note that for notify events, you _must not_ supply an `entity_id` or the API call will fail. There are other examples too.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,6 +39,36 @@ Field | Purpose
|
|||||||
|
|
||||||
It may well be the case that often `attribute` and `data_attribute` are the same attribute, as with this example.
|
It may well be the case that often `attribute` and `data_attribute` are the same attribute, as with this example.
|
||||||
|
|
||||||
|
## Additional Action Data
|
||||||
|
|
||||||
|
The `tap_action` object may also include a `data` object for fixed service call parameters. When the picker value is selected, the application merges the picker value into this `data` object using `data_attribute`.
|
||||||
|
|
||||||
|
For example, a light brightness picker can request a HomeAssistant transition while still using the picker value for `brightness`.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Lounge Brightness",
|
||||||
|
"content": "{{ ((state_attr('light.lounge','brightness') | int(0) / 255) * 100) | round(0) }}%",
|
||||||
|
"type": "numeric",
|
||||||
|
"entity": "light.lounge",
|
||||||
|
"tap_action": {
|
||||||
|
"action": "light.turn_on",
|
||||||
|
"data": {
|
||||||
|
"transition": 2
|
||||||
|
},
|
||||||
|
"picker": {
|
||||||
|
"step": 5,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"attribute": "brightness",
|
||||||
|
"data_attribute": "brightness"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The resulting action data sent to HomeAssistant contains both the fixed `transition` value and the selected `brightness` value.
|
||||||
|
|
||||||
## Helper
|
## Helper
|
||||||
|
|
||||||
You might define a "helper" entity as follows in HomeAssistant:
|
You might define a "helper" entity as follows in HomeAssistant:
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 156 KiB |
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Arabic
|
Generated by Google Translate and gemini-2.5-flash from English to Arabic
|
||||||
تم الإنشاء بواسطة ترجمة Google و gemini-2.5-flash من الإنجليزية إلى العربية
|
تم الإنشاء بواسطة ترجمة Google وgemini-2.5-flash من الإنجليزية إلى العربية
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">لا يوجد مفتاح API في إعدادات التطبيق.</string>
|
<string id="NoAPIKey" scope="glance">لا يوجد مفتاح API في إعدادات التطبيق.</string>
|
||||||
<string id="NoApiUrl" scope="glance">لا يوجد عنوان URL لـ API في إعدادات التطبيق.</string>
|
<string id="NoApiUrl" scope="glance">لا يوجد عنوان URL لـ API في إعدادات التطبيق.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">لا يوجد عنوان URL للتكوين في إعدادات التطبيق.</string>
|
<string id="NoConfigUrl" scope="glance">لا يوجد عنوان URL للتكوين في إعدادات التطبيق.</string>
|
||||||
|
<string id="NoHTTPS">لا توجد استجابة، استخدم اتصال HTTPS آمنًا.</string>
|
||||||
<string id="NoInternet">لا يوجد اتصال بالإنترنت.</string>
|
<string id="NoInternet">لا يوجد اتصال بالإنترنت.</string>
|
||||||
<string id="NoJson">لم يتم إرجاع أي JSON من طلب HTTP.</string>
|
<string id="NoJson">لم يتم إرجاع أي JSON من طلب HTTP.</string>
|
||||||
<string id="NoMenu">خطأ في تعريف القائمة، تحقق من التعليمات.</string>
|
<string id="NoMenu">خطأ في تعريف القائمة، تحقق من التعليمات.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Няма ключ за API в настройките на приложението.</string>
|
<string id="NoAPIKey" scope="glance">Няма ключ за API в настройките на приложението.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Няма URL адрес на API в настройките на приложението.</string>
|
<string id="NoApiUrl" scope="glance">Няма URL адрес на API в настройките на приложението.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Няма URL адрес за конфигурация в настройките на приложението.</string>
|
<string id="NoConfigUrl" scope="glance">Няма URL адрес за конфигурация в настройките на приложението.</string>
|
||||||
|
<string id="NoHTTPS">Няма отговор, използвайте защитена HTTPS връзка.</string>
|
||||||
<string id="NoInternet">Няма интернет връзка.</string>
|
<string id="NoInternet">Няма интернет връзка.</string>
|
||||||
<string id="NoJson">Не е върнат JSON от HTTP заявка.</string>
|
<string id="NoJson">Не е върнат JSON от HTTP заявка.</string>
|
||||||
<string id="NoMenu">Грешка в дефиницията на менюто, проверете инструкциите.</string>
|
<string id="NoMenu">Грешка в дефиницията на менюто, проверете инструкциите.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Žádný klíč API v nastavení aplikace.</string>
|
<string id="NoAPIKey" scope="glance">Žádný klíč API v nastavení aplikace.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Žádná URL API v nastavení aplikace.</string>
|
<string id="NoApiUrl" scope="glance">Žádná URL API v nastavení aplikace.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Žádná konfigurační URL v nastavení aplikace.</string>
|
<string id="NoConfigUrl" scope="glance">Žádná konfigurační URL v nastavení aplikace.</string>
|
||||||
|
<string id="NoHTTPS">Žádná odpověď, použijte zabezpečené připojení HTTPS.</string>
|
||||||
<string id="NoInternet">Žádné připojení k internetu.</string>
|
<string id="NoInternet">Žádné připojení k internetu.</string>
|
||||||
<string id="NoJson">Žádný JSON se nevrátil z požadavku HTTP.</string>
|
<string id="NoJson">Žádný JSON se nevrátil z požadavku HTTP.</string>
|
||||||
<string id="NoMenu">Chyba definice menu, zkontrolujte pokyny.</string>
|
<string id="NoMenu">Chyba definice menu, zkontrolujte pokyny.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Danish
|
Generated by Google Translate and gemini-2.5-flash from English to Danish
|
||||||
Genereret af Google Oversæt og gemini-2.5-flash fra engelsk til dansk
|
Genereret af Google Translate og gemini-2.5-flash fra engelsk til dansk
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Ingen API-nøgle i applikationsindstillingerne.</string>
|
<string id="NoAPIKey" scope="glance">Ingen API-nøgle i applikationsindstillingerne.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikationsindstillingerne.</string>
|
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikationsindstillingerne.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Ingen konfigurations-URL i applikationsindstillingerne.</string>
|
<string id="NoConfigUrl" scope="glance">Ingen konfigurations-URL i applikationsindstillingerne.</string>
|
||||||
|
<string id="NoHTTPS">Intet svar, brug sikker HTTPS-forbindelse.</string>
|
||||||
<string id="NoInternet">Ingen internetforbindelse.</string>
|
<string id="NoInternet">Ingen internetforbindelse.</string>
|
||||||
<string id="NoJson">Ingen JSON modtaget fra HTTP-anmodning.</string>
|
<string id="NoJson">Ingen JSON modtaget fra HTTP-anmodning.</string>
|
||||||
<string id="NoMenu">Menudefinitionsfejl, tjek instruktionerne.</string>
|
<string id="NoMenu">Menudefinitionsfejl, tjek instruktionerne.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Kein API-Schlüssel in den App-Einstellungen hinterlegt.</string>
|
<string id="NoAPIKey" scope="glance">Kein API-Schlüssel in den App-Einstellungen hinterlegt.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Keine API-URL in den App-Einstellungen hinterlegt.</string>
|
<string id="NoApiUrl" scope="glance">Keine API-URL in den App-Einstellungen hinterlegt.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Keine Menükonfigurations-URL (JSON) in den App-Einstellungen hinterlegt.</string>
|
<string id="NoConfigUrl" scope="glance">Keine Menükonfigurations-URL (JSON) in den App-Einstellungen hinterlegt.</string>
|
||||||
|
<string id="NoHTTPS">Keine Antwort, sichere HTTPS-Verbindung verwenden.</string>
|
||||||
<string id="NoInternet">Keine Internetverbindung.</string>
|
<string id="NoInternet">Keine Internetverbindung.</string>
|
||||||
<string id="NoJson">Keine JSON-Datei aus der HTTP-Anfrage zurückbekommen.</string>
|
<string id="NoJson">Keine JSON-Datei aus der HTTP-Anfrage zurückbekommen.</string>
|
||||||
<string id="NoMenu">Fehler in der Menüdefinition, Anweisungen prüfen.</string>
|
<string id="NoMenu">Fehler in der Menüdefinition, Anweisungen prüfen.</string>
|
||||||
@@ -81,9 +82,9 @@
|
|||||||
<string id="SettingsUserHttpHeader">Zusätzlicher HTTP-Header</string>
|
<string id="SettingsUserHttpHeader">Zusätzlicher HTTP-Header</string>
|
||||||
<string id="SettingsUserHttpHeaderDescription">Einige Home Assistant-Installationen erfordern die Angabe eines benutzerdefinierten HTTP-Headers, um zu funktionieren.</string>
|
<string id="SettingsUserHttpHeaderDescription">Einige Home Assistant-Installationen erfordern die Angabe eines benutzerdefinierten HTTP-Headers, um zu funktionieren.</string>
|
||||||
<string id="SettingsUserHttpHeader1Name">Zusätzlicher HTTP-Header 1: Name</string>
|
<string id="SettingsUserHttpHeader1Name">Zusätzlicher HTTP-Header 1: Name</string>
|
||||||
<string id="SettingsUserHttpHeader1Value">Zusätzlicher HTTP-Header 1: Wert</string>
|
<string id="SettingsUserHttpHeader1Value">Zusätzlicher HTTP-Header 1: Value</string>
|
||||||
<string id="SettingsUserHttpHeader2Name">Zusätzlicher HTTP-Header 2: Name</string>
|
<string id="SettingsUserHttpHeader2Name">Zusätzlicher HTTP-Header 2: Name</string>
|
||||||
<string id="SettingsUserHttpHeader2Value">Zusätzlicher HTTP-Header 2: Wert</string>
|
<string id="SettingsUserHttpHeader2Value">Zusätzlicher HTTP-Header 2: Value</string>
|
||||||
<string id="SettingsClearWebhookId">Neu mit Home Assistant verbinden (Webhook-ID löschen, siehe Fehlerbehebungshandbuch).</string>
|
<string id="SettingsClearWebhookId">Neu mit Home Assistant verbinden (Webhook-ID löschen, siehe Fehlerbehebungshandbuch).</string>
|
||||||
<string id="SettingsWebhookId">(Nur lesen) Die vom Gerät erstellte Webhook-ID für Hintergrund-Updates. Kann zum Debuggen benötigt werden.</string>
|
<string id="SettingsWebhookId">(Nur lesen) Die vom Gerät erstellte Webhook-ID für Hintergrund-Updates. Kann zum Debuggen benötigt werden.</string>
|
||||||
</strings>
|
</strings>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Geen API-sleutel in de toepassingsinstellingen.</string>
|
<string id="NoAPIKey" scope="glance">Geen API-sleutel in de toepassingsinstellingen.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Geen API-URL in de toepassingsinstellingen.</string>
|
<string id="NoApiUrl" scope="glance">Geen API-URL in de toepassingsinstellingen.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Geen configuratie-URL in de toepassingsinstellingen.</string>
|
<string id="NoConfigUrl" scope="glance">Geen configuratie-URL in de toepassingsinstellingen.</string>
|
||||||
|
<string id="NoHTTPS">Geen antwoord, gebruik een beveiligde HTTPS-verbinding.</string>
|
||||||
<string id="NoInternet">Geen internetverbinding.</string>
|
<string id="NoInternet">Geen internetverbinding.</string>
|
||||||
<string id="NoJson">Geen JSON ontvangen van het HTTP-verzoek.</string>
|
<string id="NoJson">Geen JSON ontvangen van het HTTP-verzoek.</string>
|
||||||
<string id="NoMenu">Menudefinitiefout, controleer de instructies.</string>
|
<string id="NoMenu">Menudefinitiefout, controleer de instructies.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Rakenduse seadetes pole API võtit.</string>
|
<string id="NoAPIKey" scope="glance">Rakenduse seadetes pole API võtit.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Rakenduse seadetes pole API URL-i.</string>
|
<string id="NoApiUrl" scope="glance">Rakenduse seadetes pole API URL-i.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Rakenduse seadetes pole konfiguratsiooni URL-i.</string>
|
<string id="NoConfigUrl" scope="glance">Rakenduse seadetes pole konfiguratsiooni URL-i.</string>
|
||||||
|
<string id="NoHTTPS">Vastust pole, kasuta turvalist HTTPS-ühendust.</string>
|
||||||
<string id="NoInternet">Interneti-ühendust pole.</string>
|
<string id="NoInternet">Interneti-ühendust pole.</string>
|
||||||
<string id="NoJson">HTTP päring ei tagastanud JSON-i.</string>
|
<string id="NoJson">HTTP päring ei tagastanud JSON-i.</string>
|
||||||
<string id="NoMenu">Menüü määratluse viga, kontrollige juhiseid.</string>
|
<string id="NoMenu">Menüü määratluse viga, kontrollige juhiseid.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Finnish
|
Generated by Google Translate and gemini-2.5-flash from English to Finnish
|
||||||
Generoinut Google Translate ja gemini-2.5-flash englannista suomeksi
|
Kääntänyt Google Translate ja gemini-2.5-flash englannista suomeksi
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Ei API-avainta sovellusasetuksissa.</string>
|
<string id="NoAPIKey" scope="glance">Ei API-avainta sovellusasetuksissa.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Ei API-URL-osoitetta sovellusasetuksissa.</string>
|
<string id="NoApiUrl" scope="glance">Ei API-URL-osoitetta sovellusasetuksissa.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Ei määritys-URL-osoitetta sovellusasetuksissa.</string>
|
<string id="NoConfigUrl" scope="glance">Ei määritys-URL-osoitetta sovellusasetuksissa.</string>
|
||||||
|
<string id="NoHTTPS">Ei vastausta, käytä suojattua HTTPS-yhteyttä.</string>
|
||||||
<string id="NoInternet">Ei Internet-yhteyttä.</string>
|
<string id="NoInternet">Ei Internet-yhteyttä.</string>
|
||||||
<string id="NoJson">HTTP-pyynnöstä ei palautettu JSONia.</string>
|
<string id="NoJson">HTTP-pyynnöstä ei palautettu JSONia.</string>
|
||||||
<string id="NoMenu">Valikon määritysvirhe, tarkista ohjeet.</string>
|
<string id="NoMenu">Valikon määritysvirhe, tarkista ohjeet.</string>
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
<string id="NoApiUrl" scope="glance">Aucune URL de l'API dans les paramètres de l'application.</string>
|
<string id="NoApiUrl" scope="glance">Aucune URL de l'API dans les paramètres de l'application.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Aucune URL de configuration dans les paramètres de
|
<string id="NoConfigUrl" scope="glance">Aucune URL de configuration dans les paramètres de
|
||||||
l'application.</string>
|
l'application.</string>
|
||||||
|
<string id="NoHTTPS">Aucune réponse, utilisez une connexion HTTPS sécurisée.</string>
|
||||||
<string id="NoInternet">Pas de connexion Internet.</string>
|
<string id="NoInternet">Pas de connexion Internet.</string>
|
||||||
<string id="NoJson">Aucun JSON n'est retourné par la requête HTTP.</string>
|
<string id="NoJson">Aucun JSON n'est retourné par la requête HTTP.</string>
|
||||||
<string id="NoMenu">Erreur de définition du menu, vérifiez les instructions.</string>
|
<string id="NoMenu">Erreur de définition du menu, vérifiez les instructions.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Greek
|
Generated by Google Translate and gemini-2.5-flash from English to Greek
|
||||||
Δημιουργήθηκε από το Google Translate και το gemini-2.5-flash από Αγγλικά σε Ελληνικά
|
Δημιουργήθηκε από Google Translate και gemini-2.5-flash από Αγγλικά σε Ελληνικά
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
<string id="NoApiUrl" scope="glance">Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις εφαρμογής.</string>
|
<string id="NoApiUrl" scope="glance">Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις εφαρμογής.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις
|
<string id="NoConfigUrl" scope="glance">Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις
|
||||||
εφαρμογής.</string>
|
εφαρμογής.</string>
|
||||||
|
<string id="NoHTTPS">Καμία απόκριση, χρησιμοποιήστε ασφαλή σύνδεση HTTPS.</string>
|
||||||
<string id="NoInternet">Χωρίς σύνδεση στο Διαδίκτυο.</string>
|
<string id="NoInternet">Χωρίς σύνδεση στο Διαδίκτυο.</string>
|
||||||
<string id="NoJson">Κανένα JSON δεν επεστράφη από το αίτημα HTTP.</string>
|
<string id="NoJson">Κανένα JSON δεν επεστράφη από το αίτημα HTTP.</string>
|
||||||
<string id="NoMenu">Σφάλμα ορισμού μενού, ελέγξτε τις οδηγίες.</string>
|
<string id="NoMenu">Σφάλμα ορισμού μενού, ελέγξτε τις οδηγίες.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">אין מפתח API בהגדרות היישום.</string>
|
<string id="NoAPIKey" scope="glance">אין מפתח API בהגדרות היישום.</string>
|
||||||
<string id="NoApiUrl" scope="glance">אין כתובת URL של ה-API בהגדרות היישום.</string>
|
<string id="NoApiUrl" scope="glance">אין כתובת URL של ה-API בהגדרות היישום.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">אין כתובת URL לתצורה בהגדרות היישום.</string>
|
<string id="NoConfigUrl" scope="glance">אין כתובת URL לתצורה בהגדרות היישום.</string>
|
||||||
|
<string id="NoHTTPS">אין תגובה, השתמש בחיבור HTTPS מאובטח.</string>
|
||||||
<string id="NoInternet">אין חיבור לאינטרנט.</string>
|
<string id="NoInternet">אין חיבור לאינטרנט.</string>
|
||||||
<string id="NoJson">לא התקבל JSON מבקשת HTTP.</string>
|
<string id="NoJson">לא התקבל JSON מבקשת HTTP.</string>
|
||||||
<string id="NoMenu">שגיאת הגדרת תפריט, בדוק את ההוראות.</string>
|
<string id="NoMenu">שגיאת הגדרת תפריט, בדוק את ההוראות.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Nema API ključa u postavkama aplikacije.</string>
|
<string id="NoAPIKey" scope="glance">Nema API ključa u postavkama aplikacije.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Nema API URL-a u postavkama aplikacije.</string>
|
<string id="NoApiUrl" scope="glance">Nema API URL-a u postavkama aplikacije.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Nema URL-a konfiguracije u postavkama aplikacije.</string>
|
<string id="NoConfigUrl" scope="glance">Nema URL-a konfiguracije u postavkama aplikacije.</string>
|
||||||
|
<string id="NoHTTPS">Nema odgovora, koristite sigurnu HTTPS vezu.</string>
|
||||||
<string id="NoInternet">Nema internetske veze.</string>
|
<string id="NoInternet">Nema internetske veze.</string>
|
||||||
<string id="NoJson">Nije primljen JSON odgovor na HTTP zahtjev.</string>
|
<string id="NoJson">Nije primljen JSON odgovor na HTTP zahtjev.</string>
|
||||||
<string id="NoMenu">Pogreška u definiciji izbornika, provjerite upute.</string>
|
<string id="NoMenu">Pogreška u definiciji izbornika, provjerite upute.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Nincs API kulcs az alkalmazás beállításaiban.</string>
|
<string id="NoAPIKey" scope="glance">Nincs API kulcs az alkalmazás beállításaiban.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Nincs API URL az alkalmazás beállításaiban.</string>
|
<string id="NoApiUrl" scope="glance">Nincs API URL az alkalmazás beállításaiban.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Nincs konfigurációs URL az alkalmazás beállításaiban.</string>
|
<string id="NoConfigUrl" scope="glance">Nincs konfigurációs URL az alkalmazás beállításaiban.</string>
|
||||||
|
<string id="NoHTTPS">Nincs válasz, használjon biztonságos HTTPS kapcsolatot.</string>
|
||||||
<string id="NoInternet">Nincs internetkapcsolat.</string>
|
<string id="NoInternet">Nincs internetkapcsolat.</string>
|
||||||
<string id="NoJson">A HTTP kérés nem adott vissza JSON-t.</string>
|
<string id="NoJson">A HTTP kérés nem adott vissza JSON-t.</string>
|
||||||
<string id="NoMenu">Menüdefiníciós hiba, ellenőrizze az utasításokat.</string>
|
<string id="NoMenu">Menüdefiníciós hiba, ellenőrizze az utasításokat.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Tidak ada kunci API di pengaturan aplikasi.</string>
|
<string id="NoAPIKey" scope="glance">Tidak ada kunci API di pengaturan aplikasi.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Tidak ada URL API di pengaturan aplikasi.</string>
|
<string id="NoApiUrl" scope="glance">Tidak ada URL API di pengaturan aplikasi.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Tidak ada URL konfigurasi di pengaturan aplikasi.</string>
|
<string id="NoConfigUrl" scope="glance">Tidak ada URL konfigurasi di pengaturan aplikasi.</string>
|
||||||
|
<string id="NoHTTPS">Tidak ada respons, gunakan koneksi HTTPS aman.</string>
|
||||||
<string id="NoInternet">Tidak ada koneksi internet.</string>
|
<string id="NoInternet">Tidak ada koneksi internet.</string>
|
||||||
<string id="NoJson">Tidak ada JSON yang diterima dari permintaan HTTP.</string>
|
<string id="NoJson">Tidak ada JSON yang diterima dari permintaan HTTP.</string>
|
||||||
<string id="NoMenu">Kesalahan definisi menu, periksa instruksi.</string>
|
<string id="NoMenu">Kesalahan definisi menu, periksa instruksi.</string>
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
<string id="NoApiUrl" scope="glance">Nessun URL API nelle impostazioni dell'applicazione.</string>
|
<string id="NoApiUrl" scope="glance">Nessun URL API nelle impostazioni dell'applicazione.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Nessun URL di configurazione nelle impostazioni
|
<string id="NoConfigUrl" scope="glance">Nessun URL di configurazione nelle impostazioni
|
||||||
dell'applicazione.</string>
|
dell'applicazione.</string>
|
||||||
|
<string id="NoHTTPS">Nessuna risposta, usa una connessione HTTPS sicura.</string>
|
||||||
<string id="NoInternet">Nessuna connessione Internet.</string>
|
<string id="NoInternet">Nessuna connessione Internet.</string>
|
||||||
<string id="NoJson">Nessun JSON ricevuto dalla richiesta HTTP.</string>
|
<string id="NoJson">Nessun JSON ricevuto dalla richiesta HTTP.</string>
|
||||||
<string id="NoMenu">Errore di definizione del menu, controlla le istruzioni.</string>
|
<string id="NoMenu">Errore di definizione del menu, controlla le istruzioni.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">アプリケーション設定にAPIキーはありません。</string>
|
<string id="NoAPIKey" scope="glance">アプリケーション設定にAPIキーはありません。</string>
|
||||||
<string id="NoApiUrl" scope="glance">アプリケーション設定にAPI URLはありません。</string>
|
<string id="NoApiUrl" scope="glance">アプリケーション設定にAPI URLはありません。</string>
|
||||||
<string id="NoConfigUrl" scope="glance">アプリケーション設定に構成URLはありません。</string>
|
<string id="NoConfigUrl" scope="glance">アプリケーション設定に構成URLはありません。</string>
|
||||||
|
<string id="NoHTTPS">応答なし、安全なHTTPS接続を使用してください。</string>
|
||||||
<string id="NoInternet">インターネット接続はありません。</string>
|
<string id="NoInternet">インターネット接続はありません。</string>
|
||||||
<string id="NoJson">JSONはHTTPリクエストから返されませんでした。</string>
|
<string id="NoJson">JSONはHTTPリクエストから返されませんでした。</string>
|
||||||
<string id="NoMenu">メニュー定義エラー、手順を確認してください。</string>
|
<string id="NoMenu">メニュー定義エラー、手順を確認してください。</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Korean
|
Generated by Google Translate and gemini-2.5-flash from English to Korean
|
||||||
Google 번역 및 gemini-2.5-flash를 사용하여 영어에서 한국어로 번역됨
|
Google 번역 및 gemini-2.5-flash를 사용하여 영어에서 한국어로 생성됨
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">앱 설정에 API 키가 없습니다.</string>
|
<string id="NoAPIKey" scope="glance">앱 설정에 API 키가 없습니다.</string>
|
||||||
<string id="NoApiUrl" scope="glance">앱 설정에 API URL이 없습니다.</string>
|
<string id="NoApiUrl" scope="glance">앱 설정에 API URL이 없습니다.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">앱 설정에 구성 URL이 없습니다.</string>
|
<string id="NoConfigUrl" scope="glance">앱 설정에 구성 URL이 없습니다.</string>
|
||||||
|
<string id="NoHTTPS">응답 없음, 보안 HTTPS 연결을 사용하세요.</string>
|
||||||
<string id="NoInternet">인터넷 연결 없음.</string>
|
<string id="NoInternet">인터넷 연결 없음.</string>
|
||||||
<string id="NoJson">HTTP 요청에서 JSON이 반환되지 않았습니다.</string>
|
<string id="NoJson">HTTP 요청에서 JSON이 반환되지 않았습니다.</string>
|
||||||
<string id="NoMenu">메뉴 정의 오류, 지침을 확인하세요.</string>
|
<string id="NoMenu">메뉴 정의 오류, 지침을 확인하세요.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Lietojumprogrammas iestatījumos nav API atslēgas.</string>
|
<string id="NoAPIKey" scope="glance">Lietojumprogrammas iestatījumos nav API atslēgas.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Lietojumprogrammas iestatījumos nav API URL.</string>
|
<string id="NoApiUrl" scope="glance">Lietojumprogrammas iestatījumos nav API URL.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Lietojumprogrammas iestatījumos nav konfigurācijas URL.</string>
|
<string id="NoConfigUrl" scope="glance">Lietojumprogrammas iestatījumos nav konfigurācijas URL.</string>
|
||||||
|
<string id="NoHTTPS">Nav atbildes, izmantojiet drošu HTTPS savienojumu.</string>
|
||||||
<string id="NoInternet">Nav interneta savienojuma.</string>
|
<string id="NoInternet">Nav interneta savienojuma.</string>
|
||||||
<string id="NoJson">HTTP pieprasījums neatgrieza JSON.</string>
|
<string id="NoJson">HTTP pieprasījums neatgrieza JSON.</string>
|
||||||
<string id="NoMenu">Izvēlnes definīcijas kļūda, pārbaudiet instrukcijas.</string>
|
<string id="NoMenu">Izvēlnes definīcijas kļūda, pārbaudiet instrukcijas.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Nėra API rakto programos nustatymuose.</string>
|
<string id="NoAPIKey" scope="glance">Nėra API rakto programos nustatymuose.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Nėra API URL programos nustatymuose.</string>
|
<string id="NoApiUrl" scope="glance">Nėra API URL programos nustatymuose.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Nėra konfigūracijos URL programos nustatymuose.</string>
|
<string id="NoConfigUrl" scope="glance">Nėra konfigūracijos URL programos nustatymuose.</string>
|
||||||
|
<string id="NoHTTPS">Jokio atsakymo, naudokite saugų HTTPS ryšį.</string>
|
||||||
<string id="NoInternet">Nėra interneto ryšio.</string>
|
<string id="NoInternet">Nėra interneto ryšio.</string>
|
||||||
<string id="NoJson">HTTP užklausa negrąžino JSON.</string>
|
<string id="NoJson">HTTP užklausa negrąžino JSON.</string>
|
||||||
<string id="NoMenu">Meniu apibrėžimo klaida, patikrinkite instrukcijas.</string>
|
<string id="NoMenu">Meniu apibrėžimo klaida, patikrinkite instrukcijas.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Ingen API-nøkkel i applikasjonsinnstillingene.</string>
|
<string id="NoAPIKey" scope="glance">Ingen API-nøkkel i applikasjonsinnstillingene.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikasjonsinnstillingene.</string>
|
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikasjonsinnstillingene.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Ingen konfigurasjons-URL i applikasjonsinnstillingene.</string>
|
<string id="NoConfigUrl" scope="glance">Ingen konfigurasjons-URL i applikasjonsinnstillingene.</string>
|
||||||
|
<string id="NoHTTPS">Ingen svar, bruk sikker HTTPS-tilkobling.</string>
|
||||||
<string id="NoInternet">Ingen internettforbindelse.</string>
|
<string id="NoInternet">Ingen internettforbindelse.</string>
|
||||||
<string id="NoJson">Ingen JSON returnert fra HTTP-forespørsel.</string>
|
<string id="NoJson">Ingen JSON returnert fra HTTP-forespørsel.</string>
|
||||||
<string id="NoMenu">Menydefinisjonsfeil, sjekk instruksjonene.</string>
|
<string id="NoMenu">Menydefinisjonsfeil, sjekk instruksjonene.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Polish
|
Generated by Google Translate and gemini-2.5-flash from English to Polish
|
||||||
Wygenerowano przez Google Translate i gemini-2.5-flash z angielskiego na polski
|
Wygenerowano przez Google Translate i gemini-2.5-flash z języka angielskiego na polski
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Brak klucza API w ustawieniach aplikacji.</string>
|
<string id="NoAPIKey" scope="glance">Brak klucza API w ustawieniach aplikacji.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Brak adresu URL API w ustawieniach aplikacji.</string>
|
<string id="NoApiUrl" scope="glance">Brak adresu URL API w ustawieniach aplikacji.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Brak adresu URL konfiguracji w ustawieniach aplikacji.</string>
|
<string id="NoConfigUrl" scope="glance">Brak adresu URL konfiguracji w ustawieniach aplikacji.</string>
|
||||||
|
<string id="NoHTTPS">Brak odpowiedzi, użyj bezpiecznego połączenia HTTPS.</string>
|
||||||
<string id="NoInternet">Brak połączenia internetowego.</string>
|
<string id="NoInternet">Brak połączenia internetowego.</string>
|
||||||
<string id="NoJson">Żądanie HTTP nie zwróciło danych JSON.</string>
|
<string id="NoJson">Żądanie HTTP nie zwróciło danych JSON.</string>
|
||||||
<string id="NoMenu">Błąd definicji menu, sprawdź instrukcje.</string>
|
<string id="NoMenu">Błąd definicji menu, sprawdź instrukcje.</string>
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
<string id="NoApiUrl" scope="glance">Nenhum URL da API nas configurações do aplicativo.</string>
|
<string id="NoApiUrl" scope="glance">Nenhum URL da API nas configurações do aplicativo.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Nenhum URL de configuração nas configurações do
|
<string id="NoConfigUrl" scope="glance">Nenhum URL de configuração nas configurações do
|
||||||
aplicativo.</string>
|
aplicativo.</string>
|
||||||
|
<string id="NoHTTPS">Sem resposta, use conexão HTTPS segura.</string>
|
||||||
<string id="NoInternet">Sem conexão com a Internet.</string>
|
<string id="NoInternet">Sem conexão com a Internet.</string>
|
||||||
<string id="NoJson">Nenhum JSON retornado da solicitação HTTP.</string>
|
<string id="NoJson">Nenhum JSON retornado da solicitação HTTP.</string>
|
||||||
<string id="NoMenu">Erro de definição do menu, verifique as instruções.</string>
|
<string id="NoMenu">Erro de definição do menu, verifique as instruções.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Nicio cheie API în setările aplicației.</string>
|
<string id="NoAPIKey" scope="glance">Nicio cheie API în setările aplicației.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Niciun URL API în setările aplicației.</string>
|
<string id="NoApiUrl" scope="glance">Niciun URL API în setările aplicației.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Niciun URL de configurare în setările aplicației.</string>
|
<string id="NoConfigUrl" scope="glance">Niciun URL de configurare în setările aplicației.</string>
|
||||||
|
<string id="NoHTTPS">Niciun răspuns, utilizați o conexiune HTTPS securizată.</string>
|
||||||
<string id="NoInternet">Nicio conexiune la internet.</string>
|
<string id="NoInternet">Nicio conexiune la internet.</string>
|
||||||
<string id="NoJson">Niciun JSON nu a fost returnat de la cererea HTTP.</string>
|
<string id="NoJson">Niciun JSON nu a fost returnat de la cererea HTTP.</string>
|
||||||
<string id="NoMenu">Eroare de definire a meniului, verificați instrucțiunile.</string>
|
<string id="NoMenu">Eroare de definire a meniului, verificați instrucțiunile.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Slovak
|
Generated by Google Translate and gemini-2.5-flash from English to Slovak
|
||||||
Vygenerované službou Google Translate a gemini-2.5-flash z angličtiny do slovenčiny
|
Vygenerované pomocou Google Translate a gemini-2.5-flash z angličtiny do slovenčiny
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">V nastaveniach aplikácie chýba kľúč API</string>
|
<string id="NoAPIKey" scope="glance">V nastaveniach aplikácie chýba kľúč API</string>
|
||||||
<string id="NoApiUrl" scope="glance">V nastaveniach aplikácie chýba adresa URL rozhrania API</string>
|
<string id="NoApiUrl" scope="glance">V nastaveniach aplikácie chýba adresa URL rozhrania API</string>
|
||||||
<string id="NoConfigUrl" scope="glance">V nastaveniach aplikácie chýba konfiguračná adresa URL</string>
|
<string id="NoConfigUrl" scope="glance">V nastaveniach aplikácie chýba konfiguračná adresa URL</string>
|
||||||
|
<string id="NoHTTPS">Žiadna odpoveď, použite zabezpečené pripojenie HTTPS.</string>
|
||||||
<string id="NoInternet">Žiadne pripojenie na internet.</string>
|
<string id="NoInternet">Žiadne pripojenie na internet.</string>
|
||||||
<string id="NoJson">Z požiadavky HTTP sa nevrátil žiadny JSON.</string>
|
<string id="NoJson">Z požiadavky HTTP sa nevrátil žiadny JSON.</string>
|
||||||
<string id="NoMenu">Chyba definície ponuky, skontrolujte pokyny.</string>
|
<string id="NoMenu">Chyba definície ponuky, skontrolujte pokyny.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Slovenian
|
Generated by Google Translate and gemini-2.5-flash from English to Slovenian
|
||||||
Prevedeno z Google Prevajalnikom in gemini-2.5-flash iz angleščine v slovenščino
|
Prevedel Google Prevajalnik in gemini-2.5-flash iz angleščine v slovenščino
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">V nastavitvah aplikacije ni ključa API -ja.</string>
|
<string id="NoAPIKey" scope="glance">V nastavitvah aplikacije ni ključa API -ja.</string>
|
||||||
<string id="NoApiUrl" scope="glance">V nastavitvah aplikacije ni URL API -ja.</string>
|
<string id="NoApiUrl" scope="glance">V nastavitvah aplikacije ni URL API -ja.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">V nastavitvah aplikacije ni URL konfiguracije.</string>
|
<string id="NoConfigUrl" scope="glance">V nastavitvah aplikacije ni URL konfiguracije.</string>
|
||||||
|
<string id="NoHTTPS">Brez odgovora, uporabite varno povezavo HTTPS.</string>
|
||||||
<string id="NoInternet">Brez internetne povezave.</string>
|
<string id="NoInternet">Brez internetne povezave.</string>
|
||||||
<string id="NoJson">Zahteva HTTP ni vrnila JSON-a.</string>
|
<string id="NoJson">Zahteva HTTP ni vrnila JSON-a.</string>
|
||||||
<string id="NoMenu">Napaka pri definiciji menija, preverite navodila.</string>
|
<string id="NoMenu">Napaka pri definiciji menija, preverite navodila.</string>
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
<string id="NoApiUrl" scope="glance">No hay URL de API en la configuración de la aplicación.</string>
|
<string id="NoApiUrl" scope="glance">No hay URL de API en la configuración de la aplicación.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">No hay URL de configuración en la configuración de la
|
<string id="NoConfigUrl" scope="glance">No hay URL de configuración en la configuración de la
|
||||||
aplicación.</string>
|
aplicación.</string>
|
||||||
|
<string id="NoHTTPS">Sin respuesta, utilice una conexión HTTPS segura.</string>
|
||||||
<string id="NoInternet">Sin conexión a Internet.</string>
|
<string id="NoInternet">Sin conexión a Internet.</string>
|
||||||
<string id="NoJson">No se recibió JSON de la solicitud HTTP.</string>
|
<string id="NoJson">No se recibió JSON de la solicitud HTTP.</string>
|
||||||
<string id="NoMenu">Error en la definición del menú, verifique las instrucciones.</string>
|
<string id="NoMenu">Error en la definición del menú, verifique las instrucciones.</string>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Ingen API-nyckel i applikationsinställningarna.</string>
|
<string id="NoAPIKey" scope="glance">Ingen API-nyckel i applikationsinställningarna.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikationsinställningarna.</string>
|
<string id="NoApiUrl" scope="glance">Ingen API-URL i applikationsinställningarna.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Ingen konfigurations-URL i applikationsinställningarna.</string>
|
<string id="NoConfigUrl" scope="glance">Ingen konfigurations-URL i applikationsinställningarna.</string>
|
||||||
|
<string id="NoHTTPS">Inget svar, använd säker HTTPS-anslutning.</string>
|
||||||
<string id="NoInternet">Ingen internetanslutning.</string>
|
<string id="NoInternet">Ingen internetanslutning.</string>
|
||||||
<string id="NoJson">Ingen JSON returnerades från HTTP-begäran.</string>
|
<string id="NoJson">Ingen JSON returnerades från HTTP-begäran.</string>
|
||||||
<string id="NoMenu">Menydefinitionfel, kontrollera instruktionerna.</string>
|
<string id="NoMenu">Menydefinitionfel, kontrollera instruktionerna.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">ไม่มีคีย์ API ในการตั้งค่าแอปพลิเคชัน</string>
|
<string id="NoAPIKey" scope="glance">ไม่มีคีย์ API ในการตั้งค่าแอปพลิเคชัน</string>
|
||||||
<string id="NoApiUrl" scope="glance">ไม่มี URL API ในการตั้งค่าแอปพลิเคชัน</string>
|
<string id="NoApiUrl" scope="glance">ไม่มี URL API ในการตั้งค่าแอปพลิเคชัน</string>
|
||||||
<string id="NoConfigUrl" scope="glance">ไม่มี URL การกำหนดค่าในการตั้งค่าแอปพลิเคชัน</string>
|
<string id="NoConfigUrl" scope="glance">ไม่มี URL การกำหนดค่าในการตั้งค่าแอปพลิเคชัน</string>
|
||||||
|
<string id="NoHTTPS">ไม่มีการตอบกลับ ใช้การเชื่อมต่อ HTTPS ที่ปลอดภัย</string>
|
||||||
<string id="NoInternet">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</string>
|
<string id="NoInternet">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</string>
|
||||||
<string id="NoJson">ไม่มี JSON ส่งคืนจากคำขอ HTTP</string>
|
<string id="NoJson">ไม่มี JSON ส่งคืนจากคำขอ HTTP</string>
|
||||||
<string id="NoMenu">ข้อผิดพลาดในการกำหนดเมนู โปรดตรวจสอบคำแนะนำ</string>
|
<string id="NoMenu">ข้อผิดพลาดในการกำหนดเมนู โปรดตรวจสอบคำแนะนำ</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Turkish
|
Generated by Google Translate and gemini-2.5-flash from English to Turkish
|
||||||
Google Translate ve gemini-2.5-flash tarafından İngilizceden Türkçeye çevrildi
|
Google Translate ve gemini-2.5-flash tarafından İngilizceden Türkçeye çevrilmiştir
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Uygulama ayarlarında API anahtarı yok.</string>
|
<string id="NoAPIKey" scope="glance">Uygulama ayarlarında API anahtarı yok.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Uygulama ayarlarında API URL'si yok.</string>
|
<string id="NoApiUrl" scope="glance">Uygulama ayarlarında API URL'si yok.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Uygulama ayarlarında yapılandırma URL'si yok.</string>
|
<string id="NoConfigUrl" scope="glance">Uygulama ayarlarında yapılandırma URL'si yok.</string>
|
||||||
|
<string id="NoHTTPS">Yanıt yok, güvenli HTTPS bağlantısı kullanın.</string>
|
||||||
<string id="NoInternet">İnternet bağlantısı yok.</string>
|
<string id="NoInternet">İnternet bağlantısı yok.</string>
|
||||||
<string id="NoJson">HTTP isteğinden JSON dönmedi.</string>
|
<string id="NoJson">HTTP isteğinden JSON dönmedi.</string>
|
||||||
<string id="NoMenu">Menü tanım hatası, talimatları kontrol edin.</string>
|
<string id="NoMenu">Menü tanım hatası, talimatları kontrol edin.</string>
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Немає ключа API в налаштуваннях програми.</string>
|
<string id="NoAPIKey" scope="glance">Немає ключа API в налаштуваннях програми.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Немає URL-адреси API в налаштуваннях програми.</string>
|
<string id="NoApiUrl" scope="glance">Немає URL-адреси API в налаштуваннях програми.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Немає URL-адреси конфігурації в налаштуваннях програми.</string>
|
<string id="NoConfigUrl" scope="glance">Немає URL-адреси конфігурації в налаштуваннях програми.</string>
|
||||||
|
<string id="NoHTTPS">Немає відповіді, використовуйте безпечне HTTPS-з'єднання.</string>
|
||||||
<string id="NoInternet">Немає підключення до Інтернету.</string>
|
<string id="NoInternet">Немає підключення до Інтернету.</string>
|
||||||
<string id="NoJson">HTTP-запит не повернув JSON.</string>
|
<string id="NoJson">HTTP-запит не повернув JSON.</string>
|
||||||
<string id="NoMenu">Помилка визначення меню, перевірте інструкції.</string>
|
<string id="NoMenu">Помилка визначення меню, перевірте інструкції.</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Không có khóa API trong cài đặt ứng dụng.</string>
|
<string id="NoAPIKey" scope="glance">Không có khóa API trong cài đặt ứng dụng.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Không có URL API trong cài đặt ứng dụng.</string>
|
<string id="NoApiUrl" scope="glance">Không có URL API trong cài đặt ứng dụng.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Không có URL cấu hình trong cài đặt ứng dụng.</string>
|
<string id="NoConfigUrl" scope="glance">Không có URL cấu hình trong cài đặt ứng dụng.</string>
|
||||||
|
<string id="NoHTTPS">Không có phản hồi, sử dụng kết nối HTTPS an toàn.</string>
|
||||||
<string id="NoInternet">Không có kết nối internet.</string>
|
<string id="NoInternet">Không có kết nối internet.</string>
|
||||||
<string id="NoJson">Không có JSON được trả về từ yêu cầu HTTP.</string>
|
<string id="NoJson">Không có JSON được trả về từ yêu cầu HTTP.</string>
|
||||||
<string id="NoMenu">Lỗi định nghĩa menu, kiểm tra hướng dẫn.</string>
|
<string id="NoMenu">Lỗi định nghĩa menu, kiểm tra hướng dẫn.</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Chinese (Simplified)
|
Generated by Google Translate and gemini-2.5-flash from English to Chinese (Simplified)
|
||||||
由 Google 翻译和 gemini-2.5-flash 从英语翻译成简体中文
|
由 Google 翻译和 gemini-2.5-flash 从英语翻译成中文(简体)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">应用程序设置中没有 API 密钥。</string>
|
<string id="NoAPIKey" scope="glance">应用程序设置中没有 API 密钥。</string>
|
||||||
<string id="NoApiUrl" scope="glance">应用程序设置中没有 API URL。</string>
|
<string id="NoApiUrl" scope="glance">应用程序设置中没有 API URL。</string>
|
||||||
<string id="NoConfigUrl" scope="glance">应用程序设置中没有配置 URL。</string>
|
<string id="NoConfigUrl" scope="glance">应用程序设置中没有配置 URL。</string>
|
||||||
|
<string id="NoHTTPS">没有回应,请使用安全的 HTTPS 连接。</string>
|
||||||
<string id="NoInternet">没有互联网连接。</string>
|
<string id="NoInternet">没有互联网连接。</string>
|
||||||
<string id="NoJson">HTTP 请求未返回 JSON。</string>
|
<string id="NoJson">HTTP 请求未返回 JSON。</string>
|
||||||
<string id="NoMenu">菜单定义错误,请检查说明。</string>
|
<string id="NoMenu">菜单定义错误,请检查说明。</string>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">應用程式設定中沒有 API 密鑰。</string>
|
<string id="NoAPIKey" scope="glance">應用程式設定中沒有 API 密鑰。</string>
|
||||||
<string id="NoApiUrl" scope="glance">應用程式設定中沒有 API URL。</string>
|
<string id="NoApiUrl" scope="glance">應用程式設定中沒有 API URL。</string>
|
||||||
<string id="NoConfigUrl" scope="glance">應用程式設定中沒有配置 URL。</string>
|
<string id="NoConfigUrl" scope="glance">應用程式設定中沒有配置 URL。</string>
|
||||||
|
<string id="NoHTTPS">沒有回應,請使用安全的 HTTPS 連線。</string>
|
||||||
<string id="NoInternet">沒有互聯網連接。</string>
|
<string id="NoInternet">沒有互聯網連接。</string>
|
||||||
<string id="NoJson">HTTP 請求未返回 JSON。</string>
|
<string id="NoJson">HTTP 請求未返回 JSON。</string>
|
||||||
<string id="NoMenu">選單定義錯誤,請檢查說明。</string>
|
<string id="NoMenu">選單定義錯誤,請檢查說明。</string>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generated by Google Translate and gemini-2.5-flash from English to Standard (Bahasa) Malay
|
Generated by Google Translate and gemini-2.5-flash from English to Standard (Bahasa) Malay
|
||||||
Dihasilkan oleh Google Translate dan gemini-2.5-flash dari Bahasa Inggeris ke Bahasa Melayu Standard (Bahasa)
|
Dijana oleh Google Translate dan gemini-2.5-flash daripada Bahasa Inggeris ke Bahasa Melayu Standard (Bahasa)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<strings>
|
<strings>
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">Tiada kunci API dalam tetapan aplikasi.</string>
|
<string id="NoAPIKey" scope="glance">Tiada kunci API dalam tetapan aplikasi.</string>
|
||||||
<string id="NoApiUrl" scope="glance">Tiada URL API dalam tetapan aplikasi.</string>
|
<string id="NoApiUrl" scope="glance">Tiada URL API dalam tetapan aplikasi.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">Tiada URL konfigurasi dalam tetapan aplikasi.</string>
|
<string id="NoConfigUrl" scope="glance">Tiada URL konfigurasi dalam tetapan aplikasi.</string>
|
||||||
|
<string id="NoHTTPS">Tiada respons, gunakan sambungan HTTPS selamat.</string>
|
||||||
<string id="NoInternet">Tiada sambungan internet.</string>
|
<string id="NoInternet">Tiada sambungan internet.</string>
|
||||||
<string id="NoJson">Tiada JSON dikembalikan daripada permintaan HTTP.</string>
|
<string id="NoJson">Tiada JSON dikembalikan daripada permintaan HTTP.</string>
|
||||||
<string id="NoMenu">Ralat definisi menu, semak arahan.</string>
|
<string id="NoMenu">Ralat definisi menu, semak arahan.</string>
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
<string id="NoAPIKey" scope="glance">No API key in the application settings.</string>
|
<string id="NoAPIKey" scope="glance">No API key in the application settings.</string>
|
||||||
<string id="NoApiUrl" scope="glance">No API URL in the application settings.</string>
|
<string id="NoApiUrl" scope="glance">No API URL in the application settings.</string>
|
||||||
<string id="NoConfigUrl" scope="glance">No configuration URL in the application settings.</string>
|
<string id="NoConfigUrl" scope="glance">No configuration URL in the application settings.</string>
|
||||||
|
<string id="NoHTTPS">No response, use secure HTTPS connection.</string>
|
||||||
<string id="NoInternet">No Internet connection.</string>
|
<string id="NoInternet">No Internet connection.</string>
|
||||||
<string id="NoJson">No JSON returned from HTTP request.</string>
|
<string id="NoJson">No JSON returned from HTTP request.</string>
|
||||||
<string id="NoMenu">Menu definition error, check the instructions.</string>
|
<string id="NoMenu">Menu definition error, check the instructions.</string>
|
||||||
|
|||||||
@@ -195,6 +195,13 @@ class HomeAssistantApp extends Application.AppBase {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Communications.SECURE_CONNECTION_REQUIRED:
|
||||||
|
// System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: SECURE_CONNECTION_REQUIRED, check API URL setting.");
|
||||||
|
if (mIsApp) {
|
||||||
|
ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoHTTPS) as Lang.String);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 404:
|
case 404:
|
||||||
// System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: 404, page not found. Check Configuration URL setting.");
|
// System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: 404, page not found. Check Configuration URL setting.");
|
||||||
if (mIsApp) {
|
if (mIsApp) {
|
||||||
@@ -508,6 +515,13 @@ class HomeAssistantApp extends Application.AppBase {
|
|||||||
myTimer.start(method(:updateMenuItems), Globals.scApiBackoffMs, false);
|
myTimer.start(method(:updateMenuItems), Globals.scApiBackoffMs, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Communications.SECURE_CONNECTION_REQUIRED:
|
||||||
|
// System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: SECURE_CONNECTION_REQUIRED, check API URL setting.");
|
||||||
|
if (mIsApp) {
|
||||||
|
ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoHTTPS) as Lang.String);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 404:
|
case 404:
|
||||||
// System.println("HomeAssistantApp onReturnCheckMenuConfig() Response Code: 404, page not found. Check API URL setting.");
|
// System.println("HomeAssistantApp onReturnCheckMenuConfig() Response Code: 404, page not found. Check API URL setting.");
|
||||||
ErrorView.show(WatchUi.loadResource($.Rez.Strings.ApiUrlNotFound) as Lang.String);
|
ErrorView.show(WatchUi.loadResource($.Rez.Strings.ApiUrlNotFound) as Lang.String);
|
||||||
@@ -798,6 +812,13 @@ class HomeAssistantApp extends Application.AppBase {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Communications.SECURE_CONNECTION_REQUIRED:
|
||||||
|
// System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: SECURE_CONNECTION_REQUIRED, check API URL setting.");
|
||||||
|
if (mIsApp) {
|
||||||
|
ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoHTTPS) as Lang.String);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 404:
|
case 404:
|
||||||
// System.println("HomeAssistantApp onReturnFetchApiStatus() Response Code: 404, page not found. Check Configuration URL setting.");
|
// System.println("HomeAssistantApp onReturnFetchApiStatus() Response Code: 404, page not found. Check Configuration URL setting.");
|
||||||
if (mIsApp) {
|
if (mIsApp) {
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class HomeAssistantMenuItemFactory {
|
|||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
entity_id as Lang.String?,
|
entity_id as Lang.String?,
|
||||||
template as Lang.String?,
|
template as Lang.String?,
|
||||||
action as Lang.String?,
|
action as Lang.String?,
|
||||||
data as Lang.Dictionary?,
|
data as Lang.Dictionary?,
|
||||||
options as {
|
options as {
|
||||||
:exit as Lang.Boolean,
|
:exit as Lang.Boolean,
|
||||||
@@ -163,6 +163,7 @@ class HomeAssistantMenuItemFactory {
|
|||||||
entity_id as Lang.String?,
|
entity_id as Lang.String?,
|
||||||
template as Lang.String?,
|
template as Lang.String?,
|
||||||
action as Lang.String?,
|
action as Lang.String?,
|
||||||
|
data as Lang.Dictionary?,
|
||||||
picker as Lang.Dictionary,
|
picker as Lang.Dictionary,
|
||||||
options as {
|
options as {
|
||||||
:exit as Lang.Boolean,
|
:exit as Lang.Boolean,
|
||||||
@@ -171,9 +172,12 @@ class HomeAssistantMenuItemFactory {
|
|||||||
:icon as WatchUi.Bitmap
|
:icon as WatchUi.Bitmap
|
||||||
}
|
}
|
||||||
) as WatchUi.MenuItem {
|
) as WatchUi.MenuItem {
|
||||||
var data = null;
|
|
||||||
if (entity_id != null) {
|
if (entity_id != null) {
|
||||||
data = { "entity_id" => entity_id };
|
if (data == null) {
|
||||||
|
data = { "entity_id" => entity_id };
|
||||||
|
} else {
|
||||||
|
data["entity_id"] = entity_id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var keys = mMenuItemOptions.keys();
|
var keys = mMenuItemOptions.keys();
|
||||||
for (var i = 0; i < keys.size(); i++) {
|
for (var i = 0; i < keys.size(); i++) {
|
||||||
|
|||||||
@@ -155,7 +155,10 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem {
|
|||||||
//
|
//
|
||||||
function onConfirm(b as Lang.Boolean) as Void {
|
function onConfirm(b as Lang.Boolean) as Void {
|
||||||
var dataAttribute = mPicker["data_attribute"] as Lang.String?;
|
var dataAttribute = mPicker["data_attribute"] as Lang.String?;
|
||||||
var entity_id = mData["entity_id"] as Lang.String?;
|
var entity_id = null as Lang.String?;
|
||||||
|
if (mData != null) {
|
||||||
|
entity_id = mData["entity_id"] as Lang.String?;
|
||||||
|
}
|
||||||
|
|
||||||
WatchUi.popView(WatchUi.SLIDE_RIGHT);
|
WatchUi.popView(WatchUi.SLIDE_RIGHT);
|
||||||
WatchUi.requestUpdate();
|
WatchUi.requestUpdate();
|
||||||
@@ -164,12 +167,18 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mAction != null) {
|
if (mAction != null) {
|
||||||
|
var data = {} as Lang.Dictionary;
|
||||||
|
if (mData != null) {
|
||||||
|
var keys = mData.keys();
|
||||||
|
for (var i = 0; i < keys.size(); i++) {
|
||||||
|
data[keys[i]] = mData[keys[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data["entity_id"] = entity_id.toString();
|
||||||
|
data[dataAttribute.toString()] = mValue;
|
||||||
mHomeAssistantService.call(
|
mHomeAssistantService.call(
|
||||||
mAction,
|
mAction,
|
||||||
{
|
data,
|
||||||
"entity_id" => entity_id.toString(),
|
|
||||||
dataAttribute.toString() => mValue
|
|
||||||
},
|
|
||||||
mExit
|
mExit
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+73
-58
@@ -76,49 +76,32 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type != null && name != null && enabled) {
|
if (type != null && name != null && enabled) {
|
||||||
if (type.equals("toggle") && entity != null) {
|
if (pin && !System.getDeviceSettings().isTouchScreen) {
|
||||||
addItem(HomeAssistantMenuItemFactory.create().toggle(
|
|
||||||
name,
|
|
||||||
entity,
|
|
||||||
content,
|
|
||||||
{
|
|
||||||
:exit => exit,
|
|
||||||
:confirm => confirm,
|
|
||||||
:pin => pin
|
|
||||||
}
|
|
||||||
));
|
|
||||||
} else if (type.equals("tap") && action != null) {
|
|
||||||
addItem(HomeAssistantMenuItemFactory.create().tap(
|
addItem(HomeAssistantMenuItemFactory.create().tap(
|
||||||
name,
|
"PIN requires Touchscreen",
|
||||||
entity,
|
null,
|
||||||
content,
|
null,
|
||||||
action,
|
null,
|
||||||
data,
|
data,
|
||||||
{
|
{
|
||||||
:exit => exit,
|
:exit => false,
|
||||||
:confirm => confirm,
|
:confirm => false,
|
||||||
:pin => pin
|
:pin => false
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
} else if (type.equals("template") && content != null) {
|
} else {
|
||||||
// NB. "template" is deprecated in the schema and remains only for backward compatibility. All menu items can now use templates, so the replacement is "info".
|
if (type.equals("toggle") && entity != null) {
|
||||||
// The exit option is dependent on the type of template.
|
addItem(HomeAssistantMenuItemFactory.create().toggle(
|
||||||
if (tap_action == null) {
|
|
||||||
// No exit from an information only item
|
|
||||||
addItem(HomeAssistantMenuItemFactory.create().tap(
|
|
||||||
name,
|
name,
|
||||||
entity,
|
entity,
|
||||||
content,
|
content,
|
||||||
action,
|
|
||||||
data,
|
|
||||||
{
|
{
|
||||||
:exit => false,
|
:exit => exit,
|
||||||
:confirm => confirm,
|
:confirm => confirm,
|
||||||
:pin => pin
|
:pin => pin
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
} else {
|
} else if (type.equals("tap") && action != null) {
|
||||||
// You may exit from template item with a 'tap_action'.
|
|
||||||
addItem(HomeAssistantMenuItemFactory.create().tap(
|
addItem(HomeAssistantMenuItemFactory.create().tap(
|
||||||
name,
|
name,
|
||||||
entity,
|
entity,
|
||||||
@@ -131,17 +114,31 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
:pin => pin
|
:pin => pin
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
}
|
} else if (type.equals("template") && content != null) {
|
||||||
} else if (type.equals("numeric") && action != null) {
|
// NB. "template" is deprecated in the schema and remains only for backward compatibility. All menu items can now use templates, so the replacement is "info".
|
||||||
if (tap_action != null) {
|
// The exit option is dependent on the type of template.
|
||||||
var picker = tap_action.get("picker") as Lang.Dictionary?;
|
if (tap_action == null) {
|
||||||
if (picker != null) {
|
// No exit from an information only item
|
||||||
addItem(HomeAssistantMenuItemFactory.create().numeric(
|
addItem(HomeAssistantMenuItemFactory.create().tap(
|
||||||
name,
|
name,
|
||||||
entity,
|
entity,
|
||||||
content,
|
content,
|
||||||
action,
|
action,
|
||||||
picker,
|
data,
|
||||||
|
{
|
||||||
|
:exit => false,
|
||||||
|
:confirm => confirm,
|
||||||
|
:pin => pin
|
||||||
|
}
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
// You may exit from template item with a 'tap_action'.
|
||||||
|
addItem(HomeAssistantMenuItemFactory.create().tap(
|
||||||
|
name,
|
||||||
|
entity,
|
||||||
|
content,
|
||||||
|
action,
|
||||||
|
data,
|
||||||
{
|
{
|
||||||
:exit => exit,
|
:exit => exit,
|
||||||
:confirm => confirm,
|
:confirm => confirm,
|
||||||
@@ -149,23 +146,43 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
}
|
}
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
} else if (type.equals("numeric") && action != null) {
|
||||||
} else if (type.equals("info") && content != null) {
|
// Numeric items are only actionable on touch screen devices.
|
||||||
// Cannot exit from a non-actionable information only menu item.
|
if (tap_action != null) {
|
||||||
addItem(HomeAssistantMenuItemFactory.create().tap(
|
var picker = tap_action.get("picker") as Lang.Dictionary?;
|
||||||
name,
|
if (picker != null) {
|
||||||
entity,
|
addItem(HomeAssistantMenuItemFactory.create().numeric(
|
||||||
content,
|
name,
|
||||||
action,
|
entity,
|
||||||
data,
|
content,
|
||||||
{
|
action,
|
||||||
:exit => false,
|
data,
|
||||||
:confirm => confirm,
|
picker,
|
||||||
:pin => pin
|
{
|
||||||
|
:exit => exit,
|
||||||
|
:confirm => confirm,
|
||||||
|
:pin => pin
|
||||||
|
}
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
));
|
} else if (type.equals("info") && content != null) {
|
||||||
} else if (type.equals("group")) {
|
// Cannot exit from a non-actionable information only menu item.
|
||||||
addItem(HomeAssistantMenuItemFactory.create().group(items[i], content));
|
addItem(HomeAssistantMenuItemFactory.create().tap(
|
||||||
|
name,
|
||||||
|
entity,
|
||||||
|
content,
|
||||||
|
action,
|
||||||
|
data,
|
||||||
|
{
|
||||||
|
:exit => false,
|
||||||
|
:confirm => confirm,
|
||||||
|
:pin => pin
|
||||||
|
}
|
||||||
|
));
|
||||||
|
} else if (type.equals("group")) {
|
||||||
|
addItem(HomeAssistantMenuItemFactory.create().group(items[i], content));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,11 +209,9 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
}
|
}
|
||||||
fullList.addAll(item.getMenuView().getItemsToUpdate());
|
fullList.addAll(item.getMenuView().getItemsToUpdate());
|
||||||
} else if (item instanceof HomeAssistantNumericMenuItem) {
|
} else if (item instanceof HomeAssistantNumericMenuItem) {
|
||||||
// Numeric items can have an optional template to evaluate
|
// Numeric items can have an optional template to evaluate, but they must always be included in order
|
||||||
var nmi = item as HomeAssistantNumericMenuItem;
|
// to initialise the numeric picker's value.
|
||||||
if (nmi.hasTemplate()) {
|
fullList.add(item);
|
||||||
fullList.add(item);
|
|
||||||
}
|
|
||||||
} else if (item instanceof HomeAssistantToggleMenuItem) {
|
} else if (item instanceof HomeAssistantToggleMenuItem) {
|
||||||
fullList.add(item);
|
fullList.add(item);
|
||||||
} else if (item instanceof HomeAssistantTapMenuItem) {
|
} else if (item instanceof HomeAssistantTapMenuItem) {
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class WebhookManager {
|
|||||||
// System.println("WebhookManager onReturnRequestWebhookId() Response Code: NETWORK_RESPONSE_OUT_OF_MEMORY, are we going too fast?");
|
// System.println("WebhookManager onReturnRequestWebhookId() Response Code: NETWORK_RESPONSE_OUT_OF_MEMORY, are we going too fast?");
|
||||||
// Ignore and see if we can carry on
|
// Ignore and see if we can carry on
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Communications.INVALID_HTTP_BODY_IN_NETWORK_RESPONSE:
|
case Communications.INVALID_HTTP_BODY_IN_NETWORK_RESPONSE:
|
||||||
// System.println("WebhookManager onReturnRequestWebhookId() Response Code: INVALID_HTTP_BODY_IN_NETWORK_RESPONSE, check JSON is returned.");
|
// System.println("WebhookManager onReturnRequestWebhookId() Response Code: INVALID_HTTP_BODY_IN_NETWORK_RESPONSE, check JSON is returned.");
|
||||||
Settings.unsetIsSensorsEnabled();
|
Settings.unsetIsSensorsEnabled();
|
||||||
|
|||||||
Reference in New Issue
Block a user