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