Files
xiaomihome/miot/migration/12-miot-lan.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.9 KiB
Raw Permalink Blame History

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 管理
    • 消息加解密

第二批任务(设备管理)

  1. 实现设备管理 (6小时)

    • 设备发现和注册
    • 设备状态监控
    • 保活机制
  2. 实现网络通信 (4小时)

    • UDP 通信
    • 广播和单播
    • 网络接口管理

第三批任务(高级功能)

  1. 实现订阅管理 (4小时)

    • 设备订阅/取消订阅
    • 广播注册/取消注册
  2. 实现网络状态管理 (3小时)

    • 网络状态监控
    • 网络不稳定性检测
  3. 单元测试 (4小时)

    • 测试加密通信
    • 测试设备发现
    • 测试订阅管理

技术难点

1. AES 加密

问题:Python 使用 cryptography 库,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 广播和单播

建议:

import "net"

func (d *LanDevice) SendBroadcast(data []byte) error {
    conn, err := net.DialUDP("udp", nil, &net.UDPAddr{
        IP:   net.IPv4bcast,
        Port: 54321,
    })
    // ...
}

3. 设备状态监控

问题:需要实现 PING 检测和设备状态管理

建议:

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 负责人:待定