Marrow Health
MS
Muat turun

Hantar data Apple Health ke webhook

Apple Health tiada API web, jadi data anda hanya sampai ke webhook apabila apl pada iPhone anda menghantarnya. Marrow Health melakukannya secara percuma: automasi melakukan POST metrik kesihatan, senaman, set kekuatan, diari makanan, atau simptom dan mood anda ke mana-mana URL, sebagai JSON atau CSV, mengikut jadual pilihan anda, dengan apl ditutup. Di bawah ialah persediaan, muatan dan penerima yang berfungsi untuk n8n, Home Assistant dan pelayan biasa. Kami membuat Marrow.

Sediakan automasi

  1. Dalam Marrow Health, buka tab Eksport, kemudian Automatik, kemudian Automasi Baharu.
  2. Tampal URL webhook anda (gunakan HTTPS). Tambah mana-mana pengepala yang disemak oleh penerima anda, seperti token pembawa Authorization atau kunci header-auth n8n.
  3. Pilih jenis data: Metrik kesihatan, Senaman, Log kekuatan, Diari pemakanan, atau Gejala dan mood. Satu automasi menghantar satu jenis, dan anda boleh mempunyai sehingga sepuluh.
  4. Pilih JSON atau CSV, julat tarikh (Sejak larian terakhir ialah lalai) dan kekerapan ia berjalan, dalam minit, jam atau hari.
  5. Hidupkannya dan ketik Jalankan sekarang untuk menghantar muatan pertama sementara anda memerhatikan penerima.

Setiap permintaan ialah POST dengan Content-Type: application/json (atau text/csv) dan pengepala anda. Setiap larian, beserta kod responsnya, disenaraikan dalam sejarah automasi dalam apl.

Apa yang sampai

Metrik kesihatan sampai sebagai jumlah harian, dalam unit yang dinamakan dalam units. Kadar denyutan jantung datang sebagai purata, minimum dan maksimum setiap hari, dan tidur sebagai setiap malam beserta peringkatnya, dalam jam:

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

Muatan senaman, kekuatan, pemakanan dan mood, sampel mentah dan bukan jumlah harian, serta susun atur CSV, ada pada rujukan automasi.

Menerimanya dalam n8n

  1. Tambah nod Webhook. Tetapkan HTTP Method kepada POST dan beri laluan, seperti apple-health.
  2. Untuk rahsia, tetapkan Authentication kepada Header Auth dan tambah nama dan nilai pengepala yang sama pada automasi Marrow.
  3. Klik Listen for test event, kemudian ketik Jalankan sekarang dalam Marrow dalam masa dua minit. Muatan muncul dalam editor.
  4. Terbitkan aliran kerja dan arahkan Marrow ke Production URL (yang mempunyai /webhook/, bukan /webhook-test/). URL ujian berhenti mendengar selepas ujian.

Muatan berada di bawah body, jadi langkah hari ini ialah {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} dalam ungkapan. Tambah nod Split Out pada body.data.metrics untuk mengendalikan setiap metrik sebagai item tersendiri. n8n menerima muatan sehingga 16 MB secara lalai, yang meliputi jumlah harian bertahun-tahun. Larian pengeluaran dipaparkan di bawah Executions, bukan dalam editor. (n8n Webhook docs)

Menerimanya dalam Home Assistant

Pencetus webhook menerima POST pada /api/webhook/<webhook_id>. Automasi ini menyimpan kiraan langkah terkini dalam pembantu nombor bernama input_number.steps_today (cipta dahulu, dengan maksimum melebihi hari terbaik anda):

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 }}

(Dokumentasi pencetus webhook Home Assistant)

Menerimanya pada pelayan anda sendiri

Mana-mana titik akhir yang menerima POST HTTPS dan menjawab 2xx boleh digunakan. Yang ini mengarkibkan setiap muatan ke fail:

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 dengan Cloudflare Tunnel, Tailscale Funnel atau proksi songsang. Jika anda lebih suka pangkalan data yang boleh ditanya daripada folder fail, cermin dihoskan sendiri Marrow ialah penerima itu yang sudah siap ditulis, dan ejen AI juga boleh membuat pertanyaan padanya.

Tiga peraturan untuk penerima yang tidak pernah kehilangan data

Bila ia berjalan?

Bila-bila masa iOS membenarkan Marrow berjalan: selepas ia menyegerak dengan Apple Health, apabila anda membukanya, dan semasa muat semula latar belakang, setelah selang yang anda pilih berlalu. iOS yang menentukan bila muat semula latar belakang berlaku, jadi telefon yang dibiarkan berkunci sepanjang hari menghantar apabila ia dibuka kunci seterusnya, dan Sejak larian terakhir meliputi jurang itu.

Cara lain