models.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from dataclasses import dataclass, field
  2. from typing import List, Optional
  3. from enum import Enum
  4. class ModuleType(Enum):
  5. HD3200 = "HD3200"
  6. RFID = "RFID"
  7. class CameraPosition(Enum):
  8. LEFT = "left"
  9. RIGHT = "right"
  10. class CameraState(Enum):
  11. ONLINE = "online"
  12. OFFLINE = "offline"
  13. class SwitchMode(Enum):
  14. AUTO = "auto"
  15. HAND = "hand"
  16. @dataclass
  17. class CameraModel:
  18. position: CameraPosition
  19. rtsp_url: str
  20. topic: Optional[str] = None
  21. state: CameraState = CameraState.OFFLINE
  22. class HookState(Enum):
  23. IDLE = "idle"
  24. RELEASING = "releasing" # 放包中
  25. HOOKING = "hooking" # 挂包中
  26. READY = "ready" # 挂包成功
  27. @dataclass
  28. class BucketModel:
  29. id: int
  30. description: str
  31. code_x: str # 大车标识(RFID卡号或Modbus点号)
  32. code_y: str = "" # 小车标识(垂直工位)
  33. ai_module_id: Optional[int] = None # 关联AI模块索引
  34. cameras: List[CameraModel] = field(default_factory=list)
  35. is_active: bool = False
  36. ready_x: bool = False
  37. ready_y: bool = True # 无垂直工位时为True
  38. @dataclass
  39. class NVRModel:
  40. id: int
  41. name: str
  42. ip: str
  43. port: int = 8000
  44. username: str = "admin"
  45. password: str = ""
  46. @dataclass
  47. class AIModuleModel:
  48. id: int
  49. broker: str = "127.0.0.1"
  50. port: int = 1883
  51. topics: List[str] = field(default_factory=list)
  52. @dataclass
  53. class AIConfig:
  54. enabled: bool = False
  55. broker: str = "127.0.0.1"
  56. port: int = 1883
  57. topics: List[str] = field(default_factory=list)
  58. @dataclass
  59. class ModbusConfig:
  60. ip: str
  61. port: int = 502
  62. frequency: int = 100
  63. stability_count: int = 3
  64. @dataclass
  65. class SocketConfig:
  66. ip: str
  67. port: int = 6000
  68. stability_time: int = 20
  69. stability_count: int = 3
  70. @dataclass
  71. class VideoConfig:
  72. rtsp_timeout: float = 5.0 # 默认 5 秒
  73. @dataclass
  74. class Config:
  75. app_name: str = "钢包工位视频监测系统"
  76. copyright: str = "恒莱达"
  77. screen: int = 0
  78. module_type: ModuleType = ModuleType.RFID
  79. rfid: Optional[SocketConfig] = None
  80. modbus: Optional[ModbusConfig] = None
  81. ai: AIConfig = field(default_factory=AIConfig)
  82. ai_modules: List[AIModuleModel] = field(default_factory=list)
  83. buckets: List[BucketModel] = field(default_factory=list)
  84. nvrs: List[NVRModel] = field(default_factory=list)
  85. video: VideoConfig = field(default_factory=VideoConfig)