Marrow Health
DA
Hent

Automatiseringer: dine data, sendt efter en tidsplan

Marrow kan sende en fil med dine sundhedsdata med POST til en hvilken som helst URL, du vælger, med den hyppighed, du vælger, direkte fra telefonen. Denne side er referencen: hvordan du opsætter en, hvordan hvert indhold ser ud, og hvordan du skriver noget, der kan modtage det.

Færdige opsætninger til n8n, Zapier, Make, Home Assistant, Google Sheets og InfluxDB finder du under forbindelser.

Alle Marrow-guides: MCP · Selvhostet spejl · Automatiseringer · Filer · Support

Hvad en automatisering er

Et gemt job i Eksporter, Automatiseret: én slags data, ét format, ét datointerval, én URL, én hyppighed. Marrow bygger filen ud fra sit kontrollerede lager og sender den med POST til URL'en, mens appen er lukket, efter hver gennemført synkronisering og ved hver opdatering i baggrunden, når intervallet er gået. Intet går gennem os: telefonen taler direkte med dit endpoint.

Sådan opsætter du en

  1. Fanen Eksporter, Automatiseret: slå den til, og vælg derefter Ny automatisering. Hvis den laves fra et værktøjs side (n8n, Zapier, Home Assistant og de andre under forbindelser), får automatiseringen værktøjets navn, og ved hvert felt står det, hvad værktøjet vil have der.
  2. Adresse: den https-URL, den skal sende til med POST. Headers: dem din modtager har brug for (et bearer-token i Authorization, en X-Gitlab-Token, hvad som helst). Når værktøjet ikke kræver nogen, findes Tilføj overskrift under Flere muligheder.
  3. Data: Sundhedsmålinger, Træninger, Styrkelog, Kostdagbog eller Symptomer og humør, som JSON eller CSV. Én automatisering indeholder én slags, så lav én for hver slags, du vil have. Hver, der er slået til, tæller som en forbindelse: Gratis beholder 1 forbindelse slået til ad gangen, Marrow Pro op til 10, AI'er og servere medregnet.
  4. Hyppighed: hvert så og så mange minutter, timer eller dage. Datointervallet, sammenlægningen og timeout findes under Flere muligheder.
  5. Kør nu sender det første indhold, så du kan tjekke modtageren, før du venter på tidsplanen.

Datointervaller

Indholdets opbygning

Sundhedsmålinger (daglige totaler, JSON)

Samme opbygning som målingerne fra Health Auto Export (en liste metrics med name, units og data med qty), så en modtager skrevet til den app kun skal have små ændringer: datoer er her almindelige dage, ikke tidsstempler, og indholdet for træning og styrke nedenfor er Marrows eget. Værdierne er i den gemte enhed, der står i units (kg, m, mL, degC, kcal, count). Puls kommer som hver dags Avg, Min og Max i bpm, og søvn som hver nat med sine faser i timer. Regn om hos dig, hvis du vil have imperiale enheder.

{"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 daglig total. CSV-målinger kommer som den brede tabel, der er beskrevet på siden om filer.

Træninger

{"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"}
]}}

Styrkelog

Hvert arbejdssæt (opvarmning er udeladt) plus fremgang pr. øvelse og volumen pr. muskelgruppe. Vægte er i den enhed, du valgte under Indstillinger, Enheder. Feltet unit fortæller hvilken. Hvert sæts set_type er work, failure eller drop, og et sæt har også rir, når du loggede gentagelser i reserve. set_credits tæller de sæt, der tilskrives en muskelgruppe, i brøkdele, når en øvelse arbejder med 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}]
}}

Kostdagbog

{"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}}
  ]}
]}}

Skriv en modtager

Alt, der tager imod en HTTPS POST og svarer med 2xx, virker: en webhook-tjeneste, en serverless-funktion, et script på en server derhjemme. Tre regler holder det robust:

En Python-modtager på tolv linjer, der arkiverer hvert indlæg:

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

Sæt den bag HTTPS (en Cloudflare Tunnel, Tailscale Funnel eller en hvilken som helst reverse proxy), og peg automatiseringen på den. Hvis du vil have en kopi, du kan forespørge, frem for en mappe med filer, er det selvhostede spejl netop den modtager, allerede skrevet.

Godt at vide

Fejlfinding

Test med Kør nu. Linjen under den fortæller, hvad der skete, og Flere muligheder, Aktivitetslog gemmer de seneste 30 kørsler med samme linje. Slå Giv besked ved kørsel (Flere muligheder) til for at få en notifikation for hver kørsel, mens du tjekker.

Hvad Marrow viserHvad du skal gøre
En oversigt over, hvad der blev sendt, fx 12 diary entriesLeveret: modtageren svarede 2xx. Hvis der ikke vises noget hos den, så se de sidste rækker nedenfor.
Server answered 401 eller 403Modtageren vil have en header, eller den du tilføjede, er forkert. Tjek navn og værdi, også Bearer og mellemrummet efter.
Server answered 404Forkert adresse, eller modtageren lytter ikke. I n8n skal du bruge Production URL og aktivere workflowet. Tjek, om der mangler en sti til sidst.
Server answered 405Adressen tager ikke imod en POST. Peg på det endpoint, der er lavet til indgående data.
Server answered 413Indholdet er for stort til modtageren. Vælg et kortere datointerval, færre målinger eller Daglige totaler i stedet for Rå prøver.
Server answered 500 eller en anden 5xxModtageren fejlede under behandlingen. Kig i dens egen log. Arkivér den rå tekst først, og læs den derefter.
Anmodningen fik timeoutModtageren brugte længere tid end timeout. Svar først, og arbejd bagefter, eller hæv Timeout under Flere muligheder (op til 300 s).
The App Transport Security policy requires the use of a secure connectionAdressen er almindelig http på internettet. Brug https. iOS lader kun Marrow bruge almindelig http på dit eget netværk.
A server with the specified hostname could not be foundEn tastefejl i adressen eller et navn, som kun dit hjemmenetværk kender. Tjek det i Safari på telefonen.
No valid URL - set an https endpoint firstAdressen er tom eller starter ikke med https:// (eller http:// på dit eget netværk).
Nothing to export in this rangeIngen data af den slags i datointervallet. Vælg et længere interval under Flere muligheder, eller log noget først.

Løsninger for ét værktøj ad gangen står på dets side: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, enhver URL.