From f8555ffb6f16017b62c48d5b90e3716029eef6ff Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期三, 08 十二月 2021 11:45:13 +0800
Subject: [PATCH] 通信协议完善

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1DeviceMacRespInnerFrame.java       |   36 ++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/topic/ICustomizeTopic.java                           |   21 ++-
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightHeartbeatRespInnerFrame.java  |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A5LightDataEnum.java                           |    5 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java            |    5 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightHeartbeatReqInnerFrame.java    |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/A2Frame.java                                        |   49 ++++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonReportMessage.java                         |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/WrapResponseCommonFrame.java                     |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/FrameBuilder.java                                   |    7 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightBrightnessReqInnerFrame.java   |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A1TernaryCodeReqInnerFrame.java       |   31 +++++
 ximon-admin/src/test/java/com/sandu/ximon/admin/BaseTopicTests.java                                                   |  111 +++++++++++++++--
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightResetReqInnerFrame.java        |    6 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightBrightnessRespInnerFrame.java |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java                           |   27 +---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java                             |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1TernaryCodeRespInnerFrame.java     |   28 ++++
 18 files changed, 291 insertions(+), 57 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java
index be5dc73..d5741d1 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/AmqpMessageListener.java
@@ -52,8 +52,8 @@
             String topic = message.getStringProperty("topic");
             String messageId = message.getStringProperty("messageId");
 
-            log.info("鏀跺埌璁㈤槄" + topic + "," + messageId);
-            log.info(content);
+//            log.info("鏀跺埌璁㈤槄" + topic + "," + messageId);
+//            log.info(content);
 
             if (null != map.get("status")) {
                 // 涓婁笅绾夸笂鎶ュ鐞�
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/A2Frame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/A2Frame.java
new file mode 100644
index 0000000..808da0b
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/A2Frame.java
@@ -0,0 +1,49 @@
+package com.sandu.ximon.admin.manager.iot.frame;
+
+import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.FunctionCodeEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/6 13:54
+ * A1 鍔熻兘灏佽鐨勫抚
+ */
+public class A2Frame extends BaseRequestFrame implements IRequestFrame {
+
+    private String orderType;
+    private String payloadLength;
+    private String payload;
+
+    public A2Frame(String orderType, IRequestInnerFrame innerFrame) {
+        this.orderType = orderType;
+        this.payloadLength = SupplementUtils.suppleZero(Integer.toHexString((innerFrame.getEncodeFrame().length() / 2)).toUpperCase(), 4);
+        this.payload = innerFrame.getEncodeFrame();
+    }
+
+    @Override
+    public String getConnectType() {
+        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode();
+    }
+
+    @Override
+    public String getFunctionCode() {
+        return FunctionCodeEnum.MAIN_BOARD_CONTROL.getCode();
+    }
+
+    @Override
+    public String getOrderType() {
+        return orderType;
+    }
+
+    @Override
+    public String getPayloadLength() {
+        return payloadLength;
+    }
+
+    @Override
+    public String getPayload() {
+        return payload;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/FrameBuilder.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/FrameBuilder.java
index 933c8f1..726f0b0 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/FrameBuilder.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/FrameBuilder.java
@@ -23,6 +23,9 @@
     public static FrameBuilder builderA1() {
         return new FrameBuilder(FunctionCodeEnum.MAIN_BOARD_CONFIG.getCode());
     }
+    public static FrameBuilder builderA2() {
+        return new FrameBuilder(FunctionCodeEnum.MAIN_BOARD_CONTROL.getCode());
+    }
 
     public static FrameBuilder builderA5() {
         return new FrameBuilder(FunctionCodeEnum.DATA_TRANSPORT_DATA.getCode());
@@ -44,7 +47,9 @@
         }
         if (FunctionCodeEnum.MAIN_BOARD_CONFIG.getCode().equals(functionCode)) {
             iRequestFrame = new A1Frame(orderType, innerFrame);
-        } else if (FunctionCodeEnum.DATA_TRANSPORT_DATA.getCode().equals(functionCode)) {
+        } else if (FunctionCodeEnum.MAIN_BOARD_CONTROL.getCode().equals(functionCode)) {
+            iRequestFrame = new A2Frame(orderType, innerFrame);
+        }  else if (FunctionCodeEnum.DATA_TRANSPORT_DATA.getCode().equals(functionCode)) {
             iRequestFrame = new A5Frame(orderType, innerFrame);
         } else {
             throw new RuntimeException("鎵句笉鍒扮鍚堟潯浠剁殑璇锋眰甯�");
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A1TernaryCodeReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A1TernaryCodeReqInnerFrame.java
new file mode 100644
index 0000000..2a2bd56
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A1TernaryCodeReqInnerFrame.java
@@ -0,0 +1,31 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.request;
+
+import cn.hutool.core.util.HexUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/6 14:46
+ * A1->0A/0B/0C
+ * 璁剧疆闃块噷浜戜笁鍏冪爜 ProductKey DeviceName DeviceSecret
+ */
+public class A1TernaryCodeReqInnerFrame implements IRequestInnerFrame {
+
+    private final String ternaryCodeHex;
+
+    /**
+     * @param ternaryCode ProductKey/DeviceName/DeviceSecret
+     */
+    public A1TernaryCodeReqInnerFrame(String ternaryCode) {
+        ternaryCodeHex = HexUtil.encodeHexStr(ternaryCode);
+    }
+
+    @Override
+    public String getEncodeFrame() {
+        if (this.ternaryCodeHex.length() % 2 != 0) {
+            return "0" + ternaryCodeHex;
+        }
+        return ternaryCodeHex;
+    }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightBrightnessReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightBrightnessReqInnerFrame.java
similarity index 90%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightBrightnessReqInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightBrightnessReqInnerFrame.java
index 2927a0d..07b0a01 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightBrightnessReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightBrightnessReqInnerFrame.java
@@ -14,14 +14,14 @@
  * 0x00锛氬叧鐏�
  * 鍏跺畠锛氬紑鐏�&浜害鍊�"
  */
-public class LightBrightnessReqInnerFrame implements IRequestInnerFrame {
+public class A5LightBrightnessReqInnerFrame implements IRequestInnerFrame {
 
     private final String payload;
 
     /**
      * @param lightLevel 浜害绛夌骇 [0,100]
      */
-    public LightBrightnessReqInnerFrame(Integer lightLevel) {
+    public A5LightBrightnessReqInnerFrame(Integer lightLevel) {
         String destinationAddress = "FFFF";
         //  灏嗘暣鍨嬩寒搴﹁浆鎹负Hex
         if (lightLevel < 0) {
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightHeartbeatReqInnerFrame.java
similarity index 91%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightHeartbeatReqInnerFrame.java
index fa2545f..0c58d07 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightHeartbeatReqInnerFrame.java
@@ -10,7 +10,7 @@
  * @date 2021/12/6 18:16
  * A5->01->02 璇诲績璺冲寘
  */
-public class LightHeartbeatReqInnerFrame implements IRequestInnerFrame {
+public class A5LightHeartbeatReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
         String functionCode = A5LightDataEnum.ReadHeartBeat.getCode();
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightResetReqInnerFrame.java
similarity index 80%
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java
copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightResetReqInnerFrame.java
index fa2545f..1d5bdb8 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightResetReqInnerFrame.java
@@ -8,12 +8,12 @@
 /**
  * @author chenjiantian
  * @date 2021/12/6 18:16
- * A5->01->02 璇诲績璺冲寘
+ * A5->01->25 娓呴櫎鍗曠伅绱鏁版嵁
  */
-public class LightHeartbeatReqInnerFrame implements IRequestInnerFrame {
+public class A5LightResetReqInnerFrame implements IRequestInnerFrame {
     @Override
     public String getEncodeFrame() {
-        String functionCode = A5LightDataEnum.ReadHeartBeat.getCode();
+        String functionCode = A5LightDataEnum.LightReset.getCode();
         String payloadLength = "0002";
         String payload = "FFFF";
         String frame = functionCode + payloadLength + payload;
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1DeviceMacRespInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1DeviceMacRespInnerFrame.java
new file mode 100644
index 0000000..3b0475b
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1DeviceMacRespInnerFrame.java
@@ -0,0 +1,36 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.response;
+
+import cn.hutool.core.util.HexUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/6 14:46
+ * A1->0x89
+ * 0x89锛氳鍙栬姱鐗囧敮涓�璁惧鍦板潃搴旂瓟
+ * 12瀛楄妭		1瀛楄妭	瑙i噴锛氳澶囩被鍨�00浠h〃MQTT涓插彛锛�01浠h〃CAT1
+ * 纭欢MAC		璁惧绫诲瀷
+ */
+@Data
+@ToString(callSuper = true)
+public class A1DeviceMacRespInnerFrame extends BaseResponseInnerFrame<A1DeviceMacRespInnerFrame> {
+
+    /**
+     * 12瀛楄妭 纭欢MAC
+     */
+    private String mac;
+
+    /**
+     * 1瀛楄妭 璁惧绫诲瀷 璁惧绫诲瀷00浠h〃MQTT涓插彛锛�01浠h〃CAT1
+     */
+    private String type;
+
+    @Override
+    public A1DeviceMacRespInnerFrame transformFrame(String payload) {
+        mac = payload.substring(0, 24);
+        type = payload.substring(24);
+        return this;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1TernaryCodeRespInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1TernaryCodeRespInnerFrame.java
new file mode 100644
index 0000000..691b71e
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A1TernaryCodeRespInnerFrame.java
@@ -0,0 +1,28 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.response;
+
+import cn.hutool.core.util.HexUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/6 14:46
+ * A1->0A/0B/0C
+ * 璁剧疆闃块噷浜戜笁鍏冪爜 ProductKey DeviceName DeviceSecret 鍝嶅簲鍐呭
+ */
+@Data
+@ToString(callSuper = true)
+public class A1TernaryCodeRespInnerFrame extends BaseResponseInnerFrame<A1TernaryCodeRespInnerFrame> {
+
+    /**
+     * 涓夊厓鐮�
+     */
+    private String ternaryCode;
+
+    @Override
+    public A1TernaryCodeRespInnerFrame transformFrame(String hex) {
+        ternaryCode = HexUtil.decodeHexStr(hex);
+        return this;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightBrightnessRespInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightBrightnessRespInnerFrame.java
similarity index 87%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightBrightnessRespInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightBrightnessRespInnerFrame.java
index 9af4301..3868888 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightBrightnessRespInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightBrightnessRespInnerFrame.java
@@ -12,7 +12,7 @@
  */
 @Data
 @ToString(callSuper = true)
-public class LightBrightnessRespInnerFrame extends BaseResponseInnerFrame<LightBrightnessRespInnerFrame> {
+public class A5LightBrightnessRespInnerFrame extends BaseResponseInnerFrame<A5LightBrightnessRespInnerFrame> {
 
     /**
      * 鐩爣鍦板潃 2
@@ -24,7 +24,7 @@
     private String responseStatus;
 
     @Override
-    public LightBrightnessRespInnerFrame transformFrame(String hex) {
+    public A5LightBrightnessRespInnerFrame transformFrame(String hex) {
         if (hex == null || hex.length() != 22) {
             return null;
         }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightHeartbeatRespInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightHeartbeatRespInnerFrame.java
similarity index 95%
rename from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightHeartbeatRespInnerFrame.java
rename to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightHeartbeatRespInnerFrame.java
index 73e4d2d..2273818 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightHeartbeatRespInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightHeartbeatRespInnerFrame.java
@@ -13,7 +13,7 @@
  */
 @Data
 @ToString(callSuper = true)
-public class LightHeartbeatRespInnerFrame extends BaseResponseInnerFrame<LightHeartbeatRespInnerFrame> {
+public class A5LightHeartbeatRespInnerFrame extends BaseResponseInnerFrame<A5LightHeartbeatRespInnerFrame> {
 
     //  鐩爣鍦板潃    2
     private String destinationAddress;
@@ -23,7 +23,7 @@
     private String originFrame;
 
     @Override
-    public LightHeartbeatRespInnerFrame transformFrame(String hex) {
+    public A5LightHeartbeatRespInnerFrame transformFrame(String hex) {
         //  闀垮害涓嶄竴鑷存椂锛岃繑鍥瀗ull
         if (hex == null || hex.length() != 116) {
             return null;
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
index d1f2407..6dc3ec0 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -23,22 +23,6 @@
 public abstract class BaseInvokeSyncService implements IInvoke, IBaseTopic, ICustomizeTopic {
 
     /**
-     * 鑾峰彇浜у搧鍚�
-     *
-     * @return 浜у搧鍚�
-     */
-    public abstract String getProductKey();
-
-    /**
-     * 鍙戦�乺rpc 璇锋眰
-     *
-     * @param deviceName    璁惧鍚�
-     * @param iRequestFrame 缂栫爜甯�
-     * @return 杩斿洖鐨勮В鐮佸抚瀹炰綋绫�
-     */
-    public abstract CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame);
-
-    /**
      * 鍙戦�乺rpc 璇锋眰
      *
      * @param deviceName    璁惧鍚�
@@ -134,8 +118,15 @@
         return null;
     }
 
-    @Override
-    public InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param) {
+     /**
+     * 璋冪敤鑷畾涔塼opic
+     * https://help.aliyun.com/document_detail/69584.htm?spm=a2c4g.11186623.0.0.25b33982bSQSom#reference-snk-mrz-wdb
+     *
+     * @param deviceName 璁惧鍚�
+     * @param param      鍙傛暟
+     * @return 璁惧杩斿洖鐨勭粨鏋�
+     */
+    protected InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param) {
         // 濉厖鏈嶅姟璋冪敤鐨勫弬鏁�
         InvokeThingServiceRequest request = new InvokeThingServiceRequest();
         // 璁惧璇佷功涔媝roductKey
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonReportMessage.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonReportMessage.java
index 2272686..62cd725 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonReportMessage.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonReportMessage.java
@@ -5,7 +5,7 @@
 /**
  * @author chenjiantian
  * @date 2021/12/3 17:27
- * 璁惧涓婃姤娑堟伅瀹炰綋绫�
+ * amqp娑堟伅瀹炰綋绫�
  */
 @Data
 public class CommonReportMessage {
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/WrapResponseCommonFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/WrapResponseCommonFrame.java
index 0785e7c..2384c05 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/WrapResponseCommonFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/WrapResponseCommonFrame.java
@@ -13,6 +13,6 @@
 @ToString(callSuper = true)
 public class WrapResponseCommonFrame<T extends BaseResponseInnerFrame<T>> extends CommonFrame {
 
-    private T responseTransform;
+    private T responseInnerFrame;
 
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A5LightDataEnum.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A5LightDataEnum.java
index dc20fdf..4c8d23b 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A5LightDataEnum.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A5LightDataEnum.java
@@ -12,7 +12,10 @@
     //  瀹氭椂鎺у埗
     TimingLightControl("03"),
     //  鍏夋劅鎺у埗
-    LightSensorControl("04");
+    LightSensorControl("04"),
+
+    // 娓呴櫎鍗曠伅绱鏁版嵁
+    LightReset("25");
 
     A5LightDataEnum(String code) {
         this.code = code;
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java
index 8a03867..617cfb2 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java
@@ -53,10 +53,13 @@
     @Override
     public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz) {
         CommonFrame commonFrame = sendRRPC(deviceName, iRequestFrame);
+        if (commonFrame == null) {
+            throw new BusinessException("rrpc璇锋眰澶辫触");
+        }
         WrapResponseCommonFrame<T> responseCommonFrame = new WrapResponseCommonFrame<>();
         BeanUtils.copyProperties(commonFrame, responseCommonFrame);
         try {
-            responseCommonFrame.setResponseTransform(clz.newInstance().transformFrame(responseCommonFrame.getPayload()));
+            responseCommonFrame.setResponseInnerFrame(clz.newInstance().transformFrame(responseCommonFrame.getPayload()));
         } catch (InstantiationException | IllegalAccessException e) {
             throw new BusinessException(String.format("鎵句笉鍒�%s鐨勬瀯閫犲嚱鏁�", clz.getName()));
         }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/topic/ICustomizeTopic.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/topic/ICustomizeTopic.java
index 6e16158..882ec0e 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/topic/ICustomizeTopic.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/topic/ICustomizeTopic.java
@@ -1,6 +1,8 @@
 package com.sandu.ximon.admin.manager.iot.rrpc.topic;
 
 import com.aliyuncs.iot.model.v20180120.InvokeThingServiceResponse;
+import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
 
 /**
@@ -11,11 +13,18 @@
 public interface ICustomizeTopic {
 
     /**
-     * 璋冪敤鑷畾涔塼opic
-     * https://help.aliyun.com/document_detail/69584.htm?spm=a2c4g.11186623.0.0.25b33982bSQSom#reference-snk-mrz-wdb
-     * @param deviceName 璁惧鍚�
-     * @param param 鍙傛暟
-     * @return 璁惧杩斿洖鐨勭粨鏋�
+     * 鑾峰彇浜у搧鍚�
+     *
+     * @return 浜у搧鍚�
      */
-    InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param);
+    String getProductKey();
+
+    /**
+     * 鍙戦�乺rpc 璇锋眰
+     *
+     * @param deviceName    璁惧鍚�
+     * @param iRequestFrame 缂栫爜甯�
+     * @return 杩斿洖鐨勮В鐮佸抚瀹炰綋绫�
+     */
+    CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame);
 }
diff --git a/ximon-admin/src/test/java/com/sandu/ximon/admin/BaseTopicTests.java b/ximon-admin/src/test/java/com/sandu/ximon/admin/BaseTopicTests.java
index 8ef4e5c..4ba3f59 100644
--- a/ximon-admin/src/test/java/com/sandu/ximon/admin/BaseTopicTests.java
+++ b/ximon-admin/src/test/java/com/sandu/ximon/admin/BaseTopicTests.java
@@ -1,40 +1,44 @@
 package com.sandu.ximon.admin;
 
 import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
+import com.aliyuncs.iot.model.v20180120.RegisterDeviceResponse;
+import com.sandu.common.execption.BusinessException;
 import com.sandu.ximon.admin.manager.iot.frame.A1Frame;
 import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
 import com.sandu.ximon.admin.manager.iot.frame.FrameBuilder;
 import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.request.EmptyRequestInnerFrame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.request.LightBrightnessReqInnerFrame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.request.LightHeartbeatReqInnerFrame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.response.LightBrightnessRespInnerFrame;
-import com.sandu.ximon.admin.manager.iot.frame.inner.response.LightHeartbeatRespInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.*;
+import com.sandu.ximon.admin.manager.iot.frame.inner.response.A1DeviceMacRespInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.response.A1TernaryCodeRespInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.response.A5LightBrightnessRespInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.response.A5LightHeartbeatRespInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.A1OrderEnum;
-import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5LightDataEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.A2OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
 @SpringBootTest
+@Slf4j
 class BaseTopicTests {
 
 
     @Test
     void queryDeviceDetail() {
-        QueryDeviceDetailResponse.Data data = MainBoardInvokeSyncService.getInstance().queryDeviceDetail("32313243305005ff0431ffff", null);
+        QueryDeviceDetailResponse.Data data = MainBoardInvokeSyncService.getInstance().queryDeviceDetail("32313243305007ff3055ffff01", null);
         System.out.println(data.toString());
     }
 
     @Test
     void rrpcLightControl() {
-        LightBrightnessReqInnerFrame lightControlFrame = new LightBrightnessReqInnerFrame(80);
+        A5LightBrightnessReqInnerFrame lightControlFrame = new A5LightBrightnessReqInnerFrame(80);
         A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), lightControlFrame);
-        WrapResponseCommonFrame<LightBrightnessRespInnerFrame> frame = MainBoardInvokeSyncService.getInstance()
-                .sendRRPC("32313243305008ff1a06ffff", a5Frame, LightBrightnessRespInnerFrame.class);
+        WrapResponseCommonFrame<A5LightBrightnessRespInnerFrame> frame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC("32313243305008ff1a06ffff", a5Frame, A5LightBrightnessRespInnerFrame.class);
 //        LightControlResponseInnerFrame lightControlResponseInnerFrame = new LightControlResponseInnerFrame();
 //        LightControlResponseInnerFrame innerFrame = lightControlResponseInnerFrame.transformFrame(commonFrame.getPayload());
         System.out.println(frame.toString());
@@ -50,20 +54,95 @@
     }
 
     @Test
-    void registerWithReturn() {
-        String de = "baseDevice".toLowerCase();
-        QueryDeviceDetailResponse.Data data = MainBoardInvokeSyncService.getInstance().queryDeviceDetail("baseDevice", null);
-        System.out.println(data.toString());
+    void register() {
+        String baseMac = "baseDevice";
+        String MAINBOARD_PDK = "a1JsfPG4iKW";
+        A1Frame a1Frame = new A1Frame(A1OrderEnum.REQUEST_READ_DEVICE_UNIQUE_MAC.getCode(), new EmptyRequestInnerFrame());
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(baseMac, a1Frame);
+        if(commonFrame == null){
+            throw new BusinessException("璇诲彇璁惧鍞竴ID澶辫触");
+        }
+        A1DeviceMacRespInnerFrame a1DeviceMacRespInnerFrame = new A1DeviceMacRespInnerFrame().transformFrame(commonFrame.getPayload());
+
+        log.info(commonFrame.toString());
+        String uniqueMac = a1DeviceMacRespInnerFrame.getMac();
+        uniqueMac = uniqueMac.toLowerCase();
+        log.info("鍞竴鐮亄}",uniqueMac);
+        MainBoardInvokeSyncService.getInstance().registerDevice(uniqueMac);
+        QueryDeviceDetailResponse.Data deviceDetail = MainBoardInvokeSyncService.getInstance().queryDeviceDetail(uniqueMac, null);
+        if(deviceDetail == null){
+            throw new BusinessException("娉ㄥ唽澶辫触");
+        }
+
+        log.info(deviceDetail.toString());
+        WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> productKeyResp = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(baseMac,
+                        FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(MAINBOARD_PDK))
+                                .orderType(A1OrderEnum.REQUEST_SET_PRODUCT_KEY.getCode()).build(),
+                        A1TernaryCodeRespInnerFrame.class);
+        A1TernaryCodeRespInnerFrame responseInnerFrame = productKeyResp.getResponseInnerFrame();
+        if(!MAINBOARD_PDK.equals(responseInnerFrame.getTernaryCode())){
+            throw new BusinessException("璁惧閰嶇疆ProductKey澶辫触");
+        }
+
+        WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> responseCommonFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(baseMac,
+                        FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(uniqueMac))
+                                .orderType(A1OrderEnum.REQUEST_SET_DEVICE_NAME.getCode()).build(),
+                        A1TernaryCodeRespInnerFrame.class);
+        A1TernaryCodeRespInnerFrame deviceNameFrame = responseCommonFrame.getResponseInnerFrame();
+        if(!uniqueMac.equals(deviceNameFrame.getTernaryCode())){
+            throw new BusinessException("璁惧閰嶇疆鍚嶅け璐�");
+        }
+
+        WrapResponseCommonFrame<A1TernaryCodeRespInnerFrame> wrapResponseCommonFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(baseMac,
+                        FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(deviceDetail.getDeviceSecret()))
+                                .orderType(A1OrderEnum.REQUEST_SET_DEVICE_SECRET.getCode()).build(),
+                        A1TernaryCodeRespInnerFrame.class);
+        A1TernaryCodeRespInnerFrame deviceSecretFrame = wrapResponseCommonFrame.getResponseInnerFrame();
+        if (!deviceDetail.getDeviceSecret().equals(deviceSecretFrame.getTernaryCode())) {
+            throw new BusinessException("璁惧瀵嗛挜澶辫触");
+        }
+
+        CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(baseMac,
+                        FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame())
+                                .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build());
+        if (rebootFrame.getPayload().equals("00")) {
+            System.out.println("閲嶅惎鎴愬姛");
+        }
     }
 
     @Test
     void LightHeartbeat() {
         IRequestFrame build = FrameBuilder.builderA5()
                 .orderType(A5OrderEnum.REQUEST_LIGHT_DATA.getCode())
-                .innerFrame(new LightHeartbeatReqInnerFrame())
+                .innerFrame(new A5LightHeartbeatReqInnerFrame())
                 .build();
-        WrapResponseCommonFrame<LightHeartbeatRespInnerFrame> responseCommonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff1a06ffff", build, LightHeartbeatRespInnerFrame.class);
+        WrapResponseCommonFrame<A5LightHeartbeatRespInnerFrame> responseCommonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff1a06ffff", build, A5LightHeartbeatRespInnerFrame.class);
         System.out.println("responseCommonFrame.toString()");
         System.out.println(responseCommonFrame.toString());
     }
+
+    @Test
+    void LightReset() {
+        String deviceName = "32313243305007ff3055ffff01";
+        IRequestFrame build = FrameBuilder.builderA5()
+                .orderType(A5OrderEnum.REQUEST_LIGHT_DATA.getCode())
+                .innerFrame(new A5LightResetReqInnerFrame())
+                .build();
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(deviceName, build);
+        System.out.println(commonFrame.toString());
+        CommonFrame rebootFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(deviceName,
+                        FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame())
+                                .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build());
+        if (rebootFrame.getPayload().equals("00")) {
+            System.out.println("閲嶅惎鎴愬姛");
+        }
+
+    }
 }

--
Gitblit v1.9.3