- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
180 lines
3.8 KiB
Markdown
180 lines
3.8 KiB
Markdown
# 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
|
||
**负责人**:待定
|