package com.sandu.ximon.admin.manager.iot.frame.inner.request; import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5LightDataEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils; /** * @author chenjiantian * @date 2021/12/6 14:46 * A5->01->01 * "开/关灯(即亮度值) * 0x00:关灯 * 其它:开灯&亮度值" */ public class A5LightBrightnessReqInnerFrame implements IRequestInnerFrame { private final String payload; /** * @param lightLevel 亮度等级 [0,100] */ public A5LightBrightnessReqInnerFrame(Integer lightLevel, String lightAddress) { String destinationAddress; if (lightAddress == null || (!lightAddress.equals("0001") && !lightAddress.equals("0002"))) { destinationAddress = "FFFF"; } else { destinationAddress = lightAddress; } // 将整型亮度转换为Hex if (lightLevel < 0) { lightLevel = 0; } else if (lightLevel > 100) { lightLevel = 100; } payload = destinationAddress + SupplementUtils.suppleZero(Integer.toHexString(lightLevel).toUpperCase(), 2); } @Override public String getEncodeFrame() { String functionCode = A5LightDataEnum.LightControl.getCode(); String payloadLength = "0003"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } }