mirror of
https://github.com/alexgetmancom/miband-bot.git
synced 2026-07-19 12:10:14 +03:00
feat: add miband bot application
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"""使用示例 —— 登录并查询亲友健康数据。
|
||||
|
||||
运行前请确保:
|
||||
1. 已在小米运动健康 App 中添加了亲友关系
|
||||
2. 亲友已在 App 中授权共享数据
|
||||
|
||||
用法:
|
||||
uv run python examples/basic_usage.py
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
|
||||
from mi_fitness import MiHealthClient, XiaomiAuth
|
||||
|
||||
TOKEN_PATH = Path("token.json")
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
# region 登录(首次运行需要)
|
||||
if not TOKEN_PATH.exists():
|
||||
print("首次使用,请扫码登录:")
|
||||
async with XiaomiAuth() as auth:
|
||||
await auth.login_qr()
|
||||
auth.save_token(TOKEN_PATH)
|
||||
print(f"登录成功!Token 已保存至 {TOKEN_PATH}")
|
||||
# endregion
|
||||
|
||||
# region 查询数据(一步创建客户端)
|
||||
async with MiHealthClient.from_token(TOKEN_PATH) as client:
|
||||
# 1. 获取亲友列表
|
||||
relatives = await client.get_relatives()
|
||||
print(f"\n已绑定 {len(relatives)} 位亲友:")
|
||||
for r in relatives:
|
||||
print(f" - [{r.relative_uid}] {r.relative_note or '(未设置备注)'}")
|
||||
|
||||
if not relatives:
|
||||
print("未找到亲友,请先在 App 中添加亲友关系")
|
||||
return
|
||||
|
||||
# 2. 查询第一位亲友的最近同步数据
|
||||
target = relatives[0]
|
||||
uid = target.relative_uid
|
||||
print(f"\n查询 [{target.relative_note}] (UID: {uid}) 的最近同步健康数据:")
|
||||
|
||||
latest = await client.get_latest_data(uid)
|
||||
print(f" 可用指标: {', '.join(latest.available_keys)}")
|
||||
|
||||
if latest.heart_rate:
|
||||
print(f" 最新心率: {latest.heart_rate.bpm} bpm")
|
||||
if latest.sleep:
|
||||
print(f" 最新睡眠: {latest.sleep.total_duration}分钟 评分{latest.sleep.sleep_score}/100")
|
||||
if latest.steps:
|
||||
print(f" 最新步数: {latest.steps.steps}步 / {latest.steps.distance}米 / {latest.steps.calories}卡")
|
||||
if latest.weight:
|
||||
print(f" 最新体重: {latest.weight.weight}kg BMI {latest.weight.bmi}")
|
||||
|
||||
summary = await client.get_latest_daily_summary(uid)
|
||||
print(f"\n最近同步日摘要 ({summary.date}):")
|
||||
print(f" 心率: {summary.heart_rate or '暂无数据'}")
|
||||
print(f" 睡眠: {summary.sleep or '暂无数据'}")
|
||||
print(f" 步数: {summary.steps or '暂无数据'}")
|
||||
# endregion
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user