添加枚举

This commit is contained in:
孙小云 2026-01-19 16:33:46 +08:00
parent 57e145b4ff
commit 425ba35452
2 changed files with 73 additions and 45 deletions

View File

@ -96,6 +96,18 @@ public class DeviceAttributes {
value -> value != null ? value.toString() : null value -> value != null ? value.toString() : null
); );
/**
* 固件版本 需要配置
*/
public static final AttributeKey<String> 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":"待标定"}
* 无人机 {"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环绕"} * 无人机 {"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, LAST_DISCONNECT_TIME,
DOCK_SN, DOCK_SN,
SUB_DEVICE_SN, SUB_DEVICE_SN,
MODE_CODE MODE_CODE,
Firmware_Version
); );
} }

View File

@ -38,12 +38,68 @@ public class DeviceTelemetry {
} }
); );
/**
* 无人机挂载信息
*/
@SuppressWarnings("unchecked")
public static final TelemetryKey<List<PsdkDevice>> PSDK_WIDGET_VALUES = TelemetryKey.of(
"psdk_widget_values",
(Class<List<PsdkDevice>>) (Class<?>) List.class,
value -> {
if (value == null) return null;
try {
// 如果已经是 List<PsdkDevice> 类型直接返回
if (value instanceof List) {
return (List<PsdkDevice>) 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<List<PsdkDevice>>() {}
);
}
// 如果是其他对象 JsonNode转换为 JSON 再解析
String json = OBJECT_MAPPER.writeValueAsString(value);
return OBJECT_MAPPER.readValue(
json,
new TypeReference<List<PsdkDevice>>() {}
);
} 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":"未知状态"} * {"0":"作业准备中","1":"飞行作业中","2":"作业后状态恢复","3":"自定义飞行区更新中","4":"地形障碍物更新中","5":"任务空闲","255":"飞行器异常","256":"未知状态"}
@ -155,50 +211,7 @@ public class DeviceTelemetry {
} }
); );
// PSDK Widget Values - List<PsdkDevice>
@SuppressWarnings("unchecked")
public static final TelemetryKey<List<PsdkDevice>> PSDK_WIDGET_VALUES = TelemetryKey.of(
"psdk_widget_values",
(Class<List<PsdkDevice>>) (Class<?>) List.class,
value -> {
if (value == null) return null;
try {
// 如果已经是 List<PsdkDevice> 类型直接返回
if (value instanceof List) {
return (List<PsdkDevice>) 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<List<PsdkDevice>>() {}
);
}
// 如果是其他对象 JsonNode转换为 JSON 再解析
String json = OBJECT_MAPPER.writeValueAsString(value);
return OBJECT_MAPPER.readValue(
json,
new TypeReference<List<PsdkDevice>>() {}
);
} catch (Exception e) {
throw new RuntimeException("Failed to parse psdk_widget_values: " + e.getMessage(), e);
}
}
);
private DeviceTelemetry() { private DeviceTelemetry() {
// 工具类禁止实例化 // 工具类禁止实例化
@ -217,7 +230,9 @@ public class DeviceTelemetry {
PSDK_WIDGET_VALUES, PSDK_WIDGET_VALUES,
FlightTask_Step_Code, FlightTask_Step_Code,
Sub_Device_Online_Status, Sub_Device_Online_Status,
Total_Flight_Sorties Total_Flight_Sorties,
Drone_Charge_State_State,
Drone_In_Dock
); );
} }