mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2025-12-14 18:18:16 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bd5361ad2 | ||
|
|
d540fb576a |
6
.vscode/settings.json
vendored
Normal file
6
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cSpell.words": [
|
||||
"usbs",
|
||||
"Venu"
|
||||
]
|
||||
}
|
||||
@@ -4,8 +4,7 @@
|
||||
|
||||
A Garmin application to provide a "dashboard" to control your devices via [Home Assistant](https://www.home-assistant.io/). The application will never be as fully fledged as a Home Assistant dashboard, so it is designed to be good enough for the simple and essential things. Those things that can be activated via an on/off toggle or a tap. That should cover lights, switches, and anything requiring a single press such as an automation. For anything more complicated, e.g. thermostat, it would always be quicker and simpler to reach for your phone or tablet... or the device's own remote control!
|
||||
|
||||
The application is designed around a simple scrollable menu where menu items have been extended to interface with the [Home Assistant 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. 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 [Home Assistant 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. 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.
|
||||
|
||||
It is important to note that your Home Assistant instance will need to be accessible via HTTPS with public SSL or all requests from the Garmin will not work. This cannot be a self-signed certificate, it must be a public certificate (You can get one for free from [Let's Encrypt](https://letsencrypt.org/) or you can pay for [Home Assistant cloud](https://www.nabucasa.com/)).
|
||||
|
||||
@@ -117,7 +116,7 @@ Having created that token, before you dismiss the dialogue box with the value yo
|
||||
<img src="images/GarminHomeAssistantSettings.png" width="400" title="Application Settings"/>
|
||||
|
||||
1. Paste your API key you've just created into the top field.
|
||||
2. Add the URL for your Home Assistant API, e.g. `https://<homeassistant>/api/`.
|
||||
2. Add the URL for your Home Assistant API, e.g. `https://<homeassistant>/api`. (No trailing slash `/`` character as one gets appended when creating the URL and you do not want two.)
|
||||
3. Add the URL of your JSON file, e.g. `https://<homeassistant>/local/garmin/<something>.json`.
|
||||
|
||||
You should now have a working application on your watch and be able to operate your Home Assistant devices for as long as your watch is within Bluetooth range of your phone.
|
||||
@@ -150,3 +149,4 @@ When you change the JSON file defining your dashboard, you must exit the applica
|
||||
|:-------:|---------|
|
||||
| 1.0 | Initial release for 26 devices. |
|
||||
| 1.1 | Updated for 54 more devices, 80 in total. Scene support. Added vibrate acknowledgement for tap-based menu items. Falls back to a custom visual confirmation in the absence of 'toast' and vibrate support. Bug fix for large menus needing status updates. |
|
||||
| 1.2 | Do not crash on zero items to update. Report unreachable URLs. Verify API URL does not have a trailing slash '/'. Increased HTTP response diagnosis. Reduced minimum API Level required from 3.3.0 to 3.1.0 to allow more device "part numbers" to be satisfied. |
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
Use "Monkey C: Edit Application" from the Visual Studio Code command palette
|
||||
to update the application attributes.
|
||||
-->
|
||||
<iq:application id="40131e87-31ff-454b-a8e2-92276ee399d6" type="watch-app" name="@Strings.AppName" entry="HomeAssistantApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.3.0">
|
||||
<iq:application id="40131e87-31ff-454b-a8e2-92276ee399d6" type="watch-app" name="@Strings.AppName" entry="HomeAssistantApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.1.0">
|
||||
<!--
|
||||
Use the following from the Visual Studio Code comand palette to edit
|
||||
the build targets:
|
||||
@@ -33,7 +33,7 @@
|
||||
<!--
|
||||
Device Information & References:
|
||||
* https://developer.garmin.com/connect-iq/compatible-devices/
|
||||
* https://developer.garmin.com/connect-iq/reference-guides/devices-reference/#epix%E2%84%A2progen251mmtactix%C2%AE7%E2%80%93amolededition
|
||||
* https://developer.garmin.com/connect-iq/reference-guides/devices-reference/
|
||||
-->
|
||||
|
||||
<!-- Screen Size 390x390 launcher icon size 70x70 -->
|
||||
@@ -124,6 +124,7 @@
|
||||
<iq:product id="instinct2s"/>
|
||||
<!-- Screen Size 176x176 launcher icon size 62x62 -->
|
||||
<iq:product id="instinct2x"/>
|
||||
<!-- Screen Size 176x176 launcher icon size 26x26 -->
|
||||
<iq:product id="instinctcrossover"/>
|
||||
<!-- Screen Size 218x218 launcher icon size 30x30 -->
|
||||
<iq:product id="legacyherocaptainmarvel"/>
|
||||
|
||||
@@ -18,8 +18,9 @@
|
||||
|
||||
project.manifest = manifest.xml
|
||||
|
||||
# Device Reference
|
||||
# https://developer.garmin.com/connect-iq/reference-guides/devices-reference/
|
||||
# Device References
|
||||
# * https://developer.garmin.com/connect-iq/compatible-devices/
|
||||
# * https://developer.garmin.com/connect-iq/reference-guides/devices-reference/
|
||||
#
|
||||
# Widget launcher icon, multiple resolutions
|
||||
# https://forums.garmin.com/developer/connect-iq/f/discussion/255433/widget-launcher-icon-multiple-resolutions/1563305
|
||||
@@ -121,7 +122,8 @@ instinct2.resourcePath = $(instinct2.resourcePath);resources-launcher-62-62;reso
|
||||
instinct2s.resourcePath = $(instinct2s.resourcePath);resources-launcher-54-54;resources-icons-18
|
||||
# Screen Size 176x176 launcher icon size 62x62
|
||||
instinct2x.resourcePath = $(instinct2x.resourcePath);resources-launcher-62-62;resources-icons-21
|
||||
instinctcrossover.resourcePath = $(instinctcrossover.resourcePath);resources-launcher-62-62;resources-icons-21
|
||||
# Screen Size 176x176 launcher icon size 26x26
|
||||
instinctcrossover.resourcePath = $(instinctcrossover.resourcePath);resources-launcher-26-26;resources-icons-21
|
||||
# Screen Size 218x218 launcher icon size 30x30
|
||||
legacyherocaptainmarvel.resourcePath = $(legacyherocaptainmarvel.resourcePath);resources-launcher-30-30;resources-icons-26
|
||||
# Screen Size 260x260 launcher icon size 35x35
|
||||
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">لا يوجد عنوان URL لواجهة برمجة التطبيقات في إعدادات التطبيق</string>
|
||||
<string id="NoConfigUrl">لا يوجد عنوان URL للتكوين في إعدادات التطبيق</string>
|
||||
<string id="ApiFlood">مكالمات API سريعة جدًا. يرجى إبطاء طلباتك.</string>
|
||||
<string id="ApiUrlNotFound">لم يتم العثور على عنوان URL. خطأ محتمل في عنوان URL لواجهة برمجة التطبيقات في الإعدادات.</string>
|
||||
<string id="ConfigUrlNotFound">لم يتم العثور على عنوان URL. خطأ محتمل في عنوان URL للتكوين في الإعدادات.</string>
|
||||
<string id="UnhandledHttpErr">قام طلب HTTP بإرجاع رمز الخطأ =</string>
|
||||
<string id="TrailingSlashErr">يجب ألا يحتوي عنوان URL لواجهة برمجة التطبيقات على شرطة مائلة لاحقة '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Няма URL адрес на API в настройките на приложението</string>
|
||||
<string id="NoConfigUrl">Няма конфигурационен URL адрес в настройките на приложението</string>
|
||||
<string id="ApiFlood">Извикванията на API са твърде бързи. Моля, забавете вашите заявки.</string>
|
||||
<string id="ApiUrlNotFound">URL не е намерен. Потенциална грешка в URL адреса на API в настройките.</string>
|
||||
<string id="ConfigUrlNotFound">URL не е намерен. Потенциална грешка в URL адреса на конфигурацията в настройките.</string>
|
||||
<string id="UnhandledHttpErr">HTTP заявката върна код на грешка =</string>
|
||||
<string id="TrailingSlashErr">URL адресът на API не трябва да има наклонена черта '/' в края</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">V nastavení aplikace není žádná adresa URL API</string>
|
||||
<string id="NoConfigUrl">V nastavení aplikace není žádná konfigurační URL</string>
|
||||
<string id="ApiFlood">Příliš rychlá volání API. Zpomalte prosím své požadavky.</string>
|
||||
<string id="ApiUrlNotFound">Adresa URL nenalezena. Potenciální chyba adresy URL rozhraní API v nastavení.</string>
|
||||
<string id="ConfigUrlNotFound">Adresa URL nenalezena. Potenciální chyba konfigurační adresy URL v nastavení.</string>
|
||||
<string id="UnhandledHttpErr">Požadavek HTTP vrátil kód chyby =</string>
|
||||
<string id="TrailingSlashErr">Adresa URL rozhraní API nesmí mít koncové lomítko „/“</string>
|
||||
</strings>
|
||||
@@ -25,9 +25,13 @@
|
||||
<string id="MenuItemTap">Tryk på</string>
|
||||
<string id="MenuItemMenu">Menu</string>
|
||||
<string id="NoInternet">Ingen internetforbindelse</string>
|
||||
<string id="NoMenu">Fejl ved menuhentning</string>
|
||||
<string id="NoMenu">Menuhentningsfejl</string>
|
||||
<string id="NoAPIKey">Ingen API-nøgle i applikationsindstillingerne</string>
|
||||
<string id="NoApiUrl">Ingen API-URL i applikationsindstillingerne</string>
|
||||
<string id="NoConfigUrl">Ingen konfigurations-URL i applikationsindstillingerne</string>
|
||||
<string id="ApiFlood">API-kald for hurtigt. Sænk venligst dine anmodninger.</string>
|
||||
<string id="ApiUrlNotFound">URL ikke fundet. Potentiel API URL-fejl i indstillinger.</string>
|
||||
<string id="ConfigUrlNotFound">URL ikke fundet. Potentiel konfigurations-URL-fejl i indstillinger.</string>
|
||||
<string id="UnhandledHttpErr">HTTP-anmodning returnerede fejlkode =</string>
|
||||
<string id="TrailingSlashErr">API URL må ikke have en efterfølgende skråstreg '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Keine API-URL in den Anwendungseinstellungen</string>
|
||||
<string id="NoConfigUrl">Keine Konfigurations-URL in den Anwendungseinstellungen</string>
|
||||
<string id="ApiFlood">API-Aufrufe zu schnell. Bitte verlangsamen Sie Ihre Anfragen.</string>
|
||||
<string id="ApiUrlNotFound">URL nicht gefunden. Möglicher API-URL-Fehler in den Einstellungen.</string>
|
||||
<string id="ConfigUrlNotFound">URL nicht gefunden. Möglicher Konfigurations-URL-Fehler in den Einstellungen.</string>
|
||||
<string id="UnhandledHttpErr">Die HTTP-Anfrage hat den Fehlercode = zurückgegeben</string>
|
||||
<string id="TrailingSlashErr">Die API-URL darf keinen abschließenden Schrägstrich „/“ enthalten.</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Geen API-URL in de applicatie-instellingen</string>
|
||||
<string id="NoConfigUrl">Geen configuratie-URL in de applicatie-instellingen</string>
|
||||
<string id="ApiFlood">API-aanroepen te snel. Vertraag uw verzoeken.</string>
|
||||
<string id="ApiUrlNotFound">URL niet gevonden. Mogelijke API-URL-fout in instellingen.</string>
|
||||
<string id="ConfigUrlNotFound">URL niet gevonden. Mogelijke configuratie-URL-fout in de instellingen.</string>
|
||||
<string id="UnhandledHttpErr">HTTP-verzoek retourneerde foutcode =</string>
|
||||
<string id="TrailingSlashErr">API-URL mag geen afsluitende slash '/' bevatten</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Rakenduse seadetes pole API URL-i</string>
|
||||
<string id="NoConfigUrl">Rakenduse seadetes pole konfiguratsiooni URL-i</string>
|
||||
<string id="ApiFlood">API-kutsed liiga kiired. Palun aeglustage taotluste esitamist.</string>
|
||||
<string id="ApiUrlNotFound">URL-i ei leitud. Võimalik API URL-i viga seadetes.</string>
|
||||
<string id="ConfigUrlNotFound">URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes.</string>
|
||||
<string id="UnhandledHttpErr">HTTP päring tagastas veakoodi =</string>
|
||||
<string id="TrailingSlashErr">API URL-i lõpus ei tohi olla kaldkriipsu „/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Sovellusasetuksissa ei ole API URL-osoitetta</string>
|
||||
<string id="NoConfigUrl">Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta</string>
|
||||
<string id="ApiFlood">API-kutsut liian nopeita. Hidasta pyyntöjäsi.</string>
|
||||
<string id="ApiUrlNotFound">URL-osoitetta ei löydy. Mahdollinen API URL -virhe asetuksissa.</string>
|
||||
<string id="ConfigUrlNotFound">URL-osoitetta ei löydy. Mahdollinen konfigurointi-URL-virhe asetuksissa.</string>
|
||||
<string id="UnhandledHttpErr">HTTP-pyyntö palautti virhekoodin =</string>
|
||||
<string id="TrailingSlashErr">API-URL-osoitteessa ei saa olla perässä olevaa kauttaviivaa '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Aucune URL API dans les paramètres de l'application</string>
|
||||
<string id="NoConfigUrl">Aucune URL de configuration dans les paramètres de l'application</string>
|
||||
<string id="ApiFlood">Appels API trop rapides. Veuillez ralentir vos demandes.</string>
|
||||
<string id="ApiUrlNotFound">URL introuvable. Erreur potentielle d'URL d'API dans les paramètres.</string>
|
||||
<string id="ConfigUrlNotFound">URL introuvable. Erreur potentielle d'URL de configuration dans les paramètres.</string>
|
||||
<string id="UnhandledHttpErr">La requête HTTP a renvoyé un code d'erreur =</string>
|
||||
<string id="TrailingSlashErr">L'URL de l'API ne doit pas comporter de barre oblique finale '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής</string>
|
||||
<string id="NoConfigUrl">Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής</string>
|
||||
<string id="ApiFlood">Κλήσεις API πολύ γρήγορες. Παρακαλώ επιβραδύνετε τα αιτήματά σας.</string>
|
||||
<string id="ApiUrlNotFound">Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL API στις ρυθμίσεις.</string>
|
||||
<string id="ConfigUrlNotFound">Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL διαμόρφωσης στις ρυθμίσεις.</string>
|
||||
<string id="UnhandledHttpErr">Το αίτημα HTTP επέστρεψε κωδικό σφάλματος =</string>
|
||||
<string id="TrailingSlashErr">Η διεύθυνση URL του API δεν πρέπει να έχει τελική κάθετο "/"</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">אין כתובת API בהגדרות האפליקציה</string>
|
||||
<string id="NoConfigUrl">אין כתובת אתר תצורה בהגדרות האפליקציה</string>
|
||||
<string id="ApiFlood">קריאות API מהירות מדי. נא להאט את הבקשות שלך.</string>
|
||||
<string id="ApiUrlNotFound">כתובת האתר לא נמצאה. שגיאה פוטנציאלית של כתובת ה-API בהגדרות.</string>
|
||||
<string id="ConfigUrlNotFound">כתובת האתר לא נמצאה. שגיאת כתובת אתר פוטנציאלית של תצורה בהגדרות.</string>
|
||||
<string id="UnhandledHttpErr">בקשת HTTP החזירה קוד שגיאה =</string>
|
||||
<string id="TrailingSlashErr">כתובת ה-API לא חייבת לכלול לוכסן אחורי '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Nema API URL-a u postavkama aplikacije</string>
|
||||
<string id="NoConfigUrl">Nema konfiguracijskog URL-a u postavkama aplikacije</string>
|
||||
<string id="ApiFlood">API pozivi su prebrzi. Molimo usporite svoje zahtjeve.</string>
|
||||
<string id="ApiUrlNotFound">URL nije pronađen. Potencijalna pogreška API URL-a u postavkama.</string>
|
||||
<string id="ConfigUrlNotFound">URL nije pronađen. Potencijalna pogreška URL-a konfiguracije u postavkama.</string>
|
||||
<string id="UnhandledHttpErr">HTTP zahtjev vratio je kod greške =</string>
|
||||
<string id="TrailingSlashErr">API URL ne smije imati kosu crtu na kraju '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Nincs API URL az alkalmazás beállításai között</string>
|
||||
<string id="NoConfigUrl">Nincs konfigurációs URL az alkalmazás beállításai között</string>
|
||||
<string id="ApiFlood">Az API-hívások túl gyorsak. Kérjük, lassítsa a kérések teljesítését.</string>
|
||||
<string id="ApiUrlNotFound">Az URL nem található. Lehetséges API URL hiba a beállításokban.</string>
|
||||
<string id="ConfigUrlNotFound">Az URL nem található. Lehetséges konfigurációs URL hiba a beállításokban.</string>
|
||||
<string id="UnhandledHttpErr">A HTTP-kérés = hibakódot adott vissza</string>
|
||||
<string id="TrailingSlashErr">Az API URL-ben nem lehet perjel a „/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Tidak ada URL API di pengaturan aplikasi</string>
|
||||
<string id="NoConfigUrl">Tidak ada URL konfigurasi di pengaturan aplikasi</string>
|
||||
<string id="ApiFlood">Panggilan API terlalu cepat. Harap memperlambat permintaan Anda.</string>
|
||||
<string id="ApiUrlNotFound">URL tidak ditemukan. Potensi kesalahan URL API dalam pengaturan.</string>
|
||||
<string id="ConfigUrlNotFound">URL tidak ditemukan. Potensi kesalahan URL Konfigurasi dalam pengaturan.</string>
|
||||
<string id="UnhandledHttpErr">Permintaan HTTP mengembalikan kode kesalahan =</string>
|
||||
<string id="TrailingSlashErr">URL API tidak boleh memiliki garis miring '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Nessun URL API nelle impostazioni dell'applicazione</string>
|
||||
<string id="NoConfigUrl">Nessun URL di configurazione nelle impostazioni dell'applicazione</string>
|
||||
<string id="ApiFlood">Chiamate API troppo rapide. Per favore rallenta le tue richieste.</string>
|
||||
<string id="ApiUrlNotFound">URL non trovato. Potenziale errore URL API nelle impostazioni.</string>
|
||||
<string id="ConfigUrlNotFound">URL non trovato. Potenziale errore dell'URL di configurazione nelle impostazioni.</string>
|
||||
<string id="UnhandledHttpErr">La richiesta HTTP ha restituito il codice di errore =</string>
|
||||
<string id="TrailingSlashErr">L'URL dell'API non deve avere una barra finale "/"</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">アプリケーション設定に API URL がありません</string>
|
||||
<string id="NoConfigUrl">アプリケーション設定に構成 URL がありません</string>
|
||||
<string id="ApiFlood">API 呼び出しが速すぎます。リクエストは遅くしてください。</string>
|
||||
<string id="ApiUrlNotFound">URLが見つかりません。設定における API URL エラーの可能性があります。</string>
|
||||
<string id="ConfigUrlNotFound">URLが見つかりません。設定内の構成 URL エラーの可能性があります。</string>
|
||||
<string id="UnhandledHttpErr">HTTP リクエストがエラー コードを返しました =</string>
|
||||
<string id="TrailingSlashErr">API URL の末尾にスラッシュ「/」を含めることはできません</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">애플리케이션 설정에 API URL이 없습니다.</string>
|
||||
<string id="NoConfigUrl">애플리케이션 설정에 구성 URL이 없습니다.</string>
|
||||
<string id="ApiFlood">API 호출이 너무 빠릅니다. 요청 속도를 늦추시기 바랍니다.</string>
|
||||
<string id="ApiUrlNotFound">URL을 찾을 수 없습니다. 설정에 잠재적인 API URL 오류가 있습니다.</string>
|
||||
<string id="ConfigUrlNotFound">URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다.</string>
|
||||
<string id="UnhandledHttpErr">HTTP 요청이 오류 코드를 반환했습니다 =</string>
|
||||
<string id="TrailingSlashErr">API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다.</string>
|
||||
</strings>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Lietojumprogrammas iestatījumos nav API URL</string>
|
||||
<string id="NoConfigUrl">Lietojumprogrammas iestatījumos nav konfigurācijas URL</string>
|
||||
<string id="ApiFlood">API izsaukumi ir pārāk ātri. Lūdzu, palēniniet pieprasījumu izpildi.</string>
|
||||
<string id="ApiUrlNotFound">URL nav atrasts. Iespējama API URL kļūda iestatījumos.</string>
|
||||
<string id="ConfigUrlNotFound">URL nav atrasts. Iespējama konfigurācijas URL kļūda iestatījumos.</string>
|
||||
<string id="UnhandledHttpErr">HTTP pieprasījums atgrieza kļūdas kodu =</string>
|
||||
<string id="TrailingSlashErr">API URL beigās nedrīkst būt slīpsvītra “/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Programos nustatymuose nėra API URL</string>
|
||||
<string id="NoConfigUrl">Programos nustatymuose nėra konfigūracijos URL</string>
|
||||
<string id="ApiFlood">API skambučiai per greiti. Sulėtinkite prašymų vykdymą.</string>
|
||||
<string id="ApiUrlNotFound">URL nerastas. Galima API URL klaida nustatymuose.</string>
|
||||
<string id="ConfigUrlNotFound">URL nerastas. Galima konfigūracijos URL klaida nustatymuose.</string>
|
||||
<string id="UnhandledHttpErr">HTTP užklausa grąžino klaidos kodą =</string>
|
||||
<string id="TrailingSlashErr">API URL pabaigoje negali būti pasvirojo brūkšnio „/“</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Ingen API-URL i applikasjonsinnstillingene</string>
|
||||
<string id="NoConfigUrl">Ingen konfigurasjons-URL i applikasjonsinnstillingene</string>
|
||||
<string id="ApiFlood">API-kall for raske. Vennligst senke forespørslene dine.</string>
|
||||
<string id="ApiUrlNotFound">Finner ikke URL. Potensiell API URL-feil i innstillingene.</string>
|
||||
<string id="ConfigUrlNotFound">Finner ikke URL. Potensiell konfigurasjons-URL-feil i innstillingene.</string>
|
||||
<string id="UnhandledHttpErr">HTTP-forespørsel returnerte feilkode =</string>
|
||||
<string id="TrailingSlashErr">API URL må ikke ha en etterfølgende skråstrek '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Brak adresu API w ustawieniach aplikacji</string>
|
||||
<string id="NoConfigUrl">Brak adresu URL konfiguracji w ustawieniach aplikacji</string>
|
||||
<string id="ApiFlood">Wywołania API są zbyt szybkie. Proszę spowolnić swoje żądania.</string>
|
||||
<string id="ApiUrlNotFound">Nie znaleziono adresu URL. Potencjalny błąd adresu URL interfejsu API w ustawieniach.</string>
|
||||
<string id="ConfigUrlNotFound">Nie znaleziono adresu URL. Potencjalny błąd adresu URL konfiguracji w ustawieniach.</string>
|
||||
<string id="UnhandledHttpErr">Żądanie HTTP zwróciło kod błędu =</string>
|
||||
<string id="TrailingSlashErr">Adres URL interfejsu API nie może zawierać końcowego ukośnika „/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Nenhum URL de API nas configurações do aplicativo</string>
|
||||
<string id="NoConfigUrl">Nenhum URL de configuração nas configurações do aplicativo</string>
|
||||
<string id="ApiFlood">Chamadas de API muito rápidas. Por favor, diminua a velocidade de seus pedidos.</string>
|
||||
<string id="ApiUrlNotFound">URL não encontrado. Possível erro de URL da API nas configurações.</string>
|
||||
<string id="ConfigUrlNotFound">URL não encontrado. Possível erro de URL de configuração nas configurações.</string>
|
||||
<string id="UnhandledHttpErr">Solicitação HTTP retornou código de erro =</string>
|
||||
<string id="TrailingSlashErr">O URL da API não deve ter uma barra final '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Nicio adresă URL API în setările aplicației</string>
|
||||
<string id="NoConfigUrl">Nicio adresă URL de configurare în setările aplicației</string>
|
||||
<string id="ApiFlood">Apeluri API prea rapide. Vă rugăm să vă încetiniți solicitările.</string>
|
||||
<string id="ApiUrlNotFound">Adresa URL nu a fost găsită. Potențială eroare URL API în setări.</string>
|
||||
<string id="ConfigUrlNotFound">Adresa URL nu a fost găsită. Potențială eroare URL de configurare în setări.</string>
|
||||
<string id="UnhandledHttpErr">Solicitarea HTTP a returnat codul de eroare =</string>
|
||||
<string id="TrailingSlashErr">Adresa URL API nu trebuie să aibă o bară oblică „/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">V nastaveniach aplikácie nie je žiadna adresa URL rozhrania API</string>
|
||||
<string id="NoConfigUrl">V nastaveniach aplikácie nie je žiadna konfiguračná URL</string>
|
||||
<string id="ApiFlood">Volania API sú príliš rýchle. Spomaľte svoje požiadavky.</string>
|
||||
<string id="ApiUrlNotFound">Adresa URL sa nenašla. Potenciálna chyba webovej adresy rozhrania API v nastaveniach.</string>
|
||||
<string id="ConfigUrlNotFound">Adresa URL sa nenašla. Potenciálna chyba konfiguračnej adresy URL v nastaveniach.</string>
|
||||
<string id="UnhandledHttpErr">Požiadavka HTTP vrátila kód chyby =</string>
|
||||
<string id="TrailingSlashErr">Adresa URL rozhrania API nesmie obsahovať koncovú lomku „/“</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">V nastavitvah aplikacije ni URL-ja API-ja</string>
|
||||
<string id="NoConfigUrl">V nastavitvah aplikacije ni konfiguracijskega URL-ja</string>
|
||||
<string id="ApiFlood">API klici so prehitri. Prosim, upočasnite svoje zahteve.</string>
|
||||
<string id="ApiUrlNotFound">URL-ja ni bilo mogoče najti. Morebitna napaka URL-ja API-ja v nastavitvah.</string>
|
||||
<string id="ConfigUrlNotFound">URL-ja ni bilo mogoče najti. Morebitna napaka URL-ja konfiguracije v nastavitvah.</string>
|
||||
<string id="UnhandledHttpErr">Zahteva HTTP je vrnila kodo napake =</string>
|
||||
<string id="TrailingSlashErr">URL API-ja ne sme imeti končne poševnice '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">No hay URL de API en la configuración de la aplicación</string>
|
||||
<string id="NoConfigUrl">No hay URL de configuración en la configuración de la aplicación.</string>
|
||||
<string id="ApiFlood">Llamadas API demasiado rápidas. Por favor, ralentice sus solicitudes.</string>
|
||||
<string id="ApiUrlNotFound">URL no encontrada. Posible error de URL de API en la configuración.</string>
|
||||
<string id="ConfigUrlNotFound">URL no encontrada. Posible error de URL de configuración en la configuración.</string>
|
||||
<string id="UnhandledHttpErr">La solicitud HTTP devolvió el código de error =</string>
|
||||
<string id="TrailingSlashErr">La URL de API no debe tener una barra diagonal '/'</string>
|
||||
</strings>
|
||||
@@ -27,7 +27,11 @@
|
||||
<string id="NoInternet">Ingen internetanslutning</string>
|
||||
<string id="NoMenu">Menyhämtningsfel</string>
|
||||
<string id="NoAPIKey">Ingen API-nyckel i applikationsinställningarna</string>
|
||||
<string id="NoApiUrl">Ingen API-URL i applikationsinställningarna</string>
|
||||
<string id="NoApiUrl">Ingen API-URL i programinställningarna</string>
|
||||
<string id="NoConfigUrl">Ingen konfigurations-URL i programinställningarna</string>
|
||||
<string id="ApiFlood">API-anrop för snabba. Vänligen sakta ner dina förfrågningar.</string>
|
||||
<string id="ApiUrlNotFound">Webbadressen hittades inte. Potentiellt API-URL-fel i inställningarna.</string>
|
||||
<string id="ConfigUrlNotFound">Webbadressen hittades inte. Potentiellt konfigurations-URL-fel i inställningarna.</string>
|
||||
<string id="UnhandledHttpErr">HTTP-begäran returnerade felkod =</string>
|
||||
<string id="TrailingSlashErr">API-URL får inte ha ett snedstreck '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">ไม่มี URL API ในการตั้งค่าแอปพลิเคชัน</string>
|
||||
<string id="NoConfigUrl">ไม่มี URL การกำหนดค่าในการตั้งค่าแอปพลิเคชัน</string>
|
||||
<string id="ApiFlood">การเรียก API เร็วเกินไป กรุณาชะลอคำขอของคุณ</string>
|
||||
<string id="ApiUrlNotFound">ไม่พบ URL ข้อผิดพลาด URL API ที่อาจเกิดขึ้นในการตั้งค่า</string>
|
||||
<string id="ConfigUrlNotFound">ไม่พบ URL ข้อผิดพลาด URL การกำหนดค่าที่อาจเกิดขึ้นในการตั้งค่า</string>
|
||||
<string id="UnhandledHttpErr">คำขอ HTTP ส่งคืนรหัสข้อผิดพลาด =</string>
|
||||
<string id="TrailingSlashErr">URL ของ API ต้องไม่มีเครื่องหมายทับต่อท้าย '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Uygulama ayarlarında API URL'si yok</string>
|
||||
<string id="NoConfigUrl">Uygulama ayarlarında yapılandırma URL'si yok</string>
|
||||
<string id="ApiFlood">API çağrıları çok hızlı. Lütfen isteklerinizi yavaşlatın.</string>
|
||||
<string id="ApiUrlNotFound">URL bulunamadı. Ayarlarda olası API URL hatası.</string>
|
||||
<string id="ConfigUrlNotFound">URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası.</string>
|
||||
<string id="UnhandledHttpErr">HTTP isteği hata kodunu döndürdü =</string>
|
||||
<string id="TrailingSlashErr">API URL'sinin sonunda '/' eğik çizgi olmamalıdır</string>
|
||||
</strings>
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
<!--
|
||||
Generated by Google Translate: English to Ukrainian
|
||||
Згенеровано Google Translate з англійської
|
||||
Створено Google Translate з англійської
|
||||
-->
|
||||
|
||||
<strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">У налаштуваннях програми немає URL-адреси API</string>
|
||||
<string id="NoConfigUrl">У налаштуваннях програми немає URL-адреси конфігурації</string>
|
||||
<string id="ApiFlood">Надто швидкі виклики API. Будь ласка, сповільніть свої запити.</string>
|
||||
<string id="ApiUrlNotFound">URL не знайдено. Потенційна помилка URL-адреси API в налаштуваннях.</string>
|
||||
<string id="ConfigUrlNotFound">URL не знайдено. Потенційна помилка URL-адреси конфігурації в налаштуваннях.</string>
|
||||
<string id="UnhandledHttpErr">Запит HTTP повернув код помилки =</string>
|
||||
<string id="TrailingSlashErr">URL-адреса API не повинна містити косу риску '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Không có URL API trong cài đặt ứng dụng</string>
|
||||
<string id="NoConfigUrl">Không có URL cấu hình trong cài đặt ứng dụng</string>
|
||||
<string id="ApiFlood">Cuộc gọi API quá nhanh. Hãy làm chậm yêu cầu của bạn.</string>
|
||||
<string id="ApiUrlNotFound">Không tìm thấy URL. Lỗi URL API tiềm ẩn trong cài đặt.</string>
|
||||
<string id="ConfigUrlNotFound">Không tìm thấy URL. Lỗi URL cấu hình tiềm ẩn trong cài đặt.</string>
|
||||
<string id="UnhandledHttpErr">Yêu cầu HTTP trả về mã lỗi =</string>
|
||||
<string id="TrailingSlashErr">URL API không được có dấu gạch chéo ở cuối '/'</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">应用程序设置中没有 API URL</string>
|
||||
<string id="NoConfigUrl">应用程序设置中没有配置 URL</string>
|
||||
<string id="ApiFlood">API 调用速度太快。请放慢您的请求。</string>
|
||||
<string id="ApiUrlNotFound">找不到网址。设置中可能存在 API URL 错误。</string>
|
||||
<string id="ConfigUrlNotFound">找不到网址。设置中可能存在配置 URL 错误。</string>
|
||||
<string id="UnhandledHttpErr">HTTP请求返回错误码=</string>
|
||||
<string id="TrailingSlashErr">API URL 不得有尾部斜杠“/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">應用程式設定中沒有 API URL</string>
|
||||
<string id="NoConfigUrl">應用程式設定中沒有配置 URL</string>
|
||||
<string id="ApiFlood">API 呼叫速度太快。請放慢您的請求。</string>
|
||||
<string id="ApiUrlNotFound">找不到網址。設定中可能存在 API URL 錯誤。</string>
|
||||
<string id="ConfigUrlNotFound">找不到網址。設定中可能存在配置 URL 錯誤。</string>
|
||||
<string id="UnhandledHttpErr">HTTP請求回傳錯誤碼=</string>
|
||||
<string id="TrailingSlashErr">API URL 不得有尾部斜線“/”</string>
|
||||
</strings>
|
||||
@@ -30,4 +30,8 @@
|
||||
<string id="NoApiUrl">Tiada URL API dalam tetapan aplikasi</string>
|
||||
<string id="NoConfigUrl">Tiada URL konfigurasi dalam tetapan aplikasi</string>
|
||||
<string id="ApiFlood">Panggilan API terlalu pantas. Sila perlahankan permintaan anda.</string>
|
||||
<string id="ApiUrlNotFound">URL tidak ditemui. Ralat URL API yang berpotensi dalam tetapan.</string>
|
||||
<string id="ConfigUrlNotFound">URL tidak ditemui. Ralat URL Konfigurasi Potensi dalam tetapan.</string>
|
||||
<string id="UnhandledHttpErr">Permintaan HTTP mengembalikan kod ralat =</string>
|
||||
<string id="TrailingSlashErr">URL API tidak boleh mempunyai garis miring '/'</string>
|
||||
</strings>
|
||||
@@ -24,4 +24,8 @@
|
||||
<string id="NoApiUrl">No API URL in the application settings</string>
|
||||
<string id="NoConfigUrl">No configuration URL in the application settings</string>
|
||||
<string id="ApiFlood">API calls too rapid. Please slow down your requests.</string>
|
||||
<string id="ApiUrlNotFound">URL not found. Potential API URL error in settings.</string>
|
||||
<string id="ConfigUrlNotFound">URL not found. Potential Configuration URL error in settings.</string>
|
||||
<string id="UnhandledHttpErr">HTTP request returned error code = </string>
|
||||
<string id="TrailingSlashErr">API URL must not have a trailing slash '/'</string>
|
||||
</strings>
|
||||
|
||||
@@ -26,23 +26,29 @@ using Toybox.Timer;
|
||||
|
||||
class HomeAssistantApp extends Application.AppBase {
|
||||
hidden var mHaMenu;
|
||||
hidden var strNoApiKey as Lang.String;
|
||||
hidden var strNoApiUrl as Lang.String;
|
||||
hidden var strNoConfigUrl as Lang.String;
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strNoMenu as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var strNoApiKey as Lang.String;
|
||||
hidden var strNoApiUrl as Lang.String;
|
||||
hidden var strNoConfigUrl as Lang.String;
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strNoMenu as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var strConfigUrlNotFound as Lang.String;
|
||||
hidden var strUnhandledHttpErr as Lang.String;
|
||||
hidden var strTrailingSlashErr as Lang.String;
|
||||
hidden var mItemsToUpdate; // Array initialised by onReturnFetchMenuConfig()
|
||||
hidden var mNextItemToUpdate = 0; // Index into the above array
|
||||
|
||||
function initialize() {
|
||||
AppBase.initialize();
|
||||
strNoApiKey = WatchUi.loadResource($.Rez.Strings.NoAPIKey);
|
||||
strNoApiUrl = WatchUi.loadResource($.Rez.Strings.NoApiUrl);
|
||||
strNoConfigUrl = WatchUi.loadResource($.Rez.Strings.NoConfigUrl);
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strNoMenu = WatchUi.loadResource($.Rez.Strings.NoMenu);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strNoApiKey = WatchUi.loadResource($.Rez.Strings.NoAPIKey);
|
||||
strNoApiUrl = WatchUi.loadResource($.Rez.Strings.NoApiUrl);
|
||||
strNoConfigUrl = WatchUi.loadResource($.Rez.Strings.NoConfigUrl);
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strNoMenu = WatchUi.loadResource($.Rez.Strings.NoMenu);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strConfigUrlNotFound = WatchUi.loadResource($.Rez.Strings.ConfigUrlNotFound);
|
||||
strUnhandledHttpErr = WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr);
|
||||
strTrailingSlashErr = WatchUi.loadResource($.Rez.Strings.TrailingSlashErr);
|
||||
}
|
||||
|
||||
// onStart() is called on application start up
|
||||
@@ -54,19 +60,26 @@ class HomeAssistantApp extends Application.AppBase {
|
||||
|
||||
// Return the initial view of your application here
|
||||
function getInitialView() as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>? {
|
||||
var api_url = Properties.getValue("api_url") as Lang.String;
|
||||
|
||||
if ((Properties.getValue("api_key") as Lang.String).length() == 0) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem Note - execScript(): No API key in the application settings.");
|
||||
System.println("HomeAssistantMenuItem execScript(): No API key in the application settings.");
|
||||
}
|
||||
return [new ErrorView(strNoApiKey + "."), new ErrorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
} else if ((Properties.getValue("api_url") as Lang.String).length() == 0) {
|
||||
} else if (api_url.length() == 0) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem Note - execScript(): No API URL in the application settings.");
|
||||
System.println("HomeAssistantMenuItem execScript(): No API URL in the application settings.");
|
||||
}
|
||||
return [new ErrorView(strNoApiUrl + "."), new ErrorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
} else if (api_url.substring(-1, api_url.length()).equals("/")) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem execScript(): API URL must not have a trailing slash '/'.");
|
||||
}
|
||||
return [new ErrorView(strTrailingSlashErr + "."), new ErrorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
} else if ((Properties.getValue("config_url") as Lang.String).length() == 0) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem Note - execScript(): No configuration URL in the application settings.");
|
||||
System.println("HomeAssistantMenuItem execScript(): No configuration URL in the application settings.");
|
||||
}
|
||||
return [new ErrorView(strNoConfigUrl + "."), new ErrorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
} else if (System.getDeviceSettings().phoneConnected && System.getDeviceSettings().connectionAvailable) {
|
||||
@@ -74,7 +87,7 @@ class HomeAssistantApp extends Application.AppBase {
|
||||
return [new WatchUi.View(), new WatchUi.BehaviorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantApp Note - fetchMenuConfig(): No Internet connection, skipping API call.");
|
||||
System.println("HomeAssistantApp fetchMenuConfig(): No Internet connection, skipping API call.");
|
||||
}
|
||||
return [new ErrorView(strNoInternet + "."), new ErrorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
|
||||
}
|
||||
@@ -96,23 +109,30 @@ class HomeAssistantApp extends Application.AppBase {
|
||||
// Avoid pushing multiple ErrorViews
|
||||
WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
} else if (responseCode == 404) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: 404, page not found. Check Configuration URL setting.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strConfigUrlNotFound), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
} else if (responseCode == 200) {
|
||||
mHaMenu = new HomeAssistantView(data, null);
|
||||
WatchUi.switchToView(mHaMenu, new HomeAssistantViewDelegate(), WatchUi.SLIDE_IMMEDIATE);
|
||||
mItemsToUpdate = mHaMenu.getItemsToUpdate();
|
||||
// Start the continuous update process that continues for as long as the application is running.
|
||||
// The chain of functions from 'updateNextMenuItem()' calls 'updateNextMenuItem()' on completion.
|
||||
updateNextMenuItem();
|
||||
} else if (responseCode == -300) {
|
||||
if (mItemsToUpdate.size() > 0) {
|
||||
updateNextMenuItem();
|
||||
}
|
||||
} else if (responseCode == Communications.NETWORK_REQUEST_TIMED_OUT) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantApp Note - onReturnFetchMenuConfig(): Network request timeout.");
|
||||
System.println("HomeAssistantApp onReturnFetchMenuConfig(): Network request timeout.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strNoMenu + ". " + strNoInternet + "?"), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantApp Note - onReturnFetchMenuConfig(): Configuration not found or potential validation issue.");
|
||||
System.println("HomeAssistantApp onReturnFetchMenuConfig(): Unhandled HTTP response code = " + responseCode);
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strNoMenu + " code=" + responseCode ), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
WatchUi.pushView(new ErrorView(strUnhandledHttpErr + responseCode ), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,12 @@ using Toybox.Graphics;
|
||||
using Toybox.Application.Properties;
|
||||
|
||||
class HomeAssistantMenuItem extends WatchUi.MenuItem {
|
||||
hidden var mApiKey = Properties.getValue("api_key");
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var mService as Lang.String;
|
||||
hidden var mApiKey as Lang.String;
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var strApiUrlNotFound as Lang.String;
|
||||
hidden var strUnhandledHttpErr as Lang.String;
|
||||
hidden var mService as Lang.String;
|
||||
|
||||
function initialize(
|
||||
label as Lang.String or Lang.Symbol,
|
||||
@@ -39,8 +41,11 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
|
||||
:icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
|
||||
} or Null
|
||||
) {
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strApiUrlNotFound = WatchUi.loadResource($.Rez.Strings.ApiUrlNotFound);
|
||||
strUnhandledHttpErr = WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr);
|
||||
mApiKey = Properties.getValue("api_key");
|
||||
mService = service;
|
||||
WatchUi.MenuItem.initialize(
|
||||
label,
|
||||
@@ -66,12 +71,17 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
|
||||
// Avoid pushing multiple ErrorViews
|
||||
WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
} else if (responseCode == 404) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem onReturnExecScript() Response Code: 404, page not found. Check API URL setting.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strApiUrlNotFound), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
} else if (responseCode == 200) {
|
||||
var d = data as Lang.Array;
|
||||
for(var i = 0; i < d.size(); i++) {
|
||||
if ((d[i].get("entity_id") as Lang.String).equals(mIdentifier)) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem Note - onReturnExecScript(): Correct script executed.");
|
||||
System.println("HomeAssistantMenuItem onReturnExecScript(): Correct script executed.");
|
||||
}
|
||||
if (WatchUi has :showToast) {
|
||||
WatchUi.showToast(
|
||||
@@ -97,6 +107,11 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem onReturnExecScript(): Unhandled HTTP response code = " + responseCode);
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strUnhandledHttpErr + responseCode ), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +157,7 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
|
||||
}
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantMenuItem Note - execScript(): No Internet connection, skipping API call.");
|
||||
System.println("HomeAssistantMenuItem execScript(): No Internet connection, skipping API call.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strNoInternet + "."), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
|
||||
@@ -24,9 +24,11 @@ using Toybox.Graphics;
|
||||
using Toybox.Application.Properties;
|
||||
|
||||
class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
hidden var mApiKey = Properties.getValue("api_key");
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var mApiKey as Lang.String;
|
||||
hidden var strNoInternet as Lang.String;
|
||||
hidden var strApiFlood as Lang.String;
|
||||
hidden var strApiUrlNotFound as Lang.String;
|
||||
hidden var strUnhandledHttpErr as Lang.String;
|
||||
|
||||
function initialize(
|
||||
label as Lang.String or Lang.Symbol,
|
||||
@@ -41,10 +43,12 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
:icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
|
||||
} or Null
|
||||
) {
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
|
||||
strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
|
||||
strApiUrlNotFound = WatchUi.loadResource($.Rez.Strings.ApiUrlNotFound);
|
||||
strUnhandledHttpErr = WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr);
|
||||
mApiKey = Properties.getValue("api_key");
|
||||
WatchUi.ToggleMenuItem.initialize(label, subLabel, identifier, enabled, options);
|
||||
mApiKey = Properties.getValue("api_key");
|
||||
}
|
||||
|
||||
private function setUiToggle(state as Null or Lang.String) as Void {
|
||||
@@ -75,6 +79,17 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
// Avoid pushing multiple ErrorViews
|
||||
WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
||||
getApp().updateNextMenuItem();
|
||||
} else if (responseCode == 404) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 404, page not found. Check API URL setting.");
|
||||
}
|
||||
var cw = WatchUi.getCurrentView();
|
||||
if (!(cw[0] instanceof ErrorView)) {
|
||||
// Avoid pushing multiple ErrorViews
|
||||
WatchUi.pushView(new ErrorView(strApiUrlNotFound), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
} else if (responseCode == 200) {
|
||||
var state = data.get("state") as Lang.String;
|
||||
if (Globals.scDebug) {
|
||||
@@ -84,9 +99,14 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
setLabel((data.get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String);
|
||||
}
|
||||
setUiToggle(state);
|
||||
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
||||
getApp().updateNextMenuItem();
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem onReturnGetState(): Unhandled HTTP response code = " + responseCode);
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strUnhandledHttpErr + responseCode ), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
||||
getApp().updateNextMenuItem();
|
||||
}
|
||||
|
||||
function getState() as Void {
|
||||
@@ -110,7 +130,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
);
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem Note - getState(): No Internet connection, skipping API call.");
|
||||
System.println("HomeAssistantToggleMenuItem getState(): No Internet connection, skipping API call.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strNoInternet + "."), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
@@ -127,10 +147,15 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem onReturnSetState() Response Code: BLE_QUEUE_FULL, API calls too rapid.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
} else if (responseCode == 404) {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem onReturnSetState() Response Code: 404, page not found. Check API URL setting.");
|
||||
}
|
||||
var cw = WatchUi.getCurrentView();
|
||||
if (!(cw[0] instanceof ErrorView)) {
|
||||
// Avoid pushing multiple ErrorViews
|
||||
WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
WatchUi.pushView(new ErrorView(strApiUrlNotFound), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
} else if (responseCode == 200) {
|
||||
var state;
|
||||
@@ -144,6 +169,11 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
setUiToggle(state);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem onReturnSetState(): Unhandled HTTP response code = " + responseCode);
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strUnhandledHttpErr + responseCode ), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +210,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||
);
|
||||
} else {
|
||||
if (Globals.scDebug) {
|
||||
System.println("HomeAssistantToggleMenuItem Note - setState(): No Internet connection, skipping API call.");
|
||||
System.println("HomeAssistantToggleMenuItem setState(): No Internet connection, skipping API call.");
|
||||
}
|
||||
WatchUi.pushView(new ErrorView(strNoInternet + "."), new ErrorDelegate(), WatchUi.SLIDE_UP);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user