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

6.0 KiB
Raw Permalink Blame History

08 - const.py 移植计划

概览

项目 内容
Python 文件 py-miot/const.py (161行)
Go 文件 ❌ 缺失
状态 ❌ 完全缺失
优先级 🔴 P0
预计工作量 2-3 小时

说明:此文件对应之前分析的 miot_constant.py,实际文件名为 const.py。

Python 版本分析

核心常量

基础常量

常量名 行号 值 说明
DOMAIN 48 'xiaomi_home' 域名
DEFAULT_NAME 49 'Xiaomi Home' 默认名称
DEFAULT_NICK_NAME 51 'Xiaomi' 默认昵称

超时和间隔

常量名 行号 值 说明
MIHOME_HTTP_API_TIMEOUT 53 30 HTTP API 超时(秒)
MIHOME_MQTT_KEEPALIVE 54 60 MQTT 保持连接(秒)
MIHOME_CERT_EXPIRE_MARGIN 56 3600*24*3 证书过期边际(3天)
NETWORK_REFRESH_INTERVAL 58 30 网络刷新间隔(秒)

OAuth 相关

常量名 行号 值 说明
OAUTH2_CLIENT_ID 60 '2882303761520251711' OAuth2 客户端 ID
OAUTH2_AUTH_URL 61 'https://account.xiaomi.com/oauth2/authorize' OAuth2 授权 URL
DEFAULT_OAUTH2_API_HOST 62 'ha.api.io.mi.com' 默认 OAuth2 API 主机
DEFAULT_CLOUD_BROKER_HOST 63 'ha.mqtt.io.mi.com' 默认云 Broker 主机
OAUTH_REDIRECT_URL 135 'http://homeassistant.local:8123' OAuth 重定向 URL

缓存时间

常量名 行号 值 说明
SPEC_STD_LIB_EFFECTIVE_TIME 66 3600*24*14 SPEC 标准库有效期(14天)
MANUFACTURER_EFFECTIVE_TIME 68 3600*24*14 制造商信息有效期(14天)

支持的平台

常量名 行号 值 说明
SUPPORTED_PLATFORMS 70-89 列表 支持的 Home Assistant 平台
UNSUPPORTED_MODELS 91-96 列表 不支持的设备模型

云服务器

常量名 行号 值 说明
DEFAULT_CLOUD_SERVER 98 'cn' 默认云服务器
CLOUD_SERVERS 99-106 字典 云服务器列表

语言

常量名 行号 值 说明
DEFAULT_INTEGRATION_LANGUAGE 110 'en' 默认集成语言
INTEGRATION_LANGUAGES 111-125 字典 集成语言列表

其他

常量名 行号 值 说明
DEFAULT_COVER_DEAD_ZONE_WIDTH 127 0 默认 cover 死区宽度
MIN_COVER_DEAD_ZONE_WIDTH 128 0 最小 cover 死区宽度
MAX_COVER_DEAD_ZONE_WIDTH 129 5 最大 cover 死区宽度
DEFAULT_CTRL_MODE 131 'auto' 默认控制模式

CA 证书

常量名 行号 值 说明
MIHOME_CA_CERT_STR 137-157 字符串 MIoT CA 证书(PEM 格式)
MIHOME_CA_CERT_SHA256 159-160 字符串 MIoT CA 证书 SHA256 哈希

Go 版本现状

缺失的功能

整个 const.py 模块在 Go 版本中完全缺失。

Go 版本中可能需要实现:

  1. 常量定义 - 对应 Python 的常量
  2. 变量定义 - 对应 Python 的变量(如列表、字典)

移植建议

第一批任务(核心功能)

  1. 创建 const.go 文件 (1小时)

    • 定义基础常量
    • 定义超时和间隔常量
  2. 实现 OAuth 相关常量 (1小时)

    • 定义 OAuth2 客户端 ID
    • 定义 OAuth2 URL
    • 定义重定向 URL
  3. 实现云服务器和语言常量 (1小时)

    • 定义云服务器列表
    • 定义语言列表
  4. 实现 CA 证书常量 (1小时)

    • 定义 CA 证书字符串
    • 定义 CA 证书哈希

第二批任务(辅助功能)

  1. 实现支持的平台和模型 (1小时)

    • 定义支持的平台列表
    • 定义不支持的模型列表
  2. 单元测试 (1小时)

    • 测试常量值
    • 测试变量初始化

技术难点

1. 常量 vs 变量

问题:Python 的"常量"实际上是变量,Go 有真正的常量

建议:

// 真正的常量
const (
    DOMAIN = "xiaomi_home"
    DEFAULT_NAME = "Xiaomi Home"
    MIHOME_HTTP_API_TIMEOUT = 30
)

// 变量(需要在 init() 中初始化)
var (
    SUPPORTED_PLATFORMS = []string{
        "binary_sensor",
        "button",
        // ...
    }
    CLOUD_SERVERS = map[string]string{
        "cn": "中国大陆",
        "de": "Europe",
        // ...
    }
)

2. CA 证书字符串

问题:Python 使用多行字符串,Go 需要使用反引号

建议:

const MIHOME_CA_CERT_STR = `-----BEGIN CERTIFICATE-----
MIIBazCCAQ+gAwIBAgIEA/UKYDAMBggqhkjOPQQDAgUAMCIxEzARBgNVBAoTCk1p
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----`

测试计划

单元测试

  1. 常量值测试

    • 测试基础常量
    • 测试 OAuth 常量
  2. 变量初始化测试

    • 测试列表变量
    • 测试字典变量

依赖关系

依赖文件 关系 说明
无 - 独立模块

移植优先级

任务 优先级 理由
创建基础结构 🔴 高 基础框架
实现基础常量 🔴 高 核心功能
实现 OAuth 常量 🔴 高 核心功能
实现云服务器常量 🔴 高 核心功能
实现 CA 证书 🔴 高 核心功能
实现平台和模型 🟡 中 辅助功能
单元测试 🟡 中 质量保障

进度跟踪

  • 创建 const.go 文件 (预计 1小时)
  • 实现基础常量 (预计 1小时)
  • 实现 OAuth 相关常量 (预计 1小时)
  • 实现云服务器和语言常量 (预计 1小时)
  • 实现 CA 证书常量 (预计 1小时)
  • 实现支持的平台和模型 (预计 1小时)
  • 单元测试 (预计 1小时)

总计:7小时


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