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 d515320..6eb4514 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 @@ -19,47 +19,11 @@ public class DeviceTelemetry { // Jackson ObjectMapper 用于 JSON 解析 private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + /** - * 无人机 position_state.rtk_number RTK 搜星数量 + * 机场独有状态 */ - public static final TelemetryKey Position_State_Rtk_Number = TelemetryKey.of( - "position_state.rtk_number", - Integer.class, - value -> { - if (value == null) return null; - if (value instanceof Number) { - return ((Number) value).intValue(); - } - return Integer.parseInt(value.toString()); - } - ); - - //wind_speed{"unit_name":"米每秒 / m/s"} float - public static final TelemetryKey Wind_Speed = TelemetryKey.of( - "wind_speed", - Double.class, - value -> { - if (value == null) return null; - if (value instanceof Number) { - return ((Number) value).doubleValue(); - } - return Double.parseDouble(value.toString()); - } - ); - - //rainfall {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} enum_int - public static final TelemetryKey Rainfall = TelemetryKey.of( - "rainfall", - Integer.class, - value -> { - if (value == null) return null; - if (value instanceof Number) { - return ((Number) value).intValue(); - } - return Integer.parseInt(value.toString()); - } - ); /** * 网络类型 {"1":"4G","2":"以太网"} @@ -92,73 +56,7 @@ public class DeviceTelemetry { } ); - /** - * 飞行次数 作业架次 - */ - public static final TelemetryKey Total_Flight_Sorties = TelemetryKey.of( - "total_flight_sorties", - Integer.class, - value -> { - if (value == null) return null; - if (value instanceof Number) { - return ((Number) value).intValue(); - } - return Integer.parseInt(value.toString()); - } - ); - /** - * 无人机挂载信息 - */ - @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 @@ -274,6 +172,153 @@ public class DeviceTelemetry { } ); + /** + * 无人机 position_state.rtk_number RTK 搜星数量 + */ + + public static final TelemetryKey Position_State_Rtk_Number = TelemetryKey.of( + "position_state.rtk_number", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); + + /** + * 风速 + */ + //wind_speed{"unit_name":"米每秒 / m/s"} float + public static final TelemetryKey Wind_Speed = TelemetryKey.of( + "wind_speed", + Double.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + return Double.parseDouble(value.toString()); + } + ); + + /** + * 降雨量 + */ + //rainfall {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} enum_int + public static final TelemetryKey Rainfall = TelemetryKey.of( + "rainfall", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); + + + /** + * 无人机特有 + */ + + /** + * 无人机挂载信息 + */ + @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); + } + } + ); + + + /** + * 限高 + */ + public static final TelemetryKey Height_Limit = TelemetryKey.of( + "height_limit", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); + + /** + * 飞行器限远 + * {"max":"8000","min":"15","step":"1","unit_name":"米 / m"} + */ + + public static final TelemetryKey Distance_Limit_Status_Distance_Limit = TelemetryKey.of( + "distance_limit_status.distance_limit", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); + + /** + * 飞行次数 作业架次 + */ + public static final TelemetryKey Total_Flight_Sorties = TelemetryKey.of( + "total_flight_sorties", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); /** * 以下尚未划分 @@ -281,8 +326,6 @@ public class DeviceTelemetry { - - private DeviceTelemetry() { // 工具类,禁止实例化 } @@ -307,11 +350,15 @@ public class DeviceTelemetry { Network_State_Type, Wind_Speed, Rainfall, - Position_State_Rtk_Number - + Position_State_Rtk_Number, + Height_Limit, + Distance_Limit_Status_Distance_Limit ); } + + + /** * 初始化所有遥测键 * 确保所有静态字段被加载和注册