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

223 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 证书哈希
### 第二批任务(辅助功能)
5. **实现支持的平台和模型** (1小时)
- 定义支持的平台列表
- 定义不支持的模型列表
6. **单元测试** (1小时)
- 测试常量值
- 测试变量初始化
## 技术难点
### 1. 常量 vs 变量
**问题**:Python 的"常量"实际上是变量,Go 有真正的常量
**建议**:
```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 需要使用反引号
**建议**:
```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
**负责人**:待定