118 lines
3.5 KiB
Python
118 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
MQTT服务单独测试
|
||
测试独立的MQTT服务模块
|
||
"""
|
||
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from services.online_script.mqtt_service import MQTTService
|
||
from datetime import datetime
|
||
import json
|
||
import time
|
||
|
||
|
||
def test_message_handler(topic: str, payload: str):
|
||
"""测试消息处理器"""
|
||
print(f"[消息处理器] 收到消息:")
|
||
print(f" 主题: {topic}")
|
||
print(f" 内容: {payload}")
|
||
print(f" 时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||
print("-" * 50)
|
||
|
||
|
||
def test_mqtt_service():
|
||
"""测试独立MQTT服务"""
|
||
print("=== MQTT服务独立测试 ===")
|
||
|
||
# 创建MQTT服务
|
||
mqtt_service = MQTTService()
|
||
|
||
try:
|
||
# 连接到服务器
|
||
print("连接MQTT服务器...")
|
||
if mqtt_service.connect():
|
||
print("MQTT连接成功")
|
||
|
||
# 订阅主题并添加处理器
|
||
test_topics = [
|
||
"vwed/test/message",
|
||
"vwed/device/+/status",
|
||
"vwed/task/status"
|
||
]
|
||
|
||
for topic in test_topics:
|
||
mqtt_service.subscribe(topic, test_message_handler)
|
||
print(f"已订阅主题: {topic}")
|
||
|
||
# 等待订阅完成
|
||
time.sleep(2)
|
||
|
||
# 发布测试消息
|
||
print("\n发布测试消息...")
|
||
test_messages = [
|
||
{
|
||
"topic": "vwed/test/message",
|
||
"payload": {
|
||
"message": "Hello MQTT Service!",
|
||
"timestamp": datetime.now().isoformat(),
|
||
"test_id": "test_001"
|
||
}
|
||
},
|
||
{
|
||
"topic": "vwed/device/robot_001/status",
|
||
"payload": {
|
||
"device_id": "robot_001",
|
||
"status": "online",
|
||
"battery": 85,
|
||
"position": {"x": 100, "y": 200}
|
||
}
|
||
},
|
||
{
|
||
"topic": "vwed/task/status",
|
||
"payload": {
|
||
"task_id": "task_001",
|
||
"status": "running",
|
||
"progress": 75
|
||
}
|
||
}
|
||
]
|
||
|
||
for msg in test_messages:
|
||
success = mqtt_service.publish(msg["topic"], msg["payload"])
|
||
if success:
|
||
print(f"✓ 成功发布消息到: {msg['topic']}")
|
||
else:
|
||
print(f"✗ 发布消息失败: {msg['topic']}")
|
||
time.sleep(1)
|
||
|
||
# 保持连接,监听消息
|
||
print("\n保持连接30秒,监听消息...")
|
||
time.sleep(30)
|
||
|
||
# 显示连接信息
|
||
print("\n=== 连接信息 ===")
|
||
info = mqtt_service.get_connection_info()
|
||
print(json.dumps(info, ensure_ascii=False, indent=2))
|
||
|
||
else:
|
||
print("MQTT连接失败")
|
||
|
||
except Exception as e:
|
||
print(f"测试过程中出错: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
finally:
|
||
# 断开连接
|
||
print("\n断开MQTT连接...")
|
||
mqtt_service.disconnect()
|
||
print("测试完成")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
test_mqtt_service() |