设置机场离线逻辑

This commit is contained in:
孙小云 2026-02-06 09:44:30 +08:00
parent b76d0ef0b4
commit 582a3d0e0c
1 changed files with 19 additions and 10 deletions

View File

@ -206,21 +206,30 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService {
TelemetryMap telemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(iotDeviceId); TelemetryMap telemetry = thingsBoardDomain.getPredefinedTuohengDeviceTelemetry(iotDeviceId);
log.info("拓恒设备遥测数据: {}", telemetry); log.info("拓恒设备遥测数据: {}", telemetry);
// 设置在线状态 // 设置在线状态 - 基于心跳时间戳判断
Boolean isActive = attributes.get(TuohengDeviceAttributes.ACTIVE).orElse(false); telemetry.get(TuohengDeviceTelemetry.STATUS).ifPresentOrElse(statusValue -> {
log.info("设备在线状态 ACTIVE: {}", isActive); long lastHeartbeatTime = statusValue.getTimestamp();
if (isActive) { long currentTime = System.currentTimeMillis();
telemetry.get(TuohengDeviceTelemetry.STATUS).ifPresent(statusValue -> { long timeDiff = currentTime - lastHeartbeatTime;
log.info("STATUS 心跳时间戳: {}, 当前时间: {}, 时间差: {}ms ({}秒)",
lastHeartbeatTime, currentTime, timeDiff, timeDiff / 1000);
// 5分钟 = 300000 毫秒
if (timeDiff > 300000) {
dto.setDockStatus("OFFLINE");
log.info("心跳超时(>5分钟),设置机场状态为 OFFLINE");
} else {
String status = statusValue.getValue(); String status = statusValue.getValue();
log.info("STATUS 遥测值: {}", status); log.info("STATUS 遥测值: {}", status);
String dockStatus = "online".equals(status) ? "IDLE" : "OFFLINE"; String dockStatus = "online".equals(status) ? "IDLE" : "OFFLINE";
dto.setDockStatus(dockStatus); dto.setDockStatus(dockStatus);
log.info("设置机场状态: {}", dockStatus); log.info("心跳正常,设置机场状态: {}", dockStatus);
});
} else {
dto.setDockStatus("OFFLINE");
log.info("设备离线,设置机场状态为 OFFLINE");
} }
}, () -> {
dto.setDockStatus("OFFLINE");
log.info("没有心跳数据,设置机场状态为 OFFLINE");
});
// 设置舱内温度和湿度 // 设置舱内温度和湿度
log.info("---------- 解析舱内环境数据 ----------"); log.info("---------- 解析舱内环境数据 ----------");