diff --git a/mh-admin/src/test/java/com/mh/MHApplicationTest.java b/mh-admin/src/test/java/com/mh/MHApplicationTest.java index fc4833b..6cf9fcb 100644 --- a/mh-admin/src/test/java/com/mh/MHApplicationTest.java +++ b/mh-admin/src/test/java/com/mh/MHApplicationTest.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.web.client.RestTemplate; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -71,6 +72,13 @@ public class MHApplicationTest { @Autowired private ISysParamsService sysParamsService; + @Test + public void test1() { + BigDecimal bigDecimal = new BigDecimal(165); + bigDecimal = bigDecimal.multiply(new BigDecimal(550)).divide(new BigDecimal(1650)).subtract(new BigDecimal(40)); + System.out.println(bigDecimal); + } + @Test public void getWeatherInfo() { getWeatherDataTask.getWeatherInfo(); diff --git a/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java b/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java index 61b8e9c..36c2efc 100644 --- a/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java +++ b/mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java @@ -343,4 +343,52 @@ public class AnalysisReceiveOrder485 { } return ""; } + + public String analysisTempHumiditySensorOrder485(String receiveStr, CollectionParamsManage deviceCodeParam) { +// 去掉空格 + String dataStr = receiveStr.replace(" ", "").toUpperCase(); + // 检验报文 + String checkStr = dataStr.substring(0, dataStr.length() - 4); + byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr); + int checkNum = CRC16.CRC16_MODBUS(strOrder); + String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); + checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); + + if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { + // 表号 + String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2)); + // 读数 + String data = ""; + data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4); + + int dataType = deviceCodeParam.getDataType(); + try { + if (dataType == 2) { + data = ExchangeStringUtil.hexToDec(data); + BigDecimal bigDecimal = new BigDecimal(data); + if (deviceCodeParam.getParamType().equals("12")){ + // 温度 + bigDecimal = bigDecimal.multiply(new BigDecimal(550)).divide(new BigDecimal(1650)).subtract(new BigDecimal(40)); + } else if (deviceCodeParam.getParamType().equals("35")) { + // 湿度 + bigDecimal = bigDecimal.multiply(new BigDecimal(100)); + } + bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数 + data = bigDecimal.toString(); + // log.info("液位==>{},寄存器地址==>{},实时读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data); + } +// // 判断data大于99999999,就返回空 +// if (new BigDecimal(data).intValue() > 130) { +// return ""; +// } + return data; + } catch (Exception e) { + log.error("保存液位数据失败!", e); + } + } else { + // log.info("液位===>{}", dataStr); + return ""; + } + return ""; + } } diff --git a/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java b/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java index be1c5bb..e9f6134 100644 --- a/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java +++ b/mh-framework/src/main/java/com/mh/framework/netty/EchoServerHandler.java @@ -356,9 +356,15 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { case "2" -> // 热泵启停控制 analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); - case "12" -> - // 热泵实际温度 + case "12" -> { + if (deviceCodeParamEntity.getMtType().equals("8")) { + // 温湿度传感器 + analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); + } else { + // 热泵实际温度 analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); + } + } case "14" -> // 热泵读取温度设置 analysisData = analysisReceiveOrder485.analysisHeatPumpOrder485(receiveStr, deviceCodeParamEntity); @@ -368,6 +374,12 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter { case "11" -> // 液位计 analysisData = analysisReceiveOrder485.analysisLiquidOrder485(receiveStr, deviceCodeParamEntity); + case "13" -> + // 压力 + analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); + case "35" -> + // 湿度 + analysisData = analysisReceiveOrder485.analysisTempHumiditySensorOrder485(receiveStr, deviceCodeParamEntity); default -> { // log.info("设备类型错误"); return;