166 lines
5.2 KiB
Markdown
166 lines
5.2 KiB
Markdown
|
|
# ESP32云端报警上报功能测试总结
|
|||
|
|
|
|||
|
|
## 🎯 测试目标
|
|||
|
|
验证ESP32能够成功将报警事件上报到云端服务器,实现完整的报警数据流转。
|
|||
|
|
|
|||
|
|
## ✅ 已完成的工作
|
|||
|
|
|
|||
|
|
### 1. ESP32端实现
|
|||
|
|
- **CloudAlarmReporter模块** - 完整实现云端报警上报功能
|
|||
|
|
- **异步上报机制** - 使用FreeRTOS队列+后台任务,不阻塞主程序
|
|||
|
|
- **HTTP POST请求** - 使用esp_http_client发送JSON数据
|
|||
|
|
- **自动重试机制** - 失败时最多重试3次,间隔2秒
|
|||
|
|
- **设备鉴权** - 使用X-Device-Key头进行身份验证
|
|||
|
|
- **幂等去重** - sourceEventId = physicalUid:timestampMs
|
|||
|
|
|
|||
|
|
### 2. 集成到AlarmManager
|
|||
|
|
- **统一入口** - 在addAlarmToHistory()函数中自动调用云端上报
|
|||
|
|
- **无侵入性** - 不影响现有报警逻辑,仅增加云端上报功能
|
|||
|
|
- **容错处理** - 云端上报失败不影响本地历史记录保存
|
|||
|
|
|
|||
|
|
### 3. API规范完全符合
|
|||
|
|
```
|
|||
|
|
URL: POST http://115.190.167.176:36988/device-alarms
|
|||
|
|
Headers:
|
|||
|
|
Content-Type: application/json
|
|||
|
|
X-Device-Key: 39dc753bd0cb19da5050a2f0edf932f851f5b21b90a6d06ecf9a28d81079a0a6
|
|||
|
|
Body:
|
|||
|
|
{
|
|||
|
|
"physicalUid": "206EF1B3AD74",
|
|||
|
|
"sourceEventId": "206EF1B3AD74:1700000000000",
|
|||
|
|
"title": "燃烧报警",
|
|||
|
|
"level": "danger",
|
|||
|
|
"message": "检测到燃烧,峰值温度92.3°C,位置(12,21)",
|
|||
|
|
"temp": 92.3,
|
|||
|
|
"occurredAtMs": 1700000000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 测试环境设置
|
|||
|
|
|
|||
|
|
### 1. 模拟云端服务器
|
|||
|
|
- **地址**: http://192.168.1.57:36988
|
|||
|
|
- **端点**: /device-alarms
|
|||
|
|
- **功能**: 接收ESP32上报的报警数据
|
|||
|
|
- **验证**: 设备密钥验证
|
|||
|
|
- **响应**: JSON格式成功/失败响应
|
|||
|
|
|
|||
|
|
### 2. ESP32配置
|
|||
|
|
- **设备IP**: 192.168.1.3
|
|||
|
|
- **MAC地址**: 20:6E:F1:B3:AD:74
|
|||
|
|
- **物理UID**: 206EF1B3AD74
|
|||
|
|
- **云端服务器**: http://192.168.1.57:36988/device-alarms(测试配置)
|
|||
|
|
|
|||
|
|
### 3. 测试工具
|
|||
|
|
- **集成测试脚本**: test_cloud_alarm_integration.py
|
|||
|
|
- **模拟服务器**: verify_cloud_alarm_reporting.py
|
|||
|
|
- **手动触发监控**: manual_alarm_trigger.py
|
|||
|
|
|
|||
|
|
## 📊 测试结果
|
|||
|
|
|
|||
|
|
### ✅ 成功的部分
|
|||
|
|
1. **ESP32连接正常** - 设备响应正常,API可访问
|
|||
|
|
2. **设备信息获取成功** - MAC地址、设备ID正确
|
|||
|
|
3. **报警系统工作正常** - 能够触发和记录报警
|
|||
|
|
4. **固件编译烧录成功** - CloudAlarmReporter模块集成无误
|
|||
|
|
|
|||
|
|
### 🔄 待验证的部分
|
|||
|
|
1. **云端上报功能** - 需要手动触发报警验证
|
|||
|
|
2. **HTTP POST请求** - 需要确认ESP32能成功发送到模拟服务器
|
|||
|
|
3. **数据格式正确性** - 需要验证JSON格式和字段完整性
|
|||
|
|
|
|||
|
|
## 🚀 验证步骤
|
|||
|
|
|
|||
|
|
### 第一步:启动模拟云端服务器
|
|||
|
|
```bash
|
|||
|
|
cd d:\XinJiaPo\Firefly_code\smart-home
|
|||
|
|
python verify_cloud_alarm_reporting.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 第二步:监控ESP32状态
|
|||
|
|
```bash
|
|||
|
|
cd d:\XinJiaPo\Firefly_code\smart-home
|
|||
|
|
python manual_alarm_trigger.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 第三步:手动触发报警
|
|||
|
|
1. 用手指接触热成像传感器表面
|
|||
|
|
2. 用打火机或热源靠近传感器
|
|||
|
|
3. 观察温度上升到40°C以上
|
|||
|
|
4. 等待报警触发
|
|||
|
|
|
|||
|
|
### 第四步:验证云端接收
|
|||
|
|
1. 查看模拟服务器输出
|
|||
|
|
2. 确认收到POST请求
|
|||
|
|
3. 验证JSON数据格式
|
|||
|
|
4. 检查设备密钥验证
|
|||
|
|
|
|||
|
|
## 🎯 预期结果
|
|||
|
|
|
|||
|
|
### ESP32串口日志应显示:
|
|||
|
|
```
|
|||
|
|
I CloudAlarmReporter: 🌐 初始化云端报警上报模块
|
|||
|
|
I CloudAlarmReporter: ✅ 云端报警上报模块初始化成功
|
|||
|
|
I CloudAlarmReporter: 🔗 云端服务器: http://192.168.1.57:36988/device-alarms
|
|||
|
|
I AlarmManager: ☁️ 报警已加入云端上报队列
|
|||
|
|
I CloudAlarmReporter: 📨 开始上报报警: [燃烧报警] 206EF1B3AD74:xxx
|
|||
|
|
I CloudAlarmReporter: 📡 HTTP响应状态码: 200
|
|||
|
|
I CloudAlarmReporter: ✅ 报警上报成功
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模拟服务器应显示:
|
|||
|
|
```
|
|||
|
|
📨 收到ESP32报警上报:
|
|||
|
|
时间: 2026-01-15 14:xx:xx
|
|||
|
|
设备密钥: 39dc753bd0cb19da5050a2f0edf932f851f5b21b90a6d06ecf9a28d81079a0a6
|
|||
|
|
报警数据: {
|
|||
|
|
"physicalUid": "206EF1B3AD74",
|
|||
|
|
"sourceEventId": "206EF1B3AD74:1768457706611",
|
|||
|
|
"title": "燃烧报警",
|
|||
|
|
"level": "danger",
|
|||
|
|
"message": "检测到燃烧,峰值温度45.0°C,位置(15,12)",
|
|||
|
|
"temp": 45.0,
|
|||
|
|
"occurredAtMs": 1768457706611
|
|||
|
|
}
|
|||
|
|
✅ 报警接收成功! 总计收到 1 个报警
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 💡 下一步工作
|
|||
|
|
|
|||
|
|
### 测试成功后:
|
|||
|
|
1. **修改服务器地址** - 将ESP32配置改回真实云端服务器
|
|||
|
|
2. **后端接口开发** - 确保云端/device-alarms接口正常工作
|
|||
|
|
3. **数据库验证** - 检查alarm_records表是否正确插入数据
|
|||
|
|
4. **APP集成测试** - 验证APP能显示云端同步的报警历史
|
|||
|
|
|
|||
|
|
### 生产部署:
|
|||
|
|
1. 恢复CloudAlarmReporter.h中的服务器地址为生产环境
|
|||
|
|
2. 确保后端API正常运行
|
|||
|
|
3. 测试完整的数据流:ESP32 → 云端 → APP
|
|||
|
|
|
|||
|
|
## 🔧 技术实现细节
|
|||
|
|
|
|||
|
|
### 设备物理UID生成:
|
|||
|
|
```cpp
|
|||
|
|
esp_wifi_get_mac(WIFI_IF_STA, mac);
|
|||
|
|
snprintf(uid, size, "%02X%02X%02X%02X%02X%02X", mac[0]...mac[5]);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 报警类型映射:
|
|||
|
|
- 高温报警 → "高温报警" (danger)
|
|||
|
|
- 异常升温 → "异常升温报警" (warning)
|
|||
|
|
- 燃烧报警 → "燃烧报警" (danger)
|
|||
|
|
- 无人照看 → "无人照看报警" (warning)
|
|||
|
|
|
|||
|
|
### 性能配置:
|
|||
|
|
- 队列大小: 20个报警事件
|
|||
|
|
- HTTP超时: 10秒
|
|||
|
|
- 任务栈: 8KB
|
|||
|
|
- 任务优先级: 5
|
|||
|
|
|
|||
|
|
## ✅ 结论
|
|||
|
|
|
|||
|
|
ESP32云端报警上报功能已完整实现并集成到系统中。代码编译通过,固件烧录成功,现在需要进行最终的功能验证测试。
|
|||
|
|
|
|||
|
|
**功能已完全实现,可以立即进行验证测试!**
|