Marrow Health
CS
Stáhnout

Posílejte data z Apple Health na webhook

Apple Health nemá webové API, takže vaše data se na webhook dostanou jen tehdy, když je odešle aplikace v iPhonu. Marrow Health to umí zdarma: automatizace odešle metodou POST vaše zdravotní metriky, tréninky, silové série, jídelní deník nebo příznaky a náladu na libovolnou adresu URL, jako JSON nebo CSV, podle rozvrhu, který zvolíte, i se zavřenou aplikací. Níže najdete nastavení, strukturu dat a fungující příjemce pro n8n, Home Assistant a běžný server. Marrow děláme my.

Nastavení automatizace

  1. V Marrow Health otevřete záložku Export, pak Automatické a Nová automatizace.
  2. Vložte adresu URL webhooku (použijte HTTPS). Přidejte všechna záhlaví, která váš příjemce kontroluje, například token Authorization typu bearer nebo klíč n8n pro ověření záhlavím.
  3. Vyberte druh dat: Zdravotní metriky, Tréninky, Deník silového tréninku, Deník výživy nebo Příznaky a nálada. Jedna automatizace posílá jeden druh a můžete jich mít až deset.
  4. Vyberte JSON nebo CSV, rozsah dat (výchozí je Od posledního spuštění) a jak často se to má spouštět, v minutách, hodinách nebo dnech.
  5. Zapněte ji a klepnutím na Spustit hned odešlete první data, zatímco sledujete příjemce.

Každý požadavek je POST s Content-Type: application/json (nebo text/csv) a vašimi záhlavími. Každé spuštění i s kódem odpovědi najdete v historii automatizace v aplikaci.

Co dorazí

Zdravotní metriky dorazí jako denní součty v jednotce uvedené v units. Tepová frekvence přijde jako denní průměr, minimum a maximum a spánek jako jednotlivé noci s fázemi, v hodinách:

{"data": {"metrics": [
  {"name": "body_mass", "units": "kg",
   "data": [{"date": "2026-09-11", "qty": 81.3}]},
  {"name": "step_count", "units": "count",
   "data": [{"date": "2026-09-11", "qty": 8746}]},
  {"name": "heart_rate", "units": "bpm",
   "data": [{"date": "2026-09-11", "Avg": 71, "Min": 52, "Max": 148}]},
  {"name": "sleep_analysis", "units": "h",
   "data": [{"date": "2026-09-11", "totalSleep": 7.2, "asleep": 7.2, "deep": 1.1, "rem": 1.6, "core": 4.3, "awake": 0.2,
             "sleepStart": "2026-09-10 23:36:00 -0400", "sleepEnd": "2026-09-11 07:02:00 -0400"}]}
]}}

Data tréninků, silového tréninku, výživy a nálady, surové vzorky místo denních součtů a rozvržení CSV jsou v referenci automatizací.

Příjem v n8n

  1. Přidejte uzel Webhook. Nastavte HTTP Method na POST a zadejte cestu, například apple-health.
  2. Pro tajný klíč nastavte Authentication na Header Auth a stejný název a hodnotu záhlaví přidejte do automatizace v Marrow.
  3. Klikněte na Listen for test event a do dvou minut v Marrow klepněte na Spustit hned. Data se objeví v editoru.
  4. Publikujte workflow a nasměrujte Marrow na Production URL (tu s /webhook/, ne s /webhook-test/). Testovací adresa po testu přestane naslouchat.

Data jsou pod body, takže dnešní kroky jsou ve výrazu {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }}. Přidejte uzel Split Out na body.data.metrics, aby se každá metrika zpracovala jako samostatná položka. n8n ve výchozím nastavení přijímá data do 16 MB, což pokryje denní součty za několik let. Ostré běhy se zobrazují v části Executions, ne v editoru. (dokumentace webhooku v n8n)

Příjem v Home Assistant

Spouštěč webhooku přijme POST na /api/webhook/<webhook_id>. Tato automatizace uloží poslední počet kroků do číselného pomocníka s názvem input_number.steps_today (nejdřív ho vytvořte s maximem nad vaším nejlepším dnem):

automation:
  - alias: "Apple Health from Marrow"
    triggers:
      - trigger: webhook
        webhook_id: "pick-a-long-random-id"
        allowed_methods:
          - POST
        local_only: false
    actions:
      - action: input_number.set_value
        target:
          entity_id: input_number.steps_today
        data:
          value: >-
            {{ ((trigger.json.data.metrics
                 | selectattr('name', 'eq', 'step_count') | first).data
                 | last).qty }}

(Dokumentace ke spouštěči webhooku v Home Assistant)

Příjem na vlastním serveru

Funguje libovolný koncový bod, který přijme HTTPS POST a odpoví kódem 2xx. Tento ukládá každá přijatá data do souboru:

from http.server import BaseHTTPRequestHandler, HTTPServer
import time

class H(BaseHTTPRequestHandler):
    def do_POST(self):
        body = self.rfile.read(int(self.headers.get("Content-Length", 0)))
        with open(f"marrow-{int(time.time())}.json", "wb") as f:
            f.write(body)
        self.send_response(200)
        self.end_headers()

HTTPServer(("0.0.0.0", 8798), H).serve_forever()

Zveřejněte ho přes HTTPS pomocí Cloudflare Tunnel, Tailscale Funnel nebo reverzní proxy. Pokud byste raději měli databázi, kterou lze dotazovat, než složku souborů, je vlastní zrcadlo od Marrow takovým příjemcem už napsaným a dotazovat se ho mohou i AI agenti.

Tři pravidla pro příjemce, který nikdy nepřijde o data

Kdy se to spouští?

Kdykoli iOS Marrow dovolí běžet: po synchronizaci s Apple Health, při otevření aplikace a při obnovení na pozadí, jakmile uplyne zvolený interval. O tom, kdy se obnovení na pozadí provede, rozhoduje iOS, takže telefon celý den zamčený odešle data, až bude příště odemčený, a Od posledního spuštění tuto mezeru pokryje.

Jiné způsoby