Trimite datele din Apple Health către un webhook
Apple Health nu are un API web, așa că datele tale ajung la un webhook doar dacă o aplicație de pe iPhone le trimite. Marrow Health face asta gratuit: o automatizare trimite prin POST metricile tale de sănătate, antrenamentele, seriile de forță, jurnalul alimentar sau simptomele și dispoziția la orice URL, ca JSON sau CSV, după programul pe care îl alegi, cu aplicația închisă. Mai jos găsești configurarea, conținutul trimis și receptoare funcționale pentru n8n, Home Assistant și un server simplu. Noi facem Marrow.
Configurează automatizarea
- În Marrow Health, deschide fila Exportă, apoi Automatizat, apoi Automatizare nouă.
- Lipește URL-ul webhookului (folosește HTTPS). Adaugă antetele pe care le verifică receptorul tău, precum un token bearer
Authorizationsau o cheie de autentificare prin antet din n8n. - Alege tipul de date: Metrici de sănătate, Antrenamente, Jurnal de forță, Jurnal de nutriție sau Simptome și dispoziție. O automatizare trimite un singur tip și poți avea până la zece.
- Alege JSON sau CSV, intervalul de date (De la ultima rulare este cel implicit) și cât de des rulează, în minute, ore sau zile.
- Activează-o și atinge Rulează acum ca să trimiți un prim conținut, cât te uiți la receptor.
Fiecare cerere este un POST cu Content-Type: application/json (sau text/csv) și antetele tale. Fiecare rulare, cu codul ei de răspuns, apare în istoricul automatizării din aplicație.
Ce ajunge la receptor
Metricile de sănătate ajung ca totaluri zilnice, în unitatea din units. Pulsul vine ca media, minimul și maximul fiecărei zile, iar somnul ca fiecare noapte, cu fazele ei, în ore:
{"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"}]}
]}}
Conținutul pentru antrenamente, forță, nutriție și dispoziție, eșantioanele brute în loc de totaluri zilnice și structura CSV sunt în referința automatizărilor.
Primește-l în n8n
- Adaugă un nod Webhook. Setează HTTP Method la
POSTși dă-i o cale, de exempluapple-health. - Pentru un secret, setează Authentication la Header Auth și adaugă același nume și aceeași valoare de antet în automatizarea Marrow.
- Fă clic pe Listen for test event, apoi atinge Rulează acum în Marrow în maximum două minute. Conținutul apare în editor.
- Publică fluxul de lucru și îndreaptă Marrow spre Production URL (cel cu
/webhook/, nu cu/webhook-test/). URL-ul de test nu mai ascultă după un test.
Conținutul se află sub body, așa că pașii de azi sunt {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} într-o expresie. Adaugă un nod Split Out pe body.data.metrics ca să tratezi fiecare metrică drept element separat. n8n acceptă implicit conținut de până la 16 MB, ceea ce acoperă ani de totaluri zilnice. Rulările de producție apar la Executions, nu în editor. (documentația n8n Webhook)
Primește-l în Home Assistant
Un declanșator webhook primește POST-ul la /api/webhook/<webhook_id>. Această automatizare salvează ultimul număr de pași într-un ajutor numeric numit input_number.steps_today (creează-l mai întâi, cu un maxim peste cea mai bună zi a ta):
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 }}
- Corpul JSON se află în
trigger.jsonpentru că Marrow trimiteContent-Type: application/json. local_onlyeste activ implicit, ceea ce acceptă doar cereri din rețeaua ta de acasă sau de la un URL de webhook Nabu Casa Cloud. Setează-l lafalsecând telefonul trimite prin internet către propria ta adresă HTTPS.- ID-ul webhookului este singurul secret, așa că fă-l lung și aleatoriu.
(Documentația Home Assistant despre declanșatorul webhook)
Primește-l pe propriul tău server
Merge orice endpoint care acceptă un POST HTTPS și răspunde cu 2xx. Acesta arhivează fiecare conținut într-un fișier:
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()
Pune-l în spatele HTTPS cu un Cloudflare Tunnel, un Tailscale Funnel sau un reverse proxy. Dacă preferi o bază de date pe care o poți interoga în locul unui dosar cu fișiere, oglinda auto-găzduită de la Marrow este exact acest receptor, deja scris, iar agenții AI o pot interoga și ei.
Trei reguli pentru un receptor care nu pierde niciodată date
- Ultima valoare câștigă. Salvează fiecare valoare după metrică și zi și suprascrie la repetare. De la ultima rulare retrimite intenționat ultimele două zile, pentru că Apple Health continuă să completeze o zi și după ce s-a încheiat.
- Salvează mai întâi corpul brut, apoi analizează-l. O eroare de analiză nu trebuie să te coste date.
- Răspunde repede. Marrow așteaptă până la timpul-limită setat de tine (60 de secunde implicit) și reia o rulare eșuată din ultima fereastră reușită, la următoarea rulare.
Când rulează?
Oricând îi permite iOS lui Marrow să ruleze: după ce se sincronizează cu Apple Health, când îl deschizi și în timpul reîmprospătării în fundal, după ce a trecut intervalul ales de tine. iOS decide când are loc reîmprospătarea în fundal, așa că un telefon lăsat blocat toată ziua trimite la următoarea deblocare, iar De la ultima rulare acoperă golul.
Alte variante
- Health Auto Export trimite și el date Apple Health la webhookuri, iar JSON-ul lui de metrici are aceeași structură ca cel al Marrow. Automatizările lui cer nivelul Premium.
- Apple Shortcuts poate citi eșantioane de sănătate și le poate trimite cu Get Contents of URL, într-o automatizare personală la o oră fixă. Este gratuit, poate citi datele Health doar cât timp telefonul e deblocat, iar fiecare metrică o construiești și o întreții tu.
- export.zip de la Apple este o copie completă, făcută o singură dată, nu un flux. Ca să transformi unul în CSV, folosește convertorul nostru din browser.