Στείλτε δεδομένα του Apple Health σε webhook
Το Apple Health δεν έχει web API, οπότε τα δεδομένα σας φτάνουν σε ένα webhook μόνο όταν τα στείλει μια εφαρμογή στο iPhone σας. Το Marrow Health το κάνει δωρεάν: ένας αυτοματισμός στέλνει με POST τις μετρήσεις υγείας, τις προπονήσεις, τα σετ ενδυνάμωσης, το ημερολόγιο φαγητού ή τα συμπτώματα και τη διάθεσή σας σε οποιοδήποτε URL, ως JSON ή CSV, με το πρόγραμμα που διαλέγετε, ακόμα κι όταν η εφαρμογή είναι κλειστή. Παρακάτω θα βρείτε τη ρύθμιση, το payload και λειτουργικούς δέκτες για n8n, Home Assistant και έναν απλό διακομιστή. Εμείς φτιάχνουμε το Marrow.
Ρύθμιση του αυτοματισμού
- Στο Marrow Health, ανοίξτε την καρτέλα Εξαγωγή, μετά Αυτοματοποιημένο και μετά Νέος αυτοματισμός.
- Επικολλήστε το URL του webhook σας (χρησιμοποιήστε HTTPS). Προσθέστε τις επικεφαλίδες που ελέγχει ο δέκτης σας, όπως ένα bearer token
Authorizationή ένα κλειδί header-auth του n8n. - Διαλέξτε το είδος δεδομένων: Μετρήσεις υγείας, Προπονήσεις, Καταγραφή ενδυνάμωσης, Ημερολόγιο διατροφής ή Συμπτώματα και διάθεση. Ένας αυτοματισμός στέλνει ένα είδος, και μπορείτε να έχετε έως δέκα.
- Διαλέξτε JSON ή CSV, το εύρος ημερομηνιών (το Από την τελευταία εκτέλεση είναι η προεπιλογή) και κάθε πότε θα τρέχει, σε λεπτά, ώρες ή ημέρες.
- Ενεργοποιήστε τον και πατήστε Εκτέλεση τώρα για να σταλεί ένα πρώτο 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
- Προσθέστε έναν κόμβο Webhook. Ορίστε το HTTP Method σε
POSTκαι δώστε του μια διαδρομή, όπωςapple-health. - Για μυστικό κλειδί, ορίστε το Authentication σε Header Auth και προσθέστε το ίδιο όνομα και την ίδια τιμή επικεφαλίδας στον αυτοματισμό του Marrow.
- Πατήστε Listen for test event και μετά, μέσα σε δύο λεπτά, πατήστε Εκτέλεση τώρα στο Marrow. Το payload εμφανίζεται στον επεξεργαστή.
- Δημοσιεύστε το 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 }}
- Το σώμα JSON βρίσκεται στο
trigger.jsonεπειδή το Marrow στέλνειContent-Type: application/json. - Το
local_onlyείναι ενεργό από προεπιλογή, και δέχεται αιτήματα μόνο από το οικιακό σας δίκτυο ή από ένα URL webhook cloud του Nabu Casa. Ορίστε το σεfalseόταν το κινητό στέλνει μέσω internet στη δική σας διεύθυνση HTTPS. - Το ID του webhook είναι το μόνο μυστικό, γι' αυτό κάντε το μακρύ και τυχαίο.
(Τεκμηρίωση του 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.
Τρεις κανόνες για έναν δέκτη που δεν χάνει ποτέ δεδομένα
- Κερδίζει το πιο πρόσφατο. Αποθηκεύστε κάθε τιμή με κλειδί τη μέτρηση και την ημέρα, και αντικαταστήστε την αν ξαναρθεί. Το Από την τελευταία εκτέλεση ξαναστέλνει επίτηδες τις δύο τελευταίες ημέρες, γιατί το Apple Health συνεχίζει να συμπληρώνει μια ημέρα και μετά το τέλος της.
- Αποθηκεύστε πρώτα το ακατέργαστο σώμα, και μετά αναλύστε το. Ένα σφάλμα ανάλυσης δεν πρέπει ποτέ να σας κοστίζει δεδομένα.
- Απαντήστε γρήγορα. Το Marrow περιμένει έως το χρονικό όριο που ορίζετε (60 δευτερόλεπτα από προεπιλογή) και ξαναδοκιμάζει μια αποτυχημένη εκτέλεση από το τελευταίο επιτυχές παράθυρο στην επόμενη σειρά του.
Πότε τρέχει;
Όποτε το iOS αφήνει το Marrow να τρέξει: μετά τον συγχρονισμό με το Apple Health, όταν το ανοίγετε και κατά την ανανέωση στο παρασκήνιο, αφού περάσει το διάστημα που διαλέξατε. Το iOS αποφασίζει πότε γίνεται η ανανέωση στο παρασκήνιο, οπότε ένα κινητό που μένει κλειδωμένο όλη μέρα στέλνει όταν ξεκλειδωθεί, και το Από την τελευταία εκτέλεση καλύπτει το κενό.
Άλλοι τρόποι
- Το Health Auto Export στέλνει επίσης δεδομένα του Apple Health σε webhooks, και το JSON των μετρήσεών του έχει την ίδια δομή με του Marrow. Οι αυτοματισμοί του χρειάζονται το επίπεδο Premium.
- Οι Συντομεύσεις της Apple μπορούν να διαβάσουν δείγματα υγείας και να τα στείλουν με το Get Contents of URL, σε έναν προσωπικό αυτοματισμό σε καθορισμένη ώρα. Είναι δωρεάν, μπορούν να διαβάσουν δεδομένα Υγείας μόνο όταν το κινητό είναι ξεκλείδωτο, και κάθε μέτρηση τη φτιάχνετε και τη συντηρείτε μόνοι σας.
- Το export.zip της Apple είναι ένα εφάπαξ πλήρες αντίγραφο ασφαλείας, όχι ροή δεδομένων. Για να το κάνετε CSV, χρησιμοποιήστε τον μετατροπέα μας μέσα στον browser.