首页
/ 小米运动刷步数工具技术解析:从API交互到自动化部署的完整实现

小米运动刷步数工具技术解析:从API交互到自动化部署的完整实现

2026-02-06 04:00:51作者:袁立春Spencer

在健康数据日益成为社交资本的今天,18,000步的日常目标不再只是健身爱好者的自我要求,更成为朋友圈里的"数字勋章"。但对于久坐办公的程序员、频繁出差的商务人士而言,即便深知运动益处,也常因时间碎片化难以达标。💡 小米运动刷步数工具(mimotion)正是针对这一痛点的技术解决方案——通过模拟健康数据提交流程,在不违背平台规则的前提下,帮助用户实现健康数据的自动化管理。这个开源项目不仅是健康管理的辅助工具,更是Python自动化脚本与API交互的实战案例,其精巧的设计思路值得每位技术爱好者深入研究。

核心功能的场景化应用

上班族的"隐形运动"方案

李明是典型的996程序员,清晨8点挤地铁到公司,晚上10点才离开,根本没有完整时间锻炼。通过配置mimotion的动态步数范围功能,他设置了MIN_STEP=18000、MAX_STEP=25000,系统会根据时间自动调整步数增长曲线——从早晨8点的基础值线性增长,到晚上22点达到最大值。这种模拟符合人体自然活动规律的数据变化,既避免了固定数值的机械感,又确保能稳定同步到微信运动和支付宝健康。

多账号家庭健康管理

王女士需要同时管理父母和孩子的健康数据。mimotion的多账号并行处理功能帮她解决了这个难题:在CONFIG配置中用#分隔多个账号密码,系统会自动按顺序处理每个账号,还可通过SLEEP_GAP参数设置账号间的请求间隔(默认5秒)。更贴心的是,PUSH_PLUS_TOKEN配置能让她在每天21点收到执行报告,清晰掌握每个账号的同步状态。

数据安全的"双重保险"

张先生担心账号信息安全,mimotion的AES加密存储机制让他安心不少。系统要求用户设置16位字符的AES_KEY,所有登录令牌(access_token、login_token)都会加密后保存在encrypted_tokens.data文件中。即使仓库被意外访问,没有密钥也无法解密账号信息。这种设计遵循了"最小权限原则",将安全风险降到最低。

技术实现的深度解析

如何实现与Zepp Life API的安全通信?

小米运动(现Zepp Life)的API通信采用AES-128-CBC加密算法,mimotion通过三个核心步骤实现数据交互:

  1. 密钥与向量固定化
    项目中定义了华米API专用的加密参数:

    HM_AES_KEY = b'xeNtBVqzDc6tuNTh'  # 16字节固定密钥
    HM_AES_IV = b'MAAAYAAAAAAAAABg'   # 16字节固定向量
    

    这组参数来自华米API的逆向工程,确保加密格式与官方客户端一致。

  2. 请求数据加密流程
    登录请求需要将账号密码通过AES加密后传输:

    # 执行请求加密(来自zepp_helper.py)
    plaintext = query.encode('utf-8')
    cipher_data = encrypt_data(plaintext, HM_AES_KEY, HM_AES_IV)
    

    加密过程采用PKCS#7填充方式,确保数据块长度符合AES要求。

  3. 令牌链的智能管理
    系统会维护一个"令牌生命周期链":

    • access_token:通过账号密码首次获取,有效期较短
    • login_token:用access_token兑换,可用于生成app_token
    • app_token:最终用于提交步数数据的有效令牌 当检测到app_token失效时,会自动尝试用login_token刷新,失败则重新走完整登录流程,大幅减少重复验证次数。

动态步数算法的工作原理

mimotion的步数生成并非简单随机,而是模拟真实运动规律的时间加权算法

# 获取当前时间对应的最大和最小步数(来自main.py)
def get_min_max_by_time(hour=None, minute=None):
    if hour is None:
        hour = time_bj.hour
    if minute is None:
        minute = time_bj.minute
    # 计算时间系数:当前分钟数/22点总分钟数,最大为1
    time_rate = min((hour * 60 + minute) / (22 * 60), 1)
    min_step = get_int_value_default(config, 'MIN_STEP', 18000)
    max_step = get_int_value_default(config, 'MAX_STEP', 25000)
    return int(time_rate * min_step), int(time_rate * max_step)

这种设计使得步数在清晨较低(如8点仅为目标值的36%),随着时间逐渐增长,到晚上10点达到设定最大值,完美模拟了人一天的活动强度变化。

GitHub Actions自动化的实现机制

项目的定时执行依赖GitHub Actions的事件触发系统,核心配置在.github/workflows/run.yml中:

  1. 双重触发机制

    • 定时触发:通过cron表达式设定基础执行时间
    • 手动触发:允许用户随时点击"Run workflow"执行
  2. 动态Cron调整
    为避免GitHub Actions的执行高峰排队,系统会自动更新cron表达式的分钟部分:

    # cron_change_time文件示例
    UTC时间: '37 1,4,7,10,12,14 * * *'
    北京时间: '37 9,12,15,18,20,22 * * *'
    next exec time: UTC(14:37) 北京时间(22:37)
    

    这种随机化处理既保证了执行频率,又降低了被平台限制的风险。

实战部署指南

环境配置四步法

  1. 准备工作

    • Fork项目到个人仓库
    • 创建Fine-grained tokens(推荐),需勾选Actions、Contents、Workflows的读写权限
  2. 核心变量配置 在仓库Settings→Secrets→Actions中添加:

    • PAT:第一步创建的GitHub令牌
    • AES_KEY:16位字符的加密密钥(如mimotion12345678
    • CONFIG:JSON格式的主配置,包含账号密码和参数设置
  3. 定时任务设置 两种方式设置执行时间(二选一):

    • 添加CRON_HOURS变量:逗号分隔的UTC小时数(如0,2,4,6,8,14对应北京时间8,10,12,14,16,22点)
    • 直接编辑run.yml的cron表达式:0 0,2,4,6,8,14 * * *
  4. 验证与调试 首次配置后建议手动触发工作流:

    • 进入Actions→刷步数→Run workflow
    • 查看执行日志,重点关注"开始"步骤的输出
    • 若同步失败,可尝试在小米运动APP中注销账号后重新登录

常见问题的技术解决方案

问题场景 传统解决方式 mimotion解决方案
支付宝步数不同步 手动重新绑定账号 执行小米运动→设置→账号→注销账号→清空数据后,系统会自动重新同步
执行排队时间过长 频繁手动触发 配置CRON_HOURS从2开始(避开GitHub 0点执行高峰)
多账号管理繁琐 切换账号登录 #分隔账号密码,一次配置永久生效
担心账号安全 不敢使用工具 AES加密存储+最小权限令牌,本地密钥永不上传

安全与合规提示

使用健康数据工具时,请务必遵守平台服务条款和当地法律法规。mimotion的设计初衷是帮助无法正常运动的人群维持健康数据连续性,而非鼓励虚假运动。建议将步数设置在合理范围内(如18000-25000步),过度追求高数值可能导致账号异常。

作为开源项目,mimotion的价值不仅在于功能实现,更在于它展示了API交互、数据加密、自动化部署等技术点的最佳实践。通过研究其源码(特别是main.py和util目录下的辅助模块),开发者可以学习到如何安全地与第三方API通信,如何设计健壮的令牌管理机制,以及如何构建用户友好的自动化工具。

💡 项目地址:git clone https://gitcode.com/gh_mirrors/mimo/mimotion
(注:实际使用时请Fork到个人仓库后再进行配置,确保数据安全)

通过这套技术方案,我们看到开源社区如何用创新思维解决现实问题——既满足了用户的健康数据管理需求,又保持了技术实现的专业性和安全性。对于技术爱好者而言,mimotion不仅是一个工具,更是一个学习自动化运维和API交互的绝佳案例。

登录后查看全文
热门项目推荐
相关项目推荐