Automatiseringer: dataene dine, sendt etter en tidsplan
Marrow kan sende en fil med helsedataene dine med POST til en hvilken som helst URL du velger, i den takten du velger, rett fra telefonen. Denne siden er referansen: hvordan du setter opp en, hvordan hver nyttelast ser ut, og hvordan du skriver noe som mottar den.
Ferdige oppsett for n8n, Zapier, Make, Home Assistant, Google Sheets og InfluxDB finner du under tilkoblinger.
Alle Marrow-guider: MCP · Selvdrevet speil · Automatiseringer · Filer · Brukerstøtte
Hva en automatisering er
En lagret jobb i Eksporter, Automatisert: én type data, ett format, én datoperiode, én URL, én kadens. Marrow bygger filen fra det verifiserte lageret sitt og sender den med POST til URL-en med appen lukket, etter hver synkronisering og ved hver oppdatering i bakgrunnen, så snart kadensen har gått. Ingenting går gjennom oss: telefonen snakker rett med endepunktet ditt.
Slik setter du opp en
- Fanen Eksporter, Automatisert: slå den på, deretter Ny automatisering. Lages den fra et verktøys side (n8n, Zapier, Home Assistant og de andre under tilkoblinger), bærer automatiseringen verktøyets navn og sier ved siden av hvert felt hva verktøyet vil ha der.
- Adresse: https-URL-en den skal sende POST til. Overskrifter: alle mottakeren din trenger (et
Authorization-bearer-token, enX-Gitlab-Token, hva som helst). Når verktøyet ikke trenger noen, ligger Legg til overskrift under Flere alternativer. - Data: Helsemålinger, Treningsøkter, Styrkelogg, Ernæringsdagbok eller Symptomer og humør, som JSON eller CSV. Én automatisering bærer én type, så lag én per type du vil ha. Hver som er på, teller som en tilkobling: Gratis har 1 tilkobling på om gangen, Marrow Pro opptil 10, AI-er og servere inkludert.
- Kadens: hvert så og så mange minutter, timer eller dager. Datoperioden, aggregeringen og tidsavbruddet ligger under Flere alternativer.
- Kjør nå sender en første nyttelast, slik at du kan sjekke mottakeren før du venter på tidsplanen.
Datoperioder
- Siden forrige kjøring (standard): alt siden forrige vellykkede kjøring, minus en overlapping på to dager. HealthKit fortsetter å fylle inn en dag etter at den er over, så overlappingen sender nylig avsluttede dager på nytt. Behold siste verdi per måling og dag hos deg, så er gjentakelsene harmløse. En mottaker som har vært nede en stund, får hver dag den gikk glipp av ved første kjøring som lykkes.
- I dag, Siste 7 / 30 / 90 dager, Siste år: faste, rullerende vinduer som sendes på nytt i sin helhet ved hver kjøring. Velg disse når du heller vil ha et øyeblikksbilde som reparerer seg selv enn en endring.
Nyttelastformer
Helsemålinger (dagstotaler, JSON)
Samme struktur som målingene fra Health Auto Export (en metrics-liste med name, units og data med qty), så en mottaker skrevet for den appen trenger bare små endringer: datoene her er rene dager, ikke tidsstempler, og nyttelastene for treningsøkter og styrke nedenfor er Marrows egne. Verdiene er i lagringsenheten som står i units (kg, m, mL, degC, kcal, count). Puls kommer som Avg, Min og Max for hver dag i bpm, og søvn som hver natt med fasene sine i timer. Regn om hos deg hvis du vil ha imperiske enheter.
{"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"}]}
]}}
Råprøver (grupperingen Råprøver) sender hver prøve med start- og sluttidspunkt i stedet for en dagstotal. CSV-målinger kommer som den brede tabellen som er beskrevet på filsiden.
Treningsøkter
{"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"}
]}}
Styrkelogg
Hvert arbeidssett (oppvarmingssett er utelatt), pluss fremgang per øvelse og volum per muskelgruppe. Vektene er i enheten du valgte i Innstillinger, Enheter. Feltet unit sier hvilken. Hvert sett har en set_type som er work, failure eller drop, og et sett har også rir når du har loggført repetisjoner i reserve. set_credits teller settene som krediteres en muskelgruppe, i brøkdeler når en øvelse trener flere grupper.
{"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}]
}}
Ernæringsdagbok
{"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}}
]}
]}}
Slik skriver du en mottaker
Alt som godtar en HTTPS POST og svarer 2xx, fungerer: en webhook-tjeneste, en serverløs funksjon, et skript på en hjemmeserver. Tre regler holder den robust:
- Siste verdi vinner. Lagre verdier med (måling, dag) som nøkkel, eller oppføringens egen identitet, og overskriv ved gjentakelse. Vinduene overlapper med vilje.
- Arkiver råinnholdet først. Tolk det etterpå. En feil i tolkingen skal aldri koste deg dataene.
- Svar raskt. Marrow venter opptil tidsavbruddet du har satt (standard 60 s) og markerer ellers kjøringen som mislykket. Mislykkede kjøringer prøves på nytt ved neste kadens fra det siste vellykkede vinduet.
En Python-mottaker på tolv linjer som arkiverer hvert innlegg:
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()
Sett den bak HTTPS (en Cloudflare Tunnel, Tailscale Funnel eller en hvilken som helst reverse proxy) og pek automatiseringen mot den. Hvis det du vil ha, er en kopi du kan spørre i, i stedet for en mappe med filer, er det selvdrevne speilet akkurat den mottakeren, ferdig skrevet.
Greit å vite
- Automatiseringer kjører bare når iOS lar appen kjøre: etter en synkronisering, ved oppdatering i forgrunnen og under bakgrunnsoppdatering. En telefon som ligger låst hele dagen, sender når den låses opp neste gang. Vinduet siden forrige kjøring dekker gapet.
- Hver kjøring logges i automatiseringens Aktivitetslogg (Flere alternativer) med resultatet, så en feilkonfigurert URL synes i appen, ikke bare på serveren din.
- Dupliser en automatisering for å gjenbruke overskriftene dens til en annen type.
Feilsøking
Test med Kjør nå. Linjen under forteller hva som skjedde, og Flere alternativer, Aktivitetslogg beholder de siste 30 kjøringene med den samme linjen. Slå på Varsle ved kjøring (Flere alternativer) for å få et varsel for hver kjøring mens du sjekker.
| Hva Marrow viser | Hva du gjør |
|---|---|
En oppsummering av det som ble sendt, for eksempel 12 diary entries | Levert: mottakeren svarte 2xx. Hvis ingenting vises hos den, se de siste radene nedenfor. |
Server answered 401 eller 403 | Mottakeren vil ha en overskrift, eller den du la til, er feil. Sjekk navnet og verdien, inkludert Bearer og mellomrommet etter det. |
Server answered 404 | Feil adresse, eller mottakeren lytter ikke. I n8n bruker du Production URL og aktiverer arbeidsflyten. Sjekk om en bane mangler på slutten. |
Server answered 405 | Adressen tar ikke imot en POST. Pek den mot endepunktet som er ment for innkommende data. |
Server answered 413 | Nyttelasten er for stor for mottakeren. Velg en kortere datoperiode, færre målinger eller Dagstotaler i stedet for Råprøver. |
Server answered 500 eller en annen 5xx | Mottakeren feilet under behandlingen. Se i dens egen logg. Arkiver råinnholdet først, og tolk det etterpå. |
| Forespørselen ble tidsavbrutt | Mottakeren brukte lenger tid enn tidsavbruddet. Svar først og jobb etterpå, eller øk Tidsavbrudd under Flere alternativer (opptil 300 s). |
| Retningslinjene for App Transport Security krever bruk av en sikker tilkobling | Adressen er vanlig http på internett. Bruk https. iOS lar Marrow bruke vanlig http bare på ditt eget nettverk. |
| Finner ikke en server med det angitte vertsnavnet | En skrivefeil i adressen, eller et navn bare hjemmenettverket ditt kjenner. Sjekk det i Safari på telefonen. |
No valid URL - set an https endpoint first | Adressen er tom eller starter ikke med https:// (eller http:// på ditt eget nettverk). |
Nothing to export in this range | Ingen data av den typen i datoperioden. Velg et lengre område under Flere alternativer, eller loggfør noe først. |
- Levert, men ingenting kommer frem. Noen mottakere svarer 200 selv når de kaster dataene. Home Assistant gjør det med en feil webhook-ID, og Apps Script-oppskriften gjør det med en feil
?key=. Zapier og Make viser ingenting før du laster inn et eksempel i editoren deres. Sjekk mottakerens egen historikk eller logg. - Kjøringene kommer sent eller ikke i det hele tatt. iOS velger tidspunktet for bakgrunnskjøringer: etter en synkronisering, når du åpner Marrow, og under bakgrunnsoppdatering. La Bakgrunnsoppdatering være på for Marrow (Innstillinger, Generelt, Bakgrunnsoppdatering). Lavstrømmodus holder bakgrunnskjøringer tilbake, og en telefon som ligger låst, sender når den låses opp neste gang. Siden forrige kjøring tar igjen det tapte ved neste kjøring som lykkes.
- En mottaker på hjemmenettverket ditt. Marrow trenger tilgang til Lokalt nettverk for å nå den: Innstillinger, Personvern og sikkerhet, Lokalt nettverk. Trykk på Kjør nå én gang med Marrow åpen, slik at iOS kan spørre. I bakgrunnen avslår iOS uten å spørre helt til du har svart.
- Sveipet bort. Etter at du har sveipet Marrow bort i appvelgeren, vekker kanskje ikke iOS den i bakgrunnen før du åpner den igjen.
- De samme dagene kommer to ganger. Med vilje: Siden forrige kjøring sender de to siste dagene på nytt, fordi Apple Health fortsetter å fylle dem inn. Behold siste verdi per måling og dag.
- Den slår seg ikke på. Hver automatisering som er på, teller som en tilkobling. Gratis har 1 tilkobling på om gangen, Marrow Pro opptil 10: AI-er, servere og automatiseringer til sammen. Slå en annen av først.
- Enhetene ser feil ut. Målingene kommer i lagringsenhetene som står i
units(kg, m, mL, degC, kcal). Styrkesett følger Innstillinger, Enheter, og feltetunitsier hvilken.
Løsninger for ett verktøy om gangen står på verktøyets egen side: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, en hvilken som helst URL.