From 425ba35452a6f0bff814be2ea35e7829d357b3f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Mon, 19 Jan 2026 16:33:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/DeviceAttributes.java | 15 ++- .../constants/DeviceTelemetry.java | 103 ++++++++++-------- 2 files changed, 73 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceAttributes.java b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceAttributes.java index a4d4c1d..de91e90 100644 --- a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceAttributes.java +++ b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceAttributes.java @@ -96,6 +96,18 @@ public class DeviceAttributes { value -> value != null ? value.toString() : null ); + /** + * 固件版本 (需要配置) + */ + public static final AttributeKey Firmware_Version = AttributeKey.of( + "firmware_version", + String.class, + value -> value != null ? value.toString() : null + ); + + + + /** * 机场 {"0":"空闲中","1":"现场调试","2":"远程调试","3":"固件升级中","4":"作业中","5":"待标定"} * 无人机 {"0":"待机","1":"起飞准备","2":"起飞准备完毕","3":"手动飞行","4":"自动起飞","5":"航线飞行","6":"全景拍照","7":"智能跟随","8":"ADS-B 躲避","9":"自动返航","10":"自动降落","11":"强制降落","12":"三桨叶降落","13":"升级中","14":"未连接","15":"APAS","16":"虚拟摇杆状态","17":"指令飞行","18":"空中 RTK 收敛模式","19":"机场选址中","20":"POI环绕"} @@ -169,7 +181,8 @@ public class DeviceAttributes { LAST_DISCONNECT_TIME, DOCK_SN, SUB_DEVICE_SN, - MODE_CODE + MODE_CODE, + Firmware_Version ); } diff --git a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java index 31a6a37..6473866 100644 --- a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java +++ b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java @@ -38,12 +38,68 @@ public class DeviceTelemetry { } ); + /** + * 无人机挂载信息 + */ + @SuppressWarnings("unchecked") + public static final TelemetryKey> PSDK_WIDGET_VALUES = TelemetryKey.of( + "psdk_widget_values", + (Class>) (Class) List.class, + value -> { + if (value == null) return null; + + try { + // 如果已经是 List 类型,直接返回 + if (value instanceof List) { + return (List) value; + } + + // 如果是字符串,需要处理 Python 风格的字典格式 + if (value instanceof String) { + String jsonStr = (String) value; + + // 将 Python 风格的字典转换为标准 JSON 格式 + // 1. 将单引号替换为双引号 + jsonStr = jsonStr.replace("'", "\""); + + // 2. 处理 True/False/None (如果有的话) + jsonStr = jsonStr.replace(": True", ": true") + .replace(": False", ": false") + .replace(": None", ": null"); + + return OBJECT_MAPPER.readValue( + jsonStr, + new TypeReference>() {} + ); + } + + // 如果是其他对象(如 JsonNode),转换为 JSON 再解析 + String json = OBJECT_MAPPER.writeValueAsString(value); + return OBJECT_MAPPER.readValue( + json, + new TypeReference>() {} + ); + } catch (Exception e) { + throw new RuntimeException("Failed to parse psdk_widget_values: " + e.getMessage(), e); + } + } + ); /** * 机场独有状态 */ + + /** + * 舱内温度 temperature + */ + + /** + * 舱内湿度 humidity + */ + + /** * 任务作业状态 * {"0":"作业准备中","1":"飞行作业中","2":"作业后状态恢复","3":"自定义飞行区更新中","4":"地形障碍物更新中","5":"任务空闲","255":"飞行器异常","256":"未知状态"} @@ -155,50 +211,7 @@ public class DeviceTelemetry { } ); - // PSDK Widget Values - List - @SuppressWarnings("unchecked") - public static final TelemetryKey> PSDK_WIDGET_VALUES = TelemetryKey.of( - "psdk_widget_values", - (Class>) (Class) List.class, - value -> { - if (value == null) return null; - try { - // 如果已经是 List 类型,直接返回 - if (value instanceof List) { - return (List) value; - } - - // 如果是字符串,需要处理 Python 风格的字典格式 - if (value instanceof String) { - String jsonStr = (String) value; - - // 将 Python 风格的字典转换为标准 JSON 格式 - // 1. 将单引号替换为双引号 - jsonStr = jsonStr.replace("'", "\""); - - // 2. 处理 True/False/None (如果有的话) - jsonStr = jsonStr.replace(": True", ": true") - .replace(": False", ": false") - .replace(": None", ": null"); - - return OBJECT_MAPPER.readValue( - jsonStr, - new TypeReference>() {} - ); - } - - // 如果是其他对象(如 JsonNode),转换为 JSON 再解析 - String json = OBJECT_MAPPER.writeValueAsString(value); - return OBJECT_MAPPER.readValue( - json, - new TypeReference>() {} - ); - } catch (Exception e) { - throw new RuntimeException("Failed to parse psdk_widget_values: " + e.getMessage(), e); - } - } - ); private DeviceTelemetry() { // 工具类,禁止实例化 @@ -217,7 +230,9 @@ public class DeviceTelemetry { PSDK_WIDGET_VALUES, FlightTask_Step_Code, Sub_Device_Online_Status, - Total_Flight_Sorties + Total_Flight_Sorties, + Drone_Charge_State_State, + Drone_In_Dock ); }