smart-home/test_esp32_network_access.py

106 lines
3.7 KiB
Python
Raw Normal View History

2026-02-26 09:16:34 +08:00
#!/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()