Xiaomi-cloud-tokens-extractor开发者指南:自定义扩展与二次开发
Xiaomi-cloud-tokens-extractor是一款功能强大的小米云设备令牌提取工具,能够帮助开发者轻松获取小米云连接设备的令牌和BLE设备的加密密钥。本文将详细介绍如何对该工具进行自定义扩展与二次开发,让你快速掌握扩展功能的核心方法。## 快速了解项目结构在开始二次开发前,先熟悉项目的核心文件结构,这将帮助你快速定位需要修改的模块:- **核心功能文件**:[token_
Xiaomi-cloud-tokens-extractor开发者指南:自定义扩展与二次开发
Xiaomi-cloud-tokens-extractor是一款功能强大的小米云设备令牌提取工具,能够帮助开发者轻松获取小米云连接设备的令牌和BLE设备的加密密钥。本文将详细介绍如何对该工具进行自定义扩展与二次开发,让你快速掌握扩展功能的核心方法。
快速了解项目结构
在开始二次开发前,先熟悉项目的核心文件结构,这将帮助你快速定位需要修改的模块:
- 核心功能文件:token_extractor.py 包含所有主要逻辑,包括小米云连接、设备数据获取和令牌解析
- 依赖管理:requirements.txt 列出项目所需的所有Python依赖包
- 执行脚本:run.sh 和 run_docker.sh 提供不同环境下的启动方式
- 打包配置:token_extractor.spec 用于将Python脚本打包为可执行文件
开发环境搭建
基础环境准备
首先克隆项目仓库并安装依赖:
git clone https://gitcode.com/gh_mirrors/xia/Xiaomi-cloud-tokens-extractor
cd Xiaomi-cloud-tokens-extractor
pip install -r requirements.txt
关键依赖解析
requirements.txt 中定义了项目的核心依赖:
requests:处理HTTP请求,用于与小米云API通信pycryptodome:提供加密解密功能,用于处理小米云的RC4加密数据Pillow:图像处理库,用于验证码和QR码显示colorama:实现跨平台终端彩色输出
如需添加新功能,可在此文件中添加额外依赖。
核心扩展点解析
1. 认证方式扩展
项目目前支持密码和QR码两种认证方式,你可以通过继承 XiaomiCloudConnector 抽象类添加新的认证方式:
class NewAuthXiaomiCloudConnector(XiaomiCloudConnector):
def login(self) -> bool:
# 实现新的认证逻辑
pass
在 token_extractor.py 中,现有认证方式通过 PasswordXiaomiCloudConnector 和 QrCodeXiaomiCloudConnector 实现,你可以参考这些类的实现方式。
2. 设备数据处理扩展
设备数据获取主要通过 get_devices 方法实现(位于 XiaomiCloudConnector 类中)。如需扩展数据处理能力,可以:
- 修改
get_devices方法获取更多设备信息 - 添加新的API调用方法,如获取设备历史数据
- 实现自定义数据解析逻辑
例如,添加获取设备固件版本的功能:
def get_device_firmware(self, country, did):
url = self.get_api_url(country) + "/v2/device/firmware_info"
params = {"data": '{"did":"' + did + '"}'}
return self.execute_api_call_encrypted(url, params)
3. 输出格式扩展
当前结果输出支持控制台打印和JSON文件保存。你可以扩展输出格式,如CSV、XML等,修改 token_extractor.py 中的 main 函数:
if args.output:
if args.output.endswith('.csv'):
save_as_csv(output, args.output)
elif args.output.endswith('.xml'):
save_as_xml(output, args.output)
else:
with open(args.output, "w") as f:
f.write(json.dumps(output, indent=4))
高级功能开发
多线程设备数据获取
为提高设备数据获取速度,可以实现多线程并发请求。参考 token_extractor.py 中的线程使用方式(如图片服务器),为不同服务器或设备并行请求数据。
自定义服务器选择逻辑
默认服务器选择逻辑在 get_servers_to_check 函数中实现。你可以修改此函数,根据用户位置自动选择最佳服务器,或添加服务器可用性检测:
def get_servers_to_check() -> list[str]:
# 添加服务器ping测试,选择响应最快的服务器
servers_with_latency = measure_server_latency(SERVERS)
return sorted(servers_with_latency, key=lambda x: x[1])[:3] # 返回延迟最低的3个服务器
集成设备控制功能
利用获取的设备令牌,你可以进一步开发设备控制功能。通过小米云API发送控制命令:
def control_device(self, country, did, command):
url = self.get_api_url(country) + "/v2/device/control"
params = {"data": json.dumps({
"did": did,
"cmd": command
})}
return self.execute_api_call_encrypted(url, params)
调试与测试技巧
日志调试
项目使用自定义日志类 ColorLogger,可以通过调整日志级别获取更详细的调试信息:
python token_extractor.py -l DEBUG
单元测试编写
为确保扩展功能的稳定性,建议为新功能编写单元测试。可以在项目中创建 tests 目录,使用 pytest 框架编写测试用例。
常见问题排查
- 认证失败:检查小米云账号密码是否正确,尝试使用QR码认证
- API调用错误:检查网络连接,确认服务器地区选择正确
- 依赖问题:确保所有依赖已正确安装,可使用
pip install --upgrade -r requirements.txt更新依赖
打包与分发
完成扩展开发后,可以使用 pyinstaller 将脚本打包为可执行文件:
pyinstaller token_extractor.spec
打包后的可执行文件将位于 dist 目录中,可分发给其他用户使用。
总结
Xiaomi-cloud-tokens-extractor提供了灵活的扩展架构,通过本文介绍的方法,你可以轻松扩展其功能,满足特定需求。无论是添加新的认证方式、扩展数据处理能力,还是集成设备控制功能,都可以基于现有代码结构快速实现。
建议在开发过程中保持代码模块化,遵循项目现有的设计模式,确保扩展功能的可维护性和兼容性。如有疑问,可以参考项目源码中的注释和现有实现,或提交issue寻求社区帮助。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)