This commit is contained in:
parent
f0ebbf5732
commit
3280110a11
|
|
@ -4,6 +4,15 @@
|
||||||
|
|
||||||
本模块实现了大疆MQTT消息的接收和处理功能,支持动态创建多个MQTT客户端,每个客户端可以连接到不同的服务器。
|
本模块实现了大疆MQTT消息的接收和处理功能,支持动态创建多个MQTT客户端,每个客户端可以连接到不同的服务器。
|
||||||
|
|
||||||
|
## 设备分类
|
||||||
|
|
||||||
|
| SN 前缀 | 设备类型 |
|
||||||
|
|---------|---------|
|
||||||
|
| `7C` 开头 | 大疆设备 |
|
||||||
|
| `158` 开头 | 大疆设备 |
|
||||||
|
|
||||||
|
**注意:本模块只处理大疆设备(7C、158开头),会自动过滤拓恒设备(TH开头,包括THJS)。**
|
||||||
|
|
||||||
## 核心特性
|
## 核心特性
|
||||||
|
|
||||||
✅ **多客户端支持** - 可以同时创建多个MQTT客户端
|
✅ **多客户端支持** - 可以同时创建多个MQTT客户端
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DJI MQTT消息处理器
|
* DJI MQTT消息处理器
|
||||||
|
* 订阅 thing/product/+ 格式的topic
|
||||||
|
* 只处理大疆设备:7C、158 开头的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正则表达式(只匹配大疆7C、158开头的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正则表达式(只匹配大疆7C、158开头的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]+");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册无人机数据回调
|
* 注册无人机数据回调
|
||||||
|
|
|
||||||
|
|
@ -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. 消息路由
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue