|

Ultrahuman Ring Air v Home Assistant – zdravotní data přímo na dashboardu


Chytrý prsten Ultrahuman Ring Air měří spánek, srdeční tep, HRV a pohyb nepřetržitě – jenže všechna ta data sedí zamčená v aplikaci. Co kdybych je mohl vidět přímo na svém HA dashboardu v mobilním telefonu? Přesně to jsem si řekl, když jsem narazil na HACS integraci Ultrahuman. Není to integrace, bez které by se nešlo obejít – žádnou automatizaci na ní nemám nastavenou. Ale mít ráno recovery index a spánkové skóre viditelné v telefonu a pracovat s nimi? To se mi líbí. Navíc – kdo ví, co se dá z těch dat ještě dostat. Ale o nápadech na automatizace až na konci.

Co integrace poskytuje

Po nastavení budete mít v Home Assistant tyto senzory (vše s prefixem sensor.ultrahuman_ring_):
Senzor Popis
recovery_index Celkový recovery index (0–100)
sleep_score Skóre spánku (0–100)
sleep_start Čas usnutí
sleep_end Čas probuzení
total_sleep Celková délka spánku (minuty)
time_in_bed Čas strávený v posteli (minuty)
hrv Variabilita srdečního tepu (ms)
night_resting_hr Noční klidová tepová frekvence (bpm)
sleep_rhr Klidová TF během spánku (bpm)
heart_rate Aktuální TF
movement_index Index pohybu (0–100)
steps Počet kroků
temperature Tělesná teplota
spo2 Saturace kyslíku v krvi (%)
vo2_max VO2 Max (aerobní kapacita)
active_minutes Aktivní minuty
Pozn.: Ne všechny senzory jsou vždy dostupné. Pokud API danou metriku v konkrétní chvíli nevrátí, senzor přejde do stavu unknown. Výjimkou je vo2_max – ten bývá k dispozici téměř vždy.

Instalace – krok za krokem

Krok 1: Nainstalujte integraci přes HACS

Otevřete HACS v Home Assistant (postranní menu) a najděte repozitář:
  1. HACS → Integrations → vpravo nahoře klikněte na tři tečky → Custom repositories
  2. Do pole zadejte: https://github.com/anant-j/Ultrahuman
  3. Typ: Integration → klikněte Add
  4. Vyhledejte Ultrahuman v HACS a klikněte Download
  5. Restartujte Home Assistant (Nastavení → Systém → Restart)

Krok 2: Získejte API klíč

Integrace se připojuje na Ultrahuman cloud – potřebujete osobní API token:
  1. Otevřete vision.ultrahuman.com/developer a přihlaste se
  2. Klikněte na Personal API TokensGenerate New Token
  3. Zadejte libovolný název tokenu (např. Home Assistant Token)
  4. Nastavte expiraci – doporučuji 10 let (nebo dle preference)
  5. Zaškrtněte RING DATA ACCESS
  6. Klikněte Generate Token a zkopírujte vygenerovaný token
Důležité: Token se zobrazí jen jednou. Zkopírujte ho hned – pokud stránku zavřete, bude potřeba vygenerovat nový.

Krok 3: Přidejte integraci do Home Assistant

  1. Jděte do Nastavení → Zařízení a služby → Přidat integraci
  2. Vyhledejte Ultrahuman Ring
  3. Vložte zkopírovaný API klíč
  4. Potvrďte – integrace se nastaví a za chvíli se objeví nové senzory

Jak funguje synchronizace – tohle je důležité vědět

Integrace nepřijímá data přímo z prstenu. Tahá je ze serverů Ultrahuman, kam je posílá vaše mobilní aplikace. Z toho plyne praktický důsledek: Prstýnek musí napřed synchronizovat s aplikací, ta data odešle na cloud – teprve potom je Home Assistant stáhne. V praxi to vypadá takto: ráno spustím aplikaci Ultrahuman na Androidu, ta si stáhne noční data z prstenu a odešle je na servery. HA poté (defaultně každou hodinu, ale lze změnit) data stáhne a senzory se aktualizují. Pokud aplikace nesynchronizovala na pozadí automaticky, senzory v HA budou zobrazovat data z předchozího dne. Stačí ale aplikaci jednou otevřít a vše se srovná. Záleží na nastavení a typu telefonu.

Dashboard karta – zdraví na první pohled

Takhle vypadá moje karta zdraví na telefonu: Ultrahuman Ring dashboard v Home Assistant Karta funguje ve třech vrstvách: 1. Chip lišta nahoře – okamžitý přehled Dva barevné chipsty ukazují recovery index a sleep score. Barva odpovídá hodnotě – zelená (≥75), oranžová (50–74), červená (<50). Třetí chip zobrazuje datum, za které jsou data – takový rychlý check, zda synchronizace proběhla. 2. Textový blok – interpretace hodnot Markdown karta vyhodnotí recovery + sleep score dohromady a vypíše doporučení: „Výborný stav – ideální den pro výkon“ nebo naopak „Tělo potřebuje klid“. Pod tím jsou barevně ohodnocené HRV, délka spánku, efektivita spánku a noční tepová frekvence. 3. Číselné karty Mřížka Mushroom karet s konkrétními hodnotami – délka spánku, čas usnutí, čas probuzení, HRV, noční HR a index pohybu. Barvy se opět mění dynamicky.

YAML kód karty

Celý kód ke stažení najdete níže. Pokud si ho chcete prohlédnout přímo tady, rozbalte sekci:
Zobrazit YAML kód karty
type: vertical-stack
cards:
  - type: heading
    icon: mdi:ring
    heading: Ultrahuman Ring
    heading_style: title
    card_mod:
      style: |
        ha-card {
          border-bottom: 1px solid rgba(var(--rgb-primary-color), 0.15) !important;
          padding-bottom: 2px !important;
        }
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: sensor.ultrahuman_ring_recovery_index
        icon: >-
          {% set r = states('sensor.ultrahuman_ring_recovery_index') | int(0) %}
          {% if r >= 75 %}mdi:battery-high{% elif r >= 50 %}mdi:battery-medium{%
          else %}mdi:battery-low{% endif %}
        icon_color: >-
          {% set r = states('sensor.ultrahuman_ring_recovery_index') | int(0) %}
          {% if r >= 75 %}#7ED321{% elif r >= 50 %}#F5A623{% else %}#D0021B{%
          endif %}
        content: Recovery {{ states('sensor.ultrahuman_ring_recovery_index') }}/100
        tap_action:
          action: more-info
      - type: template
        entity: sensor.ultrahuman_ring_sleep_score
        icon: mdi:sleep
        icon_color: >-
          {% set s = states('sensor.ultrahuman_ring_sleep_score') | int(0) %} {%
          if s >= 75 %}#7ED321{% elif s >= 50 %}#F5A623{% else %}#D0021B{% endif
          %}
        content: Spánek {{ states('sensor.ultrahuman_ring_sleep_score') }}/100
        tap_action:
          action: more-info
      - type: spacer
      - type: template
        content: >-
          Sync {{ as_timestamp(states('sensor.ultrahuman_ring_sleep_start')) |
          timestamp_custom('%-d. %-m.') }}
    alignment: start
  - type: markdown
    content: >
      {% set r = states('sensor.ultrahuman_ring_recovery_index') | int(0) %}
      {% set s = states('sensor.ultrahuman_ring_sleep_score') | int(0) %}
      {% set hrv = states('sensor.ultrahuman_ring_hrv') | int(0) %}
      {% set mins = states('sensor.ultrahuman_ring_total_sleep') | int(0) %}
      {% set tib = states('sensor.ultrahuman_ring_time_in_bed') | int(0) %}
      {% set rhr = states('sensor.ultrahuman_ring_night_resting_hr') | int(0) %}

      {% if r >= 75 and s >= 75 %}
      **✅ Výborný stav – ideální den pro výkon**
      Tělo i nervový systém jsou plně regenerované. Dnes bez omezení.
      {% elif r >= 75 %}
      **🟡 Dobrá regenerace, spánek průměrný**
      Fyzicky nabito, ale spánek nebyl ideální. Střední trénink v pořádku – maximální zátěž neplánuj.
      {% elif s >= 75 %}
      **🟡 Dobrá noc, regenerace se ještě dotahuje**
      Kvalitní spánek, ale tělo ještě plně neregenerovalo. Aktivní den bez přetěžování.
      {% elif r >= 50 or s >= 50 %}
      **🟠 Průměrný stav – klidný den**
      Obě hodnoty jsou průměrné. Klidné aktivity, vyhni se stresu. Prioritizuj dnes večer spánek.
      {% else %}
      **🔴 Tělo potřebuje klid**
      Únava nebo stres jsou patrné ze všech hodnot. Procházka ano, trénink ne. Usni dnes dříve.
      {% endif %}

      ---

      {% if hrv < 30 %}
      ⚠️ **HRV {{ hrv }} ms** – velmi nízké, signál stresu nebo přetrénování
      {% elif hrv < 50 %}
      🟡 **HRV {{ hrv }} ms** – v normálním rozsahu
      {% else %}
      ✅ **HRV {{ hrv }} ms** – výborné
      {% endif %}

      {% if mins > 0 %}
      {% if mins < 360 %}
      😴 **Spánek {{ mins // 60 }}h {{ mins % 60 }}min** – výrazný spánkový deficit
      {% elif mins < 420 %}
      🟡 **Spánek {{ mins // 60 }}h {{ mins % 60 }}min** – pod doporučenou 7h hranicí
      {% elif mins <= 540 %}
      ✅ **Spánek {{ mins // 60 }}h {{ mins % 60 }}min** – délka v pořádku
      {% elif mins <= 600 %}
      🟡 **Spánek {{ mins // 60 }}h {{ mins % 60 }}min** – trochu delší než obvykle
      {% else %}
      🟡 **Spánek {{ mins // 60 }}h {{ mins % 60 }}min** – nadměrně dlouhý, sleduj únavu
      {% endif %}
      {% endif %}

      {% if tib > 0 and mins > 0 %}
      {% set eff = (mins / tib * 100) | round(0) | int %}
      {% if eff < 80 %}
      ⚠️ **Efektivita spánku {{ eff }}%** – časté probuzení nebo problémy s usínáním
      {% elif eff < 85 %}
      🟡 **Efektivita spánku {{ eff }}%** – mírně snížená
      {% endif %}
      {% endif %}

      {% if rhr > 0 %}
      {% if rhr < 60 %}
      ✅ **Noční HR {{ rhr }} bpm** – výborné
      {% elif rhr <= 75 %}
      🟡 **Noční HR {{ rhr }} bpm** – průměr
      {% else %}
      ⚠️ **Noční HR {{ rhr }} bpm** – zvýšené, sleduj stres a zátěž
      {% endif %}
      {% endif %}
    card_mod:
      style: |
        ha-card {
          background: rgba(var(--rgb-primary-color), 0.05) !important;
          border-radius: 12px !important;
        }
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        primary: >-
          {% set mins = states('sensor.ultrahuman_ring_total_sleep') | int(0) %}
          {{ mins // 60 }}h {{ mins % 60 }}min
        secondary: Spánek
        icon: mdi:bed-clock
        icon_color: "#4A90E2"
        entity: sensor.ultrahuman_ring_total_sleep
        vertical: true
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        primary: >-
          {% set ts = as_timestamp(states('sensor.ultrahuman_ring_sleep_start'), none) %}
          {{ '–' if ts == none else (ts | timestamp_custom('%H:%M')) }}
        secondary: Usnutí
        icon: mdi:weather-night
        icon_color: "#9B9B9B"
        entity: sensor.ultrahuman_ring_sleep_start
        vertical: true
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        primary: >-
          {% set ts = as_timestamp(states('sensor.ultrahuman_ring_sleep_end'), none) %}
          {{ '–' if ts == none else (ts | timestamp_custom('%H:%M')) }}
        secondary: Probuzení
        icon: mdi:white-balance-sunny
        icon_color: "#F5A623"
        entity: sensor.ultrahuman_ring_sleep_end
        vertical: true
        tap_action:
          action: more-info
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        primary: "{{ states('sensor.ultrahuman_ring_hrv') }} ms"
        secondary: HRV
        icon: mdi:heart-flash
        icon_color: >-
          {% set h = states('sensor.ultrahuman_ring_hrv') | int(0) %}
          {% if h >= 50 %}#7ED321{% elif h >= 30 %}#F5A623{% else %}#D0021B{% endif %}
        entity: sensor.ultrahuman_ring_hrv
        vertical: true
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        primary: "{{ states('sensor.ultrahuman_ring_night_resting_hr') }} bpm"
        secondary: Noční HR
        icon: mdi:heart
        icon_color: >-
          {% set rhr = states('sensor.ultrahuman_ring_night_resting_hr') | int(0) %}
          {% if rhr < 60 %}#7ED321{% elif rhr <= 75 %}#F5A623{% else %}#D0021B{% endif %}
        entity: sensor.ultrahuman_ring_night_resting_hr
        vertical: true
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        primary: "{{ states('sensor.ultrahuman_ring_movement_index') }}"
        secondary: Pohyb
        icon: mdi:run
        icon_color: >-
          {% set m = states('sensor.ultrahuman_ring_movement_index') | int(0) %}
          {% if m >= 70 %}#7ED321{% elif m >= 40 %}#F5A623{% else %}#D0021B{% endif %}
        entity: sensor.ultrahuman_ring_movement_index
        vertical: true
        tap_action:
          action: more-info
Pozn.: Karta používá Mushroom Cards a card-mod – pokud je nemáte, nainstalujte je přes HACS (Mushroom a card-mod jsou v HACS integrations/frontend).

Nápady na automatizace

Zatím na datech z prstenu nemám žádnou automatizaci ještě nastavenou – ale myšlenek se nabízí hned několik: Ráno po synchronizaci: – Notifikace na mobil s recovery indexem a spánkovým skóre hned po tom, co HA stáhne čerstvá data – Pokud recovery < 40, přehrát na reproduktoru jemnou melodii místo plného budíku (nebo vůbec nezapínat intenzivní světla) Adaptivní osvětlení podle recovery: – Recovery ≥ 75 → standardní ranní scéna (jasné světlo, denní tón) – Recovery < 50 → tlumené teplé světlo ráno, „klidový“ režim přes den Tréninkové upozornění: – Pokud je recovery < 50 a time je 16:00–19:00 (typický čas tréninku), poslat připomenutí: „Dnes raději kratší trénink“ Týdenní přehled: – Každou neděli ráno poslat souhrnnou notifikaci s průměrem recovery a sleep score za týden Dřívější ukončení večerních aktivit: – Pokud sleep score z posledních 3 nocí opakovaně pod 60, automaticky připomenout večer jít dříve spát

Stažení

Celý YAML kód dashboardové karty ke stažení – zkopírujte, vložte do editoru dashboardu a upravte si entity ID podle vašeho nastavení (prefix ultrahuman_ring_ by měl sedět automaticky).

Závěr

Integrace Ultrahuman Ring pro Home Assistant není z těch, na které se napojíte a hned vám změní život. Ale pokud Ultrahuman prsten nosíte, je škoda ta data nechat jen v aplikaci. Zobrazená na dashboardu vedle ostatních dat chytré domácnosti dávají mnohem lepší kontext. A kdo ví – možná se za pár měsíců ukáže, že právě tenhle kousek dat umí pěkně řídit ráno v domácnosti. Začínám sbírat nápady. 🙂
Máte jiný nápad na automatizaci s daty z prstenu? Napište do komentářů – rád přidám.
Líbil se ti článek? ❤️ Můžeš mi koupit kávu - díky!
Koupit kávu ☕

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *