Marrow Health
RO
Descarcă

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

  1. În Marrow Health, deschide fila Exportă, apoi Automatizat, apoi Automatizare nouă.
  2. Lipește URL-ul webhookului (folosește HTTPS). Adaugă antetele pe care le verifică receptorul tău, precum un token bearer Authorization sau o cheie de autentificare prin antet din n8n.
  3. 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.
  4. 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.
  5. 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

  1. Adaugă un nod Webhook. Setează HTTP Method la POST și dă-i o cale, de exemplu apple-health.
  2. Pentru un secret, setează Authentication la Header Auth și adaugă același nume și aceeași valoare de antet în automatizarea Marrow.
  3. Fă clic pe Listen for test event, apoi atinge Rulează acum în Marrow în maximum două minute. Conținutul apare în editor.
  4. 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 }}

(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

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