Marrow Health
SV
Ladda ner

Skicka Apple Health-data till en webhook

Apple Health har inget webb-API, så dina data når en webhook bara när en app på din iPhone skickar dem. Marrow Health gör det gratis: en automatisering skickar dina hälsomätvärden, träningspass, styrkeset, kostdagbok eller symtom och humör med POST till vilken URL som helst, som JSON eller CSV, enligt det schema du väljer, med appen stängd. Nedan finns installationen, payloaden och fungerande mottagare för n8n, Home Assistant och en vanlig server. Vi gör Marrow.

Ställ in automatiseringen

  1. Öppna fliken Exportera i Marrow Health, sedan Automatisk, sedan Ny automatisering.
  2. Klistra in din webhook-URL (använd HTTPS). Lägg till de rubriker som din mottagare kontrollerar, till exempel en Authorization-bearer-token eller en n8n-nyckel för header-autentisering.
  3. Välj typ av data: Hälsomätvärden, Träningspass, Styrkelogg, Kostdagbok eller Symtom och humör. En automatisering skickar en typ, och du kan ha upp till tio.
  4. Välj JSON eller CSV, datumintervallet (Sedan senaste körningen är standard) och hur ofta den körs, i minuter, timmar eller dagar.
  5. Slå på den och tryck på Kör nu för att skicka en första payload medan du håller koll på mottagaren.

Varje förfrågan är en POST med Content-Type: application/json (eller text/csv) och dina rubriker. Varje körning, med sin svarskod, listas i automatiseringens historik i appen.

Det som kommer fram

Hälsomätvärden kommer som dagssummor, i den enhet som anges i units. Puls kommer som varje dags medelvärde, lägsta och högsta, och sömn som varje natt med sina stadier, i timmar:

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

Payloads för träningspass, styrka, kost och humör, råprover i stället för dagssummor, och CSV-layouten finns i referensen för automatiseringar.

Ta emot den i n8n

  1. Lägg till en Webhook-nod. Ställ in HTTP Method på POST och ge den en sökväg, till exempel apple-health.
  2. Vill du ha en hemlighet, ställ in Authentication på Header Auth och lägg till samma rubriknamn och värde i Marrow-automatiseringen.
  3. Klicka på Listen for test event och tryck sedan på Kör nu i Marrow inom två minuter. Payloaden visas i editorn.
  4. Publicera arbetsflödet och peka Marrow mot Production URL (den med /webhook/, inte /webhook-test/). Test-URL:en slutar lyssna efter ett test.

Payloaden ligger under body, så dagens steg är {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} i ett uttryck. Lägg till en Split Out-nod på body.data.metrics för att hantera varje mätvärde som en egen post. n8n tar som standard emot payloads på upp till 16 MB, vilket räcker för flera års dagssummor. Körningar i produktion visas under Executions, inte i editorn. (n8n Webhook docs)

Ta emot den i Home Assistant

En webhook-trigger tar emot POST på /api/webhook/<webhook_id>. Den här automatiseringen sparar det senaste stegantalet i en nummerhjälpare som heter input_number.steps_today (skapa den först, med ett maxvärde över din bästa dag):

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

(Dokumentation för webhook-trigger i Home Assistant)

Ta emot den på din egen server

Vilken endpoint som helst som tar emot en HTTPS POST och svarar 2xx fungerar. Den här arkiverar varje payload i en fil:

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

Lägg den bakom HTTPS med en Cloudflare Tunnel, Tailscale Funnel eller en omvänd proxy. Om du hellre vill ha en databas du kan söka i än en mapp med filer är Marrows spegel på egen server just den mottagaren, redan skriven, och AI-agenter kan fråga den också.

Tre regler för en mottagare som aldrig tappar data

När körs den?

När iOS låter Marrow köra: efter att den synkat med Apple Health, när du öppnar den och under uppdatering i bakgrunden, när det valda intervallet har gått. iOS bestämmer när uppdatering i bakgrunden sker, så en telefon som ligger låst hela dagen skickar när den låses upp nästa gång, och Sedan senaste körningen täcker glappet.

Andra sätt att göra det