From ea94079e74182be590b9fff356c97f522d9a7828 Mon Sep 17 00:00:00 2001
From: MercuryZ <zdmisif@126.com>
Date: 星期二, 18 十月 2022 09:26:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java |  135 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 113 insertions(+), 22 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
index d00066a..87c5b04 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
@@ -5,6 +5,7 @@
 import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC16Utils;
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRCUtils;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -15,7 +16,7 @@
  */
 @Data
 public class A5AtmosphereNewHeartbeatReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereNewHeartbeatReportInnerFrame> {
-    //ff03200241000000000000000000000009000a198a186327b8000c000000000000000b8c35c1cad6bf
+    //010326FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B341022277F000D05B5000000015DDD0000FFFF000070C9    涓诲姩涓婃姤蹇冭烦鍖�
     private HeartBeatDataPackage heartBeatDataPackage;
 
     @Override
@@ -26,7 +27,7 @@
         }
         //鏍¢獙
         hex = hex.replaceAll(" ", "");
-        if (hex.length() < 74) {
+        if (hex.length() != 86) {
             return null;
         }
 
@@ -44,9 +45,9 @@
         setHeartBeatDataPackage(heartBeatDataPackage);
 
         setCrc16(hex.substring(hex.length() - 4));
-        //  鏍¢獙CRC32
+        //  鏍¢獙CRC16
         String frame = hex.substring(0, hex.length() - 4);
-        this.setValidate(getCrc16().equals(CRC16Utils.getCRC16(frame)));
+        this.setValidate(getCrc16().equals(CRCUtils.getCRC16(frame)));
         return this;
     }
 
@@ -84,47 +85,137 @@
         private BigDecimal radiation;
         //("鍏夌収")
         private BigDecimal illumination;
+        //绱鎸囨暟
+        private BigDecimal ultraviolet;
+        //CO2
+        private BigDecimal co2;
+        //璐熸哀绂诲瓙
+        private BigDecimal o2;
 
         @Override
         public HeartBeatDataPackage transformFrame(String hex) {
-            //ff   03  20   0241000000000000000000000009000a198a186327b8000c000000000000000b8c35c1ca(鍙傝�冨��)
-            // 0241 0000  0000 0000 0000 0000 0009  000a  198a  1863  27b8  000c  0000  0000  0000  000b  8c35  c1ca
+//            010326FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B341022277F000D05B5000000015DDD0000FFFF000070C9    涓诲姩涓婃姤蹇冭烦鍖�
+//            01锛氱郴缁熷湴鍧�
+//            03锛氬姛鑳界爜
+//            26锛氭暟鎹瀛� 鑺傛暟閲�
+//            FFFF锛氬櫔澹�-------銆�
+//            FFFF锛氱~鍖栨阿-------銆�
+//            FFFF锛歋O2 娴撳害-------銆�
+//            FFFF锛歂O2 娴撳害-------銆�
+//            FFFF锛欳O 娴撳害-------銆�
+//            FFFF锛歄3 娴撳害-------銆�
+//            FFFF锛歅M2.5 娴撳害-------銆�
+//            FFFF锛歅M10 娴撳害-------銆�
+//            1B34锛氱┖姘旀俯搴�-------銆�29.64鈩�
+//            1022锛氱┖姘旀箍搴�-------銆�41.30%
+//            277F锛氬ぇ姘斿帇寮�-------銆�101.11hPa
+//            000D锛氶閫�-------銆�0.13m/s
+//            05B5锛氶鍚�-------銆�146.1掳
+//            0000锛氳繛缁洦閲�-------銆�0mm
+//            0001锛氳緪灏�-------銆�1W/銕�
+//            5DDD锛氬厜鐓�-------銆�240.29Klux
+//            0000锛氱传澶栨寚鏁�-------銆�
+//            FFFF锛欳O2-------銆�
+//            0000锛氳礋姘х瀛�-------銆�
+//            70C9锛欳RC16 鏍¢獙浣�
 
             //鍣0
-            this.noise = BigDecimal.valueOf(parseVal(hex, 6, 10) / 10.0);
+            if (isValidData(hex, 6, 10)) {
+                this.noise = new BigDecimal(parseVal(hex, 6, 10)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+            }
             //纭寲姘�
-            this.hydrogenSulfide = BigDecimal.valueOf(parseVal(hex, 10, 14) / 1.0);
+            if (isValidData(hex, 10, 14)) {
+                this.hydrogenSulfide = new BigDecimal(parseVal(hex, 10, 14));
+            }
             //SO2 娴撳害
-            this.so2 = BigDecimal.valueOf(parseVal(hex, 14, 18) / 1.0);
+            if (isValidData(hex, 14, 18)) {
+                this.so2 = new BigDecimal(parseVal(hex, 14, 18));
+            }
             //NO2 娴撳害
-            this.no2 = BigDecimal.valueOf(parseVal(hex, 18, 22) / 1.0);
+            if (isValidData(hex, 18, 22)) {
+                this.no2 = new BigDecimal(parseVal(hex, 18, 22));
+            }
             //CO 娴撳害
-            this.co = BigDecimal.valueOf(parseVal(hex, 22, 26) / 1.0);
+            if (isValidData(hex, 22, 26)) {
+                this.co = new BigDecimal(parseVal(hex, 22, 26));
+            }
             //O3 娴撳害
-            this.o3 = BigDecimal.valueOf(parseVal(hex, 26, 30) / 1.0);
+            if (isValidData(hex, 26, 30)) {
+                this.o3 = new BigDecimal(parseVal(hex, 26, 30));
+            }
             //PM2.5 娴撳害
-            this.pm2point5 = BigDecimal.valueOf(parseVal(hex, 30, 34) / 1.0);
+            if (isValidData(hex, 30, 34)) {
+                this.pm2point5 = new BigDecimal(parseVal(hex, 30, 34));
+            }
             //PM10 娴撳害
-            this.pm10 = BigDecimal.valueOf(parseVal(hex, 34, 38) / 1.0);
+            if (isValidData(hex, 34, 38)) {
+                this.pm10 = new BigDecimal(parseVal(hex, 34, 38));
+            }
             //绌烘皵娓╁害
-            this.airTemperature = BigDecimal.valueOf(parseVal(hex, 38, 42) / 100.0 - 40);
+            if (isValidData(hex, 38, 42)) {
+                this.airTemperature = new BigDecimal(parseVal(hex, 38, 42)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(40));
+            }
             //绌烘皵婀垮害
-            this.airHumidity = BigDecimal.valueOf(parseVal(hex, 42, 46) / 100.0);
+            if (isValidData(hex, 42, 46)) {
+                this.airHumidity = new BigDecimal(parseVal(hex, 42, 46)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            }
             //澶ф皵鍘嬪己
-            this.airPressure = BigDecimal.valueOf(parseVal(hex, 46, 50) / 10.0);
+            if (isValidData(hex, 46, 50)) {
+                this.airPressure = new BigDecimal(parseVal(hex, 46, 50)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+            }
             //椋庨��
-            this.windSpeed = BigDecimal.valueOf(parseVal(hex, 50, 54) / 100.0);
+            if (isValidData(hex, 50, 54)) {
+                this.windSpeed = new BigDecimal(parseVal(hex, 50, 54)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            }
             //椋庡悜
-            this.windDirection = BigDecimal.valueOf(parseVal(hex, 54, 58) / 10.0);
+            if (isValidData(hex, 54, 58)) {
+                this.windDirection = new BigDecimal(parseVal(hex, 54, 58)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+            }
             //10 鍒嗛挓闆ㄩ噺
-            this.tenRainfallMin = BigDecimal.valueOf(parseVal(hex, 58, 62) / 10.0);
+            if (isValidData(hex, 58, 62)) {
+                this.tenRainfallMin = new BigDecimal(parseVal(hex, 58, 62)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+            }
             //杈愬皠
-            this.radiation = BigDecimal.valueOf(parseVal(hex, 62, 66) / 1.0);
+            if (isValidData(hex, 62, 66)) {
+                this.radiation = new BigDecimal(parseVal(hex, 62, 66));
+            }
             //鍏夌収
-            this.illumination = BigDecimal.valueOf(parseVal(hex, 66, 70) / 100.0);
+            if (isValidData(hex, 66, 70)) {
+                this.illumination = new BigDecimal(parseVal(hex, 66, 70)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            }
+            //绱鎸囨暟
+            if (isValidData(hex, 70, 74)) {
+                this.ultraviolet = new BigDecimal(parseVal(hex, 70, 74)).divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP);
+            }
+            //CO2
+            if (isValidData(hex, 74, 78)) {
+                this.co2 = new BigDecimal(parseVal(hex, 74, 78));
+            }
+            //璐熸哀绂诲瓙
+            if (isValidData(hex, 78, 82)) {
+                this.o2 = BigDecimal.valueOf(parseVal(hex, 78, 82) * 10.0);
+                this.o2 = new BigDecimal(parseVal(hex, 78, 82)).multiply(new BigDecimal(1));
+            }
             return this;
         }
 
+        /**
+         * 鍒ゆ柇璇ュぇ姘旇澶囨槸鍚︽湁瀵瑰簲鐨勬劅搴斿櫒
+         *
+         * @param value
+         * @param startIndex
+         * @param endIndex
+         * @return
+         */
+        private boolean isValidData(String value, int startIndex, int endIndex) {
+            //FFFF鏄唬琛ㄨ繖涓澶囦笉鏀寔杩欎釜鏁版嵁椤广��0000鏄〃绀烘敮鎸佷絾鏄暟鎹负闆�
+            if ("FFFF".equals(value.substring(startIndex, endIndex))) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+
         private Integer parseVal(String frame, int start, int end) {
             return Integer.parseInt(frame.substring(start, end), 16);
         }

--
Gitblit v1.9.3