#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 模拟设备模块,用于创建和管理模拟设备 """ import random import time import logging # 配置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) class SimulatedDevice: """模拟设备类""" def __init__(self, device_id, device_type, status="stopped"): """ 初始化模拟设备 Args: device_id (str): 设备ID device_type (str): 设备类型 status (str): 初始状态 """ self.device_id = device_id self.device_type = device_type self.status = status self.created_at = time.time() logger.info(f"创建模拟设备: ID={device_id}, 类型={device_type}, 状态={status}") def control(self, action): """ 控制设备 Args: action (str): 控制动作 ('on' 或 'off') Returns: dict: 控制结果 """ logger.info(f"控制设备 {self.device_id}: 动作={action}") if action == "on": self.status = "running" result = { "device_id": self.device_id, "status": "success", "message": f"设备 {self.device_id} 已开启" } logger.info(f"设备 {self.device_id} 开启成功") return result elif action == "off": self.status = "stopped" result = { "device_id": self.device_id, "status": "success", "message": f"设备 {self.device_id} 已关闭" } logger.info(f"设备 {self.device_id} 关闭成功") return result else: result = { "device_id": self.device_id, "status": "failed", "message": f"不支持的操作: {action}" } logger.warning(f"设备 {self.device_id} 不支持的操作: {action}") return result def get_status(self): """ 获取设备状态 Returns: dict: 设备状态信息 """ logger.info(f"查询设备 {self.device_id} 状态") # 模拟一些随机的设备数据 if self.status == "running": power = random.randint(200, 240) current = random.uniform(4.0, 6.0) result = { "device_id": self.device_id, "status": self.status, "power": power, "current": round(current, 2) } logger.info(f"设备 {self.device_id} 状态: 运行中, 功率={power}V, 电流={round(current, 2)}A") return result else: result = { "device_id": self.device_id, "status": self.status, "power": 0, "current": 0.0 } logger.info(f"设备 {self.device_id} 状态: 已停止") return result class DeviceManager: """设备管理器""" def __init__(self): """初始化设备管理器""" self.devices = {} logger.info("初始化设备管理器") def add_device(self, device): """ 添加设备 Args: device (SimulatedDevice): 模拟设备实例 """ self.devices[device.device_id] = device logger.info(f"添加设备到管理器: {device.device_id}") def remove_device(self, device_id): """ 移除设备 Args: device_id (str): 设备ID """ if device_id in self.devices: del self.devices[device_id] logger.info(f"从管理器移除设备: {device_id}") def get_device(self, device_id): """ 获取设备 Args: device_id (str): 设备ID Returns: SimulatedDevice: 设备实例,如果不存在则返回None """ device = self.devices.get(device_id) if device: logger.debug(f"获取设备: {device_id}") else: logger.warning(f"尝试获取不存在的设备: {device_id}") return device def get_all_devices(self): """ 获取所有设备 Returns: list: 所有设备实例的列表 """ logger.info(f"获取所有设备,共 {len(self.devices)} 个设备") return list(self.devices.values()) def control_device(self, device_id, action): """ 控制指定设备 Args: device_id (str): 设备ID action (str): 控制动作 Returns: dict: 控制结果 """ logger.info(f"控制设备: ID={device_id}, 动作={action}") device = self.get_device(device_id) if device: return device.control(action) else: result = { "device_id": device_id, "status": "failed", "message": f"设备 {device_id} 不存在" } logger.error(f"控制设备失败: 设备 {device_id} 不存在") return result def query_device_status(self, device_id): """ 查询指定设备状态 Args: device_id (str): 设备ID Returns: dict: 设备状态信息 """ logger.info(f"查询设备状态: ID={device_id}") device = self.get_device(device_id) if device: return device.get_status() else: result = { "device_id": device_id, "status": "failed", "message": f"设备 {device_id} 不存在" } logger.error(f"查询设备状态失败: 设备 {device_id} 不存在") return result def query_all_device_status(self): """ 查询所有设备状态 Returns: list: 所有设备状态信息列表 """ logger.info("查询所有设备状态") statuses = [] for device in self.devices.values(): status_info = { "device_id": device.device_id, "device_type": device.device_type, "status": device.status } statuses.append(status_info) logger.debug(f"设备 {device.device_id} 状态: {device.status}") logger.info(f"查询所有设备状态完成,共 {len(statuses)} 个设备") return statuses