From d5dab0a85de9573ff61e20794af04129dd4b2f87 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期一, 01 八月 2022 18:30:24 +0800
Subject: [PATCH] 大气设备

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java                 |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java               |   93 ------
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java     |   22 -
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java        |   22 -
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java  |   22 -
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java                                          |   57 ++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java    |   41 ++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java                                               |   10 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java       |   19 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java |  140 ++++++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java           |    6 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java                                       |    6 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java                                                     |    1 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java   |   48 +++
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java                                                |  156 +++++++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java    |   43 +++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java       |   68 ++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java              |   22 -
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java                                    |   49 +++
 19 files changed, 654 insertions(+), 175 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
index 183fba6..6ebbf44 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
@@ -3,26 +3,20 @@
 import com.sandu.common.domain.CommonPage;
 import com.sandu.common.domain.ResponseVO;
 import com.sandu.common.object.BaseConditionVO;
-import com.sandu.common.security.annotation.AnonymousAccess;
 import com.sandu.common.util.ResponseUtil;
-import com.sandu.common.util.SpringContextHolder;
 import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor;
 import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataReqInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereHeartBeatReqInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
 import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
 import com.sandu.ximon.admin.security.PermissionConfig;
 import com.sandu.ximon.admin.service.AirDataService;
-import com.sandu.ximon.admin.service.PoleBindingService;
 import com.sandu.ximon.admin.utils.RedisUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
 import com.sandu.ximon.dao.bo.AirDataBo;
-import com.sandu.ximon.dao.domain.Pole;
 import com.sandu.ximon.dao.enums.MenuEnum;
-import com.sandu.ximon.dao.enums.PoleBindingEnums;
-import com.sandu.ximon.dao.mapper.PoleBindingMapper;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -77,7 +71,7 @@
         if (!permissionConfig.check(MenuEnum.AIR_DATA_UPDATE.getCode())) {
             return ResponseUtil.fail("缂哄皯瀵瑰簲鐢ㄦ埛鏉冮檺");
         }
-        AirDataReqInnerFrame airDataReqInnerFrame = new AirDataReqInnerFrame();
+        AtmosphereHeartBeatReqInnerFrame airDataReqInnerFrame = new AtmosphereHeartBeatReqInnerFrame();
         A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataReqInnerFrame);
         System.out.println(a5Frame + "          --------a5Frame");
 
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java
index c1a70df..2e51904 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java
@@ -10,7 +10,7 @@
 import com.sandu.common.util.ResponseUtil;
 import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor;
 import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataNewReqInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereNewReqInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
@@ -39,8 +39,8 @@
 
     @PostMapping("/updateAirEquipmentInfo")
     public ResponseVO<Object> updataAirEquipmentInfo(@RequestBody List<String> listMac) {
-        AirDataNewReqInnerFrame airDataNewReqInnerFrame = new AirDataNewReqInnerFrame();
-        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataNewReqInnerFrame);
+        AtmosphereNewReqInnerFrame atmosphereNewReqInnerFrame = new AtmosphereNewReqInnerFrame();
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereNewReqInnerFrame);
         System.out.println(a5Frame + "          --------a5Frame");
 
         List<String> success = new ArrayList<>();
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java
index 5c04267..9804b3b 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java
@@ -49,4 +49,61 @@
         }
     }
 
+    /**
+     * 鏌ヨ澶ф皵璁惧蹇冭烦鍖呮椂闂�
+     *
+     * @return
+     */
+    @GetMapping("/QueryHeartBeatTime")
+    public ResponseVO<Object> QueryHeartBeatTime(@RequestParam(value = "mac", required = false) String mac) {
+        return ResponseUtil.success(airEquipmentService.QueryHeartBeatTime(mac));
+    }
+
+    /**
+     * 璁剧疆蹇冭烦鍖呴棿闅旀椂闂�
+     *
+     * @param mac
+     * @param time
+     * @return
+     */
+    @GetMapping("/setHeartBeatTime")
+    public ResponseVO<Object> setHeartBeatTime(@RequestParam(value = "mac", required = false) String mac,
+                                               @RequestParam(value = "time", required = false) Integer time) {
+        return ResponseUtil.success(airEquipmentService.setHeartBeatTime(mac, time));
+    }
+
+    /**
+     * 鏌ヨ浼犳劅鍣ㄦ暟閲�/鏁呴殰
+     *
+     * @param mac
+     * @return
+     */
+    @GetMapping("/QuerySensorInfo")
+    public ResponseVO<Object> QuerySensorInfo(@RequestParam(value = "mac", required = false) String mac) {
+        return ResponseUtil.success(airEquipmentService.QuerySensorInfo(mac));
+    }
+
+    /**
+     * 鏌ヨ杞‖浠剁増鏈�
+     *
+     * @param mac
+     * @return
+     */
+    @GetMapping("/QueryVersion")
+    public ResponseVO<Object> QueryVersion(@RequestParam(value = "mac", required = false) String mac) {
+        airEquipmentService.QueryVersion(mac);
+        return ResponseUtil.success(null);
+    }
+
+    /**
+     * 杞噸鍚�
+     *
+     * @param mac
+     * @return
+     */
+    @GetMapping("/Reboot")
+    public ResponseVO<Object> Reboot(@RequestParam(value = "mac", required = false) String mac) {
+        return ResponseUtil.success(airEquipmentService.Reboot(mac));
+    }
+
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java
new file mode 100644
index 0000000..57e2c1b
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java
@@ -0,0 +1,48 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * 澶ф皵璁惧蹇冭烦鍖呴棿闅旀椂闂�
+ *
+ * @author ZZQ
+ * @date 2022/8/1 10:17
+ */
+//FEA584000C    FE  02  0004  FFFF  003C  B081260C    CC1C105D
+@Data
+@ToString(callSuper = true)
+public class A5AtmosphereHeartBeatTimeReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereHeartBeatTimeReportInnerFrame> {
+    //闂撮殧鏃堕棿
+    private int intervalTime;
+    //璁惧鍦板潃
+    private String deviceAddress;
+
+    @Override
+    public A5AtmosphereHeartBeatTimeReportInnerFrame transformFrame(String hex) {
+        //  闀垮害涓嶄竴鑷存椂锛岃繑鍥瀗ull
+        if (StrUtil.isBlank(hex) || hex.length() != 24) {
+            System.out.println("鏁版嵁鏍¢獙寮傚父锛�");
+            return null;
+        }
+        // MQTT閫氫俊鏂瑰紡(1)
+        setConnectType(hex.substring(0, 2));
+        //  鍔熻兘鐮�(1)
+        setFunctionCode(hex.substring(2, 4));
+        //  璐熻嵎闀垮害(2)
+        setPayloadLength(hex.substring(4, 8));
+        //璁惧鍦板潃
+        setDeviceAddress(hex.substring(8, 12));
+        //蹇冭烦鍖呴棿闅旀椂闂�
+        setIntervalTime(Integer.parseInt(hex.substring(12, 16), 16));
+
+        setCrc32(hex.substring(hex.length() - 8));
+        //  鏍¢獙CRC32
+        String frame = hex.substring(2, hex.length() - 8);
+        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
+        return this;
+    }
+}
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 c746883..83c66e0 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
@@ -70,21 +70,24 @@
         //  鍏夊己
         private Integer lightIntensity;
         //  鍣煶
-        private Integer noise;
+        private Double noise;
         //  PM2.5
         private Integer pm25;
         //  PM10
         private Integer pm10;
-        //  鎬绘偓娴绮掔墿锛圱SP锛�
-        private Integer tsp;
-        //  SO2浜屾哀鍖栫~/鐢查啗鐩稿鍊�
+        //  闆ㄩ噺
+        private Double rainfall;
+        //  SO2浜屾哀鍖栫~鐩稿鍊�
         private Integer so2;
+        //  鐢查啗鐩稿鍊�
         private Integer ech2o;
-        //  NO2浜屾哀鍖栨爱/TVOC
+        //  NO2浜屾哀鍖栨爱
         private Integer no2;
+        //  TVOC
         private Integer tvoc;
-        //  CO涓�姘у寲纰� /浜屾哀鍖栫⒊
+        //  CO涓�姘у寲纰�
         private Integer co;
+        //  浜屾哀鍖栫⒊
         private Integer co2;
         //  O3鑷哀
         private Integer o3;
@@ -116,10 +119,10 @@
             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.noise = parseVal(hex, 32, 36) * .1;
             this.pm25 = parseVal(hex, 36, 40);
             this.pm10 = parseVal(hex, 40, 44);
-            this.tsp = parseVal(hex, 44, 48);
+            this.rainfall = parseVal(hex, 44, 48) * .1;
 
             /**
              * 浠ヤ笅鍖哄垎鐗堟湰
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java
new file mode 100644
index 0000000..d0361f3
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java
@@ -0,0 +1,68 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @author ZZQ
+ * @date 2022/3/14 16:36
+ * 澶ф皵鎿嶄綔鎸囦护鍝嶅簲甯�
+ */
+@Data
+@ToString(callSuper = true)
+public class A5AtmosphereOperationReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereOperationReportInnerFrame> {
+    //MAC鍦板潃
+    private String mac;
+
+    private String state;
+
+    @Override
+    public A5AtmosphereOperationReportInnerFrame transformFrame(String hex) {        //  闀垮害涓嶄竴鑷存椂锛岃繑鍥瀗ull
+        if (StrUtil.isBlank(hex)) {
+            return null;
+        }
+        // MQTT閫氫俊鏂瑰紡(1)
+        setConnectType(hex.substring(0, 2));
+        //  鍔熻兘鐮�(1)
+        setFunctionCode(hex.substring(2, 4));
+        //  璐熻嵎闀垮害(2)
+        setPayloadLength(hex.substring(4, 8));
+        //MAC鍦板潃
+        setMac(hex.substring(8, 12));
+        //纭欢浜や簰鍝嶅簲缁撴灉
+        setState(returnState(hex.substring(12, 14)));
+
+        setCrc32(hex.substring(hex.length() - 8));
+        //  鏍¢獙CRC32
+        String frame = hex.substring(2, hex.length() - 8);
+        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
+        return this;
+    }
+
+    public String returnState(String stateCode) {
+        String State = "";
+        switch (stateCode) {
+            case "00":
+                State = "鎿嶄綔鎴愬姛";
+                break;
+            case "01":
+                State = "鏍¢獙鐮侀敊璇�";
+                break;
+            case "02":
+                State = "闀垮害閿欒";
+                break;
+            case "03":
+                State = "鍐橣lash澶辫触閿欒";
+                break;
+            case "FF":
+                State = "鍏朵粬閿欒";
+                break;
+            default:
+                State = "鏈煡閿欒";
+        }
+        return State;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java
new file mode 100644
index 0000000..ee808c0
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java
@@ -0,0 +1,140 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import lombok.Data;
+
+/**
+ * 鏌ヨ浼犳劅鍣ㄦ暟閲�/鏁呴殰
+ *
+ * @author ZZQ
+ * @date 2022/8/1 14:02
+ */
+@Data
+public class A5AtmosphereQuerySensorInfoReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQuerySensorInfoReportInnerFrame> {
+    //璁惧鍦板潃
+    private String deviceAddress;
+    //浼犳劅鍣ㄤ俊鎭�
+    private SensorInfoPackage sensorInfoPackage;
+
+    @Override
+    public A5AtmosphereQuerySensorInfoReportInnerFrame transformFrame(String hex) {
+        if (StrUtil.isBlank(hex) || hex.length() != 100) {
+            return null;
+        }
+        // MQTT閫氫俊鏂瑰紡(1)
+        setConnectType(hex.substring(0, 2));
+        //  鍔熻兘鐮�(1)
+        setFunctionCode(hex.substring(2, 4));
+        //  璐熻嵎闀垮害(2)
+        setPayloadLength(hex.substring(4, 8));
+        //璁惧鍦板潃
+        setDeviceAddress(hex.substring(8, 12));
+        //浼犳劅鍣ㄤ俊鎭�
+        String infoStr = hex.substring(14, hex.length() - 8);
+        SensorInfoPackage sensorInfoPackage = new SensorInfoPackage().transformFrame(infoStr);
+        setSensorInfoPackage(sensorInfoPackage);
+
+        //鏍¢獙
+        setCrc32(hex.substring(hex.length() - 8));
+        //  鏍¢獙CRC32
+        String frame = hex.substring(2, hex.length() - 8);
+        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
+        return this;
+    }
+
+    @Data
+    public static class SensorInfoPackage implements IResponseInnerFrame<SensorInfoPackage> {
+        //  娓╁害鍊�
+        private String temperature;
+        //  婀垮害鍊�
+        private String humidity;
+        //  椋庨��
+        private String windSpeed;
+        //  椋庡悜
+        private String windDirection;
+        //  椋庡姏
+        private String windPower;
+        //  澶ф皵鍘�
+        private String pressure;
+        //  鍏夊己
+        private String lightIntensity;
+        //  鍣煶
+        private String noise;
+        //  PM2.5
+        private String pm25;
+        //  PM10
+        private String pm10;
+        //  鎬绘偓娴绮掔墿锛圱SP锛�
+        private String tsp;
+        //  闆ㄩ噺
+        private String rainfall;
+        //  鐢查啗
+        private String ech2o;
+        //  TVOC
+        private String tvoc;
+        //  浜屾哀鍖栫⒊
+        private String co2;
+        //  SO2浜屾哀鍖栫~鐩稿鍊�
+        private String so2;
+        //  NO2浜屾哀鍖栨爱
+        private String no2;
+        //  CO涓�姘у寲纰�
+        private String co;
+        //  O3鑷哀
+        private String o3;
+        //  F姘熷寲鐗�
+        private String fluoride;
+
+        @Override
+        public SensorInfoPackage transformFrame(String hex) {
+            if (StrUtil.isBlank(hex) || hex.length() != 80) {
+                System.out.println("鏁版嵁鏍¢獙寮傚父锛�");
+                return null;
+            }
+            //  娓╁害
+            setTemperature(hex.substring(2, 4));
+            //  婀垮害
+            setHumidity(hex.substring(6, 8));
+            //  椋庨��
+            setWindSpeed(hex.substring(10, 12));
+            //  椋庡悜
+            setWindDirection(hex.substring(14, 16));
+            //  椋庡姏
+            setWindPower(hex.substring(18, 20));
+            //  澶ф皵鍘�
+            setPressure(hex.substring(22, 24));
+            //  鍏夊己
+            setLightIntensity(hex.substring(26, 28));
+            //  鍣煶
+            setNoise(hex.substring(30, 32));
+            //  PM2.5
+            setPm25(hex.substring(34, 36));
+            //  PM10
+            setPm10(hex.substring(38, 40));
+            //  鎬绘偓娴绮掔墿锛圱SP锛�
+            setTsp(hex.substring(42, 44));
+            //  闆ㄩ噺
+            setRainfall(hex.substring(46, 48));
+            //  鐢查啗
+            setEch2o(hex.substring(50, 52));
+            //  TVOC
+            setTvoc(hex.substring(54, 56));
+            //  浜屾哀鍖栫⒊
+            setCo2(hex.substring(58, 60));
+            //  SO2浜屾哀鍖栫~鐩稿鍊�
+            setSo2(hex.substring(62, 64));
+            //  NO2浜屾哀鍖栨爱
+            setNo2(hex.substring(66, 68));
+            //  CO涓�姘у寲纰�
+            setCo(hex.substring(70, 72));
+            //  O3鑷哀
+            setO3(hex.substring(74, 76));
+            //  F姘熷寲鐗�
+            setFluoride(hex.substring(78, 80));
+            return this;
+        }
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java
new file mode 100644
index 0000000..cec354c
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java
@@ -0,0 +1,43 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import lombok.Data;
+
+/**
+ * 鏌ヨ杞‖浠剁増鏈�
+ *
+ * @author ZZQ
+ * @date 2022/8/1 14:02
+ */
+@Data
+public class A5AtmosphereQueryVersionReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQueryVersionReportInnerFrame> {
+    //璁惧鍦板潃
+    private String deviceAddress;
+
+    @Override
+    public A5AtmosphereQueryVersionReportInnerFrame transformFrame(String hex) {
+        if (StrUtil.isBlank(hex) || hex.length() != 100) {
+            return null;
+        }
+        // MQTT閫氫俊鏂瑰紡(1)
+        setConnectType(hex.substring(0, 2));
+        //  鍔熻兘鐮�(1)
+        setFunctionCode(hex.substring(2, 4));
+        //  璐熻嵎闀垮害(2)
+        setPayloadLength(hex.substring(4, 8));
+        //璁惧鍦板潃
+        setDeviceAddress(hex.substring(8, 12));
+        //
+
+        //鏍¢獙
+        setCrc32(hex.substring(hex.length() - 8));
+        //  鏍¢獙CRC32
+        String frame = hex.substring(2, hex.length() - 8);
+        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
+        return this;
+    }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
index 0b8a3f0..283faf4 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
@@ -16,31 +16,7 @@
 public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame<A5C3OperationReportInnerFrame> {
     //MAC鍦板潃
     private String mac;
-    //鍝嶅簲鐘舵��
-    //        鏁呴殰鐮佺被鍨嬭〃锛�
-    //        1.閫氫俊娴佺▼瓒呮椂
-    //        2.鏃犵數鍘�
-    //        3.鏃犵數娴�
-    //        4.鏃犲姛鐜�
-    //        5.鍏呯數鍔熺巼杩囧皬
-    //        6.婕忕數
-    //        7.璁惧娓╁害杩囬珮
-    //        8.璁惧娓╁害杩囦綆
-    //        9.鍏呯數瓒呮椂锛堝厖鐢靛姛鐜囪繃灏忓鑷冲厖鐢垫椂闂磋秴闀匡級
-    //        10.鏃犵綉缁�
-    //        11.杩炴帴涓绘満瓒呮椂
-    //        12.杩炴帴鏈嶅姟鍣ㄨ秴鏃�
-    //        13.瑙︽懜灞忔棤鍝嶅簲
-    //        14.鏇存柊鍐欏叆Flash澶辫触
-    //        15.鍐欏叆EEProm澶辫触
-    //        16.甯傜數鐢靛帇杩囬珮璀﹀憡
-    //        17.甯傜數鐢靛帇杩囧簳璀﹀憡
-    //        18.鍦伴攣鏁呴殰锛堝綋鍓嶄负瑙i攣鐘舵�侊紝涓嶈兘閿佷笂锛�
-    //        19.鍦伴攣鏁呴殰锛堝綋鍓嶄负閿佷笂鐘舵�侊紝涓嶈兘瑙i攣锛�
-    //        20.鍏呯數鍙�1鏁呴殰(涓嶈兘浣跨敤锛�
-    //        21.鍏呯數鍙�2鏁呴殰(涓嶈兘浣跨敤锛夛紙鏆備笉鐢級
-    //        22. 鍏呯數鍙�1鏃犳硶涓庤溅鏈洪�氳
-    //        23. 鍏呯數鍙�2鏃犳硶涓庤溅鏈洪�氳锛堟殏涓嶇敤锛�
+
     private String state;
 
     @Override
@@ -73,74 +49,19 @@
                 State = "鎿嶄綔鎴愬姛";
                 break;
             case "01":
-                State = "閫氫俊娴佺▼瓒呮椂";
+                State = "鏍¢獙鐮侀敊璇�";
                 break;
             case "02":
-                State = "鏃犵數鍘�";
+                State = "闀垮害閿欒";
                 break;
             case "03":
-                State = "鏃犵數娴�";
+                State = "鍐橣lash澶辫触閿欒";
                 break;
-            case "04":
-                State = "鏃犲姛鐜�";
+            case "FF":
+                State = "鍏朵粬閿欒";
                 break;
-            case "05":
-                State = "鍏呯數鍔熺巼杩囧皬";
-                break;
-            case "06":
-                State = "婕忕數";
-                break;
-            case "07":
-                State = "璁惧娓╁害杩囬珮";
-                break;
-            case "08":
-                State = "璁惧娓╁害杩囦綆";
-                break;
-            case "09":
-                State = "鍏呯數瓒呮椂锛堝厖鐢靛姛鐜囪繃灏忓鑷冲厖鐢垫椂闂磋秴闀匡級";
-                break;
-            case "10":
-                State = "鏃犵綉缁�";
-                break;
-            case "11":
-                State = "杩炴帴涓绘満瓒呮椂";
-                break;
-            case "12":
-                State = "杩炴帴鏈嶅姟鍣ㄨ秴鏃�";
-                break;
-            case "13":
-                State = "瑙︽懜灞忔棤鍝嶅簲";
-                break;
-            case "14":
-                State = "鏇存柊鍐欏叆Flash澶辫触";
-                break;
-            case "15":
-                State = "鍐欏叆EEProm澶辫触";
-                break;
-            case "16":
-                State = "甯傜數鐢靛帇杩囬珮璀﹀憡";
-                break;
-            case "17":
-                State = "甯傜數鐢靛帇杩囧簳璀﹀憡";
-                break;
-            case "18":
-                State = "鍦伴攣鏁呴殰锛堝綋鍓嶄负瑙i攣鐘舵�侊紝涓嶈兘閿佷笂锛�";
-                break;
-            case "19":
-                State = "鍦伴攣鏁呴殰锛堝綋鍓嶄负閿佷笂鐘舵�侊紝涓嶈兘瑙i攣锛�";
-                break;
-            case "20":
-                State = "鍏呯數鍙�1鏁呴殰(涓嶈兘浣跨敤锛�";
-                break;
-            case "21":
-                State = "鍏呯數鍙�2鏁呴殰(涓嶈兘浣跨敤锛夛紙鏆備笉鐢級";
-                break;
-            case "22":
-                State = "鍏呯數鍙�1鏃犳硶涓庤溅鏈洪�氳";
-                break;
-            case "23":
-                State = "鍏呯數鍙�2鏃犳硶涓庤溅鏈洪�氳锛堟殏涓嶇敤锛�";
             default:
+                State = "鏈煡閿欒";
         }
         return State;
     }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java
similarity index 85%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java
index 119eac9..88e82b0 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java
@@ -11,14 +11,14 @@
  * @Version 1.0
  */
 
-public class AirDataReqInnerFrame implements IRequestInnerFrame {
+public class AtmosphereHeartBeatReqInnerFrame implements IRequestInnerFrame {
 
-//    private final String payload;
+//    private String payload;
 //    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
 //    private final String payloadLength;
 
 
-    public AirDataReqInnerFrame() {
+    public AtmosphereHeartBeatReqInnerFrame() {
     }
 
     @Override
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataNewReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java
similarity index 89%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataNewReqInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java
index aaf2cf3..e505b8d 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataNewReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java
@@ -10,14 +10,14 @@
  * @Date 2022/4/24
  */
 
-public class AirDataNewReqInnerFrame implements IRequestInnerFrame {
+public class AtmosphereNewReqInnerFrame implements IRequestInnerFrame {
 
 //    private final String payload;
 //    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
 //    private final String payloadLength;
 
 
-    public AirDataNewReqInnerFrame() {
+    public AtmosphereNewReqInnerFrame() {
     }
 
     @Override
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
similarity index 61%
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
index 119eac9..62b1a3b 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
@@ -6,28 +6,18 @@
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
 
 /**
- * @Author liuhaonan
- * @Date 2022/2/15 11:07
- * @Version 1.0
+ * 鏌ヨ澶ф皵璁惧蹇冭烦鍖呮椂闂�
+ *
+ * @author ZZQ
+ * @date 2022/7/29 15:47
  */
-
-public class AirDataReqInnerFrame implements IRequestInnerFrame {
-
-//    private final String payload;
-//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
-//    private final String payloadLength;
-
-
-    public AirDataReqInnerFrame() {
-    }
-
+public class AtmosphereQueryHeartBeatTimeReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
-        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
+        String functionCode = AtmoFunctionCode.QueryHeartBeatTime.getCode();
         String payloadLength = "0002";
         String payload = "FFFF";
         String frame = functionCode + payloadLength + payload;
         return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
     }
-
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
similarity index 61%
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
index 119eac9..b4a7daa 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
@@ -6,28 +6,18 @@
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
 
 /**
- * @Author liuhaonan
- * @Date 2022/2/15 11:07
- * @Version 1.0
+ * 鏌ヨ浼犳劅鍣ㄦ暟閲�/鏁呴殰
+ *
+ * @author ZZQ
+ * @date 2022/8/1 10:01
  */
-
-public class AirDataReqInnerFrame implements IRequestInnerFrame {
-
-//    private final String payload;
-//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
-//    private final String payloadLength;
-
-
-    public AirDataReqInnerFrame() {
-    }
-
+public class AtmosphereQuerySensorInfoReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
-        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
+        String functionCode = AtmoFunctionCode.QuerySensorInfo.getCode();
         String payloadLength = "0002";
         String payload = "FFFF";
         String frame = functionCode + payloadLength + payload;
         return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
     }
-
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
similarity index 62%
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
index 119eac9..97132e0 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
@@ -6,28 +6,18 @@
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
 
 /**
- * @Author liuhaonan
- * @Date 2022/2/15 11:07
- * @Version 1.0
+ * 鏌ヨ澶ф皵璁惧杞‖浠剁増鏈�
+ *
+ * @author ZZQ
+ * @date 2022/8/1 10:03
  */
-
-public class AirDataReqInnerFrame implements IRequestInnerFrame {
-
-//    private final String payload;
-//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
-//    private final String payloadLength;
-
-
-    public AirDataReqInnerFrame() {
-    }
-
+public class AtmosphereQueryVersionReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
-        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
+        String functionCode = AtmoFunctionCode.QueryVersion.getCode();
         String payloadLength = "0002";
         String payload = "FFFF";
         String frame = functionCode + payloadLength + payload;
         return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
     }
-
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
similarity index 62%
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
index 119eac9..5235b3f 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
@@ -6,28 +6,18 @@
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
 
 /**
- * @Author liuhaonan
- * @Date 2022/2/15 11:07
- * @Version 1.0
+ * 澶ф皵璁惧杞噸鍚�
+ *
+ * @author ZZQ
+ * @date 2022/7/29 15:47
  */
-
-public class AirDataReqInnerFrame implements IRequestInnerFrame {
-
-//    private final String payload;
-//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
-//    private final String payloadLength;
-
-
-    public AirDataReqInnerFrame() {
-    }
-
+public class AtmosphereRebootReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
-        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
+        String functionCode = AtmoFunctionCode.Reboot.getCode();
         String payloadLength = "0002";
         String payload = "FFFF";
         String frame = functionCode + payloadLength + payload;
         return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
     }
-
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java
new file mode 100644
index 0000000..cd5c492
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java
@@ -0,0 +1,41 @@
+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;
+
+/**
+ * 鏌ヨ澶ф皵璁惧蹇冭烦鍖呮椂闂�
+ *
+ * @author ZZQ
+ * @date 2022/7/29 15:47
+ */
+public class AtmosphereSetHeartBeatTimeReqInnerFrame implements IRequestInnerFrame {
+    private String payload;
+
+    public AtmosphereSetHeartBeatTimeReqInnerFrame(int time) {
+        String data = Integer.toHexString(time);
+        switch (data.length()) {
+            case 1:
+                data = "000" + data;
+                break;
+            case 2:
+                data = "00" + data;
+                break;
+            case 3:
+                data = "0" + data;
+                break;
+            default:
+        }
+        payload = "FFFF" + data;
+    }
+
+    @Override
+    public String getEncodeFrame() {
+        String functionCode = AtmoFunctionCode.SettingHeartBeatTime.getCode();
+        String payloadLength = "0004";
+        String frame = functionCode + payloadLength + payload;
+        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
index a1de561..e077f5d 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
@@ -11,10 +11,50 @@
     QueryHeartBeat("01"),
     //  鏌ヨ蹇冭烦鍖呮椂闂�
     QueryHeartBeatTime("02"),
+    //  鏌ヨ浼犳劅鍣ㄦ暟閲�/鏁呴殰
+    QuerySensorInfo("03"),
+    //  鏌ヨ杞‖浠剁増鏈�
+    QueryVersion("04"),
     //  閲嶅惎
     Reboot("10"),
     //  璁剧疆蹇冭烦鍖呴棿闅�
     SettingHeartBeatTime("11"),
+    //璁剧疆鍦板潃
+    SettingAddress("12"),
+    //浼犳劅鍣ㄥ姛鑳藉紑鍏�
+    SensorSwitch("13"),
+    //璁剧疆鏁版嵁淇鍊�-娓╁害
+    Setting_Data_Correction_temperature("14"),
+    //璁剧疆鏁版嵁淇鍊�-婀垮害
+    Setting_Data_Correction_humidity("15"),
+    //璁剧疆鏁版嵁淇鍊�-椋庨��
+    Setting_Data_Correction_windSpeed("16"),
+    //璁剧疆鏁版嵁淇鍊�-椋庡悜
+    Setting_Data_Correction_windDirection("17"),
+    //璁剧疆鏁版嵁淇鍊�-姘斿帇
+    Setting_Data_Correction_airPressure("18"),
+    //璁剧疆鏁版嵁淇鍊�-鍏夊己
+    Setting_Data_Correction_lightIntensity("19"),
+    //璁剧疆鏁版嵁淇鍊�-鍣煶
+    Setting_Data_Correction_noise("1A"),
+    //璁剧疆鏁版嵁淇鍊�-PM2.5
+    Setting_Data_Correction_PM2_5("1B"),
+    //璁剧疆鏁版嵁淇鍊�-PM10
+    Setting_Data_Correction_PM10("1C"),
+    //璁剧疆鏁版嵁淇鍊�-闆ㄩ噺
+    Setting_Data_Correction_rainfall("1D"),
+    //璁剧疆鏁版嵁淇鍊�-SO2浜屾哀鍖栫~
+    Setting_Data_Correction_SO2("1E"),
+    //璁剧疆鏁版嵁淇鍊�-NO2浜屾哀鍖栨爱
+    Setting_Data_Correction_NO2("1F"),
+    //璁剧疆鏁版嵁淇鍊�-CO涓�姘у寲纰�
+    Setting_Data_Correction_CO("20"),
+    //璁剧疆鏁版嵁淇鍊�-O3鑷哀
+    Setting_Data_Correction_O3("21"),
+    //璁剧疆鏁版嵁淇鍊�-F姘熷寲鐗�
+    Setting_Data_Correction_F("22"),
+
+
     //  澶ф皵璁惧蹇冭烦鍖呭瓨鍌�
     AIR_HEARTBEAT("air_heartbeat:air_heartbeat"),
     //  澶ф皵璁惧蹇冭烦鍖呭瓨鍌�(璁惧鐘舵��))
@@ -37,4 +77,13 @@
     AtmoFunctionCode(String code) {
         this.code = code;
     }
+
+    public static AtmoFunctionCode getByCode(String code) {
+        for (AtmoFunctionCode atmoFunctionCode : values()) {
+            if (atmoFunctionCode.getCode().equals(code)) {
+                return atmoFunctionCode;
+            }
+        }
+        return null;
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
index bac6106..15e84d3 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
@@ -94,6 +94,7 @@
 
     }
 
+
     /**
      * +
      * 鏍规嵁鐏潌id鏌ヨ澶ф皵鏁版嵁
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
index 268fc5d..0cc94e5 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
@@ -5,7 +5,16 @@
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.object.BaseConditionVO;
 import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.common.util.SpringContextHolder;
+import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartBeatTimeReportInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereOperationReportInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereQuerySensorInfoReportInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.*;
+import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
+import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
 import com.sandu.ximon.admin.security.SecurityUtils;
 import com.sandu.ximon.admin.utils.RedisUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
@@ -98,7 +107,7 @@
         /**
          * 鍒犻櫎澶ф皵璁惧 鏃ュ織璁板綍寮�濮�
          */
-        List<String> listCode=new ArrayList<>(1);
+        List<String> listCode = new ArrayList<>(1);
         listCode.add(airEquipment.getMac());
         String content = "{璁惧code锛�" + airEquipment.getMac() + "}";
 
@@ -132,4 +141,149 @@
         }
         return equipmentInfo;
     }
+
+    /**
+     * 鏌ヨ澶ф皵璁惧蹇冭烦鍖呮椂闂�
+     */
+    public String QueryHeartBeatTime(String mac) {
+        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
+                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
+
+        if (airEquipment == null) {
+            throw new BusinessException("澶ф皵璁惧涓嶅瓨鍦紒");
+        }
+
+        AtmosphereQueryHeartBeatTimeReqInnerFrame atmosphereQueryHeartBeatTimeReqInnerFrame = new AtmosphereQueryHeartBeatTimeReqInnerFrame();
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryHeartBeatTimeReqInnerFrame);
+        System.out.println(a5Frame + "          --------a5Frame");
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
+        System.out.println(commonFrame + "         -----------commonFrame");
+
+//        FEA504000AFE020002FFFF014062EC          --------a5Frame
+//        FEA584000CFE020004FFFF003CB081260CCC1C105D         -----------commonFrame
+        A5AtmosphereHeartBeatTimeReportInnerFrame a5AtmosphereHeartBeatTimeReportInnerFrame
+                = new A5AtmosphereHeartBeatTimeReportInnerFrame().transformFrame(commonFrame.getPayload());
+
+        if (a5AtmosphereHeartBeatTimeReportInnerFrame != null && a5AtmosphereHeartBeatTimeReportInnerFrame.isValidate()) {
+            return "璇ュぇ姘旇澶囧績璺冲寘闂撮殧鏃堕棿涓猴細" + a5AtmosphereHeartBeatTimeReportInnerFrame.getIntervalTime() + "s";
+        } else {
+            throw new BusinessException("鏁版嵁鏍¢獙寮傚父锛�");
+        }
+    }
+
+    /**
+     * 璁剧疆澶ф皵璁惧蹇冭烦鍖呴棿闅旀椂闂�
+     *
+     * @param mac
+     * @param time
+     */
+    public String setHeartBeatTime(String mac, Integer time) {
+        if (time < 30) {
+            throw new BusinessException("蹇冭烦鍖呴棿闅旀椂闂翠笉鑳藉皯浜�30s锛�");
+        }
+        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
+                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
+        if (airEquipment == null) {
+            throw new BusinessException("澶ф皵璁惧涓嶅瓨鍦紒");
+        }
+
+        AtmosphereSetHeartBeatTimeReqInnerFrame atmosphereSetHeartBeatTimeReqInnerFrame = new AtmosphereSetHeartBeatTimeReqInnerFrame(time);
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereSetHeartBeatTimeReqInnerFrame);
+        System.out.println(a5Frame + "          --------a5Frame");
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
+        System.out.println(commonFrame + "         -----------commonFrame");
+
+        //FEA584000BFE110003FFFF00464116EC58FC0C8F
+        A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame
+                = new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload());
+        if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) {
+            return a5AtmosphereOperationReportInnerFrame.getState();
+        } else {
+            throw new BusinessException("鏁版嵁鏍¢獙寮傚父锛�");
+        }
+    }
+
+    /**
+     * 鏌ヨ浼犳劅鍣ㄦ暟閲�/鏁呴殰
+     *
+     * @param mac
+     * @return
+     */
+    public A5AtmosphereQuerySensorInfoReportInnerFrame.SensorInfoPackage QuerySensorInfo(String mac) {
+        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
+                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
+
+        if (airEquipment == null) {
+            throw new BusinessException("澶ф皵璁惧涓嶅瓨鍦紒");
+        }
+
+        AtmosphereQuerySensorInfoReqInnerFrame atmosphereQuerySensorInfoReqInnerFrame = new AtmosphereQuerySensorInfoReqInnerFrame();
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQuerySensorInfoReqInnerFrame);
+        System.out.println(a5Frame + "          --------a5Frame");
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
+        System.out.println(commonFrame + "         -----------commonFrame");
+
+        A5AtmosphereQuerySensorInfoReportInnerFrame atmosphereQuerySensorInfoReportInnerFrame
+                = new A5AtmosphereQuerySensorInfoReportInnerFrame().transformFrame(commonFrame.getPayload());
+
+        if (atmosphereQuerySensorInfoReportInnerFrame != null && atmosphereQuerySensorInfoReportInnerFrame.isValidate()) {
+            return atmosphereQuerySensorInfoReportInnerFrame.getSensorInfoPackage();
+        } else {
+            throw new BusinessException("鏁版嵁鏍¢獙寮傚父锛�");
+        }
+    }
+
+    /**
+     * 鏌ヨ杞‖浠剁増鏈�
+     *
+     * @param mac
+     * @return
+     */
+    public void QueryVersion(String mac) {
+        //TODO
+        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
+                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
+
+        if (airEquipment == null) {
+            throw new BusinessException("澶ф皵璁惧涓嶅瓨鍦紒");
+        }
+
+        AtmosphereQueryVersionReqInnerFrame atmosphereQueryVersionReqInnerFrame = new AtmosphereQueryVersionReqInnerFrame();
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryVersionReqInnerFrame);
+        System.out.println(a5Frame + "          --------a5Frame");
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
+        System.out.println(commonFrame + "         -----------commonFrame");
+
+//        FEA504000AFE040002FFFF8E00974C          --------a5Frame
+//        FEA584000BFE040003FFFFFF38586A49EE3EAF62         -----------commonFrame
+    }
+
+    /**
+     * 杞噸鍚�
+     *
+     * @param mac
+     * @return
+     */
+    public String Reboot(String mac) {
+        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
+                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
+        if (airEquipment == null) {
+            throw new BusinessException("澶ф皵璁惧涓嶅瓨鍦紒");
+        }
+
+        AtmosphereRebootReqInnerFrame atmosphereRebootReqInnerFrame = new AtmosphereRebootReqInnerFrame();
+        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereRebootReqInnerFrame);
+        System.out.println(a5Frame + "          --------a5Frame");
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
+        System.out.println(commonFrame + "         -----------commonFrame");
+
+        A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame =
+                new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload());
+
+        if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) {
+            return a5AtmosphereOperationReportInnerFrame.getState();
+        } else {
+            throw new BusinessException("鏁版嵁鏍¢獙寮傚父锛�");
+        }
+    }
 }

--
Gitblit v1.9.3