2026-07-27 14:28:07 +08:00
|
|
|
"""
|
|
|
|
|
AI Box Sophon Adapter — ORM 模型
|
|
|
|
|
|
|
|
|
|
SQLModel 定义设备心跳记录表。
|
|
|
|
|
"""
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BoardHeartbeat(SQLModel, table=True):
|
|
|
|
|
"""设备心跳记录表"""
|
2026-07-28 14:16:00 +08:00
|
|
|
__tablename__ = "board_heartbeat" # type: ignore
|
2026-07-27 14:28:07 +08:00
|
|
|
|
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
|
|
|
board_id: str = Field(index=True, unique=True, description="设备唯一标识 (BoardId)")
|
|
|
|
|
board_ip: str = Field(default="", description="设备 IP")
|
|
|
|
|
board_platform: str = Field(default="", description="硬件类型")
|
|
|
|
|
board_temp: str = Field(default="", description="芯片温度")
|
|
|
|
|
board_type: str = Field(default="", description="接入方式 WAN/4G")
|
|
|
|
|
status: str = Field(default="未知", description="设备状态")
|
|
|
|
|
version: str = Field(default="", description="软件版本")
|
|
|
|
|
system_info: str = Field(default="", description="系统版本信息")
|
|
|
|
|
grant_code: int = Field(default=0, description="授权码")
|
|
|
|
|
grant_desc: str = Field(default="", description="授权描述")
|
|
|
|
|
last_ping_time: datetime = Field(default_factory=datetime.now, description="最后心跳时间")
|
|
|
|
|
ping_data: str = Field(default="{}", description="完整心跳数据 JSON")
|
|
|
|
|
is_online: bool = Field(default=True, description="是否在线")
|
|
|
|
|
created_at: datetime = Field(default_factory=datetime.now, description="首次上报时间")
|
|
|
|
|
updated_at: datetime = Field(default_factory=datetime.now, description="最后更新时间")
|
2026-07-28 14:16:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AlarmRecord(SQLModel, table=True):
|
|
|
|
|
"""告警记录表 — 存储盒子上报的完整告警报文"""
|
|
|
|
|
__tablename__ = "alarm_record" # type: ignore
|
|
|
|
|
|
|
|
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
|
|
|
board_id: str = Field(index=True, description="设备唯一标识 (BoardId)")
|
|
|
|
|
board_ip: str = Field(default="", description="设备 IP")
|
|
|
|
|
alarm_id: str = Field(index=True, unique=True, description="告警唯一标识 (AlarmId/UniqueId)")
|
|
|
|
|
summary: str = Field(default="", description="违规类型 (Summary)")
|
|
|
|
|
task_session: str = Field(default="", description="任务编号 (TaskSession)")
|
|
|
|
|
media_name: str = Field(default="", description="通道名称")
|
|
|
|
|
video_file: str = Field(default="", description="关联视频标识 (VideoFile)")
|
|
|
|
|
alarm_time: str = Field(default="", description="告警时间 (Time)")
|
|
|
|
|
alarm_timestamp: int = Field(default=0, description="告警时间戳-微秒 (TimeStamp)")
|
|
|
|
|
alarm_data: str = Field(default="{}", description="完整告警报文 JSON 字符串")
|
|
|
|
|
created_at: datetime = Field(default_factory=datetime.now, description="上报时间")
|