Marrow Health
HU
Letöltés

Apple Health-adatok küldése webhookba

Az Apple Health-nek nincs webes API-ja, ezért az adataid csak akkor jutnak el egy webhookhoz, ha az iPhone-odon egy app elküldi őket. A Marrow Health ezt ingyen megteszi: egy automatizálás a választott ütemezés szerint, zárt appal POST-olja az egészségmutatóidat, edzéseidet, erőnléti sorozataidat, ételnaplódat vagy a tüneteidet és a hangulatodat bármely URL-re, JSON vagy CSV formátumban. Lent találod a beállítást, az adatcsomagot és működő fogadókat n8n-hez, Home Assistant-hoz és egy egyszerű szerverhez. Mi készítjük a Marrow-t.

Az automatizálás beállítása

  1. A Marrow Health-ben nyisd meg az Exportálás fület, majd az Automatizált, végül az Új automatizálás elemet.
  2. Illeszd be a webhook URL-t (HTTPS-t használj). Add hozzá azokat a fejléceket, amelyeket a fogadód ellenőriz, például egy Authorization bearer tokent vagy egy n8n header-auth kulcsot.
  3. Válaszd ki az adat fajtáját: Egészségmutatók, Edzések, Erőnléti napló, Táplálkozási napló vagy Tünetek és hangulat. Egy automatizálás egyfajta adatot küld, és legfeljebb tízet hozhatsz létre.
  4. Válassz JSON-t vagy CSV-t, a dátumtartományt (alapértelmezés: Az utolsó futás óta), és hogy milyen gyakran fusson, percben, órában vagy napban.
  5. Kapcsold be, és koppints a Futtatás most gombra, hogy elküldd az első adatcsomagot, miközben figyeled a fogadót.

Minden kérés egy POST, Content-Type: application/json (vagy text/csv) fejléccel és a te fejléceiddel. Minden futás a válaszkóddal együtt megjelenik az automatizálás előzményei között az appban.

Mi érkezik meg

Az egészségmutatók napi összegekként érkeznek, a units mezőben megnevezett mértékegységben. A pulzus az adott nap átlagaként, minimumaként és maximumaként jön, az alvás pedig éjszakánként a fázisaival, órában:

{"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"}]}
]}}

Az edzések, az erőnlét, a táplálkozás és a hangulat adatcsomagjai, a napi összegek helyett nyers minták, valamint a CSV-felépítés az automatizálási referencián találhatók.

Fogadás n8n-ben

  1. Adj hozzá egy Webhook csomópontot. Állítsd a HTTP Method értékét POST-ra, és adj neki útvonalat, például apple-health.
  2. Titkos kulcshoz állítsd az Authentication értékét Header Auth-ra, és add hozzá ugyanazt a fejlécnevet és értéket a Marrow-automatizáláshoz.
  3. Kattints a Listen for test event gombra, majd két percen belül koppints a Marrow-ban a Futtatás most gombra. Az adatcsomag megjelenik a szerkesztőben.
  4. Tedd közzé a munkafolyamatot, és a Marrow-t a Production URL-re irányítsd (arra, amelyben /webhook/ van, nem /webhook-test/). A teszt URL egy teszt után nem figyel tovább.

Az adatcsomag a body alatt van, így a mai lépések egy kifejezésben {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }}. Adj hozzá egy Split Out csomópontot a body.data.metrics mezőre, hogy minden mutatót külön elemként kezelj. Az n8n alapból 16 MB-ig fogad adatcsomagot, ami évek napi összegeit lefedi. A produkciós futások az Executions alatt jelennek meg, nem a szerkesztőben. (n8n Webhook docs)

Fogadás Home Assistant-ben

Egy webhook-eseményindító a POST-ot a /api/webhook/<webhook_id> címen fogadja. Ez az automatizálás a legfrissebb lépésszámot egy input_number.steps_today nevű szám-segédbe menti (előbb hozd létre, a legjobb napodnál nagyobb maximummal):

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 }}

(A Home Assistant webhook-eseményindító dokumentációja)

Fogadás a saját szervereden

Bármely végpont megfelel, amely HTTPS POST-ot fogad, és 2xx kóddal válaszol. Ez minden adatcsomagot fájlba archivál:

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()

Tedd HTTPS mögé Cloudflare Tunnel, Tailscale Funnel vagy fordított proxy segítségével. Ha fájlok mappája helyett inkább lekérdezhető adatbázist szeretnél, a Marrow saját üzemeltetésű tükre pontosan ez a már megírt fogadó, és az AI-ügynökök is le tudják kérdezni.

Három szabály egy olyan fogadóhoz, amely sosem veszít adatot

Mikor fut?

Valahányszor az iOS futni hagyja a Marrow-t: miután szinkronizált az Apple Health-szel, amikor megnyitod, és a háttérfrissítés közben, ha a választott időköz már eltelt. A háttérfrissítés idejét az iOS dönti el, ezért egy egész nap zárolva hagyott telefon a következő feloldáskor küld, és a „Az utolsó futás óta” beállítás lefedi a kiesést.

Más megoldások