smart-home/ESP32_Cloud_Alarm_Test_Summary.md
2026-02-26 09:16:34 +08:00

5.2 KiB
Raw Blame History

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配置

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格式和字段完整性

🚀 验证步骤

第一步:启动模拟云端服务器

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

第三步:手动触发报警

  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生成

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云端报警上报功能已完整实现并集成到系统中。代码编译通过固件烧录成功现在需要进行最终的功能验证测试。

功能已完全实现,可以立即进行验证测试!