package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; /** * 查询传感器数量/故障 * * @author ZZQ * @date 2022/8/1 14:02 */ @Data public class A5AtmosphereQuerySensorInfoReportInnerFrame extends BaseResponseInnerFrame { //设备地址 private String deviceAddress; //传感器信息 private SensorInfoPackage sensorInfoPackage; @Override public A5AtmosphereQuerySensorInfoReportInnerFrame transformFrame(String hex) { if (StrUtil.isBlank(hex) || hex.length() != 100) { return null; } // MQTT通信方式(1) setConnectType(hex.substring(0, 2)); // 功能码(1) setFunctionCode(hex.substring(2, 4)); // 负荷长度(2) setPayloadLength(hex.substring(4, 8)); //设备地址 setDeviceAddress(hex.substring(8, 12)); //传感器信息 String infoStr = hex.substring(14, hex.length() - 8); SensorInfoPackage sensorInfoPackage = new SensorInfoPackage().transformFrame(infoStr); setSensorInfoPackage(sensorInfoPackage); //校验 setCrc32(hex.substring(hex.length() - 8)); // 校验CRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } @Data public static class SensorInfoPackage implements IResponseInnerFrame { // 温度值 private String temperature; // 湿度值 private String humidity; // 风速 private String windSpeed; // 风向 private String windDirection; // 风力 private String windPower; // 大气压 private String pressure; // 光强 private String lightIntensity; // 噪音 private String noise; // PM2.5 private String pm25; // PM10 private String pm10; // 总悬浮颗粒物(TSP) private String tsp; // 雨量 private String rainfall; // 甲醛 private String ech2o; // TVOC private String tvoc; // 二氧化碳 private String co2; // SO2二氧化硫相对值 private String so2; // NO2二氧化氮 private String no2; // CO一氧化碳 private String co; // O3臭氧 private String o3; // F氟化物 private String fluoride; @Override public SensorInfoPackage transformFrame(String hex) { if (StrUtil.isBlank(hex) || hex.length() != 80) { System.out.println("数据校验异常!"); return null; } // 温度 setTemperature(hex.substring(2, 4)); // 湿度 setHumidity(hex.substring(6, 8)); // 风速 setWindSpeed(hex.substring(10, 12)); // 风向 setWindDirection(hex.substring(14, 16)); // 风力 setWindPower(hex.substring(18, 20)); // 大气压 setPressure(hex.substring(22, 24)); // 光强 setLightIntensity(hex.substring(26, 28)); // 噪音 setNoise(hex.substring(30, 32)); // PM2.5 setPm25(hex.substring(34, 36)); // PM10 setPm10(hex.substring(38, 40)); // 总悬浮颗粒物(TSP) setTsp(hex.substring(42, 44)); // 雨量 setRainfall(hex.substring(46, 48)); // 甲醛 setEch2o(hex.substring(50, 52)); // TVOC setTvoc(hex.substring(54, 56)); // 二氧化碳 setCo2(hex.substring(58, 60)); // SO2二氧化硫相对值 setSo2(hex.substring(62, 64)); // NO2二氧化氮 setNo2(hex.substring(66, 68)); // CO一氧化碳 setCo(hex.substring(70, 72)); // O3臭氧 setO3(hex.substring(74, 76)); // F氟化物 setFluoride(hex.substring(78, 80)); return this; } } }