diff --git a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java index 2939675..70d538a 100644 --- a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java +++ b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java @@ -89,6 +89,20 @@ public class DeviceTelemetry { } ); + + + public static final TelemetryKey Cover_State = TelemetryKey.of( + "cover_state", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); + /** * 网络速率 {"unit_name":"千字节每秒 / KB/s"} */ @@ -466,7 +480,8 @@ public class DeviceTelemetry { Alternate_land_point_Latitude, Alternate_land_point_Longitude, Environment_Temperature, - Network_State_Rate + Network_State_Rate, + Cover_State ); } diff --git a/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java b/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java index 9c3ab18..396389c 100644 --- a/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java @@ -16,6 +16,7 @@ import com.ruoyi.device.service.dto.DockDetailDTO; import com.ruoyi.device.api.enums.AircraftStatusEnum; import com.ruoyi.device.api.enums.DockStatusEnum; import com.ruoyi.device.api.enums.NetworkTypeEnum; +import com.ruoyi.device.api.enums.AirConditionerStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -213,6 +214,16 @@ public class BufferDeviceImpl implements IBufferDeviceService } }); + // 设置硬件状态数据 + // 空调状态(枚举值:0-空闲模式,1-制冷模式,2-制热模式,3-除湿模式等) + telemetryMap.get(DeviceTelemetry.AIR_CONDITIONER_STATE) + .ifPresent(telemetryValue -> { + Integer stateCode = telemetryValue.getValue(); + if (stateCode != null) { + dto.setAirConditionerStatus(mapAirConditionerState(stateCode)); + } + }); + return dto; } @@ -258,6 +269,32 @@ public class BufferDeviceImpl implements IBufferDeviceService } } + /** + * 将空调状态代码映射到 AirConditionerStatusEnum + * @param stateCode 空调状态代码 + * @return 空调状态枚举的 code + */ + private String mapAirConditionerState(Integer stateCode) { + if (stateCode == null) { + return null; + } + + // 只映射主要的四种模式,其他状态返回 null + switch (stateCode) { + case 0: + return AirConditionerStatusEnum.IDLE.getCode(); + case 1: + return AirConditionerStatusEnum.COOLING.getCode(); + case 2: + return AirConditionerStatusEnum.HEATING.getCode(); + case 3: + return AirConditionerStatusEnum.DEHUMIDIFYING.getCode(); + default: + // 其他状态(准备模式、退出模式等)不映射 + return null; + } + } + private AircraftDetailDTO getChangeAbleAirDetailDTO(String deviceIotId) {