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
- 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.
- 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
Authorizationbearer tokent vagy egy n8n header-auth kulcsot. - 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.
- 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.
- 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
- Adj hozzá egy Webhook csomópontot. Állítsd a HTTP Method értékét
POST-ra, és adj neki útvonalat, példáulapple-health. - 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.
- 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.
- 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 JSON törzs a
trigger.jsonmezőben van, mert a MarrowContent-Type: application/jsonfejlécet küld. - A
local_onlyalapból be van kapcsolva, így csak az otthoni hálózatodról vagy egy Nabu Casa felhős webhook URL-ről fogad küldést. Állítsdfalseértékre, ha a telefon az interneten át a saját HTTPS-címedre küld. - A webhook azonosítója az egyetlen titok, ezért legyen hosszú és véletlenszerű.
(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
- A legújabb nyer. Minden értéket mutató és nap szerint kulcsolva tárolj, és ismétlődéskor írd felül. A „Az utolsó futás óta” beállítás szándékosan újraküldi az utolsó két napot, mert az Apple Health a nap vége után is kitölti az adatokat.
- Előbb a nyers törzset mentsd el, csak utána elemezd. Egy elemzési hiba soha ne kerüljön adatba.
- Válaszolj gyorsan. A Marrow az általad beállított időkorlátig vár (alapértelmezés szerint 60 másodpercig), és egy sikertelen futást a következő körben az utolsó sikeres ablaktól próbál újra.
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
- A Health Auto Export szintén küld Apple Health-adatokat webhookokba, és a mutatók JSON-ja ugyanolyan felépítésű, mint a Marrow-é. Az automatizálásaihoz a Premium szint kell.
- Az Apple Parancsok (Shortcuts) képes egészségügyi mintákat olvasni, és a Get Contents of URL művelettel elküldeni őket, egy személyes automatizálásban, adott időpontban. Ingyenes, az Egészség adatait csak feloldott telefonnal tudja olvasni, és minden mutatót magadnak kell megépítened és karbantartanod.
- Az Apple export.zip fájlja egyszeri teljes biztonsági mentés, nem folyamatos adatforrás. Ha CSV-t szeretnél belőle, használd a böngészős átalakítónkat.