# 12 - miot_lan.py 移植计划 ## 概览 | 项目 | 内容 | |------|------| | **Python 文件** | `py-miot/miot_lan.py` (53,181字节) | | **Go 文件** | ❌ 缺失 | | **状态** | ❌ 完全缺失 | | **优先级** | 🟢 P2 | | **预计工作量** | 20-28 小时 | ## Python 版本核心类 ### 设备管理 | 类名 | 行号 | 功能 | Go 状态 | |------|------|------|---------| | `_MIoTLanDevice` | 131 | LAN 设备(加密通信) | ❌ 缺失 | | `_MIoTLanDeviceState` | 123 | 设备状态枚举 | ❌ 缺失 | ### 数据类 | 类名 | 行号 | 功能 | Go 状态 | |------|------|------|---------| | `_MIoTLanRequestData` | 115 | LAN 请求数据 | ❌ 缺失 | | `_MIoTLanSubDeviceData` | 102 | 订阅设备数据 | ❌ 缺失 | | `_MIoTLanBroadcastData` | 91 | 广播数据 | ❌ 缺失 | ### 主类 | 类名 | 行号 | 功能 | Go 状态 | |------|------|------|---------| | `MIoTLan` | ~300 | LAN 管理主类 | ❌ 缺失 | ## Go 版本现状 整个 `miot_lan.py` 模块在 Go 版本中完全缺失。 ### 缺失的核心功能 1. **设备管理** - 设备发现和注册 - 设备状态监控(PING/DEAD) - 保活机制 2. **加密通信** - AES-128-CBC 加密 - Token 管理 - 消息加解密 3. **网络管理** - UDP 通信 - 广播和单播 - 网络接口管理 4. **订阅管理** - 设备订阅/取消订阅 - 广播注册/取消注册 - 设备状态订阅 ## 移植建议 ### 第一批任务(数据结构和加密) 1. **实现数据结构** (4小时) - 数据类(RequestData, SubDeviceData, BroadcastData) - 设备状态枚举 - LAN 设备结构体 2. **实现加密通信** (4小时) - AES-128-CBC 加密 - Token 管理 - 消息加解密 ### 第二批任务(设备管理) 3. **实现设备管理** (6小时) - 设备发现和注册 - 设备状态监控 - 保活机制 4. **实现网络通信** (4小时) - UDP 通信 - 广播和单播 - 网络接口管理 ### 第三批任务(高级功能) 5. **实现订阅管理** (4小时) - 设备订阅/取消订阅 - 广播注册/取消注册 6. **实现网络状态管理** (3小时) - 网络状态监控 - 网络不稳定性检测 7. **单元测试** (4小时) - 测试加密通信 - 测试设备发现 - 测试订阅管理 ## 技术难点 ### 1. AES 加密 **问题**:Python 使用 `cryptography` 库,Go 使用标准库 **建议**: ```go import ( "crypto/aes" "crypto/cipher" "crypto/md5" ) func NewAESCipher(token []byte) (cipher.Block, []byte, error) { aesKey := md5Sum(token) aesIV := md5Sum(append(aesKey[:], token...)) block, err := aes.NewCipher(aesKey[:]) return block, aesIV[:], err } ``` ### 2. UDP 通信 **问题**:需要实现 UDP 广播和单播 **建议**: ```go import "net" func (d *LanDevice) SendBroadcast(data []byte) error { conn, err := net.DialUDP("udp", nil, &net.UDPAddr{ IP: net.IPv4bcast, Port: 54321, }) // ... } ``` ### 3. 设备状态监控 **问题**:需要实现 PING 检测和设备状态管理 **建议**: ```go type LanDeviceState int const ( LanDeviceFresh LanDeviceState = iota LanDevicePing1 LanDevicePing2 LanDevicePing3 LanDeviceDead ) ``` ## 依赖关系 | 依赖文件 | 关系 | 说明 | |---------|------|------| | `miot_error.py` | 强依赖 | 错误定义 | | `miot_network.py` | 强依赖 | 网络管理 | | `miot_mdns.py` | 强依赖 | mDNS 发现 | | `cryptography` | 强依赖 | 加密库 | ## 进度跟踪 - [ ] 实现数据结构 (预计 4小时) - [ ] 实现加密通信 (预计 4小时) - [ ] 实现设备管理 (预计 6小时) - [ ] 实现网络通信 (预计 4小时) - [ ] 实现订阅管理 (预计 4小时) - [ ] 实现网络状态管理 (预计 3小时) - [ ] 单元测试 (预计 4小时) **总计**:29小时 --- **创建时间**:2026-06-28 **最后更新**:2026-06-28 **负责人**:待定