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.*; 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.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("baseDevice", null); System.out.println(data.toString()); } // 控制灯的亮度级别 0-100 @Test void rrpcLightControl() { A5LightBrightnessReqInnerFrame lightControlFrame = new A5LightBrightnessReqInnerFrame(80); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), lightControlFrame); WrapResponseCommonFrame frame = MainBoardInvokeSyncService.getInstance() .sendRRPC("32313243305008ff1a06ffff", a5Frame, A5LightBrightnessRespInnerFrame.class); System.out.println(frame.toString()); } // 读取未注册设备mac @Test void readDeviceUniqueMac() { A1Frame a1Frame = new A1Frame(A1OrderEnum.REQUEST_READ_DEVICE_UNIQUE_MAC.getCode(), new EmptyRequestInnerFrame()); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance() .sendRRPC("baseDevice", a1Frame); System.out.println(commonFrame.toString()); } // 设备注册 @Test void register() { String baseMac = "baseDevice"; 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 productKeyResp = MainBoardInvokeSyncService.getInstance() .sendRRPC(baseMac, FrameBuilder.builderA1().innerFrame(new A1TernaryCodeReqInnerFrame(MainBoardInvokeSyncService.getInstance().getProductKey())) .orderType(A1OrderEnum.REQUEST_SET_PRODUCT_KEY.getCode()).build(), A1TernaryCodeRespInnerFrame.class); A1TernaryCodeRespInnerFrame responseInnerFrame = productKeyResp.getResponseInnerFrame(); if(!MainBoardInvokeSyncService.getInstance().getProductKey().equals(responseInnerFrame.getTernaryCode())){ throw new BusinessException("设备配置ProductKey失败"); } WrapResponseCommonFrame 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 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 A5LightHeartbeatReqInnerFrame()) .build(); WrapResponseCommonFrame responseCommonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff1a06ffff", build, A5LightHeartbeatRespInnerFrame.class); System.out.println("responseCommonFrame.toString()"); System.out.println(responseCommonFrame.toString()); } // 设备恢复出厂设置 @Test void LightReset() { String deviceName = "32313243305007ff3055ffff"; 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("重启成功"); } CommonFrame result = MainBoardInvokeSyncService.getInstance() .sendRRPC(deviceName, FrameBuilder.builderA2().innerFrame(new EmptyRequestInnerFrame()) .orderType(A2OrderEnum.REQUEST_MAIN_BOARD_RESET.getCode()).build()); if (result.getPayload().equals("00")) { System.out.println("重启成功"); } } }