修复代码, 现在可以正常接收平台心跳包并返回设备状态

This commit is contained in:
2025-09-09 16:12:34 +08:00
parent 5d7a745a59
commit d14b18e99a
6 changed files with 342 additions and 280 deletions

View File

@@ -93,6 +93,8 @@ class WebSocketClient:
return True
except Exception as e:
logger.error(f"发送消息失败: {e}")
# 连接可能已断开,更新状态
self.connected = False
return False
async def listen(self):
@@ -125,18 +127,26 @@ class WebSocketClient:
logger.error(f"监听平台消息时发生错误: {e}")
self.connected = False
async def send_heartbeat(self):
"""发送心跳消息"""
if not self.connected:
return False
async def reconnect(self):
"""尝试重新连接到平台"""
logger.info("尝试重新连接到平台...")
reconnect_delay = 5 # 初始重连延迟(秒)
max_delay = 60 # 最大重连延迟(秒)
heartbeat_msg = {
"type": "heartbeat",
"device_id": self.device_id,
"timestamp": datetime.utcnow().isoformat() + 'Z'
}
return await self.send_message(heartbeat_msg)
while self.running and not self.connected:
try:
await self.connect()
if self.connected:
logger.info("重新连接成功")
return True
else:
logger.warning(f"重新连接失败,{reconnect_delay}秒后重试...")
await asyncio.sleep(reconnect_delay)
# 指数退避,但不超过最大延迟
reconnect_delay = min(reconnect_delay * 2, max_delay)
except Exception as e:
logger.error(f"重新连接时发生错误: {e}")
await asyncio.sleep(reconnect_delay)
def is_connected(self):
"""检查是否已连接"""