package com.sandu.ximon.admin.manager.iot.frame.inner.request;
|
|
import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
|
import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
|
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
|
|
import java.math.BigDecimal;
|
|
/**
|
* 大气设备修正数据
|
*
|
* @author ZZQ
|
* @date 2022/7/29 10:32
|
*/
|
public class AtmosphereModifiedDataReqInnerFrame implements IRequestInnerFrame {
|
private String functionCode;
|
private String value;
|
|
public AtmosphereModifiedDataReqInnerFrame(String functionType, String valueOfReal, String valueOfStandard) {
|
//传感器数值
|
BigDecimal value1;
|
//标准值
|
BigDecimal value2;
|
//修正值
|
Double subtract;
|
//整数
|
int i;
|
//小数
|
int y;
|
|
int z;
|
|
switch (functionType) {
|
//设置数据修正值-温度
|
case "温度":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_temperature.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
i = Integer.valueOf((int) (subtract * 100)) / 100;
|
y = Integer.valueOf((int) (subtract * 100)) % 100;
|
|
if (subtract > 0) {
|
value = hex10To16(i) + hex10To16(y);
|
} else {
|
value = hex10To16(-i + 128) + hex10To16(-y);
|
}
|
break;
|
//设置数据修正值-湿度
|
case "湿度":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_humidity.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
i = Integer.valueOf((int) (subtract * 100)) / 100;
|
y = Integer.valueOf((int) (subtract * 100)) % 100;
|
|
if (subtract > 0) {
|
value = hex10To16(i) + hex10To16(y);
|
} else {
|
value = hex10To16(-i + 128) + hex10To16(-y);
|
}
|
break;
|
//设置数据修正值-风速
|
case "风速":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_windSpeed.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 10));
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-风向
|
case "风向":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_windDirection.getCode();
|
//TODO
|
break;
|
//设置数据修正值-风力
|
case "风力":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_windPower.getCode();
|
//TODO
|
break;
|
//设置数据修正值-气压
|
case "气压":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_airPressure.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100));
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-光强
|
case "光强":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_lightIntensity.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-噪音
|
case "噪音":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_noise.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 10));
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-PM2.5
|
case "PM2.5":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_PM2_5.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-PM10
|
case "PM10":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_PM10.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-TSP
|
case "TSP":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_tsp.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-雨量
|
case "雨量":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_rain.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 10));
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-雨量
|
case "甲醛":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_ech2o.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-TVOC
|
case "TVOC":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_tvoc.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-eCO2
|
case "二氧化碳":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_eCO2.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-SO2二氧化硫
|
case "二氧化硫":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_SO2.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-NO2二氧化氮
|
case "二氧化氮":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_NO2.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-CO一氧化碳
|
case "一氧化碳":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_CO.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-O3臭氧
|
case "臭氧":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_O3.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
//设置数据修正值-F氟化物
|
case "氟化物":
|
functionCode = AtmoFunctionCode.Setting_Data_Correction_F.getCode();
|
value1 = new BigDecimal(valueOfReal);
|
value2 = new BigDecimal(valueOfStandard);
|
subtract = value1.subtract(value2).doubleValue();
|
|
z = Integer.valueOf((int) (subtract * 100) / 100);
|
|
if (subtract > 0) {
|
value = hex10To16(z);
|
} else {
|
value = hex10To16(-z + 32768);
|
}
|
break;
|
default:
|
}
|
|
System.out.println(value);
|
}
|
|
@Override
|
public String getEncodeFrame() {
|
String payloadLength = "0004";
|
String payload = "FFFF" + value;
|
String frame = functionCode + payloadLength + payload;
|
return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
|
}
|
|
/**
|
* 十进制转十六进制
|
*
|
* @param value
|
* @return
|
*/
|
private static String hex10To16(int value) {
|
return String.format("%02X", value);
|
}
|
}
|