GrabBag/App/ParkingSpaceGuide/Doc/停机引导远程控制协议.md

139 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 停机引导远程控制协议
## 版本信息
| 项目 | 内容 |
| --- | --- |
| 文档版本 | V1.1 |
| 更新日期 | 2026-09-09 |
| 适用范围 | ParkingSpaceGuideView 远程发现、控制和状态订阅 |
| 说明 | 控制端协议。引导结果字段见《停机引导对接协议》。 |
远程协议名称为 `ParkingSpaceGuideRemote`,版本 `1.1`。
## 1. 协议概述
`ParkingSpaceGuideApp` 提供远程服务。`ParkingSpaceGuideView` 通过 UDP 发现服务端,通过 ZeroMQ REQ/REP 发送控制命令,通过 ZeroMQ PUB/SUB 接收实时引导结果。
状态数据与《停机引导对接协议》中的 `ParkingSpaceGuideResult` 相同。
默认参数:
| 参数 | 默认值 | 传输方式 | 用途 |
| --- | ---: | --- | --- |
| discoveryPort | 5555 | UDP | 控制端广播搜索,服务端单播响应。 |
| controlPort | 15655 | ZeroMQ REQ/REP | 选择机型、开始/停止、维护模式、轮挡时间、历史回放。 |
| publishPort | 15656 | ZeroMQ PUB/SUB | 发布完整引导状态。 |
| topic | parking_guide | ZeroMQ topic | 状态订阅主题。 |
## 2. UDP 发现
请求:
```json
{"cmd":"discover","service":"ParkingSpaceGuide","protocol":"ParkingSpaceGuideRemote"}
```
响应:
```json
{
"ok": true,
"code": 0,
"cmd": "discover",
"protocol": "ParkingSpaceGuideRemote",
"version": "1.1",
"service": "ParkingSpaceGuide",
"deviceName": "ParkingSpaceGuideApp",
"deviceId": "设备唯一标识",
"controlPort": 15655,
"publishPort": 15656,
"topic": "parking_guide",
"activated": false,
"workMode": "normal",
"timestamp": 1783339200000
}
```
须校验 `ok`、`cmd`、`protocol`、`service`,并确认端口和主题有效。
## 3. ZeroMQ 控制
请求和应答均为单个紧凑 JSON。请求包含 `cmd`、`protocol`(固定 `ParkingSpaceGuideRemote`)。
| cmd | 请求字段 | 说明 |
| --- | --- | --- |
| select_model | `modelType` | 选择机型,须为当前配置中的可选机型。此处 `modelType` 为选择值,不是检测结果。 |
| start | `modelType`,可空 | 开始引导。空表示不选机型、不校验。 |
| stop | 无 | 停止引导。 |
| set_maintenance | `enabled` | `true` 进入维护模式,`false` 退出。 |
| chock_on / chock_off | 无 | 记录上/下轮挡时间。 |
| get_panel_config | 无 | 获取机型表和当前运行状态。 |
| list_sessions | `limit` | 列出历史会话,默认 50 条。 |
| get_session_samples | `sessionUuid` | 获取会话引导明细,按时间排序,用于还原该次引导过程。 |
| get_status | 无 | 获取当前完整 `ParkingSpaceGuideResult`。 |
| get_info | 无 | 获取服务信息,字段同发现响应。 |
| ping | 无 | 心跳。 |
成功:`ok=true`,`code=0`。失败:
```json
{
"ok": false,
"code": -3,
"cmd": "start",
"message": "服务端拒绝启动停机引导,请检查设备或安全状态",
"protocol": "ParkingSpaceGuideRemote",
"version": "1.1"
}
```
| code | 含义 |
| ---: | --- |
| 0 | 成功 |
| -1 | 请求不是有效 JSON |
| -2 | 参数错误 |
| -3 | 服务端拒绝执行 |
| -4 | 不支持的命令 |
| -5 | 协议名称不匹配 |
开始(`modelType` 须为当前配置中的机型名称,下面 `C919` 仅为示例):
```json
{"cmd":"start","protocol":"ParkingSpaceGuideRemote","modelType":"C919"}
```
不选机型开始:
```json
{"cmd":"start","protocol":"ParkingSpaceGuideRemote","modelType":""}
```
开始成功时返回 `activated=true`、`workMode`。停止成功时 `activated=false`。
`get_status` 的 `status` 为《停机引导对接协议》定义的完整结果对象。
`get_panel_config` 的 `panel`:`models` 为当前配置的可选机型,不是协议写死的清单。`C919` 仅为示例。
```json
{
"models": [
{ "name": "A320", "verifiable": true },
{ "name": "B737", "verifiable": true },
{ "name": "C919", "verifiable": false }
],
"workMode": "normal",
"activated": false
}
```
`verifiable=true` 表示选择名称包含 `A320` 或 `B737`,按检测家族匹配,例如 `A320-200` 对应检测 `A320`。其余配置机型为 `false`。
`list_sessions` 返回 `sessions` 数组。字段与《停机引导对接协议》第 7 节对齐,另含 `sessionUuid`、`startTime`、`endTime`。`sessionUuid` 仅用于回放关联,不是结果协议字段。`startTime`、`endTime` 及轮挡时间为设备本地 `yyyy-MM-dd HH:mm:ss`;未记录或进行中的时间为空。
`get_session_samples` 返回 `samples` 数组,按 `timestamp` 升序。元素为当时完整 `ParkingSpaceGuideResult`,字段与《停机引导对接协议》第 7 节一致,不含点云和图像。
## 4. ZeroMQ 状态订阅
发布为双帧消息:第一帧为主题 `parking_guide`,第二帧为完整 `ParkingSpaceGuideResult` JSON。客户端须按完整主题匹配。