package com.sandu.ximon.admin.manager.iot.frame.inner.response; 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; import lombok.ToString; /** * @author chenjiantian * @date 2021/12/6 18:20 * 灯读心跳包 应答 */ @Data @ToString(callSuper = true) public class A5LightHeartbeatRespInnerFrame extends BaseResponseInnerFrame { // 目标地址 2 private String destinationAddress; // 心跳包数据 58 private HeartBeatDataPackage heartBeatDataPackage; private String originFrame; @Override public A5LightHeartbeatRespInnerFrame transformFrame(String hex) { // 长度不一致时,返回null if (hex == null || hex.length() != 116) { return null; } // MQTT通信方式(1) setConnectType(hex.substring(0, 2)); // 功能码(1) setFunctionCode(hex.substring(2, 4)); // 负荷长度(2) setPayloadLength(hex.substring(4, 8)); setDestinationAddress(hex.substring(8, 12)); String heartBeatData = hex.substring(12, 108); HeartBeatDataPackage heartBeatDataPackage = new HeartBeatDataPackage(); heartBeatDataPackage.transformFrame(heartBeatData); setHeartBeatDataPackage(heartBeatDataPackage); setCrc32(hex.substring(108, 116)); // 校验CRC32 String frame = hex.substring(0, 14); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } @Data public static class HeartBeatDataPackage implements IResponseInnerFrame { // 年RTC 1 private String year; // 月RTC 1 private String month; // 日RTC 1 private String day; // 时RTC 1 private String hour; // 分RTC 1 private String min; // 秒RTC 1 private String sec; // 设备温度 2 1字节整数1字节小数 private String deviceTemperature; // 亮度百分比 1 private String lightPercent; // 电网电压 2 1字节整数1字节小数 private String gridVol; // 电网电流 2 1字节整数1字节小数 private String gridCur; // 赫兹 2 1字节整数1字节小数 private String hertz; // 功率因素 2 1字节整数1字节小数 private String powerFactor; // 有功功率 2 1字节整数1字节小数 private String activePower; // 无功功率 2 1字节整数1字节小数 private String reactivePower; // 最近一次亮灯时间 4 秒 private String recentlyLightSec; // 累计亮灯时间 4 private String totalLightTime; // 最近一次用电电量 4 private String recentlyUsingPower; // 累计用电电量 4 private String totalUsingPower; // 保留 11 private String retain; // 原帧 private String originFrame; @Override public HeartBeatDataPackage transformFrame(String hex) { this.originFrame = hex; this.year = hex.substring(0, 2); this.month = hex.substring(2, 4); this.day = hex.substring(4, 6); this.hour = hex.substring(6, 8); this.min = hex.substring(8, 10); this.sec = hex.substring(10, 12); this.deviceTemperature = hex.substring(12, 16); this.lightPercent = hex.substring(16, 18); this.gridVol = hex.substring(18, 22); this.gridCur = hex.substring(22, 26); this.hertz = hex.substring(26, 30); this.powerFactor = hex.substring(30, 34); this.activePower = hex.substring(34, 38); this.reactivePower = hex.substring(38, 42); this.recentlyLightSec = hex.substring(42, 50); this.totalLightTime = hex.substring(50, 58); this.recentlyUsingPower = hex.substring(58, 66); this.totalUsingPower = hex.substring(66, 74); this.retain = hex.substring(74, 96); return this; } } }