修改无人机状态判断
This commit is contained in:
parent
3caead4779
commit
0b6724d31d
|
|
@ -307,6 +307,11 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
|
|||
log.info("设置充电状态: {}", chargingStatus);
|
||||
});
|
||||
|
||||
// 填充无人机状态信息
|
||||
if (aircraftIotDeviceId != null) {
|
||||
fillTuohengAircraftStatus(dto, aircraftIotDeviceId);
|
||||
}
|
||||
|
||||
log.info("拓恒机场详情填充完成: iotDeviceId={}, dockStatus={}", iotDeviceId, dto.getDockStatus());
|
||||
log.info("========== 拓恒机场详情填充结束 ==========");
|
||||
} catch (Exception e) {
|
||||
|
|
@ -326,21 +331,84 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
|
|||
log.info("aircraftIotDeviceId: {}", aircraftIotDeviceId);
|
||||
|
||||
// 获取拓恒无人机遥测数据
|
||||
TelemetryMap telemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(aircraftIotDeviceId);
|
||||
log.info("拓恒无人机遥测数据: {}", telemetry);
|
||||
TelemetryMap aircraftTelemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(aircraftIotDeviceId);
|
||||
log.info("拓恒无人机遥测数据: {}", aircraftTelemetry);
|
||||
|
||||
// 设置无人机状态 - 根据 armed 状态判断
|
||||
telemetry.get(TuohengDeviceTelemetry.ARMED).ifPresent(armedValue -> {
|
||||
String armed = armedValue.getValue();
|
||||
log.info("ARMED 解锁状态原始值: {}", armed);
|
||||
if ("true".equals(armed) || "1".equals(armed)) {
|
||||
dto.setAircraftStatus("IN_MISSION"); // 解锁状态表示在任务中
|
||||
log.info("设置无人机状态: IN_MISSION (任务中)");
|
||||
} else {
|
||||
dto.setAircraftStatus("POWER_ON_IN_CABIN"); // 未解锁表示在舱内待机
|
||||
log.info("设置无人机状态: POWER_ON_IN_CABIN (舱内待机)");
|
||||
// 获取机场遥测数据(用于获取舱门状态)
|
||||
// 注意:aircraftIotDeviceId 是无人机的ID,我们需要获取机场的舱门状态
|
||||
// 舱门状态在机场设备的遥测数据中,需要从 dto.getDockIotId() 获取
|
||||
String dockIotId = dto.getDockIotId();
|
||||
TelemetryMap dockTelemetry = null;
|
||||
if (dockIotId != null) {
|
||||
dockTelemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(dockIotId);
|
||||
log.info("拓恒机场遥测数据(用于获取舱门状态): {}", dockTelemetry);
|
||||
}
|
||||
|
||||
// 获取 mode 字段
|
||||
String mode = aircraftTelemetry.get(TuohengDeviceTelemetry.MODE)
|
||||
.map(TelemetryValue::getValue)
|
||||
.orElse("");
|
||||
log.info("无人机 MODE 值: {}", mode);
|
||||
|
||||
// 判断逻辑
|
||||
if ("auto".equalsIgnoreCase(mode)) {
|
||||
// mode == "auto" 表示正在执行任务
|
||||
dto.setAircraftStatus("IN_MISSION");
|
||||
log.info("无人机处于 auto 模式,设置状态: IN_MISSION");
|
||||
} else {
|
||||
// mode != "auto",根据 tsingal 和 nest_door_status 判断
|
||||
|
||||
// 获取 tsingal(图传信号强度,用于判断开关机)
|
||||
Integer tsingal = aircraftTelemetry.get(TuohengDeviceTelemetry.TSINGAL)
|
||||
.map(TelemetryValue::getValue)
|
||||
.orElse(0);
|
||||
log.info("无人机 TSINGAL 值: {}", tsingal);
|
||||
|
||||
boolean isPowerOn = tsingal > 60; // tsingal > 60 表示开机
|
||||
log.info("无人机开关机状态: {}", isPowerOn ? "开机" : "关机");
|
||||
|
||||
// 获取 nest_door_status(舱门状态)
|
||||
Integer doorStatus = null;
|
||||
if (dockTelemetry != null) {
|
||||
doorStatus = dockTelemetry.get(TuohengDeviceTelemetry.NEST_DOOR_STATUS)
|
||||
.map(TelemetryValue::getValue)
|
||||
.orElse(null);
|
||||
log.info("机场舱门状态: {}", doorStatus);
|
||||
}
|
||||
|
||||
// 根据舱门状态和开关机状态判断
|
||||
String aircraftStatus;
|
||||
if (doorStatus != null && doorStatus == 1) {
|
||||
// 舱门关闭(舱内)
|
||||
if (isPowerOn) {
|
||||
aircraftStatus = "POWER_ON_IN_CABIN";
|
||||
log.info("舱门关闭 + 开机 → POWER_ON_IN_CABIN");
|
||||
} else {
|
||||
aircraftStatus = "POWER_OFF_IN_CABIN";
|
||||
log.info("舱门关闭 + 关机 → POWER_OFF_IN_CABIN");
|
||||
}
|
||||
} else if (doorStatus != null && doorStatus == 0) {
|
||||
// 舱门打开(舱外)
|
||||
if (isPowerOn) {
|
||||
aircraftStatus = "POWER_ON_OUT_CABIN";
|
||||
log.info("舱门打开 + 开机 → POWER_ON_OUT_CABIN");
|
||||
} else {
|
||||
aircraftStatus = "POWER_OFF_OUT_CABIN";
|
||||
log.info("舱门打开 + 关机 → POWER_OFF_OUT_CABIN");
|
||||
}
|
||||
} else {
|
||||
// 无法获取舱门状态,默认根据开关机状态判断
|
||||
if (isPowerOn) {
|
||||
aircraftStatus = "POWER_ON_IN_CABIN";
|
||||
log.warn("无法获取舱门状态,默认设置: POWER_ON_IN_CABIN");
|
||||
} else {
|
||||
aircraftStatus = "POWER_OFF_IN_CABIN";
|
||||
log.warn("无法获取舱门状态,默认设置: POWER_OFF_IN_CABIN");
|
||||
}
|
||||
}
|
||||
|
||||
dto.setAircraftStatus(aircraftStatus);
|
||||
}
|
||||
});
|
||||
|
||||
// 设置作业架次 - 暂时设置为0,拓恒设备可能没有这个数据
|
||||
dto.setMissionCount(0);
|
||||
|
|
@ -376,17 +444,43 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
|
|||
|
||||
// 设置无人机状态
|
||||
log.info("---------- 解析无人机状态 ----------");
|
||||
telemetry.get(TuohengDeviceTelemetry.ARMED).ifPresent(armedValue -> {
|
||||
String armed = armedValue.getValue();
|
||||
log.info("ARMED 解锁状态: {}", armed);
|
||||
if ("true".equals(armed) || "1".equals(armed)) {
|
||||
|
||||
// 获取 mode 字段
|
||||
String mode = telemetry.get(TuohengDeviceTelemetry.MODE)
|
||||
.map(TelemetryValue::getValue)
|
||||
.orElse("");
|
||||
log.info("无人机 MODE 值: {}", mode);
|
||||
|
||||
// 判断逻辑
|
||||
if ("auto".equalsIgnoreCase(mode)) {
|
||||
// mode == "auto" 表示正在执行任务
|
||||
dto.setAircraftStatus("IN_MISSION");
|
||||
log.info("设置无人机状态: IN_MISSION");
|
||||
log.info("无人机处于 auto 模式,设置状态: IN_MISSION");
|
||||
} else {
|
||||
dto.setAircraftStatus("POWER_ON_IN_CABIN");
|
||||
log.info("设置无人机状态: POWER_ON_IN_CABIN");
|
||||
// mode != "auto",根据 tsingal 判断开关机
|
||||
// 注意:无人机详情接口无法获取机场舱门状态,只能根据开关机判断
|
||||
|
||||
// 获取 tsingal(图传信号强度,用于判断开关机)
|
||||
Integer tsingal = telemetry.get(TuohengDeviceTelemetry.TSINGAL)
|
||||
.map(TelemetryValue::getValue)
|
||||
.orElse(0);
|
||||
log.info("无人机 TSINGAL 值: {}", tsingal);
|
||||
|
||||
boolean isPowerOn = tsingal > 60; // tsingal > 60 表示开机
|
||||
log.info("无人机开关机状态: {}", isPowerOn ? "开机" : "关机");
|
||||
|
||||
// 无法获取舱门状态,默认根据开关机状态判断
|
||||
String aircraftStatus;
|
||||
if (isPowerOn) {
|
||||
aircraftStatus = "POWER_ON_IN_CABIN";
|
||||
log.info("开机状态,默认设置: POWER_ON_IN_CABIN");
|
||||
} else {
|
||||
aircraftStatus = "POWER_OFF_IN_CABIN";
|
||||
log.info("关机状态,默认设置: POWER_OFF_IN_CABIN");
|
||||
}
|
||||
|
||||
dto.setAircraftStatus(aircraftStatus);
|
||||
}
|
||||
});
|
||||
|
||||
// 设置作业架次 - 暂时设置为0
|
||||
dto.setMissionCount(0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue