23 KiB
PGU5-Core API
本文档对应 PGU5-Core v2.1.1,以 pgu5a_base.py 中的实际路由为准。
基本约定
| 项目 | 说明 |
|---|---|
| 设备地址 | http://192.168.101.172:8080 |
| 本机地址 | http://127.0.0.1:8080 |
| JSON 编码 | UTF-8 |
| POST 编码 | application/x-www-form-urlencoded |
| 缓存 | 动态页面、JSON 和预览帧均返回禁止缓存响应头 |
| 鉴权 | 管理 API 本身没有登录层,应只在可信管理网络中开放 |
大多数 JSON 接口即使业务失败也返回 HTTP 200,调用方必须检查响应中的 ok。文件预览、原始文件和 ZIP 下载接口会按错误情况返回 HTTP 4xx。预览帧暂时不可用时返回 HTTP 204。
通用 JSON 成功响应:
{
"ok": true,
"message": "operation completed"
}
通用 JSON 失败响应:
{
"ok": false,
"message": "failure reason"
}
接口总览
GET
| 路径 | 用途 |
|---|---|
/api/status |
运行状态、相机状态、FPS、保存队列和自动休眠 |
/api/system/version |
应用版本、Git 诊断信息和设备序列号 |
/api/storage |
存储总量、已用/剩余空间和自动清理状态 |
/api/network |
AP、STA、以太网、Syncthing 和 HS 状态 |
/api/network/headscale/task |
HS 后台任务进度 |
/api/syncthing/identity-init/status |
Syncthing 身份初始化进度 |
/api/ota/status |
OTA 当前状态 |
/api/m3/control |
M3/L640 热成像 USB 控制状态 |
/api/ms602/detection |
MS602 抖动、撕裂、帧率检测参数和六通道诊断 |
/api/ssh/read |
读取 Web SSH PTY 输出 |
/api/config |
读取当前 JSON 配置文本 |
/api/logs |
获取内存运行日志 |
/api/files |
分页列出保存目录 |
/api/files/preview |
获取图像预览 |
/api/files/raw |
获取原始文件 |
/api/schedule |
获取定时保存配置 |
/frame/ms602/{band}.jpg |
MS602 单波段预览 |
/frame/m3lite.jpg |
M3Lite 预览 |
/frame/dcl.jpg |
DCL 预览 |
/frame/uvc_rgb.jpg |
UVC-RGB 预览 |
/assets/logo.png |
产品 Logo |
/assets/xterm.js |
Web SSH 终端脚本,按需加载 |
/assets/xterm.css |
Web SSH 终端样式,按需加载 |
/assets/xterm.LICENSE |
xterm.js 许可证文本 |
POST
| 路径 | 用途 |
|---|---|
/api/save/{target} |
立即保存指定目标 |
/api/save |
兼容形式的立即保存 |
/api/schedule |
修改定时保存 |
/api/storage/cleanup |
修改自动清理配置并执行空间检查 |
/api/files/delete |
后台永久删除文件或目录 |
/api/files/download |
打包下载文件或目录 |
/api/sensors/power |
唤醒或休眠传感器 |
/api/sensors/auto_sleep |
设置自动休眠时间 |
/api/m3/auto_nuc |
设置并保存自动 NUC |
/api/ms602/detection |
保存并立即应用 MS602 抖动、撕裂、帧率检测参数 |
/api/network/scan |
扫描 Wi-Fi |
/api/network/ap |
修改 AP |
/api/network/sta/connect |
连接 STA |
/api/network/sta/disconnect |
断开 STA |
/api/network/headscale/install |
安装 HS 组件 |
/api/network/headscale/uninstall |
卸载 HS 组件 |
/api/network/headscale/login |
登录 Headscale |
/api/network/headscale/logout |
退出 Headscale |
/api/syncthing/identity-init/start |
重新生成 Syncthing 设备身份 |
/api/ssh/open |
打开 Web SSH 会话 |
/api/ssh/input |
写入 Web SSH PTY |
/api/ssh/close |
关闭 Web SSH 会话 |
/api/config/save |
保存 JSON 配置并重启服务 |
/api/system/update/check |
检查 Gitea Release |
/api/system/update/apply |
应用 OTA 标签 |
/api/service/restart |
重启主服务 |
/api/system/reboot |
重启系统 |
/api/system/shutdown |
同步磁盘并关机 |
状态与版本
GET /api/status
返回当前运行快照。主要字段:
| 字段 | 说明 |
|---|---|
app_version |
APP_VERSION |
server_time / server_time_text |
设备时间 |
save_root |
保存根目录 |
message |
最近一条运行消息 |
logs |
有界内存日志 |
sensor_power.awake |
传感器是否处于唤醒状态 |
sensor_power.auto_sleep |
自动休眠配置、倒计时和暂停状态 |
schedule |
定时保存开关与间隔 |
save_queue |
保存队列占用情况 |
refresh |
前端刷新周期 |
preview_cache_ts |
各预览缓存更新时间 |
stats.capture |
采集 FPS |
stats.preview |
预览编码 FPS |
stats.request |
页面请求 FPS |
ms602 |
MS602 总体状态 |
ms602_channels |
六通道状态和恢复诊断 |
m3lite / dcl / uvc_rgb |
各相机状态 |
m3_control |
热成像控制状态 |
dcl_frame / uvc_rgb_frame |
原始帧尺寸 |
ms602_channels 的键为 480、550、660、720、840、rgb。每个通道包含:
{
"status": "CONNECTED",
"message": "Connected: /dev/video12",
"device_index": 12,
"restart_count": 0,
"jitter_count": 0,
"jitter_reversals": 0,
"jitter_cancellation": 1.0,
"jitter_total_shift": 0.0,
"last_shift_x": 0.01,
"last_shift_y": -0.02,
"updated_at": 1785835208.1
}
GET /api/system/version
界面显示版本来自应用常量,不由 Git 自动覆盖。
| 字段 | 说明 |
|---|---|
version |
当前发布标签 |
app_version |
APP_VERSION |
release_tag |
APP_RELEASE_TAG |
current_version |
当前应用版本 |
current_tag |
当前发布标签 |
git_tag |
git describe 诊断值 |
commit |
短提交号 |
branch |
当前分支 |
dirty |
工作区是否有未提交改动 |
serial |
PGU5A- 加以太网 MAC |
GET /api/logs
返回:
{
"logs": [
{
"time": 1785835208.1,
"time_text": "2026-08-04 17:20:08",
"message": "Ready"
}
],
"message": "Ready"
}
预览接口
GET /frame/ms602/{band}.jpg
GET /frame/m3lite.jpg
GET /frame/dcl.jpg
GET /frame/uvc_rgb.jpg
MS602 band 允许值:
480 550 660 720 840 rgb
有帧时返回 image/jpeg;尚无缓存帧时返回 HTTP 204。这些地址是轮询快照,不是 MJPEG 长连接。
保存与定时任务
POST /api/save/{target}
POST /api/save
两种形式都执行一次同步保存,文件写入 ${save_root}/Once。
target 允许值:
| 值 | 行为 |
|---|---|
ms602 |
保存完整六波段 TIFF |
m3lite |
保存温度 CSV 和温度图 |
dcl |
保存 DCL JPEG |
uvc_rgb |
保存 UVC-RGB JPEG |
all |
要求全部相机保存,任一失败时 ok=false |
online |
只保存当前已连接的相机 |
路径形式示例:
curl -X POST http://127.0.0.1:8080/api/save/all
兼容形式:
curl -X POST http://127.0.0.1:8080/api/save -d "target=all"
GET /api/schedule
{
"enabled": false,
"interval_sec": 5.0
}
POST /api/schedule
| 字段 | 必填 | 说明 |
|---|---|---|
interval_sec |
否 | 最小为 1.0 秒 |
enabled |
否 | 1/true/on 开启,其他值关闭 |
开启时创建本次定时任务目录,并周期性将 online 目标加入异步保存队列。定时保存或保存队列有任务时,自动休眠暂停。
存储与文件管理
所有传入路径均为相对 save_root 的路径。服务会解析规范路径并拒绝越出保存根目录的访问。
GET /api/storage
返回存储总量、已用/剩余空间、刷新周期、版本以及自动清理结果:
{
"save_root": "/nvme-data/pgu_data",
"free_gb": 120.5,
"used_gb": 118.0,
"total_gb": 238.5,
"refresh_ms": 5000,
"app_version": "v2.1.1",
"auto_cleanup": {}
}
读取该接口会执行一次自动清理空间检查;只有配置已启用且空间低于阈值时才会删除候选采集目录。Once 目录受保护。
POST /api/storage/cleanup
| 字段 | 必填 | 说明 |
|---|---|---|
enabled |
是 | 自动清理开关 |
min_free_gb |
否 | 最低剩余空间,最小 1 GB,默认 30 |
该接口会持久化配置,并立即执行一次空间检查。
GET /api/files
查询参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
path |
空 | 相对目录 |
page |
1 |
页码 |
page_size |
20 |
每页数量,最大 20 |
目录在前、文件在后,名称按不区分大小写排序。隐藏项不会返回。
{
"ok": true,
"root": "/nvme-data/pgu_data",
"path": "Once",
"parent": "",
"items": [
{
"name": "capture.jpg",
"path": "Once/capture.jpg",
"is_dir": false,
"size": 102400,
"mtime": 1785835208.1,
"mtime_text": "2026-08-04 17:20",
"ext": ".jpg",
"is_image": true,
"inline_image": true,
"child_count": 0
}
],
"total_count": 1,
"page": 1,
"page_size": 20,
"total_pages": 1,
"dir_count": 0,
"file_count": 1,
"total_size": 102400
}
GET /api/files/preview
/api/files/preview?path=Once/capture.tiff
仅接受图像文件。JPEG、PNG、WebP、BMP 可直接返回;TIFF 等图像会缩放到最大 1800 x 1800 并转换为 JPEG 预览。
GET /api/files/raw
/api/files/raw?path=Once/capture.jpg
/api/files/raw?path=Once/capture.jpg&download=1
download=1 时使用附件下载响应头,否则以内联方式返回。
POST /api/files/download
paths 为换行分隔的相对路径,可同时包含文件和目录:
curl -X POST http://127.0.0.1:8080/api/files/download \
--data-urlencode $'paths=Once/a.jpg\nOnce/session'
返回 application/zip。隐藏文件、符号链接和越界路径不会加入压缩包。
POST /api/files/delete
paths 同样为换行分隔。接口先校验路径,随后启动后台永久删除:
{
"ok": true,
"message": "已开始后台删除 2 项",
"queued": true,
"paths": [
"Once/a.jpg",
"Once/session"
]
}
保存根目录不能删除。该操作没有回收站和撤销功能。
传感器与热成像控制
POST /api/sensors/power
| 字段 | 说明 |
|---|---|
awake |
1/true/on 唤醒,否则休眠 |
唤醒时 MS602 和 DCL 立即启动;M3Lite 与 UVC-RGB 按各自延迟异步上电。休眠会停止相机、断开继电器电源并清除预览缓存。
POST /api/sensors/auto_sleep
| 字段 | 说明 |
|---|---|
minutes |
自动休眠分钟数;0 关闭 |
修改后立即写入 pgu5a_config.json。
GET /api/status 的 sensor_power.auto_sleep 返回:
{
"minutes": 15.0,
"idle_for_sec": 120.0,
"remaining_sec": 780.0,
"enabled": true,
"paused": false,
"activity_running": false
}
定时采集开启或保存队列仍有任务时,paused 和 activity_running 为 true,自动休眠倒计时暂停。
GET /api/ms602/detection
返回当前运行中的检测参数和六通道实时诊断:
{
"ok": true,
"config": {
"startup_detection_window_sec": 5.0,
"jitter_detection_enabled": true,
"jitter_shift_min": 0.04,
"jitter_shift_max": 0.5,
"jitter_horizontal_max": 0.25,
"jitter_restart_reversals": 3,
"jitter_window_sec": 3.0,
"jitter_cancellation_ratio": 0.35,
"jitter_total_shift_min": 0.35,
"jitter_large_shift_min": 0.8,
"jitter_large_shift_events": 2,
"jitter_extreme_shift_min": 1.0,
"frame_integrity_detection_enabled": true,
"frame_integrity_phase_response_min": 0.55,
"frame_integrity_delta_min": 8.0,
"frame_integrity_restart_events": 2,
"frame_integrity_window_sec": 3.0,
"frame_tearing_gradient_ratio_min": 2.0,
"frame_tearing_row_diff_min": 5.5,
"frame_rate_detection_enabled": true,
"frame_rate_min": 2.0,
"frame_rate_memory": 2,
"frame_max_age_sec": 2.0,
"frame_max_skew_sec": 1.0
},
"channels": {
"480": {
"status": "CONNECTED",
"device_index": 20,
"restart_count": 1,
"jitter_count": 0,
"frame_integrity_count": 1,
"frame_rate_count": 0,
"frame_rate_fps": 8.1,
"frame_rate_low_streak": 0,
"frame_rate_result": "ok",
"detection_active": false,
"detection_remaining_sec": 0.0,
"detection_result": "passed",
"detection_run_count": 1,
"detection_sample_count": 24,
"last_phase_response": 0.98,
"last_frame_delta": 1.2,
"last_tearing_gradient_ratio": 1.31,
"last_tearing_row_diff": 4.58,
"last_integrity_trigger_events": 2,
"last_integrity_trigger_gradient_ratio": 2.64,
"last_integrity_trigger_row_diff": 8.01
}
}
}
POST /api/ms602/detection
表单字段与范围:
| 字段 | 范围 | 说明 |
|---|---|---|
startup_detection_window_sec |
1.0..60.0 |
每次成功打开通道后的检测时长,默认 5.0 秒 |
jitter_detection_enabled |
布尔值 | 开关小抖动检测 |
jitter_shift_min |
0.01..10.0 |
160x100 检测样本上的最小上下位移 |
jitter_shift_max |
0.1..20.0 |
最大上下位移,必须不小于最小值 |
jitter_horizontal_max |
0.01..10.0 |
允许的最大左右位移 |
jitter_restart_reversals |
2..20 |
反向次数阈值 |
jitter_window_sec |
1.0..30.0 |
抖动统计窗口,秒 |
jitter_cancellation_ratio |
0.05..0.8 |
来回位移抵消比例阈值 |
jitter_total_shift_min |
0.05..50.0 |
累计位移阈值 |
jitter_large_shift_min |
0.1..20.0 |
启动窗口内大幅垂直位移阈值 |
jitter_large_shift_events |
1..20 |
大幅位移累计达到此次数后恢复当前通道 |
jitter_extreme_shift_min |
0.1..20.0 |
单次极大垂直位移阈值,必须不小于大幅位移阈值 |
frame_integrity_detection_enabled |
布尔值 | 开关撕裂检测 |
frame_integrity_phase_response_min |
0.1..0.95 |
相位相关度阈值;调高更敏感 |
frame_integrity_delta_min |
1.0..100.0 |
帧差阈值;调低更敏感 |
frame_integrity_restart_events |
2..20 |
窗口内异常次数阈值 |
frame_integrity_window_sec |
1.0..30.0 |
撕裂统计窗口,秒 |
frame_tearing_gradient_ratio_min |
1.1..5.0 |
单帧纵向变化与横向变化的比例阈值 |
frame_tearing_row_diff_min |
1.0..30.0 |
单帧横向断层强度阈值 |
frame_rate_detection_enabled |
布尔值 | 开关运行期轻量帧率检测 |
frame_rate_min |
0.1..60.0 |
单通道最低成功读帧 FPS |
frame_rate_memory |
1..20 |
连续低帧率间隔达到此次数后恢复当前通道 |
frame_max_age_sec 和 frame_max_skew_sec 用于保存前校验六通道帧组是否新鲜、时间是否足够同步。它们当前通过配置文件管理,不由检测页面修改。
保存成功后先写入 pgu5a_config.json,再更新运行中的 MS602 worker 并清空当前检测样本。参数立即用于仍在进行的开流自检;已经通过的通道不会因为保存配置而重新开始检测。该操作不重启服务、不重启整机,也不会主动重启正常通道。
每个通道只在首次启动、休眠唤醒或错误重连后开启独立图像检测窗口。窗口结束且未触发异常时,detection_result 变为 passed,后续预览帧在进入灰度转换、缩放、相位相关和帧差计算前直接返回。帧率检测只记录成功读帧间隔,运行期间持续生效;低帧率累计达到阈值时也只请求重启对应通道。
管理中心诊断表只显示 device_index 的数字节点编号,例如 12;API 仍返回完整的 device_index 和通道状态消息,后台设备路径与相机打开逻辑不变。
GET /api/m3/control
返回低频轮询缓存:
{
"available": true,
"ok": true,
"status": "OK",
"message": "热成像控制接口正常",
"fpa_temp_c": 43.12,
"core_temp_c": 43.13,
"auto_nuc": true,
"updated_at": 1785835205.2,
"updated_at_text": "2026-08-04 17:20:05",
"fpa_response_hex": "55 ... eb aa",
"core_response_hex": "55 ... eb aa"
}
控制链路使用 PyUSB bulk,不使用 /dev/ttyACM0。默认 VID:PID 为 0424:6000,接口 3,OUT 0x05,IN 0x85。
POST /api/m3/auto_nuc
| 字段 | 说明 |
|---|---|
enabled |
1/true/on 开启,否则关闭 |
接口先发送自动 NUC 命令,再发送保存参数命令。成功响应包含 response_hex、save_response_hex 和更新后的 m3_control。传感器休眠、PyUSB 缺失或设备断开时返回 ok=false,不会影响主服务。
网络、HS 与 Syncthing
GET /api/network
返回:
| 字段 | 说明 |
|---|---|
ap |
AP 开关、活动状态、接口、SSID、地址 |
sta |
STA 配置和连接状态 |
ethernet |
以太网接口、IPv4、MAC |
scan |
最近一次 Wi-Fi 扫描结果 |
syncthing |
安装、服务和 GUI 可达状态 |
headscale |
HS 状态与 IPv4 |
serial |
设备序列号 |
响应中可能包含 AP 密码,只能在可信管理网络中调用和记录。
POST /api/network/scan
扫描 Wi-Fi 并更新 /api/network 的 scan 字段。
POST /api/network/ap
| 字段 | 必填 | 说明 |
|---|---|---|
enabled |
是 | AP 开关 |
ssid |
启用时是 | AP SSID |
password |
启用时是 | 至少 8 位 |
会修改 NetworkManager 连接并持久化到配置。
POST /api/network/sta/connect
| 字段 | 必填 | 说明 |
|---|---|---|
ssid |
是 | 目标 SSID |
password |
否 | Wi-Fi 密码 |
连接成功后持久化 STA 配置。
POST /api/network/sta/disconnect
断开 STA,并将配置中的 STA 开关设为关闭。
HS 接口
GET /api/network/headscale/task
POST /api/network/headscale/install
POST /api/network/headscale/uninstall
POST /api/network/headscale/login
POST /api/network/headscale/logout
安装、卸载、登录和退出都是后台任务。启动接口返回 task,前端轮询 GET /api/network/headscale/task。
登录参数:
| 字段 | 必填 | 说明 |
|---|---|---|
server |
是 | Headscale 服务地址 |
authkey |
是 | 临时 AuthKey |
AuthKey 不应写入配置、日志或文档。任务正在运行时再次启动会返回 ok=false。
Syncthing 身份初始化
GET /api/syncthing/identity-init/status
POST /api/syncthing/identity-init/start
启动后会:
- 停止
syncthing@root.service。 - 只删除
/root/.config/syncthing/cert.pem和key.pem。 - 重新启动 Syncthing。
- 等待新身份文件生成。
保留 config.xml、文件夹配置、数据库和同步数据。状态接口返回 running、ok、progress、stage、message 和有界日志。
这是会改变设备身份的接口,常规健康检查不得调用。
Web SSH
POST /api/ssh/open
GET /api/ssh/read
POST /api/ssh/input
POST /api/ssh/close
后端启动 PTY,并执行:
/usr/bin/ssh root@127.0.0.1
| 接口 | 字段 | 说明 |
|---|---|---|
/api/ssh/open |
password |
打开会话并完成本机 SSH 登录 |
/api/ssh/input |
text |
写入终端文本或控制字符 |
/api/ssh/read |
无 | 读取增量输出和连接状态 |
/api/ssh/close |
无 | 关闭 PTY 和子进程 |
密码仅用于当前请求,不应持久化。前端关闭终端窗口时必须调用 close。
配置、服务与电源
GET /api/config
返回当前 pgu5a_config.json 的原始文本:
{
"ok": true,
"message": "配置读取成功",
"path": "/root/PGU5-Core/pgu5a_config.json",
"text": "{\n ...\n}\n"
}
POST /api/config/save
| 字段 | 说明 |
|---|---|
config_text |
完整 JSON 对象文本 |
保存流程:
- 解析并验证根节点为 JSON 对象。
- 将旧配置备份到
backups/config/。 - 用 UTF-8、两空格缩进和一个结尾换行写入。
- 重新加载配置。
- 异步重启
pgu5a_base.service。
该接口只验证 JSON 结构,不验证每个业务字段的类型和范围。编辑前应保留现场配置。
配置结构
顶层键:
| 键 | 用途 |
|---|---|
save_root |
保存根目录 |
network |
AP 和 STA |
web |
Web、保存、刷新、休眠和清理 |
ms602 |
MS602 采集与通道恢复 |
m3lite |
热成像采集、上电和 USB 控制 |
dcl |
DCL 相机 |
uvc_rgb |
RGB 相机和继电器 |
ms602 恢复相关键:
{
"open_stagger_sec": 0.3,
"read_fail_restart_count": 5,
"channel_reconnect_delay_sec": 0.8,
"startup_detection_window_sec": 5.0,
"jitter_detection_enabled": true,
"jitter_shift_min": 0.04,
"jitter_shift_max": 0.5,
"jitter_horizontal_max": 0.25,
"jitter_restart_reversals": 3,
"jitter_window_sec": 3.0,
"jitter_cancellation_ratio": 0.35,
"jitter_total_shift_min": 0.35,
"jitter_large_shift_min": 0.8,
"jitter_large_shift_events": 2,
"jitter_extreme_shift_min": 1.0,
"frame_integrity_detection_enabled": true,
"frame_integrity_phase_response_min": 0.55,
"frame_integrity_delta_min": 8.0,
"frame_integrity_restart_events": 2,
"frame_integrity_window_sec": 3.0,
"frame_tearing_gradient_ratio_min": 2.0,
"frame_tearing_row_diff_min": 5.5,
"frame_rate_detection_enabled": true,
"frame_rate_min": 2.0,
"frame_rate_memory": 2,
"frame_max_age_sec": 2.0,
"frame_max_skew_sec": 1.0
}
小幅反向垂直抖动继续使用位移方向、抵消比例和累计位移判断,位移值基于 160x100 检测样本。大幅位移按窗口内次数判断,极大位移单次即可触发。对于画面撕裂、错行等坏帧,检测器同时统计跨帧低相位相关度大帧差,以及单帧横向断层梯度;这些昂贵分析只在开流检测窗口运行。帧率监控持续记录成功读帧间隔,连续低 FPS 时只重启对应 MS602 通道。ms602_channels 会附带检测状态、恢复计数、相位相关度、帧差、断层、当前 FPS 和低帧率连续次数等诊断字段。
dcl.auto_detect=true 时运行时严格匹配 ClearDCLXXXXX 视频设备名称。dcl.camera_name 如存在仅作为优先提示;未配置或更换设备时无需修改发布配置。
服务和电源接口
| 接口 | 行为 |
|---|---|
POST /api/service/restart |
1 秒后重启主服务 |
POST /api/system/reboot |
1 秒后重启操作系统 |
POST /api/system/shutdown |
2 秒后执行 sync 和 poweroff |
这三个接口先返回 JSON,再执行后台动作。常规验证只允许调用服务重启;不得调用系统重启或关机。
OTA
GET /api/ota/status
POST /api/system/update/check
POST /api/system/update/apply
OTA 状态:
IDLE CHECKED FETCHING CHECKOUT VERIFYING RESTARTING SUCCESS ERROR
GET /api/ota/status
合并返回当前版本、最近一次远端检查结果和 backups/ota_state.json 中的任务状态。
POST /api/system/update/check
查询 Gitea Release,返回 latest 和 update_available。只有 update_available=true 时前端才允许升级。
POST /api/system/update/apply
| 字段 | 必填 | 说明 |
|---|---|---|
tag |
否 | 目标标签;空值时使用最近检查到的版本 |
标签必须包含前导 v。更新器强制刷新同名标签:
git fetch --force origin refs/tags/<tag>:refs/tags/<tag>
随后切换标签、执行 Python 编译验证并重启主服务。没有手动回滚接口,也不创建项目外 OTA 备份目录。
排除的应用接口
PGU5-Core 不提供应用层业务控制接口。以下路径应返回 HTTP 404:
/api/plc/*
/api/automation/*
/api/light_recipes
PLC、运动、水肥、业务路径、计划任务和应用专属身份不得通过 Core API 重新引入。