From edbb2fe4eabbb7c526fb2f7313bead37d38928e2 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期一, 15 八月 2022 14:57:16 +0800
Subject: [PATCH] 充电桩上电请求

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java |  284 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 203 insertions(+), 81 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 4c11e0f..5c4aa9a 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
@@ -27,9 +27,11 @@
     @Override
     public A5AtmosphereHeartbeatReportInnerFrame transformFrame(String hex) {
         //  闀垮害涓嶄竴鑷存椂锛岃繑鍥瀗ull
-        if (StrUtil.isBlank(hex)) {
+        if (StrUtil.isBlank(hex) || hex.length() < 26 || hex.substring(18).length() % 8 != 0) {
+            System.out.println("鏁版嵁鏍¢獙寮傚父锛�");
             return null;
         }
+
         // MQTT閫氫俊鏂瑰紡(1)
         setConnectType(hex.substring(0, 2));
         //  鍔熻兘鐮�(1)
@@ -39,7 +41,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,113 +55,233 @@
 
     @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 Integer noise;
+        private String noise;
         //  PM2.5
-        private Integer pm25;
+        private String pm25;
         //  PM10
-        private Integer pm10;
-        //  鎬绘偓娴绮掔墿锛圱SP锛�
-        private Integer tsp;
-        //  SO2浜屾哀鍖栫~/鐢查啗鐩稿鍊�
-        private Integer so2;
-        private Integer ech2o;
-        //  NO2浜屾哀鍖栨爱/TVOC
-        private Integer no2;
-        private Integer tvoc;
-        //  CO涓�姘у寲纰� /浜屾哀鍖栫⒊
-        private Integer co;
-        private Integer co2;
+        private String pm10;
+        //鎬绘偓娴绮掔墿TSP
+        private String tsp;
+        //  闆ㄩ噺
+        private String rain;
+        //  SO2浜屾哀鍖栫~鐩稿鍊�
+        private String so2;
+        //  鐢查啗鐩稿鍊�
+        private String ech2o;
+        //  NO2浜屾哀鍖栨爱
+        private String no2;
+        //  TVOC
+        private String tvoc;
+        //  CO涓�姘у寲纰�
+        private String co;
+        //  浜屾哀鍖栫⒊
+        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);
-            this.pm25 = parseVal(hex,36, 40);
-            this.pm10 = parseVal(hex,40,44);
-            this.tsp = parseVal(hex,44,48);
 
-            /**
-             * 浠ヤ笅鍖哄垎鐗堟湰
-             */
-            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).doubleValue() * .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;
         }
 
-        private Integer parseVal (String frame, int start, int end) {
-            return Integer.parseInt(frame.substring(start,end),16);
+        private Integer parseVal(String frame, int start, int end) {
+            return Integer.parseInt(frame.substring(start, end), 16);
         }
     }
 
-    public enum DeviceType {
-
-        SENSOR_V1("0101");
-
-        private String type;
-
-        DeviceType(String type) {
-            this.type = type;
-        }
-
-        public String getType() {
-            return type;
-        }
-    }
 }

--
Gitblit v1.9.3