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