feat: 初始化小米 IoT (MIoT) 智能家居 Go 库
- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# 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` 结构体
|
||||
- 请求超时处理
|
||||
- 回复回调
|
||||
|
||||
### 第二批任务(广播和状态)
|
||||
|
||||
3. **实现广播管理** (3小时)
|
||||
- `MipsBroadcast` 结构体
|
||||
- 广播订阅/取消订阅
|
||||
- 广播处理
|
||||
|
||||
4. **实现状态管理** (3小时)
|
||||
- `MipsDeviceState` 结构体
|
||||
- 连接状态监控
|
||||
- 设备状态监控
|
||||
|
||||
### 第三批任务(客户端功能)
|
||||
|
||||
5. **实现重连机制** (3小时)
|
||||
- 指数退避算法
|
||||
- 重连定时器
|
||||
|
||||
6. **优化性能** (2小时)
|
||||
- 并发安全
|
||||
- 资源管理
|
||||
|
||||
7. **单元测试** (4小时)
|
||||
- 测试消息处理
|
||||
- 测试请求管理
|
||||
- 测试重连机制
|
||||
|
||||
## 技术难点
|
||||
|
||||
### 1. MQTT 客户端
|
||||
|
||||
**问题**:Python 使用 `paho-mqtt`,Go 需要选择合适的库
|
||||
|
||||
**建议**:
|
||||
```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`
|
||||
|
||||
**建议**:
|
||||
```go
|
||||
type MipsClient struct {
|
||||
mu sync.RWMutex
|
||||
subMap map[string]*MipsSubscription
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 异步处理
|
||||
|
||||
**问题**:Python 使用 `asyncio`,Go 使用 goroutine 和 channel
|
||||
|
||||
**建议**:
|
||||
```go
|
||||
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
|
||||
**负责人**:待定
|
||||
Reference in New Issue
Block a user