package com.sandu.ximon.admin.utils;
|
|
import com.sandu.ximon.admin.entity.AtmoHeartBeatDataPackage;
|
import com.sandu.ximon.admin.entity.DataTransportMainResponse;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.AtmoFunctionCode;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.response.AtmoQueryHeartBeatResponse;
|
import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
|
import org.apache.logging.log4j.util.Base64Util;
|
import org.springframework.stereotype.Component;
|
|
@Component("AtmoAPIUtils")
|
public class AtmoAPIUtils {
|
|
/**
|
* 查询大气数据心跳包
|
* @param mac
|
*/
|
public AtmoHeartBeatDataPackage queryHeartBeat(String mac) {
|
// 生成控制帧
|
String frame = generateNoPayLoadFrame(AtmoFunctionCode.QueryHeartBeat, "FFFF");
|
|
// 发送RRPC
|
String result = rrpc(mac, frame);
|
if(null != result) {
|
// 返回结果
|
result = HexStrConvertUtil.bytesToHexString(Base64Util.decode(result));
|
DataTransportMainResponse dataTransportMainResponse = new DataTransportMainResponse().convertInstance(result.substring(2));
|
|
AtmoQueryHeartBeatResponse response = new AtmoQueryHeartBeatResponse().convertInstance(dataTransportMainResponse.getPayload());
|
return response.getAtmoHeartBeatDataPackage();
|
}
|
return null;
|
}
|
|
/**
|
* 查询大气数据心跳包间隔时间
|
* @param mac
|
*/
|
public Integer queryHeartBeatTime(String mac) {
|
// 生成控制帧
|
String frame = generateNoPayLoadFrame(AtmoFunctionCode.QueryHeartBeatTime, "FFFF");
|
// 发送RRPC
|
String result = rrpc(mac, frame);
|
if(null != result) {
|
// 返回结果
|
result = HexStrConvertUtil.bytesToHexString(Base64Util.decode(result));
|
DataTransportMainResponse dataTransportMainResponse = new DataTransportMainResponse().convertInstance(result.substring(2));
|
AtmoQueryHeartBeatTimeResponse response = new AtmoQueryHeartBeatTimeResponse().convertInstance(dataTransportMainResponse.getPayload());
|
return response.getHeartBeatTimeInt();
|
}
|
return -1;
|
}
|
|
|
/**
|
* 软重启
|
* @param mac
|
*
|
*/
|
public String reboot(String mac) {
|
// 生成控制帧
|
String frame = generateNoPayLoadFrame(AtmoFunctionCode.Reboot, "FFFF");
|
// 发送RRPC
|
String result = rrpc(mac, frame);
|
if(null != result) {
|
// 返回结果
|
result = HexStrConvertUtil.bytesToHexString(Base64Util.decode(result));
|
DataTransportMainResponse dataTransportMainResponse = new DataTransportMainResponse().convertInstance(result.substring(2));
|
AtmoCommonResponse response = new AtmoCommonResponse().convertInstance(dataTransportMainResponse.getPayload());
|
return response.getResponseStatus();
|
}
|
return CommonResponse.No_Response.getCode();
|
}
|
|
/**
|
* 设置心跳时间
|
* @param mac
|
* @param heartBeatTime s
|
*/
|
public String settingHeartBeatTime(String mac, Integer heartBeatTime) {
|
String payload = "FFFF" + SupplementUtils.suppleZero(HexStrConvertUtil.tenToHex(heartBeatTime),4);
|
// 生成控制帧
|
String frame = generateNoPayLoadFrame(AtmoFunctionCode.SettingHeartBeatTime, payload);
|
// 发送RRPC
|
String result = rrpc(mac, frame);
|
if(null != result) {
|
// 返回结果
|
result = HexStrConvertUtil.bytesToHexString(Base64Util.decode(result));
|
DataTransportMainResponse dataTransportMainResponse = new DataTransportMainResponse().convertInstance(result.substring(2));
|
AtmoCommonResponse response = new AtmoCommonResponse().convertInstance(dataTransportMainResponse.getPayload());
|
return response.getResponseStatus();
|
}
|
return CommonResponse.No_Response.getCode();
|
}
|
|
private String generateNoPayLoadFrame(AtmoFunctionCode atmoFunctionCode, String payload){
|
String frame = DataTransportMainFrame.generateInstance(
|
DataTransportOrderType.AtmosphereData,
|
new AtmoCommonFrame(atmoFunctionCode, payload)
|
).getFrame();
|
return frame;
|
}
|
|
private String rrpc(String mac, String frame) {
|
String result = MainBoardRRPCUtils.sendRRPC(mac, Base64Util.toBase64Frame(frame));
|
if (null == result) {
|
result = MainBoardRRPCUtils.sendRRPC(mac, Base64Util.toBase64Frame(frame));
|
if (null == result) {
|
return null;
|
}
|
}
|
return result;
|
}
|
|
|
}
|