from dataclasses import dataclass, field from typing import List, Optional from enum import Enum class ModuleType(Enum): HD3200 = "HD3200" RFID = "RFID" class CameraPosition(Enum): LEFT = "left" RIGHT = "right" class CameraState(Enum): ONLINE = "online" OFFLINE = "offline" class SwitchMode(Enum): AUTO = "auto" HAND = "hand" @dataclass class CameraModel: position: CameraPosition rtsp_url: str topic: Optional[str] = None state: CameraState = CameraState.OFFLINE class HookState(Enum): IDLE = "idle" RELEASING = "releasing" # 放包中 HOOKING = "hooking" # 挂包中 READY = "ready" # 挂包成功 @dataclass class BucketModel: id: int description: str code_x: str # 大车标识(RFID卡号或Modbus点号) code_y: str = "" # 小车标识(垂直工位) ai_module_id: Optional[int] = None # 关联AI模块索引 cameras: List[CameraModel] = field(default_factory=list) is_active: bool = False ready_x: bool = False ready_y: bool = True # 无垂直工位时为True @dataclass class AIModuleModel: id: int broker: str = "127.0.0.1" port: int = 1883 topics: List[str] = field(default_factory=list) @dataclass class AIConfig: enabled: bool = False tts_enabled: bool = False @dataclass class ModbusConfig: ip: str port: int = 502 frequency: int = 100 stability_count: int = 3 @dataclass class SocketConfig: ip: str port: int = 6000 stability_time: int = 20 stability_count: int = 3 @dataclass class VideoConfig: rtsp_timeout: float = 5.0 # 默认 5 秒 @dataclass class Config: app_name: str = "钢包工位视频监测系统" copyright: str = "恒莱达" screen: int = 0 module_type: ModuleType = ModuleType.RFID rfid: Optional[SocketConfig] = None modbus: Optional[ModbusConfig] = None ai: AIConfig = field(default_factory=AIConfig) ai_modules: List[AIModuleModel] = field(default_factory=list) buckets: List[BucketModel] = field(default_factory=list) video: VideoConfig = field(default_factory=VideoConfig)