修改电池逻辑
This commit is contained in:
parent
2dca7d780c
commit
9fba4a59e6
|
|
@ -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_totalVoltage(BMS电池电压),如果没有则使用 voltage(无人机电压)
|
// 优先使用 battery_totalVoltage(BMS电池电压),如果没有则使用 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());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue