This commit is contained in:
孙小云 2026-02-10 12:42:31 +08:00
parent f0ebbf5732
commit 3280110a11
4 changed files with 23 additions and 15 deletions

View File

@ -4,6 +4,15 @@
本模块实现了大疆MQTT消息的接收和处理功能支持动态创建多个MQTT客户端每个客户端可以连接到不同的服务器。 本模块实现了大疆MQTT消息的接收和处理功能支持动态创建多个MQTT客户端每个客户端可以连接到不同的服务器。
## 设备分类
| SN 前缀 | 设备类型 |
|---------|---------|
| `7C` 开头 | 大疆设备 |
| `158` 开头 | 大疆设备 |
**注意本模块只处理大疆设备7C、158开头会自动过滤拓恒设备TH开头包括THJS。**
## 核心特性 ## 核心特性
**多客户端支持** - 可以同时创建多个MQTT客户端 **多客户端支持** - 可以同时创建多个MQTT客户端

View File

@ -17,6 +17,9 @@ import java.util.regex.Pattern;
/** /**
* DJI MQTT消息处理器 * DJI MQTT消息处理器
* 订阅 thing/product/+ 格式的topic
* 只处理大疆设备7C158 开头的SN
* 过滤拓恒设备TH 开头的SN包括THJS
* *
* @author ruoyi * @author ruoyi
*/ */
@ -37,21 +40,22 @@ public class DjiMqttMessageHandler {
private final List<IDockDataCallback> dockDataCallbacks = new ArrayList<>(); private final List<IDockDataCallback> dockDataCallbacks = new ArrayList<>();
/** /**
* 无人机SN正则表达式只匹配大疆THJS开头的SN * 无人机SN正则表达式只匹配大疆7C158开头的SN
* 示例THJSY03A2308YCMFPB11-AIRCRAFT * 示例7CXXXXXXXXXX, 158XXXXXXXXXX
*/ */
private static final Pattern DRONE_SN_PATTERN = Pattern.compile("^THJS[0-9A-Z]+"); private static final Pattern DRONE_SN_PATTERN = Pattern.compile("^(7C|158)[0-9A-Z]+");
/** /**
* 机场SN正则表达式只匹配大疆THJS开头的SN * 机场SN正则表达式只匹配大疆7C158开头的SN
* 示例THJSY03A2308YCMFPB11 * 示例7CXXXXXXXXXX, 158XXXXXXXXXX
*/ */
private static final Pattern DOCK_SN_PATTERN = Pattern.compile("^THJS[0-9A-Z]+"); private static final Pattern DOCK_SN_PATTERN = Pattern.compile("^(7C|158)[0-9A-Z]+");
/** /**
* 拓恒设备SN前缀需要过滤 * 拓恒设备SN前缀需要过滤
* TH开头的设备是拓恒设备需要跳过
*/ */
private static final Pattern TUOHENG_SN_PATTERN = Pattern.compile("^(7C|158)[0-9A-Z]+$"); private static final Pattern TUOHENG_SN_PATTERN = Pattern.compile("^TH[0-9A-Z]+");
/** /**
* 注册无人机数据回调 * 注册无人机数据回调

View File

@ -8,8 +8,7 @@
| SN 前缀 | 设备类型 | Topic 格式 | | SN 前缀 | 设备类型 | Topic 格式 |
|---------|---------|-----------| |---------|---------|-----------|
| `TH` 开头 | 拓恒设备 | `thing/product/{SN}/...` | | `TH` 开头含THJS | 拓恒设备 | `thing/product/{SN}/...` |
| `THJS` 开头 | 大疆设备 | `thing/product/{SN}/...` |
| `7C` 开头 | 大疆设备 | `thing/product/{SN}/...` | | `7C` 开头 | 大疆设备 | `thing/product/{SN}/...` |
| `158` 开头 | 大疆设备 | `thing/product/{SN}/...` | | `158` 开头 | 大疆设备 | `thing/product/{SN}/...` |
@ -236,7 +235,7 @@ public class TuohengService {
| Topic 类型 | 过滤规则 | | Topic 类型 | 过滤规则 |
|-----------|---------| |-----------|---------|
| `thing/product/{SN}` | 只处理 `TH` 开头的SN跳过 `7C`/`158`/`THJS` 开头的大疆设备 | | `thing/product/{SN}` | 只处理 `TH` 开头的SN包括THJS,跳过 `7C`/`158` 开头的大疆设备 |
| `/topic/v1/...` | 全部是拓恒设备,直接处理 | | `/topic/v1/...` | 全部是拓恒设备,直接处理 |
### 4. 消息路由 ### 4. 消息路由

View File

@ -25,8 +25,6 @@ public class TuohengMqttClientService {
private static final String AIRPORT_DRONE_REALTIME_TOPIC = "/topic/v1/airportDrone/+/realTime/data"; private static final String AIRPORT_DRONE_REALTIME_TOPIC = "/topic/v1/airportDrone/+/realTime/data";
private static final String PRODUCT_OSD_TOPIC = "thing/product/+/osd"; private static final String PRODUCT_OSD_TOPIC = "thing/product/+/osd";
private static final String PRODUCT_EVENTS_TOPIC = "thing/product/+/events"; private static final String PRODUCT_EVENTS_TOPIC = "thing/product/+/events";
private static final String PRODUCT_SERVICES_TOPIC = "thing/product/+/services";
private static final String PRODUCT_SERVICES_REPLY_TOPIC = "thing/product/+/services_reply";
public TuohengMqttClientService(TuohengMqttClientConfig config, TuohengMqttMessageHandler messageHandler) { public TuohengMqttClientService(TuohengMqttClientConfig config, TuohengMqttMessageHandler messageHandler) {
this.config = config; this.config = config;
@ -124,9 +122,7 @@ public class TuohengMqttClientService {
AIRPORT_NEST_BASIC_TOPIC, AIRPORT_NEST_BASIC_TOPIC,
AIRPORT_DRONE_REALTIME_TOPIC, AIRPORT_DRONE_REALTIME_TOPIC,
PRODUCT_OSD_TOPIC, PRODUCT_OSD_TOPIC,
PRODUCT_EVENTS_TOPIC, PRODUCT_EVENTS_TOPIC
PRODUCT_SERVICES_TOPIC,
PRODUCT_SERVICES_REPLY_TOPIC
}; };
for (String topic : topics) { for (String topic : topics) {