From 9fba4a59e62b76958385e4e3204564a2b97eaa54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Fri, 6 Feb 2026 16:16:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=B5=E6=B1=A0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TuohengBufferDeviceImpl.java | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java index f2ceb4d..47af81b 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java @@ -397,13 +397,37 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { dto.setRainfall(value.getValue()); }); - // 设置电池信息 + // 设置电池信息(从无人机设备获取) log.info("---------- 解析电池数据 ----------"); - telemetry.get(TuohengDeviceTelemetry.BATTERY_LEVEL) - .ifPresent(value -> { - log.info("BATTERY_LEVEL 电池电量: {}", value.getValue()); - dto.setCapacity_percent(value.getValue()); - }); + if (aircraftIotDeviceId != null) { + try { + // 获取无人机遥测数据 + 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) @@ -604,20 +628,23 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { }); // 优先使用 battery_totalVoltage(BMS电池电压),如果没有则使用 voltage(无人机电压) + // 注意:电压需要乘以1000转换为毫伏(mV) Double voltageValue = telemetry.get(TuohengDeviceTelemetry.BATTERY_TOTAL_VOLTAGE) .map(TelemetryValue::getValue) .orElse(null); if (voltageValue != null) { - log.info("BATTERY_TOTAL_VOLTAGE 总电压: {}", voltageValue); - dto.setVoltage(voltageValue.intValue()); + log.info("BATTERY_TOTAL_VOLTAGE 总电压: {} V", voltageValue); + dto.setVoltage((int) (voltageValue * 1000)); // 转换为毫伏 + log.info("设置电压: {} mV", dto.getVoltage()); } else { telemetry.get(TuohengDeviceTelemetry.VOLTAGE) .ifPresent(value -> { - log.info("VOLTAGE 电压(备用): {}", value.getValue()); + log.info("VOLTAGE 电压(备用): {} V", value.getValue()); Double voltage = value.getValue(); if (voltage != null) { - dto.setVoltage(voltage.intValue()); + dto.setVoltage((int) (voltage * 1000)); // 转换为毫伏 + log.info("设置电压: {} mV", dto.getVoltage()); } }); }