5.2 KiB
5.2 KiB
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
📊 测试结果
✅ 成功的部分
- ESP32连接正常 - 设备响应正常,API可访问
- 设备信息获取成功 - MAC地址、设备ID正确
- 报警系统工作正常 - 能够触发和记录报警
- 固件编译烧录成功 - CloudAlarmReporter模块集成无误
🔄 待验证的部分
- 云端上报功能 - 需要手动触发报警验证
- HTTP POST请求 - 需要确认ESP32能成功发送到模拟服务器
- 数据格式正确性 - 需要验证JSON格式和字段完整性
🚀 验证步骤
第一步:启动模拟云端服务器
cd d:\XinJiaPo\Firefly_code\smart-home
python verify_cloud_alarm_reporting.py
第二步:监控ESP32状态
cd d:\XinJiaPo\Firefly_code\smart-home
python manual_alarm_trigger.py
第三步:手动触发报警
- 用手指接触热成像传感器表面
- 用打火机或热源靠近传感器
- 观察温度上升到40°C以上
- 等待报警触发
第四步:验证云端接收
- 查看模拟服务器输出
- 确认收到POST请求
- 验证JSON数据格式
- 检查设备密钥验证
🎯 预期结果
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 个报警
💡 下一步工作
测试成功后:
- 修改服务器地址 - 将ESP32配置改回真实云端服务器
- 后端接口开发 - 确保云端/device-alarms接口正常工作
- 数据库验证 - 检查alarm_records表是否正确插入数据
- APP集成测试 - 验证APP能显示云端同步的报警历史
生产部署:
- 恢复CloudAlarmReporter.h中的服务器地址为生产环境
- 确保后端API正常运行
- 测试完整的数据流:ESP32 → 云端 → APP
🔧 技术实现细节
设备物理UID生成:
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云端报警上报功能已完整实现并集成到系统中。代码编译通过,固件烧录成功,现在需要进行最终的功能验证测试。
功能已完全实现,可以立即进行验证测试!