smart-home/test_esp32_network_access.py
2026-02-26 09:16:34 +08:00

106 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()