智慧水务管理系统 - 精河县供水工程综合管理平台

test_iot.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. """
  2. IoT模块测试脚本
  3. 用于验证MQTT适配器、设备管理器和API功能
  4. """
  5. import asyncio
  6. import json
  7. import sys
  8. import os
  9. # 添加项目根目录到Python路径
  10. sys.path.append(os.path.dirname(os.path.abspath(__file__)))
  11. from src.iot.device_manager import DeviceManager
  12. from src.iot.mqtt_adapter import MqttAdapter
  13. from src.iot.device_controller import DeviceController
  14. from src.iot.models import DeviceType, DeviceStatus
  15. async def test_device_manager():
  16. """测试设备管理器"""
  17. print("=== 测试设备管理器 ===")
  18. device_manager = DeviceManager()
  19. # 注册设备
  20. device_data = {
  21. 'device_sn': 'LL-001',
  22. 'device_type': 'flow_meter',
  23. 'name': '流量计-001',
  24. 'description': 'A区入口流量计',
  25. 'area': 'A区',
  26. 'position': '入口处',
  27. 'manufacturer': '华为',
  28. 'model': 'LL-100'
  29. }
  30. device = device_manager.register_device(device_data)
  31. print(f"注册设备: {device.device_sn} - {device.name}")
  32. # 获取设备
  33. retrieved_device = device_manager.get_device('LL-001')
  34. print(f"获取设备: {retrieved_device.name}")
  35. # 更新设备
  36. updated_device = device_manager.update_device('LL-001', {'status': DeviceStatus.ONLINE})
  37. print(f"更新设备状态: {updated_device.status}")
  38. # 列出设备
  39. devices = device_manager.list_devices()
  40. print(f"设备列表: {len(devices)}个设备")
  41. # 更新设备影子
  42. device_manager.update_device_shadow('LL-001', {'temperature': 25.5, 'pressure': 0.8})
  43. shadow = device_manager.get_device_shadow('LL-001')
  44. print(f"设备影子: {shadow.state}")
  45. # 获取统计信息
  46. stats = device_manager.get_device_statistics()
  47. print(f"设备统计: {stats}")
  48. print("设备管理器测试完成\n")
  49. async def test_mqtt_adapter():
  50. """测试MQTT适配器"""
  51. print("=== 测试MQTT适配器 ===")
  52. # 创建MQTT适配器(不实际连接)
  53. mqtt_adapter = MqttAdapter(
  54. broker_host="localhost",
  55. broker_port=1883,
  56. client_id="test-client"
  57. )
  58. # 测试消息发布
  59. test_payload = {"message": "Hello IoT", "timestamp": "2024-01-01T00:00:00"}
  60. success = mqtt_adapter.publish("test/topic", test_payload)
  61. print(f"消息发布测试: {'成功' if success else '失败'}")
  62. # 测试连接状态
  63. status = mqtt_adapter.get_connection_status()
  64. print(f"MQTT状态: {status}")
  65. print("MQTT适配器测试完成\n")
  66. async def test_device_controller():
  67. """测试设备控制器"""
  68. print("=== 测试设备控制器 ===")
  69. # 创建组件
  70. device_manager = DeviceManager()
  71. mqtt_adapter = MqttAdapter()
  72. device_controller = DeviceController(device_manager, mqtt_adapter)
  73. # 注册一些测试设备
  74. test_devices = [
  75. {
  76. 'device_sn': 'LL-001',
  77. 'device_type': 'flow_meter',
  78. 'name': '流量计-001',
  79. 'area': 'A区',
  80. 'manufacturer': '华为'
  81. },
  82. {
  83. 'device_sn': 'YL-001',
  84. 'device_type': 'pressure_meter',
  85. 'name': '压力表-001',
  86. 'area': 'B区',
  87. 'manufacturer': '西门子'
  88. }
  89. ]
  90. for device_data in test_devices:
  91. device_manager.register_device(device_data)
  92. # 模拟API请求
  93. print("测试设备注册:")
  94. print(f"已注册设备数量: {len(device_manager.devices)}")
  95. # 模拟设备发现
  96. discovered = device_manager.discover_devices()
  97. print(f"发现设备数量: {len(discovered)}")
  98. print("设备控制器测试完成\n")
  99. async def main():
  100. """主测试函数"""
  101. print("开始 IoT 模块测试...\n")
  102. try:
  103. # 测试各个组件
  104. await test_device_manager()
  105. await test_mqtt_adapter()
  106. await test_device_controller()
  107. print("✅ 所有测试完成!")
  108. except Exception as e:
  109. print(f"❌ 测试失败: {e}")
  110. import traceback
  111. traceback.print_exc()
  112. if __name__ == "__main__":
  113. asyncio.run(main())