纳入范围: - backend/ Spring Boot 多模块后端(iot-common/device/rule/data/alarm/auth) - frontend/admin/ Vue3 + Element Plus 管理后台 - Android/ 涂鸦原生 APP (com.xhai.iot) - backend/sql/ Flyway 风格迁移脚本(V2~V21) - docs/ 对接文档与设计文档 排除范围: - 构建产物: node_modules/ target/ build/ dist/ .gradle/ - 签名密钥: *.jks *.keystore (严禁入库) - 本机配置: Android/local.properties - 运行日志: logs/ *.log - AI 协作本地数据 .codebuddy/ 与第三方 demo tuya-demo/ .gitattributes 统一以 LF 存储, Windows 批处理保留 CRLF
333 lines
15 KiB
Markdown
333 lines
15 KiB
Markdown
# 智能家居中控屏 Zigbee + Matter 直连后台方案
|
||
|
||
## 一、客户需求
|
||
|
||
客户想采用瑞芯微 RK3568 的 Android 15 系统,开发 10.1 寸智能家居中控屏,采用 Zigbee + Matter 协议。Zigbee 采用涂鸦 ZSU 模组(买空片,未烧录涂鸦固件)。
|
||
|
||
### ZSU 模组规格
|
||
|
||
| 项目 | 参数 |
|
||
|------|------|
|
||
| 芯片 | Silicon Labs EFR32MG21A020F1024IM32-B |
|
||
| 内核 | ARM Cortex-M33,80 MHz |
|
||
| Flash / RAM | 1024 KB / 96 KB |
|
||
| 协议 | IEEE 802.15.4 / Zigbee |
|
||
| 频段 | 2.4 GHz(信道 11–26) |
|
||
| 速率 | 250 Kbps |
|
||
| 发射功率 | 最大 +20 dBm |
|
||
| 天线 | 内置 PCB 天线(增益 1.36 dBi) |
|
||
| 工作温度 | -40℃ ~ 105℃ |
|
||
| 加密 | AES 128/256 硬件加密 |
|
||
|
||
### 核心诉求
|
||
|
||
**不经过涂鸦接口,直接接入我们后台。**
|
||
|
||
### 关键前提
|
||
|
||
ZSU 模组为**空片**(未烧录涂鸦固件),可在 EFR32MG21 芯片上烧录任意固件,完全自主可控,不受涂鸦私有协议束缚。
|
||
|
||
---
|
||
|
||
## 二、总体架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ RK3568 Android 15 (AOSP 定制固件) │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────┐ │
|
||
│ │ 系统应用层 (System App, Java/Kotlin) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌───────────────────────┐ │ │
|
||
│ │ │ 中控屏 UI App │ │ 网关管理服务 │ │ │
|
||
│ │ │ (10.1寸界面) │ │ (GatewayService) │ │ │
|
||
│ │ │ 设备列表/控制 │ │ - 配网管理 API │ │ │
|
||
│ │ │ 场景/定时 │ │ - 设备状态管理 │ │ │
|
||
│ │ └──────────────┘ │ - MQTT 上报/指令分发 │ │ │
|
||
│ │ │ - 与 Native 层 IPC │ │ │
|
||
│ │ └───────────┬───────────┘ │ │
|
||
│ └────────────────────────────────┼────────────────────────┘ │
|
||
│ │ AIDL/Binder │
|
||
│ ┌────────────────────────────────▼────────────────────────┐ │
|
||
│ │ Native 守护进程层 (C/C++, init.rc 启动) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌───────────────────────┐ │ │
|
||
│ │ │ zigbee-core │ │ matter-chip │ │ │
|
||
│ │ │ (EZSP串口) │ │ (Matter协议栈) │ │ │
|
||
│ │ │ UART ↔ ZCL │ │ Commissioning/控制 │ │ │
|
||
│ │ └──────────────┘ └───────────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌──────────────┐ │
|
||
│ │ /dev/ttyS1 │ ← ZSU 模组 UART 串口 │
|
||
│ └──────────────┘ │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
│ MQTT
|
||
▼
|
||
┌─────────────────────────────────────┐
|
||
│ 我们后端 (iot-device / iot-data) │
|
||
│ MQTT Broker (1883) │
|
||
│ iot/devices/+/data (数据上报) │
|
||
│ iot/devices/+/status (状态变更) │
|
||
│ iot/devices/+/command(指令下发) │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
### 数据链路说明
|
||
|
||
1. **Zigbee 子设备** 通过 802.15.4 无线连接到 ZSU 模组(Coordinator)
|
||
2. **Matter 设备** 通过 WiFi 直连 RK3568 上的 Matter Controller
|
||
3. ZSU 模组通过 UART 串口与 RK3568 通信(EZSP 协议)
|
||
4. RK3568 网关代理将设备数据转换为标准 JSON,通过 MQTT 上报后端
|
||
5. 后端通过 MQTT `command` topic 下发指令,网关代理转换为 ZCL/Matter 命令
|
||
|
||
---
|
||
|
||
## 三、ZSU 模组固件方案
|
||
|
||
EFR32MG21 烧录 **Silicon Labs 官方 EmberZNet Zigbee Coordinator 固件**,通过 **EZSP(Ember Zigbee Serial Protocol)** 与 RK3568 通信。
|
||
|
||
| 项目 | 方案 |
|
||
|------|------|
|
||
| 协议栈 | Silicon Labs EmberZNet PRO(Zigbee 3.0 认证) |
|
||
| 角色 | Coordinator(协调器,网络中心节点) |
|
||
| 通信接口 | UART,使用 EZSP ASH 协议帧 |
|
||
| 固件来源 | Silicon Labs Simplicity Studio 生成(免费,需注册 SL 账号) |
|
||
| 配套工具 | zigbee-herdsman(Node.js)或自研 C 库 |
|
||
|
||
**优势**:EmberZNet 是业界最成熟的 Zigbee 协议栈,兼容所有标准 Zigbee 3.0 设备(飞利浦 Hue、宜家、小米等标准子设备)。
|
||
|
||
---
|
||
|
||
## 四、Matter 方案
|
||
|
||
RK3568 运行 Android 15,**Matter 控制器直接运行在中控屏上**,不需要 ZSU 模组参与(Matter 设备走 WiFi/Thread)。
|
||
|
||
| 项目 | 方案 |
|
||
|------|------|
|
||
| Matter 协议栈 | Google matter.js 或 Android CHIP SDK(官方推荐) |
|
||
| Commissioning | RK3568 上发起,扫码或 NFC 配网 |
|
||
| Thread 支持 | 可选:若需 Thread Border Router,需第二颗 ZSU 模组或双协议栈固件 |
|
||
| 设备控制 | 中控屏本地直连 Matter 设备,不经过云 |
|
||
|
||
> 注:EFR32MG21 同时支持 Zigbee 和 Thread(均为 802.15.4),但同一时刻只能运行其中一种固件。若需 Thread Border Router,需用第二颗模组。一期建议 Matter 走 WiFi,二期再评估 Thread。
|
||
|
||
---
|
||
|
||
## 五、网关代理 App 部署形态
|
||
|
||
### 5.1 结论
|
||
|
||
**不采用独立安装的普通 App,以 Android 系统级服务方式集成到 AOSP 嵌入式固件中。**
|
||
|
||
RK3568 运行的是客户自编译的 AOSP(Android Open Source Project),网关代理作为**系统内置服务**,而非用户可卸载的普通 App。
|
||
|
||
### 5.2 三层架构
|
||
|
||
| 层 | 形态 | 语言 | 职责 | 升级频率 |
|
||
|----|------|------|------|----------|
|
||
| **Native 守护进程** | C/C++ 可执行文件,`init.rc` 启动 | C/C++ | EZSP 串口通信、ZCL 命令、CHIP SDK | 极少 |
|
||
| **系统应用 (GatewayService)** | 编译进 AOSP 的 System App | Java/Kotlin | 配网管理、设备状态、MQTT 上报、指令分发 | 中等 |
|
||
| **中控屏 UI App** | System App,可独立 OTA | Java/Kotlin | 10.1 寸触控界面 | 较高 |
|
||
|
||
### 5.3 为什么选系统应用而非独立 App
|
||
|
||
| 对比项 | 独立 App | 系统应用(推荐) |
|
||
|--------|----------|------------------|
|
||
| 开机自启 | 需监听 BOOT_COMPLETED,可能被杀 | 随系统启动,不会被杀 |
|
||
| 串口访问 | 需 USB Host 或反射,权限受限 | 直接读写 `/dev/ttyS1`,system 权限 |
|
||
| Matter Commissioning | 需 Google Play Services | 系统级集成 CHIP SDK,不依赖 GPS |
|
||
| 网络稳定性 | 后台被杀则设备离线 | 作为系统服务常驻,设备永远在线 |
|
||
| OTA 升级 | APK 独立升级 | 系统应用也可独立 OTA(无需刷固件) |
|
||
| 用户体验 | 用户可误删 | 不可卸载,出厂内置 |
|
||
|
||
### 5.4 Native 守护进程
|
||
|
||
用 C/C++ 实现底层协议栈,编译为 Native 可执行文件,通过 `init.rc` 配置开机启动:
|
||
|
||
```rc
|
||
# device/rockchip/rk3568/init.gateway.rc
|
||
service zigbee_core /system/bin/zigbee-core /dev/ttyS1 115200
|
||
class main
|
||
user system
|
||
group system
|
||
oneshot
|
||
seclabel u:r:gateway_service:s0
|
||
|
||
service matter_chip /system/bin/matter-chip --controller
|
||
class main
|
||
user system
|
||
group system inet
|
||
seclabel u:r:gateway_service:s0
|
||
```
|
||
|
||
**职责**:
|
||
- `zigbee-core`:EZSP 串口通信、Zigbee 设备配对/控制、ZCL 命令收发
|
||
- `matter-chip`:基于 Google CHIP (C++) SDK,Matter Commissioning 和设备控制
|
||
|
||
**为什么用 C/C++ 而非 Java**:
|
||
- EmberZNet 的 EZSP 库是 C 语言
|
||
- Google Matter SDK 官方实现是 C++
|
||
- 串口实时通信 C 更高效,延迟低
|
||
|
||
### 5.5 系统应用 (GatewayService)
|
||
|
||
编译进 AOSP 的 System App,通过 AIDL/Binder 与 Native 进程通信:
|
||
|
||
```java
|
||
// 网关管理服务
|
||
public class GatewayService extends IGatewayService.Stub {
|
||
// Zigbee 配网
|
||
public int startPermitJoin(int duration) { ... }
|
||
public List<ZigbeeDevice> getPairedDevices() { ... }
|
||
public int removeDevice(String ieeeAddr) { ... }
|
||
|
||
// Matter 配网
|
||
public String generateMatterQRCode() { ... }
|
||
public int commissionDevice(String payload) { ... }
|
||
|
||
// 指令下发
|
||
public int sendCommand(String deviceId, String command, JSONObject params) { ... }
|
||
|
||
// 与后端 MQTT 通信
|
||
private MqttClient mqttClient;
|
||
private void reportToServer(String deviceId, String data) { ... }
|
||
}
|
||
```
|
||
|
||
### 5.6 嵌入式开发要求
|
||
|
||
| 问题 | 回答 |
|
||
|------|------|
|
||
| 是否需要 Android 嵌入式开发能力? | 是。需编译 AOSP 固件、配置 `init.rc`、编写 SELinux 规则 |
|
||
| 是否需要改 Linux 内核? | 通常不需要,RK3568 的 UART 驱动内核已支持 |
|
||
| 是否需要硬件原理图? | 需要,确认 ZSU 模组的 UART 接到 RK3568 的哪个串口 |
|
||
| 开发环境 | Ubuntu + AOSP 源码 + RK3568 SDK(瑞芯微提供) |
|
||
| 调试方式 | ADB + 串口日志 + Wireshark 抓 Zigbee 包 |
|
||
|
||
---
|
||
|
||
## 六、后端需要做的工作
|
||
|
||
### 6.1 已有可复用的基础设施
|
||
|
||
| 已有能力 | 复用方式 |
|
||
|----------|----------|
|
||
| MQTT Broker + topic 规范 | 网关 App 直接按 `iot/devices/{id}/data` 格式上报 |
|
||
| `device` 表 + `platform` 字段 | 新增 `zigbee`/`matter` 平台值 |
|
||
| `device_data_record` 时序存储 | 数据格式不变,直接入库 |
|
||
| 指令下发 MQTT `command` topic | 网关 App 订阅后转换为 Zigbee/Matter 指令 |
|
||
|
||
### 6.2 需新增的后端工作
|
||
|
||
| 模块 | 内容 | 工作量 |
|
||
|------|------|--------|
|
||
| A. 网关设备注册 | RK3568 中控屏作为"网关设备"注册到 `device` 表(platform=`gateway`),下挂子设备通过 `gateway_id` 关联 | 1-2 天 |
|
||
| B. Zigbee 配网管理 API | 开启/关闭 Permit Join、查询已配对子设备列表、删除子设备 | 2-3 天 |
|
||
| C. Matter 配网 API | 生成 Commissioning QR Code、接收 commissioning 回调、设备列表同步 | 3-4 天 |
|
||
| D. MQTT 数据处理补全 | 当前 `deviceDataHandler` 只有日志,补全实际写入 `device_data_record` 的逻辑 | 1-2 天 |
|
||
| E. 属性映射 | Zigbee Cluster(如开闭 0006、亮度 0008)→ 平台功能点(switch、brightness);Matter Cluster → 功能点 | 2-3 天 |
|
||
| F. 指令下发适配 | 平台指令 → Zigbee ZCL 命令 / Matter 命令格式转换(在网关 App 侧实现,后端只需透传 JSON) | 1 天 |
|
||
| G. 设备分组/场景 | Zigbee Group 管理、本地场景表 | 2 天(可选,一期可不做) |
|
||
| **合计(后端)** | | **12-17 人天** |
|
||
|
||
### 6.3 数据库变更
|
||
|
||
```sql
|
||
-- device 表新增网关关联字段
|
||
ALTER TABLE device ADD COLUMN gateway_id BIGINT NULL COMMENT '网关设备ID' AFTER owner_id;
|
||
ALTER TABLE device ADD INDEX idx_device_gateway (gateway_id);
|
||
|
||
-- 新增 Zigbee 设备属性映射表
|
||
CREATE TABLE device_zigbee_endpoint (
|
||
id BIGINT PRIMARY KEY COMMENT '主键ID',
|
||
device_id BIGINT NOT NULL COMMENT '设备ID',
|
||
endpoint TINYINT NOT NULL COMMENT 'Zigbee Endpoint',
|
||
cluster_id INT NOT NULL COMMENT 'Cluster ID',
|
||
cluster_name VARCHAR(50) COMMENT 'Cluster名称',
|
||
attribute_id INT NOT NULL COMMENT 'Attribute ID',
|
||
attribute_name VARCHAR(50) COMMENT 'Attribute名称',
|
||
data_type VARCHAR(20) COMMENT '数据类型',
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Zigbee设备属性映射表';
|
||
```
|
||
|
||
---
|
||
|
||
## 七、客户端(RK3568 网关代理)工作量
|
||
|
||
| 模块 | 内容 | 工作量 |
|
||
|------|------|--------|
|
||
| EZSP 串口通信 | 与 ZSU 模组 UART 通信,解析 ASH 帧 | 3-4 天 |
|
||
| Zigbee 设备管理 | Permit Join、配对回调、属性上报、指令下发 | 4-5 天 |
|
||
| Matter Controller | 集成 CHIP SDK,Commissioning、设备控制 | 4-5 天 |
|
||
| MQTT 客户端 | 连接后端 Broker,上报数据/订阅指令 | 1-2 天 |
|
||
| 协议转换层 | Zigbee ZCL ↔ 平台 JSON 格式互转 | 2-3 天 |
|
||
| **合计(客户端)** | | **14-19 人天** |
|
||
|
||
---
|
||
|
||
## 八、工作分工
|
||
|
||
| 层 | 负责方 | 工作量 | 依赖 |
|
||
|----|--------|--------|------|
|
||
| AOSP 固件定制 | 客户硬件团队 | 1-2 周 | RK3568 SDK、硬件原理图 |
|
||
| Native 协议层(C/C++) | 可外包/自研 | 2-3 周 | EmberZNet SDK、CHIP SDK |
|
||
| 系统应用(GatewayService) | 我们开发 | 2-3 周 | Native 层接口定义 |
|
||
| 中控屏 UI App | 我们开发 | 3-4 周 | GatewayService API |
|
||
| 后端 API | 我们开发 | 2-3 周 | 无依赖,可并行 |
|
||
|
||
---
|
||
|
||
## 九、分阶段实施计划
|
||
|
||
### 第一期(MVP,6-8 周)
|
||
|
||
- ZSU 烧录 EmberZNet Coordinator 固件
|
||
- RK3568 网关 App 实现 Zigbee 设备配对 + MQTT 上报
|
||
- 后端补全 MQTT 数据处理 + Zigbee 配网 API
|
||
- 支持:开关、调光、传感器三类标准 Zigbee 设备
|
||
|
||
### 第二期(3-4 周)
|
||
|
||
- RK3568 集成 Matter Controller
|
||
- 后端 Matter 配网 API
|
||
- 支持 WiFi Matter 设备
|
||
|
||
### 第三期(可选)
|
||
|
||
- Thread Border Router(需第二颗 ZSU 或双协议栈方案)
|
||
- 本地场景引擎
|
||
- 设备分组
|
||
|
||
---
|
||
|
||
## 十、总工作量
|
||
|
||
| 模块 | 工作量 |
|
||
|------|--------|
|
||
| 后端 | 12-17 人天 |
|
||
| 客户端(RK3568 网关代理) | 14-19 人天 |
|
||
| AOSP 固件定制(客户方) | 1-2 周 |
|
||
| **合计(我方)** | **26-36 人天** |
|
||
|
||
---
|
||
|
||
## 十一、结论
|
||
|
||
ZSU 空片方案完全可行且推荐。核心优势:
|
||
|
||
1. **绕过涂鸦生态锁定**,Zigbee 链路完全自主
|
||
2. EFR32MG21 + EmberZNet 是业界成熟方案,子设备兼容性好
|
||
3. 我们后端已有 MQTT 基础设施,主要工作量在网关 App 和配网 API
|
||
4. Matter 走 RK3568 原生 Android,不依赖 ZSU
|
||
5. 网关代理以系统级服务集成到 AOSP 固件,开机自启、不可卸载、稳定可靠
|
||
|
||
### 前置确认事项
|
||
|
||
客户需提供:
|
||
|
||
- RK3568 AOSP SDK 及编译环境
|
||
- 硬件原理图(确认 ZSU 模组 UART 接口)
|
||
- 是否有 Android 嵌入式开发能力(若无,可退而求其次用普通 App + root 权限方案)
|