# Telemetrie na iPhonu: návod pro AI agenta > Zdroj: https://ongy.cz/pages/server/telemetry/ > Autor: Ongy (ongy.cz). iPhone ve stojánku jako přístrojová deska počítače: teploty, zátěž, paměť, příkon a zbývající limity AI asistenta. Při hře se přepne na herní board s FPS a pingem. Bez kabelu, bez aplikace, data bere z Home Assistanta. ## 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 Starý telefon ve stojánku vedle monitoru jako trvalý displej počítače: teploty a zátěž procesoru i grafiky, paměť, příkon, volitelně limity AI asistenta a pár údajů z domácnosti. Bez kabelu (jen napájení) a bez vlastní aplikace: data sbírá Home Assistant, malá služba na domácím serveru z nich skládá jednu odpověď a telefon zobrazuje webovou stránku přidanou na plochu. Jen v domácí síti, z internetu nedostupné. ## K čemu to je Když renderuju video, hraju nebo nechám běžet AI agenta, chci vědět, jak je na tom počítač, a nechci kvůli tomu přepínat okna. Malý displej vedle monitoru to řeší: dvě velké teploty, zátěž, paměť a příkon na jeden pohled. Druhá věc, na kterou koukám častěji, než bych čekal: limity Claude Code. Předplatné má okno pěti hodin a týdne, a když se blíží konec, chci to vidět dřív, než mě to zastaví uprostřed práce. Inspirace přišla z návodu na PromptLab, kde autor použil starý Android po USB kabelu. Já měl v šuplíku iPhone, takže jsem cestu musel vymyslet jinak. ## Proč právě takhle Android umí přes USB protunelovat port z počítače a spustit vlastní aplikaci, která drží displej rozsvícený. iPhone nic z toho nedovolí. Místo kabelu tak jde všechno po domácí Wi-Fi a místo aplikace je to webová stránka přidaná na plochu. A protože Home Assistant už o počítači ví skoro všechno, nedávalo smysl stavět další sběrač dat na Windows. Telefon se ptá serveru, server se ptá Home Assistanta a počítač jen posílá čísla. ## Jak to funguje - **Počítač hlásí do Home Assistanta.** Agent na Windows posílá zátěž a poslední aktivitu. Čtečka čidel doplní teploty, příkon a paměť grafiky každých deset sekund. - **Server skládá jednu odpověď.** Malá služba v Dockeru drží živé spojení s Home Assistantem a jednou za pět minut se ptá na limity AI asistenta. - **Telefon jen kreslí.** Jedna stránka bez knihoven, obnovuje se každé dvě sekundy. Přidaná na plochu, zamčená v kiosku, displej nezhasíná. - **Hra má přednost.** Když zátěž grafiky drží půl minuty nad 60 %, nebo přijde FPS z počítače, server přepne stránku na herní board: FPS, 1 % low, frametime, ping na dvě linky, teploty a příkon. Vypne se až minutu po konci hry. - **Šetří displej.** Po třech minutách nečinnosti počítače ztlumí a nechá obsah pomalu bloudit, po pěti minutách zčerná. Návrat k myši ji probudí. ## Stack a tok dat - **Počítač:** HASS.Agent posílá do Home Assistanta zátěž, paměť a poslední aktivitu (MQTT, cca 30 s). LibreHardwareMonitor vystaví čidla po HTTP a čte je oficiální integrace Home Assistanta každých 10 s: teplota procesoru, příkon, paměť grafiky, ventilátor. - **Server:** FastAPI v Dockeru. Počáteční stav přes REST, dál WebSocket na změny stavu, žádný polling. Mapování klíčů na entity v JSON souboru, který se načítá za běhu. Odpověď pro telefon na jedné adrese, port jen na domácí a VPN adrese. - **Limity AI:** Token Claude Code ze serveru a jeho rozhraní pro využití předplatného. Dotaz jednou za 5 minut, při odmítnutí se respektuje požadovaná pauza a drží poslední hodnoty. - **Telefon:** Jedna HTML stránka, návrhová plocha ve velikosti displeje na šířku, transformem přeškálovaná a na výšku otočená. Dvojité klepnutí ji převrátí, když je zamčené otáčení. Wake Lock API se zkouší, spoléhá se ale na Automatický zámek: Nikdy. - **Hra:** Detekce na serveru: zátěž grafiky nad prahem po zadanou dobu, nebo FPS z RTSS přes HASS.Agent (PowerShell čte sdílenou paměť RTSS, tři senzory: FPS, 1 % low, název hry). Ping jako TCP connect ze serveru na dva cíle, průměr, rozptyl a ztráta z deseti vzorků. Prahy a cíle jsou v proměnných prostředí. ## Režimy a prahy | Režim | Kdy | Co dělá | |---|---|---| | Živě | počítač aktivní | plný dashboard | | Klid | 3 min bez vstupu | 42 % krytí, obsah pomalu bloudí | | Černá | 5 min bez vstupu nebo počítač spí | čistá černá, jen slabý čas, displej dál svítí | | Hra | grafika nad 60 % půl minuty, nebo FPS z RTSS | herní board, přednost před nečinností, konec minutu po hře | | Spí | agent přestal hlásit | „Systém spí“, po minutě černá | | Bez spojení | server neodpovídá | oranžová obrazovka, pokus každé 2 s | Teploty: procesor v normě do 70 °C, zvýšená do 85, vysoká do 95, pak kritická. Grafika o pár stupňů přísněji. Limity: v pořádku do 70 % využití, docházejí od 70 %, kritické od 90 %. FPS: plynulé od 60, slabší od 30, pod 30 se trhá. Každý stav nese barvu i slovo. ## Pasti a jejich řešení Kontejner s vlastním uživatelem nepřečte soubor s tokenem (práva jen pro vlastníka), musí běžet pod stejným uživatelem. Bind mount jednoho souboru zestárne, když ho program přepisuje atomicky, mountuje se celý adresář. Rozhraní s limity vrací 429 už při dotazu jednou za minutu. Windows firewall: přes VPN adaptér byl port čidel otevřený i bez pravidla, po LAN ne. Headless Chromium nedovolí okno užší než 500 px, takže screenshot na výšku vypadal jako chyba v otáčení. A ve Windows se HASS.Agent hodí na detekci spánku: jakmile zmizí, jeho entity jsou hned nedostupné, integrace čidel to pozná až po neúspěšném dotazu. Herní board na šířku má okraj jen na straně s výřezem kamery, podle toho, jak je telefon otočený. ## Co budeš potřebovat - Počítač s Windows, na kterém se měří (autor: Ryzen + NVIDIA). Pro Linux viz Přizpůsobení. - Home Assistant v domácí síti s funkčním MQTT (Mosquitto) a dlouhodobým přístupovým tokenem ``. - Domácí server nebo jiný stále běžící stroj s Dockerem, kde poběží služba (autor: notebook s Dockerem). - Telefon s prohlížečem. Autor má iPhone 13 Pro, postup počítá s iOS a Safari. - Stojánek a nabíječka pro telefon. - Volitelně pro herní board: RivaTuner Statistics Server (RTSS) na počítači. ## Postup ### 1. Počítač: HASS.Agent Nainstaluj HASS.Agent a připoj ho k MQTT brokeru Home Assistanta. Zapni senzory zátěže procesoru, využití paměti a poslední aktivity uživatele (lastactive, slouží k detekci nečinnosti). Ověř, že se entity objevily v Home Assistantu a mění se. Když počítač usne, entity HASS.Agentu přejdou do stavu `unavailable`, což později poslouží jako signál „počítač spí“. ### 2. Počítač: LibreHardwareMonitor HASS.Agent teplotu procesoru neumí (WMI ji na moderních CPU nedává), proto LibreHardwareMonitor. Spusť ho jako správce, zapni Options → Remote Web Server (port 8085), Start minimized a Run on Windows startup. Ve Windows firewallu povol příchozí TCP 8085 jen pro privátní profil. Ověř z jiného stroje v síti: `curl http://:8085/data.json` vrací JSON. ### 3. Home Assistant: integrace Libre Hardware Monitor Přidej oficiální integraci Libre Hardware Monitor s hostem `` a portem 8085 (čte čidla zhruba každých 10 s). Najdi entity teploty CPU a GPU, příkonu, využité a celkové paměti grafiky a ventilátoru. Pozor: paměť grafiky je pod GPU jako GPU Memory Used a Total, ne Virtual Memory. ### 4. Server: služba, která skládá odpověď Malá služba v Dockeru (autor: Python, FastAPI, httpx, websockets). Při startu načte počáteční stav přes REST `GET /api/states`, pak drží WebSocket `subscribe_events` na `state_changed`, takže nic nepolluje. Mapování klíčů dashboardu na entity ať je v JSON souboru, který se načítá za běhu (kontrola mtime), aby šel upravit bez restartu. Endpoint `GET /api/state` vrátí jednu odpověď pro telefon, `GET /api/health` pro healthcheck. Port publikuj jen na domácí adresu serveru, ne do internetu a ne přes tunel. ### 5. Stránka pro telefon Jedna HTML stránka bez knihoven, kterou služba servíruje. Návrhová plocha přesně ve velikosti displeje telefonu na šířku (u iPhonu 13 Pro 844 × 390), přeškálovaná přes CSS transform, na výšku otočená o 90°. Dotaz na `/api/state` každé 2 s. Stav teplot a limitů vždy barva i slovo, nikdy jen barva. Režimy: živě, klid (3 min bez vstupu: ztlumit a nechat obsah pomalu bloudit kvůli OLED), černá (5 min bez vstupu nebo počítač spí), počítač spí, bez spojení (server neodpovídá). ### 6. Telefon: stránka jako aplikace V Safari otevři `http://:` a přes Sdílet → Přidat na plochu. Spouštěj vždy z plochy (bez lišty prohlížeče). Nastav Automatický zámek na Nikdy a vypni Režim nízké spotřeby. Kiosk: Zpřístupnění → Asistovaný přístup, v aplikaci 3× boční tlačítko → Spustit. ### 7. Volitelně: herní board FPS z RTSS pošli do Home Assistanta jako senzory HASS.Agentu (PowerShell skript čte sdílenou paměť RTSS: FPS, 1 % low, název hry). Server zapne herní režim, když zátěž grafiky drží nad 60 % 30 s nebo přichází FPS nad prahem, a vypne ho, když zátěž klesne pod 30 % na 60 s (hystereze). Ping měř ze serveru jako TCP connect na dva cíle každé 3 s, průměr, rozptyl a ztrátu z posledních 10 vzorků. Herní režim má přednost před nečinností. ### 8. Volitelně: limity AI asistenta Pokud chce uživatel na displeji limity předplatného svého AI asistenta, zjisti s ním, odkud je jeho nástroj bere. Dotazuj se nejvýš jednou za 5 minut, při odmítnutí (429) respektuj požadovanou pauzu a drž poslední známé hodnoty. Soubor s přihlašovacími údaji připoj do kontejneru jen pro čtení. ## Na co si dát pozor - Wake Lock API v aplikaci přidané na plochu iPhonu displej spolehlivě neudrží. Jediná spolehlivá cesta je Automatický zámek: Nikdy. Režim nízké spotřeby ho přebije. - Hodiny a kalendář na displeji nejsou režim stránky, ale StandBy: telefon se zamkl. - Asistovaný přístup (Guided Access, zamkne otevřenou aplikaci) není Asistivní přístup (Assistive Access, chce seznam aplikací a webovou stránku v něm nenajdeš). - LibreHardwareMonitor musí běžet jako správce, jinak nevidí teploty. - Po restartu počítače může v Home Assistantu chybět GPU: integrace se načte dřív, než naběhne ovladač grafiky. Řešení: reload config entry přes `POST /api/config/config_entries/entry//reload`, ideálně automaticky, když je počítač online a teplota GPU chybí déle než 90 s. - RTSS hlásí FPS i pro launchery, instalátory a anti-cheat (třeba EasyAntiCheat). Bez prahu FPS, minimální doby a seznamu ignorovaných názvů se herní board zapíná při stahování hry. - Nečinnost podle klávesnice a myši nevidí ovladač. Proto musí mít herní režim přednost, jinak displej uprostřed hry ztmavne. - Zdroj spojení ověřuj uvnitř kontejneru, ne na hostiteli: Docker přes DNAT schová, kdo se opravdu připojuje (autor honil zapomenutou záložku v prohlížeči na počítači). ## Jak ověřit, že to funguje - [ ] `curl http://:8085/data.json` z domácí sítě vrací JSON s čidly. - [ ] V Home Assistantu existují entity teploty CPU a GPU a mění se zhruba každých 10 s. - [ ] `curl http://:/api/state` vrací čísla, ne prázdné hodnoty, a `/api/health` odpovídá. - [ ] Změna entity v Home Assistantu se ve `/api/state` projeví do pár sekund bez restartu služby. - [ ] Na telefonu se hodnoty mění do pár sekund po zatížení počítače. - [ ] 3 minuty bez myši a klávesnice: displej ztlumí. 5 minut: černá. Pohyb myši: zpět do živého režimu do 30 s. - [ ] Uspání počítače: stránka ukáže, že systém spí, po minutě černá. - [ ] Hra (nebo zátěž grafiky nad 60 % na 30 s): herní board. Po konci hry do minuty zpět. - [ ] Telefon se po 10 minutách sám nezamkne a Asistovaný přístup nejde ukončit bez kódu. - [ ] Port služby není dostupný z internetu (test z mobilních dat) a nevede na něj žádný tunel. ## Přizpůsobení - Android místo iPhonu: jde to i po USB kabelu přes `adb reverse` a vlastní aplikací s WebView, tak to postavil autor původní inspirace: https://promptlab.cz/tutorial/stary-telefon-ti-pohlida-teploty-pocitace-i-limity-vibe-coding-agentu - Bez Home Assistanta: služba může číst `data.json` z LibreHardwareMonitoru přímo, ale přijdeš o push změn a o detekci spánku a nečinnosti přes HASS.Agent. - Jiný telefon: změň návrhovou plochu na rozlišení jeho displeje na šířku v CSS pixelech. - Počítač s Linuxem: místo LibreHardwareMonitoru a HASS.Agentu použij třeba Glances nebo vlastní skript s lm-sensors a nvidia-smi a posílej data do Home Assistanta přes MQTT. --- Stránka projektu s fotkami a diagramem: https://ongy.cz/pages/server/telemetry/