Automasi: data anda, ditolak mengikut jadual
Marrow boleh membuat POST fail data kesihatan anda ke mana-mana URL pilihan anda, pada kekerapan pilihan anda, terus daripada telefon. Halaman ini ialah rujukannya: cara menyediakannya, rupa setiap muatan, dan cara menulis sesuatu yang menerimanya.
Persediaan siap pakai untuk n8n, Zapier, Make, Home Assistant, Google Sheets dan InfluxDB ada di bawah sambungan.
Semua panduan Marrow: MCP · Cermin dihoskan sendiri · Automasi · Fail · Sokongan
Apa itu automasi
Tugas tersimpan dalam Eksport, Automatik: satu jenis data, satu format, satu julat tarikh, satu URL, satu kekerapan. Marrow membina fail daripada stor yang disahkan dan membuat POST ke URL dengan apl ditutup, selepas setiap commit penyegerakan dan pada setiap muat semula latar belakang, bila-bila masa kekerapan itu telah berlalu. Tiada apa-apa melalui kami: telefon bercakap terus dengan titik akhir anda.
Menyediakannya
- Tab Eksport, Automatik: hidupkannya, kemudian Automasi Baharu. Jika dibuat daripada halaman sesuatu alat (n8n, Zapier, Home Assistant dan lain-lain di bawah sambungan), automasi itu membawa nama alat tersebut dan menyatakan di sebelah setiap medan apa yang alat itu mahu di situ.
- Alamat: URL https yang akan di-POST. Pengepala: mana-mana yang diperlukan penerima anda (token pembawa
Authorization,X-Gitlab-Token, apa sahaja). Apabila alat tidak memerlukan satu pun, Tambah pengepala ada di bawah Lebih banyak pilihan. - Data: Metrik kesihatan, Senaman, Log kekuatan, Diari pemakanan, atau Gejala dan mood, sebagai JSON atau CSV. Satu automasi membawa satu jenis, jadi buat satu bagi setiap jenis yang anda mahu. Setiap satu yang dihidupkan dikira sebagai sambungan: Percuma mengekalkan 1 sambungan hidup pada satu masa, Marrow Pro sehingga 10, termasuk AI dan pelayan.
- Kekerapan: setiap beberapa minit, jam atau hari. Julat tarikh, pengagregatan dan tamat masa ada di bawah Lebih banyak pilihan.
- Jalankan sekarang menghantar muatan pertama supaya anda boleh menyemak penerima sebelum menunggu jadual.
Julat tarikh
- Sejak larian terakhir (lalai): segala-galanya sejak larian berjaya yang terakhir, tolak pertindihan dua hari. HealthKit terus mengisi sesuatu hari selepas ia tamat, jadi pertindihan itu menghantar semula hari yang baru selesai. Simpan nilai terkini bagi setiap metrik dan hari di pihak anda dan pengulangan itu tidak mendatangkan masalah. Penerima yang tidak berfungsi untuk seketika menerima setiap hari yang terlepas pada larian pertama yang berjaya.
- Hari ini, 7 / 30 / 90 hari lepas, Tahun lepas: tetingkap bergulir tetap, dihantar semula sepenuhnya setiap larian. Pilih ini apabila anda lebih suka syot kilat yang memulihkan diri daripada delta.
Bentuk muatan
Metrik kesihatan (jumlah harian, JSON)
Struktur yang sama dengan metrik Health Auto Export (senarai metrics bagi name, units dan data dengan qty), jadi penerima yang ditulis untuk apl itu hanya memerlukan sedikit perubahan: tarikh di sini ialah hari biasa, bukan cap masa, dan muatan senaman dan kekuatan di bawah ialah milik Marrow sendiri. Nilai berada dalam unit tersimpan yang dinamakan dalam units (kg, m, mL, degC, kcal, count). Kadar denyutan jantung datang sebagai Avg, Min dan Max setiap hari dalam bpm, dan tidur sebagai setiap malam beserta peringkatnya dalam jam. Tukar di pihak anda jika anda mahu unit imperial.
{"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"}]}
]}}
Sampel mentah (pengelompokan Sampel mentah) menghantar setiap sampel dengan masa mula dan tamatnya dan bukan jumlah harian. Metrik CSV datang sebagai jadual lebar yang diterangkan pada halaman fail.
Senaman
{"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"}
]}}
Log kekuatan
Setiap set kerja (set memanaskan badan ditinggalkan), ditambah kemajuan bagi setiap senaman dan isi padu bagi setiap kumpulan otot. Berat berada dalam unit yang anda pilih dalam Tetapan, Unit. Medan unit menyatakan yang mana. set_type setiap set ialah work, failure atau drop, dan satu set juga membawa rir apabila anda mencatat ulangan yang tinggal. set_credits mengira set yang dikreditkan kepada satu kumpulan otot, dalam pecahan apabila satu senaman melatih beberapa kumpulan.
{"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}]
}}
Diari pemakanan
{"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}}
]}
]}}
Menulis penerima
Apa-apa yang menerima POST HTTPS dan menjawab 2xx boleh digunakan: perkhidmatan webhook, fungsi tanpa pelayan, skrip pada pelayan rumah. Tiga peraturan menjadikannya mantap:
- Yang terkini menang. Simpan nilai berdasarkan (metrik, hari) atau identiti entri itu sendiri dan tulis ganti apabila berulang. Tetingkap bertindih dengan sengaja.
- Arkibkan badan mentah dahulu. Kemudian huraikan. Pepijat penghurai tidak sepatutnya menyebabkan anda kehilangan data.
- Jawab dengan cepat. Marrow menunggu sehingga tamat masa yang anda tetapkan (lalai 60 s) dan menandakan larian itu gagal jika tidak. Larian yang gagal dicuba semula pada detik kekerapan seterusnya daripada tetingkap berjaya yang terakhir.
Penerima Python dua belas baris yang mengarkibkan setiap post:
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()
Letakkannya di belakang HTTPS (Cloudflare Tunnel, Tailscale Funnel, atau mana-mana proksi songsang) dan arahkan automasi kepadanya. Jika yang anda mahu ialah salinan yang boleh ditanya dan bukan folder fail, cermin dihoskan sendiri ialah penerima itu yang sudah siap ditulis.
Perlu diketahui
- Automasi hanya berjalan apabila iOS membenarkan apl berjalan: selepas commit penyegerakan, pada muat semula latar depan, dan semasa muat semula latar belakang. Telefon yang kekal berkunci sepanjang hari menghantar apabila ia dibuka kunci seterusnya. Tetingkap sejak-larian-terakhir meliputi jurang itu.
- Setiap larian dilog dalam Log aktiviti automasi (Lebih banyak pilihan) beserta keputusannya, jadi URL yang salah konfigurasi kelihatan dalam apl, bukan hanya pada pelayan anda.
- Gandakan automasi untuk menggunakan semula pengepalanya bagi jenis lain.
Penyelesaian masalah
Uji dengan Jalankan sekarang. Baris di bawahnya menyatakan apa yang berlaku, dan Lebih banyak pilihan, Log aktiviti menyimpan 30 larian terakhir dengan baris yang sama. Hidupkan Beritahu apabila dijalankan (Lebih banyak pilihan) untuk mendapat pemberitahuan bagi setiap larian semasa anda menyemak.
| Apa yang Marrow tunjukkan | Apa yang perlu dibuat |
|---|---|
Ringkasan apa yang dihantar, seperti 12 diary entries | Dihantar: penerima menjawab 2xx. Jika tiada apa-apa muncul di pihaknya, lihat baris terakhir di bawah. |
Server answered 401 atau 403 | Penerima mahukan pengepala, atau yang anda tambah salah. Semak nama dan nilainya, termasuk Bearer dan ruang selepasnya. |
Server answered 404 | Alamat salah, atau penerima tidak mendengar. Dalam n8n, gunakan Production URL dan aktifkan aliran kerja. Semak sama ada laluan di hujung tertinggal. |
Server answered 405 | Alamat tidak menerima POST. Arahkan kepada titik akhir yang dimaksudkan untuk data masuk. |
Server answered 413 | Muatan terlalu besar untuk penerima. Pilih julat tarikh yang lebih pendek, kurang metrik, atau Jumlah harian dan bukan Sampel mentah. |
Server answered 500 atau 5xx yang lain | Penerima gagal semasa mengendalikannya. Lihat lognya sendiri. Arkibkan badan mentah dahulu, kemudian huraikan. |
| Permintaan tamat masa | Penerima mengambil masa lebih lama daripada had masa. Jawab dahulu dan bekerja kemudian, atau naikkan Tamat masa di bawah Lebih banyak pilihan (sehingga 300 s). |
| Dasar App Transport Security memerlukan penggunaan sambungan selamat | Alamat ialah http biasa di internet. Gunakan https. iOS membenarkan Marrow menggunakan http biasa hanya pada rangkaian anda sendiri. |
| Pelayan dengan nama hos yang dinyatakan tidak dapat ditemui | Salah taip dalam alamat, atau nama yang hanya diketahui oleh rangkaian rumah anda. Semaknya dalam Safari pada telefon. |
No valid URL - set an https endpoint first | Alamat kosong atau tidak bermula dengan https:// (atau http:// pada rangkaian anda sendiri). |
Nothing to export in this range | Tiada data jenis itu dalam julat tarikh. Pilih julat yang lebih panjang di bawah Lebih banyak pilihan, atau catat sesuatu dahulu. |
- Dihantar, namun tiada apa-apa sampai. Sesetengah penerima menjawab 200 walaupun mereka menggugurkan data. Home Assistant berbuat demikian dengan id webhook yang salah, dan resipi Apps Script berbuat demikian dengan
?key=yang salah. Zapier dan Make tidak menunjukkan apa-apa sehingga anda memuatkan sampel dalam editor mereka. Semak sejarah atau log penerima sendiri. - Larian datang lewat atau tidak langsung. iOS memilih masa untuk larian latar belakang: selepas penyegerakan, apabila anda membuka Marrow, dan semasa muat semula latar belakang. Pastikan Background App Refresh hidup untuk Marrow (Settings, General, Background App Refresh). Mod Kuasa Rendah menahan larian latar belakang, dan telefon yang kekal berkunci menghantar apabila ia dibuka kunci seterusnya. Sejak larian terakhir mengejar pada larian berjaya yang berikutnya.
- Penerima pada rangkaian rumah anda. Marrow memerlukan akses Local Network untuk mencapainya: Settings, Privacy and Security, Local Network. Ketik Jalankan sekarang sekali dengan Marrow dibuka supaya iOS boleh bertanya. Di latar belakang, iOS menolak tanpa bertanya sehingga anda menjawab.
- Dileret keluar. Selepas anda meleret Marrow keluar dalam penukar apl, iOS mungkin tidak membangunkannya di latar belakang sehingga anda membukanya semula.
- Hari yang sama sampai dua kali. Dengan sengaja: Sejak larian terakhir menghantar semula dua hari terakhir, kerana Apple Health terus mengisinya. Simpan nilai terkini bagi setiap metrik dan hari.
- Ia tidak mahu hidup. Setiap automasi yang hidup dikira sebagai sambungan. Percuma mengekalkan 1 sambungan hidup pada satu masa, Marrow Pro sehingga 10: AI, pelayan dan automasi bersama. Matikan satu lagi dahulu.
- Unit nampak salah. Metrik sampai dalam unit tersimpan yang dinamakan dalam
units(kg, m, mL, degC, kcal). Set kekuatan mengikut Tetapan, Unit, dan medanunitmenyatakan yang mana.
Penyelesaian bagi satu alat pada satu masa ada pada halamannya: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, mana-mana URL.