# SigMesh Gateway HACS 集成 - 可行性分析报告 **日期**: 2026-04-15 **项目**: impress_sig_mesh_hacs --- ## 1. 项目概述 ### 1.1 目标 创建一个 HACS (Home Assistant Community Store) 集成项目,实现: 1. 从串口读取 SigMesh 网关数据 2. 解析蓝牙 Mesh 协议 3. 在 Home Assistant OS 前端显示实体 ### 1.2 技术规格 | 参数 | 值 | |------|-----| | 网关类型 | SigMesh 网关 (E104-BT12NSP) | | 串口类型 | USB 转 TTL | | 波特率 | 115200 | | 数据位 | 8 | | 停止位 | 1 | | 校验位 | None | | 协议 | Bluetooth Mesh 5.4 | | 数据上报 | 主动上报 | | 设备规模 | 支持 200+ 设备 | --- ## 2. 技术可行性分析 ### 2.1 串口读取 ✅ 可行 **技术方案**: 使用 `pyserial-asyncio` 库 ```python import serial import serial.tools.list_ports ``` **优势**: - Home Assistant 内置 pyserial 支持 - 异步读取避免阻塞 - 成熟的断线重连机制 **风险**: - 串口权限问题(需加入 dialout 用户组) - 多进程占用冲突 **解决**: 在 README 中提供权限配置说明 ### 2.2 协议解析 ✅ 可行 **数据格式** (基于 E104-BT12NSP 文档): ``` 串口输出格式: +EVENT=MESH,recv,,,, +EVENT=PROV,device_joined,, +EVENT=PROV,device_left, ``` **解析模块**: `protocol_parser.py` **支持的 Opcode**: | Opcode | 功能 | 解析状态 | |--------|------|---------| | 0x8204 | OnOff Status | ✅ | | 0x822C | Light Lightness Status | ✅ | | 0x8232 | HSL Status | ✅ | | 0x825E | CTL Status | ✅ | | 0x8231 | Sensor Status | ✅ | | 0x820C | Battery Status | ✅ | ### 2.3 Home Assistant 集成 ✅ 可行 **架构模式**: ``` SerialReader → Coordinator → Platform Entities ↓ ↓ ↓ 串口读取 数据协调 传感器/开关/灯光 ``` **使用的 HA API**: - `DataUpdateCoordinator` - 数据更新协调 - `ConfigFlow` - UI 配置流程 - Platform Entities - 实体平台 ### 2.4 性能评估 **200 设备场景**: - 每个设备平均状态更新:100 字节 - 总数据量:200 × 100 = 20KB - 内存占用:~5MB - CPU 占用:<1% **结论**: 架构可轻松支持 200+ 设备 --- ## 3. 架构设计 ### 3.1 目录结构 ``` impress_sig_mesh_hacs/ ├── custom_components/ │ └── sigmesh_gateway/ │ ├── __init__.py # 集成入口 │ ├── manifest.json # 清单文件 │ ├── config_flow.py # UI 配置 │ ├── const.py # 常量定义 │ ├── coordinator.py # 数据协调器 │ ├── serial_reader.py # 串口读取 │ ├── protocol_parser.py # 协议解析 │ └── platforms/ │ ├── sensor.py # 传感器 │ ├── binary_sensor.py # 二进制传感器 │ ├── switch.py # 开关 │ ├── light.py # 灯光 │ └── device_tracker.py # 设备追踪 ├── hacs.json # HACS 配置 └── README.md # 文档 ``` ### 3.2 数据流 ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ SigMesh 网关 │ → │ SerialReader│ → │Coordinator │ └─────────────┘ └─────────────┘ └─────────────┘ │ ┌────────────────────────────────────┼────────────────────────────────────┐ ↓ ↓ ↓ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Sensor │ │ Switch │ │ Light │ │ (温度/湿度) │ │ (开关控制) │ │ (亮度/色温) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` --- ## 4. 待确认问题 ### 4.1 协议细节 需要确认: 1. **实际输出格式** - 需验证网关是否按文档格式输出 2. **Opcode 映射** - 需确认实际设备使用的 Opcode 3. **配网流程** - 是否需要 HA 主动配网还是网关已完成配网 ### 4.2 控制命令 当前实现侧重于**数据接收**,如需双向控制需实现: - AT 命令发送格式 - Mesh 命令下发接口 - 命令队列和限流 --- ## 5. 实施建议 ### 5.1 第一阶段:数据接收(已完成) - [x] 串口读取模块 - [x] 协议解析模块 - [x] 实体平台 ### 5.2 第二阶段:实机测试 - [ ] 连接真实网关验证协议 - [ ] 根据实际数据调整解析逻辑 - [ ] 测试 200 设备负载 ### 5.3 第三阶段:双向控制 - [ ] 实现命令下发接口 - [ ] 添加服务调用 (service call) - [ ] 完善错误处理 ### 5.4 第四阶段:HACS 发布 - [ ] 创建 GitHub 仓库 - [ ] 配置 GitHub Actions 自动发布 - [ ] 提交到 HACS Default 仓库 --- ## 6. 结论 **整体可行性**: ✅ **高度可行** | 维度 | 可行性 | 说明 | |------|--------|------| | 技术实现 | ✅ 高 | 使用成熟库和 HA API | | 性能 | ✅ 高 | 可轻松支持 200+ 设备 | | 维护性 | ✅ 高 | 模块化设计,代码清晰 | | 用户体验 | ✅ 高 | UI 配置,自动发现 | **建议**: 先使用实机验证协议格式,再完善控制功能。