Автоматизації: ваші дані, надіслані за розкладом
Marrow може надсилати POST-запитом файл із вашими даними про здоров'я на будь-який URL, який ви оберете, з обраною вами періодичністю, просто з телефона. Ця сторінка це довідник: як налаштувати автоматизацію, як виглядає кожен пакет даних і як написати те, що його приймає.
Готові налаштування для n8n, Zapier, Make, Home Assistant, Google Sheets та InfluxDB зібрано в розділі підключень.
Усі посібники Marrow: MCP · Дзеркало на власному сервері · Автоматизації · Файли · Підтримка
Що таке автоматизація
Збережене завдання в розділі Експорт, Автоматизовано: один вид даних, один формат, один діапазон дат, один URL, одна періодичність. Marrow формує файл зі свого перевіреного сховища й надсилає його на URL POST-запитом, коли застосунок закрито, після кожної синхронізації та під час кожного фонового оновлення, щойно минула задана періодичність. Через нас нічого не проходить: телефон спілкується просто з вашою кінцевою точкою.
Як налаштувати
- Вкладка Експорт, Автоматизовано: увімкніть, потім Нова автоматизація. Якщо створити її зі сторінки інструмента (n8n, Zapier, Home Assistant та інші в розділі підключень), автоматизація матиме назву цього інструмента, а біля кожного поля буде підказано, що саме туди очікує інструмент.
- Адреса: URL із https, на який надсилати POST. Заголовки: усе, що потрібне вашому приймачу (токен
Authorizationтипу bearer,X-Gitlab-Token, будь-що). Якщо інструменту заголовки не потрібні, «Додати заголовок» ховається в розділі «Більше параметрів». - Дані: Показники здоров'я, Тренування, Журнал силових, Щоденник харчування або Симптоми та настрій, у форматі JSON чи CSV. Одна автоматизація несе один вид, тож робіть по одній на кожен потрібний вид. Кожна ввімкнена рахується як підключення: у безкоштовному тарифі одночасно може бути ввімкнено 1 підключення, у Marrow Pro до 10, враховуючи ШІ та сервери.
- Періодичність: раз на стільки-то хвилин, годин або днів. Діапазон дат, агрегація й тайм-аут містяться в розділі Більше параметрів.
- Запустити зараз надсилає перший пакет, щоб ви могли перевірити приймач, не чекаючи на розклад.
Діапазони дат
- З останнього запуску (за замовчуванням): усе з часу останнього успішного запуску, мінус дводенне перекриття. HealthKit доповнює дані дня і після його завершення, тому перекриття повторно надсилає щойно завершені дні. Зберігайте у себе останнє значення для кожного показника й дня, і повтори нічого не зашкодять. Приймач, який якийсь час не працював, отримує всі пропущені дні під час першого успішного запуску.
- Сьогодні, Останні 7 / 30 / 90 днів, Минулий рік: фіксовані рухомі вікна, які щоразу надсилаються повністю. Обирайте їх, якщо вам потрібен знімок, що сам себе виправляє, а не приріст.
Вигляд даних
Показники здоров'я (денні підсумки, JSON)
Та сама структура, що й у метрик Health Auto Export (список metrics з name, units і data із qty), тож приймач, написаний для цього застосунку, потребує лише невеликих змін: дати тут це прості дні, а не позначки часу, а наведені нижче дані про тренування й силові це власний формат Marrow. Значення подано в одиницях зберігання, названих у units (kg, m, mL, degC, kcal, count). Пульс надходить як Avg, Min і Max за кожен день у уд/хв, а сон як кожна ніч із фазами в годинах. Якщо вам потрібні імперські одиниці, переведіть їх у себе.
{"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, якщо ви записали повторення в запасі. 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}}
]}
]}}
Як написати приймач
Підійде все, що приймає POST через HTTPS і відповідає кодом 2xx: вебхук-сервіс, безсерверна функція, скрипт на домашньому сервері. Три правила роблять його надійним:
- Перемагає останнє. Зберігайте значення за ключем (показник, день) або за власним ідентифікатором запису й перезаписуйте при повторі. Вікна перекриваються за задумом.
- Спершу архівуйте сирий вміст. Потім розбирайте. Помилка в аналізаторі ніколи не має коштувати вам даних.
- Відповідайте швидко. Marrow чекає до заданого вами тайм-ауту (за замовчуванням 60 с), а потім позначає запуск як невдалий. Невдалі запуски повторюються на наступному циклі з останнього успішного вікна.
Приймач на 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 або будь-який зворотний проксі) і вкажіть його в автоматизації. Якщо вам потрібна копія, до якої можна робити запити, а не тека з файлами, то дзеркало на власному сервері це вже написаний приймач.
Корисно знати
- Автоматизації працюють лише тоді, коли iOS дозволяє застосунку працювати: після синхронізації, під час оновлення на передньому плані та під час фонового оновлення. Телефон, що цілий день заблокований, надсилає дані, коли його наступного разу розблокують. Вікно «з останнього запуску» закриває прогалину.
- Кожен запуск записано в Журналі активності автоматизації (Більше параметрів) разом із результатом, тож помилковий URL видно в застосунку, а не лише на вашому сервері.
- Дублюйте автоматизацію, щоб використати її заголовки для іншого виду даних.
Усунення несправностей
Перевіряйте через Запустити зараз. Рядок під кнопкою каже, що сталося, а Більше параметрів, Журнал активності зберігає останні 30 запусків із таким самим рядком. Увімкніть Сповіщати про запуск (Більше параметрів), щоб отримувати сповіщення про кожен запуск, поки ви перевіряєте.
| Що показує Marrow | Що робити |
|---|---|
Підсумок надісланого, наприклад 12 diary entries | Доставлено: приймач відповів 2xx. Якщо на його боці нічого не видно, перегляньте останні рядки нижче. |
Server answered 401 або 403 | Приймач вимагає заголовок, або доданий вами неправильний. Перевірте його назву й значення, зокрема Bearer і пробіл після нього. |
Server answered 404 | Неправильна адреса, або приймач не слухає. В n8n використовуйте Production URL і активуйте робочий процес. Перевірте, чи не бракує шляху в кінці. |
Server answered 405 | Адреса не приймає POST. Вкажіть кінцеву точку, призначену для вхідних даних. |
Server answered 413 | Пакет завеликий для приймача. Виберіть коротший діапазон дат, менше показників або Денні підсумки замість Сирих зразків. |
Server answered 500 або інша 5xx | Приймач зазнав збою під час обробки. Перегляньте його власний журнал. Спершу архівуйте сирий вміст, потім розбирайте. |
| The request timed out | Приймач відповідав довше за тайм-аут. Спершу відповідайте, а працюйте потім, або збільште Тайм-аут у розділі Більше параметрів (до 300 с). |
| The App Transport Security policy requires the use of a secure connection | Адреса це звичайний http в інтернеті. Використовуйте https. iOS дозволяє Marrow користуватися звичайним http лише у вашій власній мережі. |
| A server with the specified hostname could not be found | Помилка в адресі або ім'я, яке знає лише ваша домашня мережа. Перевірте її в Safari на телефоні. |
No valid URL - set an https endpoint first | Адреса порожня або не починається з https:// (чи з http:// у вашій власній мережі). |
Nothing to export in this range | Даних такого виду за цей діапазон дат немає. Виберіть довший діапазон у розділі Більше параметрів або спершу щось запишіть. |
- Доставлено, але нічого не надходить. Деякі приймачі відповідають 200, навіть коли відкидають дані. Home Assistant так робить при неправильному ідентифікаторі вебхука, а рецепт з Apps Script при неправильному
?key=. Zapier і Make нічого не показують, доки ви не завантажите зразок у їхньому редакторі. Перевірте власну історію або журнал приймача. - Запуски запізнюються або не відбуваються взагалі. Момент фонових запусків обирає iOS: після синхронізації, коли ви відкриваєте Marrow, і під час фонового оновлення. Залиште для Marrow ввімкненим фонове оновлення програм (Параметри, Загальні, Фонове оновлення програм). Режим енергозбереження стримує фонові запуски, а телефон, що залишається заблокованим, надсилає дані, коли його наступного разу розблокують. «З останнього запуску» надолужує під час наступного успішного запуску.
- Приймач у вашій домашній мережі. Щоб його досягти, Marrow потрібен доступ до локальної мережі: Параметри, Конфіденційність і безпека, Локальна мережа. Один раз торкніться «Запустити зараз» при відкритому Marrow, щоб iOS могла спитати. У фоні iOS відмовляє без запиту, поки ви не відповісте.
- Закрито змахуванням. Якщо ви змахнули Marrow в перемикачі програм, iOS може не будити його у фоні, доки ви не відкриєте його знову.
- Одні й ті самі дні надходять двічі. Це навмисно: «З останнього запуску» надсилає останні два дні повторно, бо Apple Health їх доповнює. Зберігайте останнє значення для кожного показника й дня.
- Не вмикається. Кожна ввімкнена автоматизація рахується як підключення. У безкоштовному тарифі одночасно ввімкнено 1 підключення, у Marrow Pro до 10: ШІ, сервери й автоматизації разом. Спершу вимкніть іншу.
- Одиниці виглядають неправильно. Показники надходять в одиницях зберігання, названих у
units(kg, m, mL, degC, kcal). Силові підходи відповідають Параметри, Одиниці, а полеunitвказує, яка саме.
Виправлення для кожного інструмента окремо є на його сторінці: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, будь-який URL.