#!/usr/bin/env python3 """ 测试设备属性名称修复 验证设备属性名是否已转换为友好的格式 """ import asyncio import json from app.core.device.manager import device_manager from app.utils.structured_log import get_structured_logger logger = get_structured_logger(__name__) async def test_device_properties_fix(): """测试设备属性名称修复""" logger.info("开始测试设备属性名称修复") try: # 1. 启动设备事件推送服务 logger.info("步骤1: 启动设备事件推送服务") await device_manager.start_event_pusher() logger.info("设备事件推送服务启动成功") # 2. 模拟设备连接事件 logger.info("步骤2: 模拟设备连接事件") test_device_id = "AMFU6R1813008221" # 模拟设备连接事件 success = await device_manager.handle_auto_discovered_device_event( device_id=test_device_id, status="device", device_info={} ) if success: logger.info(f"设备连接事件处理成功: {test_device_id}") else: logger.error(f"设备连接事件处理失败: {test_device_id}") return # 3. 检查自动发现设备列表 logger.info("步骤3: 检查自动发现设备列表") auto_discovered_devices = await device_manager.get_auto_discovered_devices() for device in auto_discovered_devices: if device["device_id"] == test_device_id: device_info = device.get("device_info", {}) logger.info(f"找到设备 {test_device_id} 的设备信息:") logger.info(f" 设备信息属性数量: {len(device_info)}") logger.info(f" 品牌: {device_info.get('brand', 'Unknown')}") logger.info(f" 型号: {device_info.get('model', 'Unknown')}") logger.info(f" 设备名称: {device_info.get('device', 'Unknown')}") logger.info(f" 系统版本: {device_info.get('android_version', 'Unknown')}") logger.info(f" SDK版本: {device_info.get('sdk_version', 'Unknown')}") logger.info(f" 硬件平台: {device_info.get('hardware_platform', 'Unknown')}") logger.info(f" 区域设置: {device_info.get('locale', 'Unknown')}") # 检查是否还有带点号的属性名 problematic_props = [key for key in device_info.keys() if '.' in key] if problematic_props: logger.warning(f"发现带点号的属性名: {problematic_props}") else: logger.info("所有属性名都已转换为友好格式") break else: logger.warning(f"未找到设备 {test_device_id} 在自动发现设备列表中") # 4. 检查事件缓冲 logger.info("步骤4: 检查事件缓冲") # 注册一个测试客户端来获取缓冲的事件 await device_manager.register_websocket_client("test_client") # 获取缓冲的事件 buffered_events = await device_manager._event_manager.get_buffered_events("test_client") logger.info(f"缓冲事件数量: {len(buffered_events)}") for event in buffered_events: if event.get("device_id") == test_device_id: logger.info(f"找到设备 {test_device_id} 的事件:") logger.info(f" 事件类型: {event.get('type')}") logger.info(f" 设备状态: {event.get('status')}") logger.info(f" 设备信息属性数量: {len(event.get('device_info', {}))}") device_info = event.get("device_info", {}) if device_info: logger.info(f" 品牌: {device_info.get('brand', 'Unknown')}") logger.info(f" 型号: {device_info.get('model', 'Unknown')}") logger.info(f" 设备名称: {device_info.get('device', 'Unknown')}") logger.info(f" 系统版本: {device_info.get('android_version', 'Unknown')}") logger.info(f" SDK版本: {device_info.get('sdk_version', 'Unknown')}") logger.info(f" 硬件平台: {device_info.get('hardware_platform', 'Unknown')}") logger.info(f" 区域设置: {device_info.get('locale', 'Unknown')}") # 检查是否还有带点号的属性名 problematic_props = [key for key in device_info.keys() if '.' in key] if problematic_props: logger.warning(f"事件中发现带点号的属性名: {problematic_props}") else: logger.info("事件中所有属性名都已转换为友好格式") else: logger.warning("设备信息为空!") break else: logger.warning(f"未找到设备 {test_device_id} 的事件在缓冲中") # 5. 注销测试客户端 await device_manager.unregister_websocket_client("test_client") logger.info("设备属性名称修复测试完成") except Exception as e: logger.error(f"测试过程中发生错误: {e}") import traceback logger.error(f"异常堆栈: {traceback.format_exc()}") if __name__ == "__main__": asyncio.run(test_device_properties_fix())