[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80686":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":26,"discoverSource":27},80686,"miband-bot","iAlexeyRu\u002Fmiband-bot","iAlexeyRu","Telegram-бот для Xiaomi Fitness \u002F Mi Band. Автономный импорт, SQLite и экспорт. | Self-hosted Mi Band health tracker bot.","https:\u002F\u002Fialexey.ru",null,"Python",51,5,2,0,3,4,2.33,"GNU General Public License v3.0",false,"main",[],"2026-06-12 02:04:05","# miband-bot\n\nРусский | [English](README_EN.md)\n\nЛичный self-hosted Telegram-бот для данных Xiaomi Fitness \u002F Mi Band.\n\nЗабирает шаги, сон, пульс, SpO2, стресс, суточную активность, вес\nи тренировки из облака Xiaomi Fitness, хранит их в локальной SQLite-базе\nи даёт доступ к ним прямо из Telegram —\nбез сторонних сервисов и без передачи данных третьим лицам.\n\n> **Проект рассчитан на одного владельца.**\n> Это не публичный бот и не медицинский сервис.\n\n## Возможности\n\n- Просмотр последних шагов, сна, пульса, SpO2, стресса, веса и тренировок в Telegram.\n- Ручная и автоматическая синхронизация по расписанию.\n- Автообновление закреплённого главного сообщения после фоновой синхронизации.\n- Хранение истории в SQLite (`data\u002F`).\n- Экспорт всех таблиц в ZIP с CSV-файлами прямо в чат.\n- Развёртывание через Docker Compose.\n- Атомарная запись Xiaomi-токена с правами `0600`.\n- Умная автопривязка к первому пользователю (whitelist).\n\n## Как это работает\n\n```text\nMi Band → Xiaomi Fitness cloud → miband-bot → SQLite → Telegram \u002F CSV\n```\n\nDocker Compose запускает два процесса:\n\n- `tracker` — периодически синхронизирует данные из Xiaomi Fitness;\n- `fitness-bot` — обслуживает Telegram-меню, ручной sync и экспорт.\n\nОба процесса работают с одной папкой `.\u002Fdata`. Конкурентная запись\nисключена файловым lock-ом.\n\n## Требования\n\n- Docker и Docker Compose (или установленный Python 3.11+).\n- Telegram bot token от [@BotFather](https:\u002F\u002Ft.me\u002FBotFather).\n- Аккаунт Xiaomi с данными Xiaomi Fitness.\n\n## Быстрый запуск\n\n### Способ 1: Бесшовная установка в один клик (Рекомендуется)\n\nЕсли у вас еще нет проекта на компьютере, вы можете автоматически скачать и настроить его одной командой в терминале:\n\n- **macOS \u002F Linux:**\n  ```sh\n  curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FiAlexeyRu\u002Fmiband-bot\u002Fmain\u002Finstall.sh | bash\n  ```\n- **Windows (PowerShell):**\n  ```powershell\n  powershell -c \"irm https:\u002F\u002Fraw.githubusercontent.com\u002FiAlexeyRu\u002Fmiband-bot\u002Fmain\u002Finstall.ps1 | iex\"\n  ```\n\nУстановщик сам создаст папку `miband-bot`, загрузит и распакует файлы проекта, проверит окружение и запустит интерактивную настройку!\nПовторный запуск этой же PowerShell-команды в уже настроенной установке обновит файлы и сразу запустит бота без повторного ввода токена.\n\n---\n\n### Способ 2: Запуск из скачанной папки\n\nЕсли вы уже склонировали репозиторий через `git clone` или скачали архив вручную:\n\n- **macOS \u002F Linux:**\n  ```sh\n  .\u002Fsetup.sh\n  ```\n- **Windows:**\n  Запустите двойным кликом файл `setup.bat` или выполните в консоли:\n  ```cmd\n  setup.bat\n  ```\n\nСкрипт сам проверит окружение, пошагово поможет получить токен, создаст конфигурацию `secrets.env`, развернет окружение Python (если выбран запуск без Docker) и предложит запустить бота одной кнопкой.\nПосле настройки бот можно запускать повторно через `run_local.sh` на macOS\u002FLinux или `run_local.bat` на Windows из папки `miband-bot`.\n\n---\n\n### Способ 3: Полностью ручная настройка (manual setup):\n\n1. Скопируйте шаблон конфигурации:\n   ```sh\n   cp secrets.env.example secrets.env\n   ```\n2. Укажите ваш `TELEGRAM_BOT_TOKEN` в файле `secrets.env`. Переменную `TELEGRAM_ALLOWED_USER_ID` **оставьте пустой** — бот автоматически привяжется к вам при первом старте.\n3. Запустите Docker контейнеры:\n   ```sh\n   docker compose up -d --build\n   ```\n4. Откройте вашего созданного бота в Telegram и отправьте ему команду `\u002Fstart` — бот распознает ваш аккаунт, привяжет его как единственного владельца и начнет синхронизацию!\n\n## Настройки\n\nВсе переменные — в `secrets.env`:\n\n| Переменная                 | По умолчанию | Описание                                |\n| -------------------------- | ------------ | --------------------------------------- |\n| `TELEGRAM_BOT_TOKEN`       | —            | Token Telegram-бота                     |\n| `TELEGRAM_ALLOWED_USER_ID` | —            | Разрешённый user id (оставьте пустым для автопривязки) |\n| `SYNC_INTERVAL`            | `900`        | Интервал фоновой синхронизации, секунды |\n| `QUERY_DURATION`           | `2`          | Глубина запроса при sync, дней          |\n| `ENABLE_FDS_SLEEP_DETAILS` | `true`       | Загружать детальные ночные данные FDS   |\n\nПути к базе и статусу заданы в `compose.yaml`. При запуске без Docker\nсмотрите `secrets.env.example`.\n\n## Файлы данных\n\nRuntime-файлы создаются в `.\u002Fdata`:\n\n| Файл                   | Содержимое                        |\n| ---------------------- | --------------------------------- |\n| `token_\u003Cid>.json`      | Xiaomi auth token (**секретный**) |\n| `miband_\u003Cid>.db`       | SQLite-база с health-данными      |\n| `status_\u003Cid>.json`     | Последний статус синхронизации    |\n| `allowed_user.id`      | ID привязанного владельца         |\n| `fitness_bot_state.db` | Служебное состояние Telegram-меню |\n| `sync_\u003Cid>.lock`       | Lock-файл синхронизации           |\n\n`secrets.env`, `data\u002F`, `*.db`, `token*.json` и `status*.json`\nдобавлены в `.gitignore` — не коммитьте их.\n\n## Команды\n\n| Команда   | Действие                              |\n| --------- | ------------------------------------- |\n| `\u002Fstart`  | Открыть меню или начать вход в Xiaomi |\n| `\u002Fsync`   | Запустить ручную синхронизацию        |\n| `\u002Fstatus` | Показать состояние локальной базы     |\n\n## Локальная разработка\n\n```sh\npython3 -m venv .venv\n.venv\u002Fbin\u002Fpip install -r requirements-dev.txt -e mi-fitness-python\n.venv\u002Fbin\u002Fpython -m py_compile fitness_bot.py miband_sync.py \\\n    $(find miband_tracker -name '*.py' | sort)\n.venv\u002Fbin\u002Fpython -m pytest\n.venv\u002Fbin\u002Fpython -m pytest mi-fitness-python\u002Ftests\u002Funit\n.venv\u002Fbin\u002Fruff check .\n.venv\u002Fbin\u002Fpython -m pip check\n```\n\nТочки входа:\n\n```sh\npython -u miband_sync.py      # или: miband-sync\npython -u fitness_bot.py      # или: miband-fitness-bot\n```\n\n## Troubleshooting\n\n**Бот не отвечает** — проверьте `TELEGRAM_BOT_TOKEN`, логи, а также убедитесь, что вы первыми отправили `\u002Fstart` боту для привязки. При необходимости сбросить привязанного владельца просто удалите файл `data\u002Fallowed_user.id` и отправьте `\u002Fstart` снова.\n\n```sh\ndocker compose logs -f fitness-bot\n```\n\n**Token не найден** — отправьте `\u002Fstart` и пройдите Xiaomi login flow.\n\n**Token истёк** — запустите повторный вход из меню; старый файл\nможно удалить из `data\u002F`.\n\n**Нет SpO2 или деталей сна** — убедитесь, что эти данные отображаются\nв самом приложении Xiaomi Fitness. Доступность зависит от модели\nбраслета и настроек шаринга.\n\n**После обновления Xiaomi всё сломалось** — это ожидаемый риск\nпри работе с неофициальным API. Проверьте issues и логи, затем\nобновите код или временно отключите проблемный модуль.\n\n## Важно: reverse engineering и ограничения\n\n`miband-bot` — неофициальный проект, не связанный с Xiaomi, Zepp,\nHuami или Telegram.\n\nДоступ к данным реализован через reverse engineering закрытых API,\nпоэтому:\n\n- Xiaomi может изменить API без предупреждения;\n- авторизация или синхронизация могут временно не работать;\n- используйте проект только со своими аккаунтами и данными;\n- соблюдайте законодательство и условия использования сервисов;\n- данные браслета не являются медицинским заключением.\n\n## Лицензия\n\nПроект распространяется под [GNU GPL v3.0 or later](LICENSE).\n\nSDK `mi-fitness-python` включён как vendored source copy под\n[GNU GPL v3.0](mi-fitness-python\u002FLICENSE). Подробности — в\n[VENDORED.md](VENDORED.md).\n","miband-bot 是一个自托管的 Telegram 机器人，用于追踪和管理小米手环（Mi Band）或小米健身的数据。它能够从小米云同步用户的步数、睡眠、心率、血氧饱和度、压力、体重及锻炼数据，并将这些信息存储在本地 SQLite 数据库中，用户可以直接通过 Telegram 查看，无需依赖第三方服务且保证了数据隐私。该工具支持手动与定时自动同步，同时提供了便捷的数据导出功能，可将所有记录以 CSV 格式打包下载。适用于重视个人健康数据安全并希望通过 Telegram 接口轻松访问这些信息的小米设备用户。此外，项目还支持 Docker Compose 郲署，简化了安装流程。","2026-06-06 04:02:46","CREATED_QUERY"]