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 { //设备地址 private String deviceAddress; //硬件版本 private String version; @Override public A5AtmosphereQueryVersionReportInnerFrame transformFrame(String hex) { //FE040004FFFF0105954FAA7F if (StrUtil.isBlank(hex) || hex.length() != 24) { 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 version1 = String.valueOf(Integer.parseInt(hex.substring(12, 14), 16)); String version2 = String.valueOf(Integer.parseInt(hex.substring(14, 16), 16)); if (version2.length() == 1) { version2 = "0" + version2; } setVersion("硬件版本为:" + version1 + "." + version2); //校验 setCrc32(hex.substring(hex.length() - 8)); // 校验CRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } }