修改电池逻辑

This commit is contained in:
孙小云 2026-02-06 16:16:43 +08:00
parent 2dca7d780c
commit 9fba4a59e6
1 changed files with 37 additions and 10 deletions

View File

@ -397,13 +397,37 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
dto.setRainfall(value.getValue()); dto.setRainfall(value.getValue());
}); });
// 设置电池信息 // 设置电池信息从无人机设备获取
log.info("---------- 解析电池数据 ----------"); log.info("---------- 解析电池数据 ----------");
telemetry.get(TuohengDeviceTelemetry.BATTERY_LEVEL) if (aircraftIotDeviceId != null) {
.ifPresent(value -> { try {
log.info("BATTERY_LEVEL 电池电量: {}", value.getValue()); // 获取无人机遥测数据
dto.setCapacity_percent(value.getValue()); TelemetryMap aircraftTelemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(aircraftIotDeviceId);
});
// 从无人机获取电池电量使用 battery_remain
aircraftTelemetry.get(TuohengDeviceTelemetry.BATTERY_REMAIN)
.ifPresent(value -> {
log.info("BATTERY_REMAIN 无人机电池电量: {}", value.getValue());
dto.setCapacity_percent(value.getValue());
});
} catch (Exception e) {
log.warn("从无人机获取电池电量失败,尝试从机场获取: {}", e.getMessage());
// 如果无人机数据获取失败降级使用机场的 BATTERY_LEVEL
telemetry.get(TuohengDeviceTelemetry.BATTERY_LEVEL)
.ifPresent(value -> {
log.info("BATTERY_LEVEL 机场电池电量(降级): {}", value.getValue());
dto.setCapacity_percent(value.getValue());
});
}
} else {
// 如果没有绑定无人机使用机场的 BATTERY_LEVEL
log.info("机场未绑定无人机,使用机场电池电量");
telemetry.get(TuohengDeviceTelemetry.BATTERY_LEVEL)
.ifPresent(value -> {
log.info("BATTERY_LEVEL 机场电池电量: {}", value.getValue());
dto.setCapacity_percent(value.getValue());
});
}
// 设置充电状态 // 设置充电状态
telemetry.get(TuohengDeviceTelemetry.BATTERY_B_CHARGING) telemetry.get(TuohengDeviceTelemetry.BATTERY_B_CHARGING)
@ -604,20 +628,23 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
}); });
// 优先使用 battery_totalVoltageBMS电池电压如果没有则使用 voltage无人机电压 // 优先使用 battery_totalVoltageBMS电池电压如果没有则使用 voltage无人机电压
// 注意电压需要乘以1000转换为毫伏mV
Double voltageValue = telemetry.get(TuohengDeviceTelemetry.BATTERY_TOTAL_VOLTAGE) Double voltageValue = telemetry.get(TuohengDeviceTelemetry.BATTERY_TOTAL_VOLTAGE)
.map(TelemetryValue::getValue) .map(TelemetryValue::getValue)
.orElse(null); .orElse(null);
if (voltageValue != null) { if (voltageValue != null) {
log.info("BATTERY_TOTAL_VOLTAGE 总电压: {}", voltageValue); log.info("BATTERY_TOTAL_VOLTAGE 总电压: {} V", voltageValue);
dto.setVoltage(voltageValue.intValue()); dto.setVoltage((int) (voltageValue * 1000)); // 转换为毫伏
log.info("设置电压: {} mV", dto.getVoltage());
} else { } else {
telemetry.get(TuohengDeviceTelemetry.VOLTAGE) telemetry.get(TuohengDeviceTelemetry.VOLTAGE)
.ifPresent(value -> { .ifPresent(value -> {
log.info("VOLTAGE 电压(备用): {}", value.getValue()); log.info("VOLTAGE 电压(备用): {} V", value.getValue());
Double voltage = value.getValue(); Double voltage = value.getValue();
if (voltage != null) { if (voltage != null) {
dto.setVoltage(voltage.intValue()); dto.setVoltage((int) (voltage * 1000)); // 转换为毫伏
log.info("设置电压: {} mV", dto.getVoltage());
} }
}); });
} }