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<A5AtmosphereQuerySensorInfoReportInnerFrame> {
|
//设备地址
|
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<SensorInfoPackage> {
|
// 温度值
|
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;
|
}
|
}
|
}
|