106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
#!/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()
|