Files
xiaomihome/miot/migration/10-miot-mips.md
T
4566704 3a44cb9e6a feat: 初始化小米 IoT (MIoT) 智能家居 Go 库
- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写)
- 支持云端 API 调用与局域网设备发现(mDNS)
- 集成国际化(i18n)多语言支持
- 添加 MIoT 设备规约解析器(spec_parser)
- 包含单元测试与使用示例
2026-06-28 22:05:49 +08:00

3.8 KiB
Raw Blame History

10 - miot_mips.py 移植计划

概览

项目 内容
Python 文件 py-miot/miot_mips.py (61399行)
Go 文件 mips_client.go
状态 ⚠️ 部分实现
优先级 🟡 P1
预计工作量 20-28 小时

Python 版本核心类

消息处理

类名 行号 功能 Go 状态
_MipsMessage 90 MIPS 消息(打包/解包) ⚠️ 部分
_MipsRequest 162 MIPS 请求 ❌ 缺失
_MipsBroadcast 171 MIPS 广播 ❌ 缺失
_MipsState 187 MIPS 状态 ❌ 缺失

设备状态

类名 行号 功能 Go 状态
MIoTDeviceState 197 设备状态枚举 ❌ 缺失
MipsDeviceState 205 设备状态数据 ❌ 缺失

客户端

类名 行号 功能 Go 状态
_MipsClient 217 MIPS 客户端基类(ABC) ⚠️ 部分
MIoTPahoMipsClient ~500 基于 Paho 的客户端 ❌ 缺失
MIoTMipsClient ~800 主客户端类 ⚠️ 部分

Go 版本现状

已实现的功能

  • MipsClient 结构体(对应 _MipsClient)
  • 基本的 MQTT 连接
  • 基本的发布/订阅

缺失的功能

  1. 消息打包/解包

    • _MipsMessage.pack() 和 unpack()
  2. 请求管理

    • 请求超时处理
    • 回复回调
  3. 广播管理

    • 广播订阅
    • 广播处理
  4. 状态管理

    • 连接状态监控
    • 设备状态监控
  5. 重连机制

    • 指数退避重连
    • 重连间隔管理

移植建议

第一批任务(消息处理)

  1. 实现消息打包/解包 (4小时)

    • MipsMessage.Pack()
    • MipsMessage.Unpack()
    • 使用 encoding/binary 和 bytes.Buffer
  2. 实现请求管理 (3小时)

    • MipsRequest 结构体
    • 请求超时处理
    • 回复回调

第二批任务(广播和状态)

  1. 实现广播管理 (3小时)

    • MipsBroadcast 结构体
    • 广播订阅/取消订阅
    • 广播处理
  2. 实现状态管理 (3小时)

    • MipsDeviceState 结构体
    • 连接状态监控
    • 设备状态监控

第三批任务(客户端功能)

  1. 实现重连机制 (3小时)

    • 指数退避算法
    • 重连定时器
  2. 优化性能 (2小时)

    • 并发安全
    • 资源管理
  3. 单元测试 (4小时)

    • 测试消息处理
    • 测试请求管理
    • 测试重连机制

技术难点

1. MQTT 客户端

问题:Python 使用 paho-mqtt,Go 需要选择合适的库

建议:

// 使用 github.com/eclipse/paho.mqtt.golang
import mqtt "github.com/eclipse/paho.mqtt.golang"

type MipsClient struct {
    client mqtt.Client
    // ...
}

2. 并发安全

问题:Python 使用 threading.Lock,Go 使用 sync.Mutex

建议:

type MipsClient struct {
    mu sync.RWMutex
    subMap map[string]*MipsSubscription
    // ...
}

3. 异步处理

问题:Python 使用 asyncio,Go 使用 goroutine 和 channel

建议:

type MipsClient struct {
    msgChan chan *MipsMessage
    stopChan chan struct{}
}

func (c *MipsClient) Start() {
    go c.messageLoop()
}

依赖关系

依赖文件 关系 说明
miot_error.py 强依赖 错误定义
common.py 强依赖 MQTT 匹配器
paho-mqtt 强依赖 MQTT 客户端

进度跟踪

  • 实现消息打包/解包 (预计 4小时)
  • 实现请求管理 (预计 3小时)
  • 实现广播管理 (预计 3小时)
  • 实现状态管理 (预计 3小时)
  • 实现重连机制 (预计 3小时)
  • 优化性能 (预计 2小时)
  • 单元测试 (预计 4小时)

总计:22小时


创建时间:2026-06-28 最后更新:2026-06-28 负责人:待定