feat(device): 一期设备域 I1-I5 全量实现(APP 接口/后台管理/OTA/MQTT/直播)
模块接入:
- 新增 ruoyi-device(org.dromara.device)并注册到根/ruoyi-modules/ruoyi-admin pom
APP 侧(/app/**,需登录,仅本人绑定设备):
- 账号闭环:短信/邮箱验证码注册登录、密码重置(不跨界返回散列)
- 设备:绑定/列表/详情/重命名/解绑(越权统一"设备不存在",防 IDOR)
- 眼罩开关(/app/device/{deviceNo}/hood,低电不对称拦截)
- 定位(/app/device/{deviceNo}/location)
- 直播(/app/stream 6 端点 + /app/device/{deviceNo}/live,自建 ZLMediaKit,设备主动推流)
后台(/device/**):
- 设备 CRUD/统计/删除/导出(ExcelBuilder)
- OTA(6 端点:升级包管理 + 批量下发,total==created+skipped+failed)
MQTT(T05):
- 遥测/事件/ack 监听、指令下发+回执(防串设备)、离线扫描、低电告警
- 报文身份仅来自 Topic,反查 device_id 防跨设备伪造
数据与脚本:
- script/sql/ry_device.sql(6 表/字典/权限字/菜单)、bm_patch.sql
- script/mqtt 设备模拟器(mqtt-simulate.js)
安全:
- MQTT broker 凭据外置为环境变量 MQTT_USERNAME/MQTT_PASSWORD,不落明文
- ZLM webhook 密钥外置为环境变量 ZLM_SECRET(未配置时 /zlm/hook/** 失败关闭),不落明文
This commit is contained in:
@@ -98,6 +98,12 @@
|
||||
<artifactId>ruoyi-demo</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 设备模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-device</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 工作流模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
|
||||
@@ -14,7 +14,17 @@ server:
|
||||
min: 8
|
||||
# 最大线程数
|
||||
max: 256
|
||||
|
||||
zlm:
|
||||
host: ${ZLM_HOST:http://220.203.23.195:9090} # ZLMediaKit 地址
|
||||
rtmp-host: ${ZLM_RTMP_HOST:rtmp://220.203.23.195:1935}
|
||||
rtsp-host: ${ZLM_RTSP_HOST:rtsp://220.203.23.195:554}
|
||||
webrtc-host: ${ZLM_WEBRTC_HOST:http://220.203.23.195:9090}
|
||||
secret: ${ZLM_SECRET:} # ZLM webhook 密钥:不落明文,必须通过环境变量 ZLM_SECRET 注入;未配置时 /zlm/hook/** 回调一律拒绝(失败关闭)
|
||||
app: live
|
||||
schema: rtmp
|
||||
push-protocol: rtmp
|
||||
play-expire-seconds: 120
|
||||
stream-timeout: 30 # 流超时秒数
|
||||
captcha:
|
||||
# 是否启用验证码校验
|
||||
enable: true
|
||||
@@ -111,6 +121,7 @@ security:
|
||||
- /warm-flow-ui/config
|
||||
- /snail-chat/**
|
||||
- /api/snail/chat/**
|
||||
- /zlm/hook/**
|
||||
|
||||
# MyBatisPlus配置
|
||||
# https://baomidou.com/config/
|
||||
@@ -264,15 +275,17 @@ mqtt.client:
|
||||
# 是否开启客户端,默认:true
|
||||
enabled: true
|
||||
# 连接的服务端 ip ,默认:127.0.0.1
|
||||
ip: ssl://www.mmipco.cn
|
||||
ip: 47.97.217.123
|
||||
# 端口:默认:1883
|
||||
port: 8883
|
||||
port: 1883
|
||||
# 客户端名称
|
||||
name: Mqtt-Client
|
||||
# 客户端Id(非常重要,一般为设备 sn,不可重复)
|
||||
client-id: 000001
|
||||
username: admin
|
||||
password: 61e6062129e9
|
||||
client-id: bird_monitor
|
||||
# MQTT broker 账号/密码:不落明文,通过环境变量注入(避免凭据进入 git 历史)。
|
||||
# 联调前 export MQTT_USERNAME / MQTT_PASSWORD;未配置时取空值,broker 会拒绝认证。
|
||||
username: ${MQTT_USERNAME:}
|
||||
password: ${MQTT_PASSWORD:}
|
||||
# 超时时间,单位:秒,默认:5秒
|
||||
timeout: 5
|
||||
# 重连时间,默认 5000 毫秒
|
||||
@@ -291,12 +304,35 @@ mqtt.client:
|
||||
mqtt-executor-size: 2
|
||||
# 是否开启 ssl
|
||||
ssl:
|
||||
enabled: true
|
||||
enabled: false
|
||||
keystore-path:
|
||||
keystore-pass:
|
||||
truststore-path:
|
||||
truststore-pass:
|
||||
|
||||
--- # 设备域通信链路配置(《设备通信协议-一期.md》口径)
|
||||
# 全部项均有代码默认值,此处显式列出仅为便于运维调参;不需要调时整段删除也不影响启动。
|
||||
device.mqtt:
|
||||
# 离线扫描总开关。关闭后设备不会再被自动置离线,仅用于联调排障,生产必须为 true
|
||||
scan-enabled: true
|
||||
# 离线扫描间隔(上一轮跑完再计时,不会因扫描耗时堆积)
|
||||
offline-scan-interval: 30s
|
||||
# 离线判定阈值:超过该时长无遥测即判离线(协议 Q2:上报周期 60s × 2 容错)
|
||||
offline-threshold: 120s
|
||||
# 单轮扫描的设备上限,防止异常时一次性拉爆内存
|
||||
scan-batch-size: 500
|
||||
# 低电告警触发阈值(≤ 该值触发)与恢复阈值(≥ 该值恢复),两者之间的区间为滞回防抖区
|
||||
low-battery-threshold: 20
|
||||
low-battery-recover-threshold: 25
|
||||
# 低电滞回闩锁存活时长,仅作已注销设备的残留清理兜底
|
||||
low-battery-latch-ttl: 30d
|
||||
# 告警去重窗口:同一 设备+告警类型 在窗口内只落一条 bm_device_alert
|
||||
alert-dedup-window: 30m
|
||||
# 眼罩指令回执等待超时(协议 Q3 待硬件确认动作到位时长)
|
||||
hood-timeout: 5s
|
||||
# 待回执指令标记的 Redis TTL(仅用于事后定位「回执晚到」)
|
||||
pending-ack-ttl: 10m
|
||||
|
||||
--- # elasticsearch 功能配置
|
||||
# 文档地址: https://www.easy-es.cn/
|
||||
# 更改包名需要去 EasyEsConfiguration 修改包扫描(后续版本支持配置文件读取)
|
||||
|
||||
Reference in New Issue
Block a user