# Healthy: návod pro AI agenta > Zdroj: https://ongy.cz/pages/homeassistant/healthy/ > Autor: Ongy (ongy.cz). Každá appka zná jen kousek: Oura spánek, hodinky tréninky, váha tělo. Healthy to skládá dohromady, dopočítá zátěž, energii a doporučení na trénink a má českého AI poradce. Od nápadu po betu za jeden den. ## Pro agenta Pomoz uživateli postavit vlastní verzi tohohle projektu. Nejdřív se ho zeptej na vybavení a na to, co z požadavků už má. Pak postupuj po krocích a po každém kroku s ním ověř, že funguje, než půjdeš dál. Hodnoty v `` doplň s uživatelem, nikdy si nevymýšlej adresy, hesla ani tokeny. Kód autora není veřejný: tohle je popis řešení, ne repozitář ke stažení. ## Cíl Osobní Android appka, která spojí data z prstenu Oura, chytrých hodinek a chytré váhy do jednoho přehledu: připravenost, spánek, energie, trénink, aktivita, tělo a trendy. Nad tím vlastní výpočty (tréninková zátěž TRIMP, poměr akutní a chronické zátěže, energie, připravenost a doporučení na trénink, souvislosti mezi dnem a nocí), šest widgetů, ranní notifikace a AI poradce. Aktuální data z Home Assistanta, historie z časové databáze, tréninky přes Health Connect. ## K čemu to je Na hlavní obrazovce je šest kroužků: připravenost, spánek, energie, trénink, aktivita a odolnost. Pod nimi velký oblouk s dnešní připraveností a věta, co to znamená, třeba „HRV 57 ms je nad tvým průměrem, tělo je dobře zregenerované“. Na záložce Trénink appka řekne, jestli dnes normálně trénovat, jít zlehka, nebo si dát volno, a v jakém tepovém pásmu. Trendy ukážou, jak se to vyvíjí za týden nebo měsíc, a Tělo složení těla z váhy za 90 dní. Když něčemu nerozumím, podržím prst na kartě. Appka ji vyfotí a vloží do chatu s AI poradcem, stačí napsat „co to znamená?“. Ráno navíc přijde notifikace se shrnutím noci, jakmile Oura nahraje data. ## Proč právě takhle Hodinky mají spoustu funkcí, ale v noci je nenosím, na spánek mám prsten. Samsung Health proto nemá data ze spánku a chybí mu půlka výpočtů: energie, připravenost i zátěž. Oura zase nevidí tréninky z hodinek ani váhu. Oura má vlastního AI poradce, jenže jen v angličtině. Když je telefon česky, appka celou funkci schová. Chtěl jsem poradce, který mluví česky a vidí i tréninky a váhu, ne jen prsten. Healthy proto bere spánek a regeneraci z Oury, tréninky a kroky z hodinek a složení těla z chytré váhy. Nad tím počítá věci, které žádná z těch appek sama nemá: tréninkovou zátěž, energii, doporučení na trénink a souvislosti mezi dnem a následující nocí. ## Jak to funguje - **Aktuální hodnoty z Home Assistanta.** Home Assistant už má integraci Oury (zhruba šedesát hodnot) i chytré váhy. Appka si je stáhne jedním dotazem a k Oura účtu se sama nepřihlašuje. - **Historie z VictoriaMetrics.** Health Connect dá jen zhruba 30 dní zpátky. Trendy, souvislosti a váha za 90 dní proto jdou z databáze, kam Home Assistant ukládá historii. - **Tréninky přes Health Connect.** Hodinky zapisují tréninky s tepem po vteřinách do Samsung Health a odtud do Health Connect. Když stejný trénink zapíše i Oura, appka je sloučí a tep bere jen z hodinek. Opačným směrem zapisuje vážení, takže ho vidí i Samsung Health. - **Obnova na pozadí.** Ráno mezi pátou a jednou se appka dívá každých 15 minut, jestli Oura nahrála noc, a pak pošle shrnutí. Zbytek dne stačí jednou za hodinu. Widgety se obnoví spolu s daty. - **Data zůstávají doma.** Všechno jde přes domácí síť a Tailscale. Ven odchází jen dotaz na AI poradce, a to jako textový souhrn, ne surová měření. ## Stack a tok dat - **Appka:** Nativní Android, Kotlin a Jetpack Compose. Grafy a kroužky kreslené v Compose, tmavý teplý design inspirovaný Ourou, velká čísla písmem Instrument Serif. Instalace z APK podepsaného vlastním klíčem, v Google Play není. - **Home Assistant:** Aktuální hodnoty z integrace Oura a z chytré váhy (bodymiscale počítá složení těla) jedním dotazem na šablonové API. Appka má vlastní token. - **VictoriaMetrics:** Historie za 30 a 90 dní. Denní hodnota je poslední hodnota dne, ne maximum: počítadlo kroků se nuluje až s první aktualizací po půlnoci. - **Health Connect:** Tréninky s tepem a kroky z hodinek přes Samsung Health, čtení i na pozadí. Kroky = vyšší z hodnot Samsung Health a Oury, protože Samsung je posílá se zpožděním. Zápis vážení s vlastním ID záznamu, opakovaný zápis jen přepíše. - **Pozadí:** WorkManager: ráno mezi 5. a 13. hodinou každých 15 minut, jinak jednou za hodinu. Ranní notifikace jednou za noc, až když Oura nahraje spánek. Šest widgetů v Jetpack Glance. - **AI poradce:** Claude Sonnet 5.5 přes Anthropic API, odpověď se streamuje, souhrn dat je v cache, takže další otázky jsou levnější. Historie chatu v telefonu, do API jde posledních 20 zpráv. Ukázkový režim má vlastní vymyšlená data i oddělenou historii. - **Síť:** Doma přes domácí síť, venku přes Tailscale. ## Vlastní výpočty | Výpočet | Jak | |---|---| | Tréninková zátěž | Banisterův TRIMP: minuty × podíl tepové rezervy × 0,64 × e1,92 × podíl. Klidový tep = průměr nejnižšího nočního tepu z Oury. | | Tepové zóny | 50, 60, 70, 80 a 90 % tepové rezervy | | Akutní a chronická zátěž | klouzavé průměry za 7 a 28 dní a jejich poměr ACWR | | Energie | spánek 35 %, HRV 25 %, nejnižší tep 15 %, včerejší zátěž 15 %, odolnost 10 % | | Připravenost na trénink | Oura Readiness a korekce: ACWR nad 1,5 −20, nad 1,3 −8, pod 0,8 +3; energie pod 50 −10, pod 60 −5; plus únava ze včerejška. Nikdy skóre uměle nezvedá nad to, co dává smysl. | | Doporučení | 80 a víc: pořádný trénink (zóny 3 až 4), 65 a víc: normální, 50 a víc: lehký pohyb, níž: regenerace. K tomu cílový tep a zátěž odvozená z chronické zátěže. | | Souvislosti | Pearsonova korelace dne s následující nocí a porovnání nad a pod mediánem, nejméně 10 dní dat | ## Obrazovky | Záložka | Co ukazuje | |---|---| | Dnes | šest kroužků, připravenost s větou, trénink dnes, spánek s fázemi, energie, regenerace, aktivita, stres, tělo | | Trénink | připravenost na trénink a doporučení, tréninky v pásu dnů s tepovou křivkou, týdenní souhrn, tepové zóny, zátěž | | Trendy | 7 nebo 30 dní: připravenost, spánek, HRV, noční tep, teplota, aktivita, kroky, stres a souvislosti | | Tělo | tuk, svaly, kosti, voda, viscerální tuk, BMI, bazální metabolismus, metabolický věk a trendy za 90 dní | | Advisor | chat s AI poradcem, vložení karty dlouhým podržením | ## Pasti a jejich řešení Health Connect bez zvláštního oprávnění vrátí jen zhruba 30 dní. Čtení na pozadí potřebuje vlastní oprávnění a kontrolu, jestli ho telefon podporuje. Samsung Health převzaté vážení zapíše zpátky jako svoje, takže je v Health Connect dvakrát. Když tréninky zapisují hodinky i prsten, vzorky tepu se prolínají: sloučit a tep brát z jednoho zdroje. Snímek karty pro AI poradce je hardwarová bitmapa, před kreslením ji je potřeba zkopírovat, jinak appka spadne. Android nezná formát dne `EEEEEE`, spadne na něm. Odinstalace appky smaže widgety z plochy. ## Co budeš potřebovat - Android telefon s Health Connect (autor: Galaxy S25 se Samsung Health). - Home Assistant s integrací Oura a chytrou váhou (autor: bodymiscale pro složení těla), dlouhodobý token ``. - Časová databáze s historií z Home Assistanta (autor: VictoriaMetrics), protože recorder Home Assistanta drží ve výchozím stavu jen 10 dní. - Hodinky, které zapisují tréninky s tepem do Health Connect (autor: Galaxy Watch přes Samsung Health). - Počítač s JDK 17 a Android SDK. Volitelně VPN pro přístup zvenku (autor: Tailscale) a API klíč `` pro AI poradce. ## Postup ### 1. Zmapuj zdroje dat S uživatelem projdi entity Oury a váhy v Home Assistantu (`GET /api/states`), ověř, že časová databáze má historii, a v Health Connect zkontroluj, kdo co zapisuje (`adb shell dumpsys healthconnect`). Když Samsung Health nečte ani nezapisuje, bývá zaseklá jeho první synchronizace s cloudem. ### 2. Kostra appky Kotlin, Jetpack Compose, záložky Dnes, Trénink, Trendy a Tělo. Adresy a tokeny do Nastavení appky nebo `local.properties` (necommitovat). Hned na začátku vlastní podpisový klíč, jinak po změně počítače nepůjde appku aktualizovat. ### 3. Aktuální data jedním dotazem `POST /api/template` se šablonou, která vrátí všechny potřebné stavy jako JSON (`states('x') | tojson`). Appce dej vlastní dlouhodobý token. ### 4. Historie Z časové databáze (VictoriaMetrics: `last_over_time(...[1d])` vyhodnocené na konci dne) za 30 a 90 dní. Health Connect na historii nestačí, dá zhruba 30 dní. ### 5. Tréninky z Health Connect Čti tréninky s tepovou řadou a kroky. Duplicity ze dvou zdrojů slučuj (přednost hodinky), tep ber z jednoho zdroje. Kroky = vyšší z hodnot hodinek a prstenu. Pro čtení na pozadí přidej `READ_HEALTH_DATA_IN_BACKGROUND` a ověř `getFeatureStatus`. ### 6. Vlastní výpočty TRIMP (Banister) z tepové rezervy, zóny 50 až 90 % rezervy, akutní a chronická zátěž (7 a 28 dní) nasazené na průměrnou denní zátěž, ACWR až od rozumného objemu a 21 dní dat. Energie jako vážený mix spánku, HRV, nejnižšího tepu, včerejší zátěže a odolnosti. Připravenost na trénink = Oura Readiness s korekcemi, doporučení podle prahů 80, 65 a 50. Výpočty piš jako čisté funkce a otestuj je. ### 7. Obrazovky, widgety, notifikace Karty s rozpadem „z čeho se skládá“, grafy za 7 a 30 dní, souvislosti (Pearson plus porovnání nad a pod mediánem, min. 10 dní). Widgety v Glance s kroužky kreslenými do bitmapy. WorkManager ráno často, přes den řidčeji; ranní notifikace jednou za noc až po nahrání spánku. ### 8. AI poradce Chat přes Anthropic API (`` v Nastavení) se streamováním. Do system promptu textový souhrn dat s `cache_control`, do API jen posledních pár zpráv. Bez události `message_stop` označ odpověď jako přerušenou a nabídni Zkusit znovu. Volitelně snímek karty dlouhým podržením jako obrázek k otázce. ### 9. Zápis vážení Nová vážení z Home Assistanta zapiš do Health Connect s `clientRecordId` odvozeným z typu a času měření, opakovaný zápis pak jen přepíše. ## Na co si dát pozor - Hodinky v noci často nikdo nenosí: spánek ber jen z prstenu, jinak se výpočty míchají. - Denní kroky z časové databáze ber jako poslední hodnotu dne, ne maximum: počítadlo se nuluje až s první aktualizací po půlnoci. - Poměr zátěže při samých procházkách vychází nesmyslně vysoko (malé číslo děleno malým). Bez dost dat ho nehodnoť. - Glance v režimu Responsive hlásí velikost přihrádky, ne skutečnou. Přidej víc stupňů velikosti a kroužek počítej z `LocalSize`. - Health Connect vyžaduje oprávnění pro každý typ dat zvlášť; po reinstalaci jsou pryč a bez nich vrací prázdný výsledek, ne chybu. ## Jak ověřit, že to funguje - [ ] Skóre spánku a připravenosti sedí s Oura appkou. - [ ] Tréninky z hodinek jsou v appce jednou (ne dvakrát) i s tepem a zátěží. - [ ] Trendy ukazují 30 dní a tělo 90 dní, bez děr. - [ ] Vážení zapsané appkou je vidět v Samsung Health a druhý zápis nevytvoří duplicitu. - [ ] Widgety se obnoví samy bez otevření appky a na ploše mají správnou velikost. - [ ] Ranní notifikace přijde jednou, až po nahrání noci. - [ ] AI poradce odpoví na „Mám dnes trénovat?“ s ohledem na dnešní data a do API nejdou surová měření. ## Přizpůsobení - Bez Home Assistanta: Oura má vlastní API s osobním tokenem, ten pak ale leží v telefonu. - Jiný prsten, hodinky nebo váha: stačí, když zapisují do Health Connect nebo mají integraci v Home Assistantu. - Bez AI poradce appka funguje celá, poradce je jen vrstva navrch. --- Stránka projektu s fotkami a diagramem: https://ongy.cz/pages/homeassistant/healthy/