it:iot:hodinky-garmin-api-call

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
it:iot:hodinky-garmin-api-call [2023/01/08 18:48] – vytvořeno Petr Nosekit:iot:hodinky-garmin-api-call [2023/01/08 19:13] (aktuální) Petr Nosek
Řádek 1: Řádek 1:
 ====== Hodinky Garmin a volání API ====== ====== Hodinky Garmin a volání API ======
  
-Pro hodinky Garmin existuje zajímavá aplikace [[https://apicall.dumesnil.net/|{API}Call]]. +Pro hodinky Garmin existuje zajímavá aplikace [[https://apicall.dumesnil.net/|{API}Call]]. Použití je popsáno [[https://apicall.dumesnil.net/documentation_en.html|v dokumentaci]]. Aplikace má 39 předdefinovaných tlačítek, které lze namapovat na volání API příkazů.  
 + 
 +Bohužel je zde z povahy věci dost omezení. Například není implementování OAuth autentizace, kterou využívá Spotify, Google a jiné servery. Nabízí se ovšem obejítí skrze Node RED. Autentizaci udělat na Node REDu a vytvořit si jednoduché api, které pak budou volat hodinky. Nebo si prostě pod Node RED schovat sekvenci příkazů, které se spustí na Node REDu a ovládat tak i domácnost skrze hodinky. 
 + 
 +Node RED mám na lokální síti a tady jsem poprvé narazil. Jak je popsáno v diskusi: [[https://forums.garmin.com/developer/connect-iq/i/bug-reports/connect-version-4-20-broke-local-http-access|Connect version 4.20 broke local http access?]], tak hodinky neumí přistupovat k serverům v lokální síti. Nelze v lokální síti využít HTTP protokol. A bohužel HTTPs také nelze využít - to lze využít pouze na internetu. Musel bych tedy server s Node REDem zpřístupnit z internetu. A aby toho nebylo málo, tak software Garmin vynucuje vyloženě HTTPs protokol. 
 + 
 +To už se nám naskládalo dost nepříjemných situací. Přesto je zde řešení, jak naučit hodinky Garmin volat API v lokální síti skrze HTTP. Někdo si dal už tu práci přede mnou a popsal slepé cesty i vítěznou v článku: [[https://www.instructables.com/About-Communication-Between-Garmin-SDK-and-a-Raspb/|About Communication Between Garmin SDK and a Raspberry Pi]] 
 + 
 +===== Volání API skrze HTTP v lokální síti ===== 
 +Software garmin umí volat pouze několik serverů skrze HTTP. Podle článku jsou to tyto (všechny jsem netestoval): 
 + 
 +<code xml> 
 +<domain-config cleartextTrafficPermitted="true"> 
 +        <domain includeSubdomains="true">garmin.com</domain> 
 +        <domain includeSubdomains="true">garmin.cn</domain> 
 +        <domain includeSubdomains="true">garmincdn.com</domain> 
 +        <domain includeSubdomains="true">180.168.57.218</domain> 
 +        <domain includeSubdomains="true">180.168.57.219</domain> 
 +        <domain includeSubdomains="true">strava.com</domain> 
 +        <domain includeSubdomains="true">127.0.0.1</domain> 
 +        <domain includeSubdomains="true">localhost</domain> 
 +</domain-config> 
 +</code> 
 + 
 + 
 +Přičemž to vypadá, že doména **garmin.cn** není funkční, tak jsem se ji rozhodl využít. A i kdyby byla funkční, tak ji stejně nepotřebuji :) Opravdu jednoduché řešení se skrývá v instalaci vlastního DNS serveru v lokální síti, který zařídí přesměrování domény **garmin.cn** na počítač v lokální síti s Node RED.  
 + 
 +Jako DNS server jsem dle doporučení a jednoduchosti využil Pi-hole. Nainstaloval jsem skrze [[it:server:docker|]]. Po instalaci jsem přešel do menu **Local DNS -> DNS Records** a natavil jsem, že se doména garmin.cn má přesměrovávat na adresu v interní síti.  
 + 
 +Pak jsem ještě musel nastavit, aby si telefon bral nastavení DNS právě z Pi-hole - stačí nastavit DNS server v telefonu. Jakmile si Pi-hole trochu otestuji, tak nejlépe nastavím na routeru DHCP, aby jako primární DNS přiděloval právě ip adresu serveru s Pi-hole. Pi-hole se používá mimo jiné k blokaci DNS serverů s reklamou, takže když někdo serfuje s tímto příděleným DNS, tak se mu zobrazuje mnohem méně reklam. 
 + 
 +V některých situacích to může být problém, zejména když na počítači reklamy potřebujete vytvářet.  
 + 
 +===== Volání API skrze HTTPS v lokální síti ===== 
 + 
 +Zatím se zdá, že HTTPS na lokální síti není možné rozjet. I když jsem si vytvořil [[it:iot:self-signed-certificate|]] a nainstaloval certifikační autoritu do telefonu, stejně volání API nefungovalo. Neustálá chyba 300 - connection timeout. Když jsem přepnul na HTTP, tak stejný server fungoval. Takže problém byl skutečně pouze v HTTPS.  
 + 
 +Přitom tím, že jsem měl certifikační autoritu v telefonu jako důvěryhodnou, tak při prohlížení API skrze webový prohlížeč telefon žádnou chybu zabezpečení nehlásil. Doufal jsem, že se to přenese i do Garminu. Nicméně bohužel nespoléhá na telefon a bude dělat kontrolu jinde. HTTPS varianta v lokální síti se tedy nepodaří.
  • it/iot/hodinky-garmin-api-call.1673203686.txt.gz
  • Poslední úprava: 2023/01/08 18:48
  • autor: Petr Nosek