Marrow Health
EL
Λήψη

Στείλτε δεδομένα του Apple Health σε webhook

Το Apple Health δεν έχει web API, οπότε τα δεδομένα σας φτάνουν σε ένα webhook μόνο όταν τα στείλει μια εφαρμογή στο iPhone σας. Το Marrow Health το κάνει δωρεάν: ένας αυτοματισμός στέλνει με POST τις μετρήσεις υγείας, τις προπονήσεις, τα σετ ενδυνάμωσης, το ημερολόγιο φαγητού ή τα συμπτώματα και τη διάθεσή σας σε οποιοδήποτε URL, ως JSON ή CSV, με το πρόγραμμα που διαλέγετε, ακόμα κι όταν η εφαρμογή είναι κλειστή. Παρακάτω θα βρείτε τη ρύθμιση, το payload και λειτουργικούς δέκτες για n8n, Home Assistant και έναν απλό διακομιστή. Εμείς φτιάχνουμε το Marrow.

Ρύθμιση του αυτοματισμού

  1. Στο Marrow Health, ανοίξτε την καρτέλα Εξαγωγή, μετά Αυτοματοποιημένο και μετά Νέος αυτοματισμός.
  2. Επικολλήστε το URL του webhook σας (χρησιμοποιήστε HTTPS). Προσθέστε τις επικεφαλίδες που ελέγχει ο δέκτης σας, όπως ένα bearer token Authorization ή ένα κλειδί header-auth του n8n.
  3. Διαλέξτε το είδος δεδομένων: Μετρήσεις υγείας, Προπονήσεις, Καταγραφή ενδυνάμωσης, Ημερολόγιο διατροφής ή Συμπτώματα και διάθεση. Ένας αυτοματισμός στέλνει ένα είδος, και μπορείτε να έχετε έως δέκα.
  4. Διαλέξτε JSON ή CSV, το εύρος ημερομηνιών (το Από την τελευταία εκτέλεση είναι η προεπιλογή) και κάθε πότε θα τρέχει, σε λεπτά, ώρες ή ημέρες.
  5. Ενεργοποιήστε τον και πατήστε Εκτέλεση τώρα για να σταλεί ένα πρώτο payload ενώ παρακολουθείτε τον δέκτη.

Κάθε αίτημα είναι ένα POST με Content-Type: application/json (ή text/csv) και τις επικεφαλίδες σας. Κάθε εκτέλεση, με τον κωδικό απάντησής της, εμφανίζεται στο ιστορικό του αυτοματισμού μέσα στην εφαρμογή.

Τι φτάνει

Οι μετρήσεις υγείας φτάνουν ως ημερήσια σύνολα, στη μονάδα που αναφέρει το units. Οι καρδιακοί παλμοί έρχονται ως μέσος όρος, ελάχιστο και μέγιστο κάθε ημέρας, και ο ύπνος ως κάθε νύχτα με τα στάδιά της, σε ώρες:

{"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 για προπονήσεις, ενδυνάμωση, διατροφή και διάθεση, τα ακατέργαστα δείγματα αντί για ημερήσια σύνολα και η διάταξη του CSV υπάρχουν στην αναφορά αυτοματισμών.

Παραλαβή στο n8n

  1. Προσθέστε έναν κόμβο Webhook. Ορίστε το HTTP Method σε POST και δώστε του μια διαδρομή, όπως apple-health.
  2. Για μυστικό κλειδί, ορίστε το Authentication σε Header Auth και προσθέστε το ίδιο όνομα και την ίδια τιμή επικεφαλίδας στον αυτοματισμό του Marrow.
  3. Πατήστε Listen for test event και μετά, μέσα σε δύο λεπτά, πατήστε Εκτέλεση τώρα στο Marrow. Το payload εμφανίζεται στον επεξεργαστή.
  4. Δημοσιεύστε το workflow και δείξτε το Marrow στο Production URL (αυτό με /webhook/, όχι με /webhook-test/). Το URL δοκιμής σταματά να ακούει μετά από μια δοκιμή.

Το payload βρίσκεται κάτω από το body, οπότε τα σημερινά βήματα είναι {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} σε μια έκφραση. Προσθέστε έναν κόμβο Split Out στο body.data.metrics για να χειρίζεστε κάθε μέτρηση ως ξεχωριστό στοιχείο. Το n8n δέχεται από προεπιλογή payloads έως 16 MB, που φτάνουν για χρόνια ημερήσιων συνόλων. Οι εκτελέσεις παραγωγής εμφανίζονται στο Executions, όχι στον επεξεργαστή. (Τεκμηρίωση n8n Webhook)

Παραλαβή στο Home Assistant

Ένα webhook trigger δέχεται το POST στο /api/webhook/<webhook_id>. Αυτός ο αυτοματισμός αποθηκεύει τα τελευταία βήματα σε έναν βοηθό αριθμού με όνομα input_number.steps_today (δημιουργήστε τον πρώτα, με μέγιστο πάνω από την καλύτερη ημέρα σας):

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

(Τεκμηρίωση του webhook trigger του Home Assistant)

Παραλαβή στον δικό σας διακομιστή

Κάθε endpoint που δέχεται HTTPS POST και απαντά με 2xx δουλεύει. Αυτό εδώ αρχειοθετεί κάθε payload σε ένα αρχείο:

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

Βάλτε το πίσω από HTTPS με Cloudflare Tunnel, Tailscale Funnel ή reverse proxy. Αν προτιμάτε μια βάση δεδομένων που μπορείτε να ρωτάτε αντί για έναν φάκελο με αρχεία, το αντίγραφο στον δικό σας διακομιστή του Marrow είναι αυτός ο δέκτης ήδη γραμμένος, και μπορούν να το ρωτούν και agents AI.

Τρεις κανόνες για έναν δέκτη που δεν χάνει ποτέ δεδομένα

Πότε τρέχει;

Όποτε το iOS αφήνει το Marrow να τρέξει: μετά τον συγχρονισμό με το Apple Health, όταν το ανοίγετε και κατά την ανανέωση στο παρασκήνιο, αφού περάσει το διάστημα που διαλέξατε. Το iOS αποφασίζει πότε γίνεται η ανανέωση στο παρασκήνιο, οπότε ένα κινητό που μένει κλειδωμένο όλη μέρα στέλνει όταν ξεκλειδωθεί, και το Από την τελευταία εκτέλεση καλύπτει το κενό.

Άλλοι τρόποι