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")) { // ä¸ä¸çº¿ä¸æ¥å¤ç 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; } } 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("æ¾ä¸å°ç¬¦åæ¡ä»¶ç请æ±å¸§"); 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; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightBrightnessReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightBrightnessReqInnerFrame.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) { ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightHeartbeatReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.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(); ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/A5LightResetReqInnerFrame.javacopy 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
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/LightHeartbeatReqInnerFrame.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; 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åè è§£éï¼è®¾å¤ç±»å00代表MQTT串å£ï¼01代表CAT1 * 硬件MAC 设å¤ç±»å */ @Data @ToString(callSuper = true) public class A1DeviceMacRespInnerFrame extends BaseResponseInnerFrame<A1DeviceMacRespInnerFrame> { /** * 12åè 硬件MAC */ private String mac; /** * 1åè 设å¤ç±»å 设å¤ç±»å00代表MQTT串å£ï¼01代表CAT1 */ private String type; @Override public A1DeviceMacRespInnerFrame transformFrame(String payload) { mac = payload.substring(0, 24); type = payload.substring(24); return this; } } 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; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightBrightnessRespInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightBrightnessRespInnerFrame.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; } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/A5LightHeartbeatRespInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/response/LightHeartbeatRespInnerFrame.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) { // é¿åº¦ä¸ä¸è´æ¶ï¼è¿ånull if (hex == null || hex.length() != 116) { return null; 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(); /** * åérrpc è¯·æ± * * @param deviceName 设å¤å * @param iRequestFrame ç¼ç 帧 * @return è¿åçè§£ç 帧å®ä½ç±» */ public abstract CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame); /** * åérrpc è¯·æ± * * @param deviceName 设å¤å @@ -134,8 +118,15 @@ return null; } @Override public InvokeThingServiceResponse.Data invokeThing(String deviceName, InvokeParam param) { /** * è°ç¨èªå®ä¹topic * 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(); // 设å¤è¯ä¹¦ä¹productKey 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 { 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; } 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; 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())); } 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 { /** * è°ç¨èªå®ä¹topic * 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(); /** * åérrpc è¯·æ± * * @param deviceName 设å¤å * @param iRequestFrame ç¼ç 帧 * @return è¿åçè§£ç 帧å®ä½ç±» */ CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame); } 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("é坿å"); } } }