#!/usr/bin/env python3 """ 测试ESP32网络访问能力 验证ESP32是否能访问模拟云端服务器 """ import requests import json import time def test_esp32_can_access_mock_server(): """测试ESP32是否能访问模拟服务器""" print("🌐 测试ESP32网络访问能力...") # 让ESP32尝试访问我们的模拟服务器 try: # 通过ESP32的HTTP客户端测试连接 test_url = "http://192.168.1.3:80/api/test/http" test_data = { "target_url": "http://192.168.1.57:36988/health", "method": "GET" } response = requests.post(test_url, json=test_data, timeout=10) if response.status_code == 200: result = response.json() print(f"✅ ESP32网络测试成功: {result}") return True else: print(f"❌ ESP32网络测试失败: {response.status_code}") return False except Exception as e: print(f"⚠️ ESP32网络测试API不可用: {e}") # 备用方案:直接测试ESP32到我们服务器的连通性 print("🔍 测试本机到ESP32的连通性...") try: response = requests.get("http://192.168.1.3:80/api/status", timeout=5) if response.status_code == 200: print("✅ 本机可以访问ESP32") else: print("❌ 本机无法访问ESP32") except Exception as e: print(f"❌ 本机访问ESP32失败: {e}") print("🔍 测试ESP32到本机的连通性...") print("💡 请在ESP32串口监视器中查看是否有网络连接错误") return False def check_esp32_logs_for_cloud_reporter(): """检查ESP32日志中的CloudAlarmReporter信息""" print("\n📋 ESP32日志检查指导:") print("=" * 40) print("请在ESP32串口监视器中查找以下关键日志:") print() print("✅ 正常初始化应该看到:") print(" I CloudAlarmReporter: 🌐 初始化云端报警上报模块") print(" I CloudAlarmReporter: ✅ 云端报警上报模块初始化成功") print(" I CloudAlarmReporter: 🔗 云端服务器: http://192.168.1.57:36988/device-alarms") print() print("🚨 报警上报应该看到:") print(" I AlarmManager: ☁️ 报警已加入云端上报队列") print(" I CloudAlarmReporter: 📨 开始上报报警: [报警类型] 206EF1B3AD74:xxx") print(" I CloudAlarmReporter: 📡 HTTP响应状态码: 200") print(" I CloudAlarmReporter: ✅ 报警上报成功") print() print("❌ 如果看到错误:") print(" E CloudAlarmReporter: ❌ HTTP请求失败") print(" E CloudAlarmReporter: ❌ 连接超时") print(" E CloudAlarmReporter: ❌ DNS解析失败") print("=" * 40) def main(): """主函数""" print("🔍 ESP32云端上报问题诊断") print("=" * 50) # 测试网络连通性 network_ok = test_esp32_can_access_mock_server() # 检查日志指导 check_esp32_logs_for_cloud_reporter() print(f"\n🎯 诊断建议:") print("=" * 30) if not network_ok: print("1. 检查ESP32和电脑是否在同一网络") print("2. 检查防火墙是否阻止了36988端口") print("3. 确认ESP32的WiFi连接正常") print("4. 重启ESP32并观察完整启动日志") print("5. 手动触发报警并观察串口输出") print("6. 检查CloudAlarmReporter::init()是否被调用") print(f"\n💡 可能的问题:") print("- CloudAlarmReporter模块未正确初始化") print("- 网络连接问题(ESP32无法访问192.168.1.57:36988)") print("- HTTP客户端配置错误") print("- 报警上报队列未正常工作") if __name__ == "__main__": main()