From 41f01abcbf2c5fd6f63da15a0dabeb34ceb9c3ec Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期三, 03 八月 2022 15:33:50 +0800
Subject: [PATCH] 大气设备

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java |  247 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 191 insertions(+), 56 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
index 83c66e0..36fcf3a 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
@@ -39,7 +39,7 @@
 
         setDestinationAddress(hex.substring(8, 12));
 
-        String heartBeatData = hex.substring(12, 76);
+        String heartBeatData = hex.substring(12, hex.length() - 8);
         HeartBeatDataPackage heartBeatDataPackage = new HeartBeatDataPackage();
         heartBeatDataPackage.transformFrame(heartBeatData);
         setHeartBeatDataPackage(heartBeatDataPackage);
@@ -53,96 +53,231 @@
 
     @Data
     public static class HeartBeatDataPackage implements IResponseInnerFrame<HeartBeatDataPackage> {
+//                  缂栧彿	                    鏁版嵁			                                鍚箟	        鍗曚綅
+//                  D7:D6	    D5:D4	        D3:D2	D1:D0
+//                  0x01	绌猴紝鐢�0x00濉厖	0x00~0xEC	        0x00~0x09	            娓╁害	        0.1鈩�
+//                  0x02	绌猴紝鐢�0x00濉厖	0x00~0x64	        0x00~0x09	            婀垮害      	0.1%
+//                  0x03	绌猴紝鐢�0x00濉厖	0x00	            0x00	                椋庨��	        0.1m/s
+//                  0x04	绌猴紝鐢�0x00濉厖	0xF8鎴�0x00           0x00	                椋庡悜	        鍏柟鍚�/0.1鈩�
+//                  0x05	绌猴紝鐢�0x00濉厖	绌猴紝鐢�0x00濉厖	    0x00~0x12	            椋庡姏	        绾�
+//                  0x06	0x00	        0x00	            0x00	                澶ф皵鍘�	    0.01hPA(鐧惧笗鏂崱锛�
+//                  0x07	0x00	        0x00	            0x00	                鍏夊己	        Lux
+//                  0x08	绌猴紝鐢�0x00濉厖	0x00	            0x00	                鍣煶	        0.1dB
+//                  0x09	绌猴紝鐢�0x00濉厖	0x00	            0x00	                PM2.5	    ug/m3
+//                  0x0A	绌猴紝鐢�0x00濉厖	0x00	            0x00	                PM10	    ug/m3
+//                  0x0B	绌猴紝鐢�0x00濉厖	0x00	            0x00	                TSP	        ug/m3
+//                  0x0C	绌猴紝鐢�0x00濉厖	0x00	            0x00	                闆ㄩ噺      	0.1mm
+//                  0x0D	绌猴紝鐢�0x00濉厖	0x00	            0x00	                鐢查啗	        ppm
+//                  0x0E	绌猴紝鐢�0x00濉厖	0x00	            0x00	                TVOC	    ppm
+//                  0x0F	绌猴紝鐢�0x00濉厖	0x00	            0x00	                eCO2	    ppm
+//                  0x10	绌猴紝鐢�0x00濉厖	0x00	            0x00	                SO2浜屾哀鍖栫~	ppm
+//                  0x11	绌猴紝鐢�0x00濉厖	0x00	            0x00	                NO2浜屾哀鍖栨爱	ppm
+//                  0x12	绌猴紝鐢�0x00濉厖	0x00	            0x00	                CO涓�姘у寲纰�	ppm
+//                  0x13	绌猴紝鐢�0x00濉厖	0x00	            0x00	                O3鑷哀	    ppm
+//                  0x14	绌猴紝鐢�0x00濉厖	0x00	            0x00	                F姘熷寲鐗�	    ppm
+
         //  璁惧鍨嬪彿    2
         private String deviceType;
         //  妯″潡棰勭儹鐘舵�佹爣蹇�    1
         private String moduleWarmUpStatusFlag;
         //  娓╁害鍊�
-        private Double temperature;
+        private String temperature;
         //  婀垮害鍊�
-        private Double humidity;
+        private String humidity;
         //  椋庨��
-        private Double windSpeed;
+        private String windSpeed;
         //  椋庡悜
-        private Double windDirection;
+        private String windDirection;
+        //  椋庡姏
+        private String windPower;
         //  澶ф皵鍘�
-        private Integer pressure;
+        private String pressure;
         //  鍏夊己
-        private Integer lightIntensity;
+        private String lightIntensity;
         //  鍣煶
-        private Double noise;
+        private String noise;
         //  PM2.5
-        private Integer pm25;
+        private String pm25;
         //  PM10
-        private Integer pm10;
+        private String pm10;
+        //鎬绘偓娴绮掔墿TSP
+        private String tsp;
         //  闆ㄩ噺
-        private Double rainfall;
+        private String rain;
         //  SO2浜屾哀鍖栫~鐩稿鍊�
-        private Integer so2;
+        private String so2;
         //  鐢查啗鐩稿鍊�
-        private Integer ech2o;
+        private String ech2o;
         //  NO2浜屾哀鍖栨爱
-        private Integer no2;
+        private String no2;
         //  TVOC
-        private Integer tvoc;
+        private String tvoc;
         //  CO涓�姘у寲纰�
-        private Integer co;
+        private String co;
         //  浜屾哀鍖栫⒊
-        private Integer co2;
+        private String co2;
         //  O3鑷哀
-        private Integer o3;
+        private String o3;
         //  F姘熷寲鐗�
-        private Integer fluoride;
+        private String fluoride;
 
         @Override
         public HeartBeatDataPackage transformFrame(String hex) {
-            if (hex.length() != 64) {
+            //鍒ゆ柇鏁版嵁闀垮害鏄惁姝g‘
+            if (hex == null || hex.substring(6).length() % 8 != 0) {
+                System.out.println("hex:---" + hex);
+                System.out.println("蹇冭烦鍖呮暟鎹紓甯革紒");
                 return null;
             }
+
+            //璁惧鍨嬪彿
             Integer type = 0;
             this.deviceType = hex.substring(0, 4);
             if (this.deviceType.equals(DeviceType.SENSOR_V1.getType())) {
                 type = 1;
             }
+            //妯″潡棰勭儹鐘舵�佹爣蹇�
             this.moduleWarmUpStatusFlag = hex.substring(4, 6);
-            this.temperature = Double.parseDouble(
-                    parseVal(hex, 6, 8)
-                            + "."
-                            + parseVal(hex, 8, 10)
-            );
-            this.humidity = Double.parseDouble(
-                    parseVal(hex, 10, 12)
-                            + "."
-                            + parseVal(hex, 12, 14)
-            );
-            this.windSpeed = parseVal(hex, 14, 18) * .1;
-            this.windDirection = parseVal(hex, 18, 22) * .1;
-            this.pressure = parseVal(hex, 22, 26);
-            this.lightIntensity = parseVal(hex, 26, 32);
-            this.noise = parseVal(hex, 32, 36) * .1;
-            this.pm25 = parseVal(hex, 36, 40);
-            this.pm10 = parseVal(hex, 40, 44);
-            this.rainfall = parseVal(hex, 44, 48) * .1;
 
-            /**
-             * 浠ヤ笅鍖哄垎鐗堟湰
-             */
-            if (type.equals(1)) {
-                this.ech2o = parseVal(hex, 48, 52);
-                this.tvoc = parseVal(hex, 52, 56);
-                this.co2 = parseVal(hex, 56, 60);
-            } else {
-                this.so2 = parseVal(hex, 48, 52);
-                this.ech2o = parseVal(hex, 48, 52);
-                this.tvoc = parseVal(hex, 52, 56);
-                this.no2 = parseVal(hex, 52, 56);
-                this.co = parseVal(hex, 56, 60);
-                this.co2 = parseVal(hex, 56, 60);
+            //蹇冭烦鍖呰澶囨暟鎹�
+            String data = hex.substring(6, hex.length() - 8);
+            int lenght = data.length() / 8;
+            //璁惧鏁版嵁
+            String sub;
+            for (int i = 0; i < lenght; i++) {
+                sub = data.substring(i * 8, i * 8 + 8);
+                switch (data.substring(i * 8, i * 8 + 2)) {
+                    //娓╁害
+                    case "01":
+                        //01001E01
+                        this.temperature = Double.parseDouble(
+                                parseVal(sub, 4, 6)
+                                        + "."
+                                        + parseVal(sub, 6, 8)
+                        ) + "鈩�";
+                        break;
+                    //婀垮害
+                    case "02":
+                        //02003608
+                        this.humidity = Double.parseDouble(
+                                parseVal(sub, 4, 6)
+                                        + "."
+                                        + parseVal(sub, 6, 8)
+                        ) + "%";
+                        break;
+                    //椋庨��
+                    case "03":
+                        //03000000
+                        this.windSpeed = parseVal(sub, 4, 8) * .1 + "m/s";
+                        break;
+                    //椋庡悜
+                    case "04":
+                        //0400F804
+                        if ("F8".equals(sub.substring(4, 6))) {
+                            //鍏悜娆鹃鍚戜华
+                            switch (sub.substring(6, 8)) {
+                                case "00":
+                                    this.windDirection = "鍖楅";
+                                    break;
+                                case "01":
+                                    this.windDirection = "涓滃寳椋�";
+                                    break;
+                                case "02":
+                                    this.windDirection = "涓滈";
+                                    break;
+                                case "03":
+                                    this.windDirection = "涓滃崡椋�";
+                                    break;
+                                case "04":
+                                    this.windDirection = "鍗楅";
+                                    break;
+                                case "05":
+                                    this.windDirection = "瑗垮崡椋�";
+                                    break;
+                                case "06":
+                                    this.windDirection = "瑗块";
+                                    break;
+                                case "07":
+                                    this.windDirection = "瑗垮寳椋�";
+                                    break;
+                                default:
+                                    this.windDirection = "鏈煡椋庡悜";
+                            }
+                        } else if ("00".equals(sub.substring(4, 6))) {
+                            //360搴︽椋庡悜浠�
+                            this.windDirection = parseVal(sub, 4, 8) * .1 + "鈩�";
+                        }
+                        break;
+                    //椋庡姏
+                    case "05":
+                        this.windPower = sub.substring(6, 8) + "绾�";
+                        break;
+                    //澶ф皵鍘�
+                    case "06":
+                        //06000000
+                        this.pressure = parseVal(sub, 2, 8) * .01 + "hPA";
+                        break;
+                    //鍏夊己
+                    case "07":
+                        this.lightIntensity = parseVal(sub, 2, 8) + "Lux";
+                        break;
+                    //鍣煶
+                    case "08":
+
+                        this.noise = parseVal(sub, 4, 8) * .1 + "dB";
+                        break;
+                    //PM2.5
+                    case "09":
+                        this.pm25 = parseVal(sub, 4, 8) + "ug/m3";
+                        break;
+                    //PM10
+                    case "0A":
+                        this.pm10 = parseVal(sub, 4, 8) + "ug/m3";
+                        break;
+                    //TSP
+                    case "0B":
+                        this.tsp = parseVal(sub, 4, 8) + "ug/m3";
+                        break;
+                    //闆ㄩ噺
+                    case "0C":
+                        this.rain = parseVal(sub, 4, 8) * .1 + "mm";
+                        break;
+                    //鐢查啗
+                    case "0D":
+                        this.ech2o = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //TVOC
+                    case "0E":
+                        this.tvoc = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //eCO2
+                    case "0F":
+                        this.co2 = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //SO2浜屾哀鍖栫~
+                    case "10":
+                        this.so2 = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //NO2浜屾哀鍖栨爱
+                    case "11":
+                        this.no2 = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //CO涓�姘у寲纰�
+                    case "12":
+                        this.co = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //O3鑷哀
+                    case "13":
+                        this.o3 = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    //F姘熷寲鐗�
+                    case "14":
+                        this.fluoride = parseVal(sub, 4, 8) + "ppm";
+                        break;
+                    default:
+                        return null;
+                }
             }
-
-            this.o3 = parseVal(hex, 60, 62);
-            this.fluoride = parseVal(hex, 62, 64);
-
             return this;
         }
 

--
Gitblit v1.9.3