Αυτοματισμοί: τα δεδομένα σας, σταλμένα με πρόγραμμα
Το Marrow μπορεί να στείλει με POST ένα αρχείο με τα δεδομένα υγείας σας σε οποιοδήποτε URL διαλέξετε, με τη συχνότητα που διαλέγετε, απευθείας από το κινητό. Αυτή η σελίδα είναι η αναφορά: πώς να ρυθμίσετε έναν αυτοματισμό, πώς μοιάζει κάθε payload και πώς να γράψετε κάτι που τα παραλαμβάνει.
Έτοιμες ρυθμίσεις για n8n, Zapier, Make, Home Assistant, Google Sheets και InfluxDB υπάρχουν στις συνδέσεις.
Όλοι οι οδηγοί του Marrow: MCP · Αντίγραφο στον δικό σας διακομιστή · Αυτοματισμοί · Αρχεία · Υποστήριξη
Τι είναι ένας αυτοματισμός
Μια αποθηκευμένη εργασία στο Εξαγωγή, Αυτοματοποιημένο: ένα είδος δεδομένων, μία μορφή, ένα εύρος ημερομηνιών, ένα URL, μία συχνότητα. Το Marrow χτίζει το αρχείο από το επαληθευμένο αποθετήριό του και το στέλνει με POST στο URL ενώ η εφαρμογή είναι κλειστή, μετά από κάθε συγχρονισμό και σε κάθε ανανέωση στο παρασκήνιο, όποτε έχει περάσει η συχνότητα. Τίποτα δεν περνά από εμάς: το κινητό μιλά απευθείας με το endpoint σας.
Η ρύθμιση
- Καρτέλα Εξαγωγή, Αυτοματοποιημένο: ενεργοποιήστε το και μετά πατήστε Νέος αυτοματισμός. Όταν δημιουργείται από τη σελίδα ενός εργαλείου (n8n, Zapier, Home Assistant και τα υπόλοιπα στις συνδέσεις), ο αυτοματισμός παίρνει το όνομα του εργαλείου και δίπλα σε κάθε πεδίο γράφει τι περιμένει εκεί το εργαλείο.
- Διεύθυνση: το URL https στο οποίο θα στέλνει με POST. Επικεφαλίδες: όσες χρειάζεται ο δέκτης σας (ένα bearer token
Authorization, έναX-Gitlab-Token, ό,τι χρειαστεί). Όταν το εργαλείο δεν χρειάζεται καμία, η Προσθήκη επικεφαλίδας βρίσκεται στις Περισσότερες επιλογές. - Δεδομένα: Μετρήσεις υγείας, Προπονήσεις, Καταγραφή ενδυνάμωσης, Ημερολόγιο διατροφής ή Συμπτώματα και διάθεση, ως JSON ή CSV. Ένας αυτοματισμός μεταφέρει ένα είδος, οπότε φτιάξτε έναν για κάθε είδος που θέλετε. Κάθε ενεργός μετράει ως σύνδεση: το Δωρεάν πλάνο επιτρέπει 1 ενεργή σύνδεση τη φορά, το Marrow Pro έως 10, συμπεριλαμβανομένων των AI και των διακομιστών.
- Ρυθμός: κάθε τόσα λεπτά, ώρες ή ημέρες. Το εύρος ημερομηνιών, η συγκέντρωση και το χρονικό όριο βρίσκονται στις Περισσότερες επιλογές.
- Το Εκτέλεση τώρα στέλνει ένα πρώτο payload, ώστε να ελέγξετε τον δέκτη πριν περιμένετε το πρόγραμμα.
Εύρη ημερομηνιών
- Από την τελευταία εκτέλεση (προεπιλογή): ό,τι έχει προστεθεί από την τελευταία επιτυχημένη εκτέλεση, μείον μια επικάλυψη δύο ημερών. Το HealthKit συνεχίζει να συμπληρώνει μια ημέρα και μετά το τέλος της, οπότε η επικάλυψη ξαναστέλνει τις ημέρες που μόλις ολοκληρώθηκαν. Κρατήστε από τη μεριά σας την πιο πρόσφατη τιμή ανά μέτρηση και ημέρα, και οι επαναλήψεις είναι αβλαβείς. Ένας δέκτης που ήταν εκτός λειτουργίας για λίγο παίρνει όλες τις ημέρες που έχασε στην πρώτη εκτέλεση που πετυχαίνει.
- Σήμερα, Τελευταίες 7 / 30 / 90 ημέρες, Τελευταίος χρόνος: σταθερά κυλιόμενα παράθυρα, που ξαναστέλνονται ολόκληρα σε κάθε εκτέλεση. Διαλέξτε τα όταν προτιμάτε ένα στιγμιότυπο που αυτοδιορθώνεται αντί για μια διαφορά.
Μορφές payload
Μετρήσεις υγείας (ημερήσια σύνολα, JSON)
Η ίδια δομή με τις μετρήσεις του Health Auto Export (μια λίστα metrics με name, units και data με qty), οπότε ένας δέκτης που γράφτηκε για εκείνη την εφαρμογή χρειάζεται μόνο μικρές αλλαγές: οι ημερομηνίες εδώ είναι απλές ημέρες, όχι χρονοσφραγίδες, και τα payloads προπονήσεων και ενδυνάμωσης παρακάτω είναι δικά του Marrow. Οι τιμές είναι στην αποθηκευμένη μονάδα που αναφέρει το units (kg, m, mL, degC, kcal, count). Οι καρδιακοί παλμοί έρχονται ως Avg, Min και Max κάθε ημέρας σε bpm, και ο ύπνος ως κάθε νύχτα με τα στάδιά της σε ώρες. Μετατρέψτε από τη μεριά σας αν θέλετε αγγλοσαξονικές μονάδες.
{"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"}]}
]}}
Τα ακατέργαστα δείγματα (η ομαδοποίηση Ακατέργαστα δείγματα) στέλνουν κάθε δείγμα με την ώρα έναρξης και λήξης του αντί για ημερήσιο σύνολο. Οι μετρήσεις σε CSV έρχονται ως ο πλατύς πίνακας που περιγράφεται στη σελίδα αρχείων.
Προπονήσεις
{"data": {"workouts": [
{"activity": "Running", "start": "2026-09-11T18:43:41Z", "end": "2026-09-11T19:13:53Z",
"duration_min": 30.2, "kcal": 512, "distance_mi": 3.06, "avg_hr": 174, "source": "Apple Watch"}
]}}
Καταγραφή ενδυνάμωσης
Κάθε σετ εργασίας (τα σετ προθέρμανσης δεν περιλαμβάνονται), μαζί με την πρόοδο ανά άσκηση και τον όγκο ανά μυϊκή ομάδα. Τα βάρη είναι στη μονάδα που επιλέξατε στις Ρυθμίσεις, Μονάδες. Το πεδίο unit λέει ποια είναι. Το set_type κάθε σετ είναι work, failure ή drop, και ένα σετ έχει και rir όταν καταγράψατε επαναλήψεις σε εφεδρεία (reps in reserve). Το set_credits μετρά τα σετ που πιστώνονται σε μια μυϊκή ομάδα, σε κλάσματα όταν μια άσκηση δουλεύει περισσότερες ομάδες.
{"data": {"unit": "lb",
"sets": [{"time": "2026-09-11T17:02:00Z", "session": "Push day", "exercise": "Bench Press",
"set": 1, "weight": 185, "reps": 8, "est_1rm": 229.6, "set_type": "work"}],
"exercises": [{"exercise": "Bench Press", "best_est_1rm": 229.6,
"sessions": [{"date": "2026-09-11T17:02:00Z", "sets": 3, "top_weight": 185, "top_reps": 8, "est_1rm": 229.6, "volume": 3885}]}],
"muscle_groups": [{"group": "Chest", "volume": 3108.0, "set_credits": 2.4}]
}}
Ημερολόγιο διατροφής
{"data": {"days": [
{"day": "2026-09-11", "entries": [
{"meal": "breakfast", "name": "Oatmeal", "grams": 250, "kcal": 300,
"protein_g": 10, "carbs_g": 54, "fat_g": 5, "logged_at": "2026-09-11T12:10:00Z",
"nutrients": {"dietary_fiber": 8.0, "dietary_sugar": 1.2}}
]}
]}}
Πώς γράφεται ένας δέκτης
Δουλεύει οτιδήποτε δέχεται HTTPS POST και απαντά με 2xx: μια υπηρεσία webhook, μια serverless function, ένα script σε οικιακό διακομιστή. Τρεις κανόνες τον κρατούν αξιόπιστο:
- Κερδίζει το πιο πρόσφατο. Αποθηκεύστε τις τιμές με κλειδί το (μέτρηση, ημέρα) ή τη δική τους ταυτότητα της καταχώρισης, και αντικαταστήστε τις όταν ξαναρθούν. Τα παράθυρα επικαλύπτονται σκόπιμα.
- Αρχειοθετήστε πρώτα το ακατέργαστο σώμα. Μετά αναλύστε το. Ένα σφάλμα στον αναλυτή δεν πρέπει ποτέ να σας κοστίσει τα δεδομένα.
- Απαντήστε γρήγορα. Το Marrow περιμένει έως το χρονικό όριο που ορίσατε (προεπιλογή 60 s) και διαφορετικά σημειώνει την εκτέλεση ως αποτυχημένη. Οι αποτυχημένες εκτελέσεις ξαναδοκιμάζονται στην επόμενη χρονική στιγμή της συχνότητας, από το τελευταίο επιτυχές παράθυρο.
Ένας δέκτης Python δώδεκα γραμμών που αρχειοθετεί κάθε αίτημα:
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) και δείξτε τον αυτοματισμό σε αυτόν. Αν θέλετε ένα αντίγραφο που μπορείτε να ρωτάτε αντί για έναν φάκελο αρχείων, το αντίγραφο στον δικό σας διακομιστή είναι αυτός ο δέκτης ήδη γραμμένος.
Καλό είναι να ξέρετε
- Οι αυτοματισμοί τρέχουν μόνο όταν το iOS αφήνει την εφαρμογή να τρέξει: μετά από συγχρονισμό, στην ανανέωση σε πρώτο πλάνο και στην ανανέωση στο παρασκήνιο. Ένα κινητό που μένει κλειδωμένο όλη μέρα στέλνει όταν ξεκλειδωθεί. Το παράθυρο «από την τελευταία εκτέλεση» καλύπτει το κενό.
- Κάθε εκτέλεση καταγράφεται στην Καταγραφή δραστηριότητας του αυτοματισμού (Περισσότερες επιλογές) με το αποτέλεσμά της, ώστε ένα λάθος URL να φαίνεται στην εφαρμογή και όχι μόνο στον διακομιστή σας.
- Αντιγράψτε έναν αυτοματισμό για να ξαναχρησιμοποιήσετε τις επικεφαλίδες του σε άλλο είδος δεδομένων.
Αντιμετώπιση προβλημάτων
Δοκιμάστε με το Εκτέλεση τώρα. Η γραμμή από κάτω λέει τι έγινε, και η Περισσότερες επιλογές, Καταγραφή δραστηριότητας κρατά τις τελευταίες 30 εκτελέσεις με την ίδια γραμμή. Ενεργοποιήστε το Ειδοποίηση κατά την εκτέλεση (Περισσότερες επιλογές) για να παίρνετε ειδοποίηση σε κάθε εκτέλεση όσο ελέγχετε.
| Τι δείχνει το Marrow | Τι να κάνετε |
|---|---|
Μια σύνοψη όσων στάλθηκαν, όπως 12 diary entries | Παραδόθηκε: ο δέκτης απάντησε 2xx. Αν δεν εμφανίζεται τίποτα στη δική του μεριά, δείτε τις τελευταίες γραμμές παρακάτω. |
Server answered 401 ή 403 | Ο δέκτης θέλει μια επικεφαλίδα, ή αυτή που προσθέσατε είναι λάθος. Ελέγξτε το όνομα και την τιμή της, μαζί με το Bearer και το κενό μετά από αυτό. |
Server answered 404 | Λάθος διεύθυνση, ή ο δέκτης δεν ακούει. Στο n8n, χρησιμοποιήστε το Production URL και ενεργοποιήστε το workflow. Ελέγξτε μήπως λείπει η διαδρομή στο τέλος. |
Server answered 405 | Η διεύθυνση δεν δέχεται POST. Δείξτε την στο endpoint που προορίζεται για εισερχόμενα δεδομένα. |
Server answered 413 | Το payload είναι πολύ μεγάλο για τον δέκτη. Διαλέξτε μικρότερο εύρος ημερομηνιών, λιγότερες μετρήσεις ή Ημερήσια σύνολα αντί για Ακατέργαστα δείγματα. |
Server answered 500 ή άλλο 5xx | Ο δέκτης απέτυχε κατά την επεξεργασία. Κοιτάξτε το δικό του log. Αρχειοθετήστε πρώτα το ακατέργαστο σώμα και μετά αναλύστε το. |
| Το αίτημα έληξε | Ο δέκτης άργησε περισσότερο από το χρονικό όριο. Απαντήστε πρώτα και δουλέψτε μετά, ή αυξήστε το Λήξη χρονικού ορίου στις Περισσότερες επιλογές (έως 300 s). |
| Η πολιτική App Transport Security απαιτεί τη χρήση ασφαλούς σύνδεσης | Η διεύθυνση είναι απλό http στο internet. Χρησιμοποιήστε https. Το iOS αφήνει το Marrow να χρησιμοποιεί απλό http μόνο στο δικό σας δίκτυο. |
| Δεν βρέθηκε διακομιστής με το καθορισμένο όνομα | Ορθογραφικό λάθος στη διεύθυνση, ή ένα όνομα που το ξέρει μόνο το οικιακό σας δίκτυο. Ελέγξτε το στο Safari του κινητού. |
No valid URL - set an https endpoint first | Η διεύθυνση είναι κενή ή δεν ξεκινά με https:// (ή http:// στο δικό σας δίκτυο). |
Nothing to export in this range | Δεν υπάρχουν δεδομένα αυτού του είδους στο εύρος ημερομηνιών. Διαλέξτε μεγαλύτερο εύρος στις Περισσότερες επιλογές, ή καταγράψτε πρώτα κάτι. |
- Παραδόθηκε, αλλά δεν φτάνει τίποτα. Ορισμένοι δέκτες απαντούν 200 ακόμα κι όταν πετούν τα δεδομένα. Το Home Assistant το κάνει με λάθος webhook id, και η συνταγή Apps Script με λάθος
?key=. Το Zapier και το Make δεν δείχνουν τίποτα μέχρι να φορτώσετε ένα δείγμα στον επεξεργαστή τους. Ελέγξτε το ιστορικό ή το log του ίδιου του δέκτη. - Οι εκτελέσεις αργούν ή δεν γίνονται καθόλου. Το iOS διαλέγει τη στιγμή για τις εκτελέσεις στο παρασκήνιο: μετά από συγχρονισμό, όταν ανοίγετε το Marrow και κατά την ανανέωση στο παρασκήνιο. Κρατήστε ενεργή την Ανανέωση εφαρμογών στο παρασκήνιο για το Marrow (Ρυθμίσεις, Γενικά, Ανανέωση εφαρμογών στο παρασκήνιο). Η Λειτουργία χαμηλής κατανάλωσης συγκρατεί τις εκτελέσεις στο παρασκήνιο, και ένα κινητό που μένει κλειδωμένο στέλνει όταν ξεκλειδωθεί. Το «Από την τελευταία εκτέλεση» τα φτάνει στην επόμενη εκτέλεση που πετυχαίνει.
- Δέκτης στο οικιακό σας δίκτυο. Το Marrow χρειάζεται πρόσβαση στο Τοπικό δίκτυο για να τον φτάσει: Ρυθμίσεις, Απόρρητο και ασφάλεια, Τοπικό δίκτυο. Πατήστε μία φορά Εκτέλεση τώρα με ανοιχτό το Marrow, ώστε το iOS να ρωτήσει. Στο παρασκήνιο, το iOS αρνείται χωρίς να ρωτήσει μέχρι να απαντήσετε.
- Το κλείσατε σύροντας. Αφού κλείσετε το Marrow σύροντάς το στην εναλλαγή εφαρμογών, το iOS μπορεί να μην το ξυπνήσει στο παρασκήνιο μέχρι να το ανοίξετε ξανά.
- Οι ίδιες ημέρες φτάνουν δύο φορές. Επίτηδες: το Από την τελευταία εκτέλεση ξαναστέλνει τις δύο τελευταίες ημέρες, γιατί το Apple Health συνεχίζει να τις συμπληρώνει. Κρατήστε την πιο πρόσφατη τιμή ανά μέτρηση και ημέρα.
- Δεν ενεργοποιείται. Κάθε ενεργός αυτοματισμός μετράει ως σύνδεση. Το Δωρεάν πλάνο επιτρέπει 1 ενεργή σύνδεση τη φορά, το Marrow Pro έως 10: AI, διακομιστές και αυτοματισμοί μαζί. Απενεργοποιήστε πρώτα κάποιον άλλο.
- Οι μονάδες φαίνονται λάθος. Οι μετρήσεις φτάνουν στις αποθηκευμένες μονάδες που αναφέρει το
units(kg, m, mL, degC, kcal). Τα σετ ενδυνάμωσης ακολουθούν τις Ρυθμίσεις, Μονάδες, και το πεδίοunitλέει ποια είναι.
Οι λύσεις για κάθε εργαλείο χωριστά υπάρχουν στη σελίδα του: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, οποιοδήποτε URL.