models.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. cameras: List[CameraModel] = field(default_factory=list)
  34. is_active: bool = False
  35. ready_x: bool = False
  36. ready_y: bool = True # 无垂直工位时为True
  37. @dataclass
  38. class NVRModel:
  39. id: int
  40. name: str
  41. ip: str
  42. port: int = 8000
  43. username: str = "admin"
  44. password: str = ""
  45. @dataclass
  46. class AIConfig:
  47. enabled: bool = False
  48. broker: str = "127.0.0.1"
  49. port: int = 1883
  50. topics: List[str] = field(default_factory=list)
  51. @dataclass
  52. class ModbusConfig:
  53. ip: str
  54. port: int = 502
  55. frequency: int = 100
  56. stability_count: int = 3
  57. @dataclass
  58. class SocketConfig:
  59. ip: str
  60. port: int = 6000
  61. stability_time: int = 20
  62. stability_count: int = 3
  63. @dataclass
  64. class VideoConfig:
  65. rtsp_timeout: float = 5.0 # 默认 5 秒
  66. @dataclass
  67. class Config:
  68. app_name: str = "钢包工位视频监测系统"
  69. copyright: str = "恒莱达"
  70. screen: int = 0
  71. module_type: ModuleType = ModuleType.RFID
  72. rfid: Optional[SocketConfig] = None
  73. modbus: Optional[ModbusConfig] = None
  74. ai: AIConfig = field(default_factory=AIConfig)
  75. buckets: List[BucketModel] = field(default_factory=list)
  76. nvrs: List[NVRModel] = field(default_factory=list)
  77. video: VideoConfig = field(default_factory=VideoConfig)