|
|
|
@ -10,6 +10,8 @@ import com.mh.user.utils.SpringBeanUtil;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springframework.context.ApplicationContext; |
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @author LJF |
|
|
|
|
* @version 1.0 |
|
|
|
@ -156,6 +158,29 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (Constant.BRAND_HAI_ER.equals(brand)) { |
|
|
|
|
if (StringUtils.isBlank(funCode) || funCode.equals("03")) { |
|
|
|
|
if (StringUtils.isBlank(registerAddr) |
|
|
|
|
|| registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20001"),4))) { // 运行状态
|
|
|
|
|
str = str + "03"+registerAddr+"0001"; |
|
|
|
|
param = "运行状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20026"),4))) { // 水温
|
|
|
|
|
str = str + "03"+registerAddr+"0001"; |
|
|
|
|
param = "实际温度"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20041"),4))) { // 故障状态,100*N+11
|
|
|
|
|
str = str + "03"+registerAddr+"0001"; |
|
|
|
|
param = "故障状态"; |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"),4))) { // 读温度设定
|
|
|
|
|
str = str + "03"+registerAddr+"0001"; |
|
|
|
|
param = "设定温度"; |
|
|
|
|
} |
|
|
|
|
} else if ("06".equals(funCode)) { |
|
|
|
|
if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4))) { |
|
|
|
|
dataValue = (new BigDecimal(dataValue)).multiply(new BigDecimal("10")).toString(); |
|
|
|
|
} |
|
|
|
|
String dataStr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); |
|
|
|
|
str = str + funCode + registerAddr + dataStr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
|
|
|
|
|
str = str + checkWord; |
|
|
|
@ -172,7 +197,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
String checkStr = dataStr.substring(0, dataStr.length() - 4);//检验报文
|
|
|
|
|
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码
|
|
|
|
|
String sValue = null; |
|
|
|
|
String dataType = null; |
|
|
|
|
StringBuffer dataType = new StringBuffer(); |
|
|
|
|
String rtData = Constant.FAIL; |
|
|
|
|
if (!checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) { |
|
|
|
|
log.info("热泵报文检验失败: " + dataStr); |
|
|
|
@ -182,33 +207,59 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
String data = ""; |
|
|
|
|
if (StringUtils.isBlank(brand) || Constant.BRAND_MEI_DI.equals(brand)) { |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态
|
|
|
|
|
rtData = getMeiDi(registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
|
|
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
|
|
|
return Constant.SUCCESS; |
|
|
|
|
} |
|
|
|
|
} else if (Constant.BRAND_MEI_DI_TWO.equals(brand)) { |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读
|
|
|
|
|
rtData = getMeiDiTwo(registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
|
|
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
|
|
|
return Constant.SUCCESS; |
|
|
|
|
} |
|
|
|
|
} else if (Constant.BRAND_RUI_XING.equals(brand)) { |
|
|
|
|
rtData = getRuiXing(dateStr, registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); |
|
|
|
|
} else if (Constant.BRAND_HAI_ER.equals(brand)) { |
|
|
|
|
rtData = getHaiEr(dateStr, registerAddr, buildingId, buildingName, checkStr, sValue, addr, dataType); |
|
|
|
|
} |
|
|
|
|
if (!StringUtils.isBlank(rtData)) { |
|
|
|
|
nowDataService.saveNowHistoryData(addr, "热泵", rtData, dataType.toString(), buildingId); |
|
|
|
|
log.info("时间: " + dateStr + "热泵ID:" + addr + ",数据: " + rtData + ",保存数据库成功!楼栋名称:" + buildingName); |
|
|
|
|
} |
|
|
|
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化
|
|
|
|
|
log.info("----------------保存楼栋时间点温度变化值!----------------"); |
|
|
|
|
return rtData; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getHaiEr(String dateStr, String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { |
|
|
|
|
String data; |
|
|
|
|
stringBuffer.setLength(0); |
|
|
|
|
String dataType = ""; |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20001"), 4))) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = checkStr.substring(8, 10); |
|
|
|
|
log.info("------------美的热泵状态值-----------" + data); |
|
|
|
|
if (data.equalsIgnoreCase("08")) { |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
sValue = "不运行"; //关机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; //制冷模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("02")) { |
|
|
|
|
sValue = "运行"; //制热模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("04")) { |
|
|
|
|
sValue = "运行"; //水泵模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("10")) { |
|
|
|
|
sValue = "运行"; //制热水模式
|
|
|
|
|
sValue = "运行"; // 开机模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { |
|
|
|
|
//0642设定温度,0007水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0642")) { |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4)) |
|
|
|
|
|| registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20026"), 4)) ) { |
|
|
|
|
//20003设定温度,20026水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20003"), 4))) { |
|
|
|
|
dataType = "tempSet"; |
|
|
|
|
} else { |
|
|
|
|
dataType = "waterTemp"; |
|
|
|
|
} |
|
|
|
|
//读数
|
|
|
|
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
|
|
|
sValue = String.valueOf(Double.parseDouble(sValue)/10); |
|
|
|
|
if (dataType.equals("waterTemp")) { |
|
|
|
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
|
|
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
|
|
@ -216,6 +267,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
publicData.setUseWaterTemp(avgTemp); |
|
|
|
|
publicData.setBackWaterTemp(avgTemp); |
|
|
|
|
String pumpId = nowDataService.selectMinPumpId(buildingId); |
|
|
|
|
log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------"); |
|
|
|
|
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度
|
|
|
|
|
publicData.setSingleTemp(sValue); |
|
|
|
|
log.info("---------------单箱温度:" + sValue + "---------------"); |
|
|
|
@ -225,7 +277,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
} else if (dataType.equals("tempSet")) { |
|
|
|
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
|
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase(ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex("20041"), 4))) { //故障状态
|
|
|
|
|
dataType = "isFault"; |
|
|
|
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
|
|
@ -236,47 +288,47 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
sValue = "有故障"; |
|
|
|
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065A") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065E")) { //读定时设置值
|
|
|
|
|
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); |
|
|
|
|
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); |
|
|
|
|
sValue = startTime + closetTime; |
|
|
|
|
} |
|
|
|
|
rtData = sValue; |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
|
|
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = checkStr.substring(10, 12); |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
sValue = "不运行"; //开机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; // 开机模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
|
|
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
|
|
|
return Constant.SUCCESS; |
|
|
|
|
sValue = Constant.SUCCESS; |
|
|
|
|
} |
|
|
|
|
} else if (Constant.BRAND_MEI_DI_TWO.equals(brand)) { |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {// 读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态
|
|
|
|
|
stringBuffer.append(dataType); |
|
|
|
|
return sValue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getRuiXing(String dateStr, String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { |
|
|
|
|
String data; |
|
|
|
|
String dataType = ""; |
|
|
|
|
stringBuffer.setLength(0); |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位
|
|
|
|
|
data = data.substring(4, 8); //截取后四位
|
|
|
|
|
log.info("------------美的2热泵状态值-----------" + data); |
|
|
|
|
if (data.equalsIgnoreCase("0000")) { //0
|
|
|
|
|
sValue = "不运行"; //关机
|
|
|
|
|
} else if (data.equalsIgnoreCase("0001")) {//1
|
|
|
|
|
sValue = "运行"; //水泵
|
|
|
|
|
} else if (data.equalsIgnoreCase("0010")) {//2
|
|
|
|
|
sValue = "运行"; //制冷
|
|
|
|
|
} else if (data.equalsIgnoreCase("0011")) {//3
|
|
|
|
|
sValue = "运行"; //制热
|
|
|
|
|
} else if (data.equalsIgnoreCase("0100")) {//4
|
|
|
|
|
sValue = "运行"; //热水
|
|
|
|
|
} else if (data.equalsIgnoreCase("0101")) {//5
|
|
|
|
|
sValue = "运行"; //采暖
|
|
|
|
|
} else if (data.equalsIgnoreCase("0110")) {//6
|
|
|
|
|
sValue = "运行"; //电热模式
|
|
|
|
|
data = checkStr.substring(8, 10); |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
sValue = "不运行"; //关机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; //制热模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { |
|
|
|
|
//0003设定温度,0064水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0003")) { |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) { |
|
|
|
|
//000A设定温度,0046水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("000A")) { |
|
|
|
|
dataType = "tempSet"; |
|
|
|
|
} else { |
|
|
|
|
dataType = "waterTemp"; |
|
|
|
@ -284,6 +336,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
//读数
|
|
|
|
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
|
|
|
if (dataType.equals("waterTemp")) { |
|
|
|
|
sValue = String.valueOf(Double.parseDouble(sValue)/10); |
|
|
|
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
|
|
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
|
|
|
publicData.setBuildingId(buildingId); |
|
|
|
@ -300,43 +353,73 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
} else if (dataType.equals("tempSet")) { |
|
|
|
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
|
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态
|
|
|
|
|
dataType = "isFault"; |
|
|
|
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
|
|
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
|
|
|
sValue = "无故障"; |
|
|
|
|
deviceInstallService.updateDeviceFault("0", addr, "热泵"); |
|
|
|
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
|
|
|
sValue = "有故障"; |
|
|
|
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065A") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065E")) { //定时设置值
|
|
|
|
|
String startTime = ExchangeStringUtil.hexToDec(checkStr.substring(8, 10)) + ExchangeStringUtil.hexToDec(checkStr.substring(12, 14)); |
|
|
|
|
String closetTime = ExchangeStringUtil.hexToDec(checkStr.substring(16, 18)) + ExchangeStringUtil.hexToDec(checkStr.substring(20, 22)); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0028") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("002C") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值
|
|
|
|
|
// 01 03 08 0003 0000 0016 0000 4713
|
|
|
|
|
String startTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)), 2) |
|
|
|
|
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(10, 14)), 2); |
|
|
|
|
String closetTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(14, 18)), 2) |
|
|
|
|
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(18, 22)), 2); |
|
|
|
|
sValue = startTime + closetTime; |
|
|
|
|
} |
|
|
|
|
rtData = sValue; |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
|
|
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = checkStr.substring(10, 12); |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
sValue = "不运行"; //关机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; //制热模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} else { |
|
|
|
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
|
|
|
return Constant.SUCCESS; |
|
|
|
|
sValue = Constant.SUCCESS; |
|
|
|
|
} |
|
|
|
|
} else if (Constant.BRAND_RUI_XING.equals(brand)) { |
|
|
|
|
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
|
|
|
|
|
} |
|
|
|
|
stringBuffer.append(dataType); |
|
|
|
|
return sValue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getMeiDi(String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { |
|
|
|
|
String data; |
|
|
|
|
String dataType = ""; |
|
|
|
|
stringBuffer.setLength(0); |
|
|
|
|
if (registerAddr.equalsIgnoreCase("0641")) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = checkStr.substring(8, 10); |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
log.info("------------美的热泵状态值-----------" + data); |
|
|
|
|
if (data.equalsIgnoreCase("08")) { |
|
|
|
|
sValue = "不运行"; //关机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; //制冷模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("02")) { |
|
|
|
|
sValue = "运行"; //制热模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("04")) { |
|
|
|
|
sValue = "运行"; //水泵模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("10")) { |
|
|
|
|
sValue = "运行"; //制热水模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) { |
|
|
|
|
//000A设定温度,0046水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("000A")) { |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { |
|
|
|
|
//0642设定温度,0007水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0642")) { |
|
|
|
|
dataType = "tempSet"; |
|
|
|
|
} else { |
|
|
|
|
dataType = "waterTemp"; |
|
|
|
@ -344,14 +427,12 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
//读数
|
|
|
|
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
|
|
|
if (dataType.equals("waterTemp")) { |
|
|
|
|
sValue = String.valueOf(Double.parseDouble(sValue)/10); |
|
|
|
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
|
|
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
|
|
|
publicData.setBuildingId(buildingId); |
|
|
|
|
publicData.setUseWaterTemp(avgTemp); |
|
|
|
|
publicData.setBackWaterTemp(avgTemp); |
|
|
|
|
String pumpId = nowDataService.selectMinPumpId(buildingId); |
|
|
|
|
log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------"); |
|
|
|
|
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度
|
|
|
|
|
publicData.setSingleTemp(sValue); |
|
|
|
|
log.info("---------------单箱温度:" + sValue + "---------------"); |
|
|
|
@ -361,7 +442,7 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
} else if (dataType.equals("tempSet")) { |
|
|
|
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
|
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态
|
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("000B")) { //故障状态
|
|
|
|
|
dataType = "isFault"; |
|
|
|
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
|
|
@ -372,41 +453,88 @@ public class HeatPumpStrategy implements DeviceStrategy {
|
|
|
|
|
sValue = "有故障"; |
|
|
|
|
deviceInstallService.updateDeviceFault("1", addr, "热泵"); |
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0028") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("002C") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值
|
|
|
|
|
// 01 03 08 0003 0000 0016 0000 4713
|
|
|
|
|
String startTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)), 2) |
|
|
|
|
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(10, 14)), 2); |
|
|
|
|
String closetTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(14, 18)), 2) |
|
|
|
|
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(18, 22)), 2); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065A") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065E")) { //读定时设置值
|
|
|
|
|
String startTime = checkStr.substring(8, 10) + checkStr.substring(12, 14); |
|
|
|
|
String closetTime = checkStr.substring(16, 18) + checkStr.substring(20, 22); |
|
|
|
|
sValue = startTime + closetTime; |
|
|
|
|
} |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { |
|
|
|
|
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
|
|
|
|
|
stringBuffer.append(dataType); |
|
|
|
|
return sValue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getMeiDiTwo(String registerAddr, String buildingId, String buildingName, String checkStr, String sValue, String addr, StringBuffer stringBuffer) { |
|
|
|
|
String data; |
|
|
|
|
String dataType = ""; |
|
|
|
|
stringBuffer.setLength(0); |
|
|
|
|
if (registerAddr.equalsIgnoreCase("0BBD")) { //运行状态
|
|
|
|
|
dataType = "runState"; |
|
|
|
|
data = checkStr.substring(10, 12); |
|
|
|
|
if (data.equalsIgnoreCase("00")) { |
|
|
|
|
sValue = "不运行"; //关机模式
|
|
|
|
|
} else if (data.equalsIgnoreCase("01")) { |
|
|
|
|
sValue = "运行"; //制热模式
|
|
|
|
|
data = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
data = ExchangeStringUtil.addZeroForNum(data, 8);//二进制数,补够8位
|
|
|
|
|
data = data.substring(4, 8); //截取后四位
|
|
|
|
|
log.info("------------美的2热泵状态值-----------" + data); |
|
|
|
|
if (data.equalsIgnoreCase("0000")) { //0
|
|
|
|
|
sValue = "不运行"; //关机
|
|
|
|
|
} else if (data.equalsIgnoreCase("0001")) {//1
|
|
|
|
|
sValue = "运行"; //水泵
|
|
|
|
|
} else if (data.equalsIgnoreCase("0010")) {//2
|
|
|
|
|
sValue = "运行"; //制冷
|
|
|
|
|
} else if (data.equalsIgnoreCase("0011")) {//3
|
|
|
|
|
sValue = "运行"; //制热
|
|
|
|
|
} else if (data.equalsIgnoreCase("0100")) {//4
|
|
|
|
|
sValue = "运行"; //热水
|
|
|
|
|
} else if (data.equalsIgnoreCase("0101")) {//5
|
|
|
|
|
sValue = "运行"; //采暖
|
|
|
|
|
} else if (data.equalsIgnoreCase("0110")) {//6
|
|
|
|
|
sValue = "运行"; //电热模式
|
|
|
|
|
} |
|
|
|
|
//计算热泵运行时间,按分钟
|
|
|
|
|
nowDataService.proPumpMinutes(buildingId, addr, sValue); |
|
|
|
|
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { |
|
|
|
|
//0003设定温度,0064水箱水温
|
|
|
|
|
if (registerAddr.equalsIgnoreCase("0003")) { |
|
|
|
|
dataType = "tempSet"; |
|
|
|
|
} else { |
|
|
|
|
dataType = "waterTemp"; |
|
|
|
|
} |
|
|
|
|
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { |
|
|
|
|
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); |
|
|
|
|
return Constant.SUCCESS; |
|
|
|
|
//读数
|
|
|
|
|
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); |
|
|
|
|
if (dataType.equals("waterTemp")) { |
|
|
|
|
String avgTemp = nowDataService.selectAve(buildingId); |
|
|
|
|
NowPublicDataEntity publicData = new NowPublicDataEntity(); |
|
|
|
|
publicData.setBuildingId(buildingId); |
|
|
|
|
publicData.setUseWaterTemp(avgTemp); |
|
|
|
|
publicData.setBackWaterTemp(avgTemp); |
|
|
|
|
String pumpId = nowDataService.selectMinPumpId(buildingId); |
|
|
|
|
log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------"); |
|
|
|
|
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度
|
|
|
|
|
publicData.setSingleTemp(sValue); |
|
|
|
|
log.info("---------------单箱温度:" + sValue + "---------------"); |
|
|
|
|
} |
|
|
|
|
rtData = sValue; |
|
|
|
|
nowPublicDataService.saveNowHistoryPublicData(publicData); |
|
|
|
|
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); |
|
|
|
|
} else if (dataType.equals("tempSet")) { |
|
|
|
|
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
|
|
|
|
|
} |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0BBB")) { //故障状态
|
|
|
|
|
dataType = "isFault"; |
|
|
|
|
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)); |
|
|
|
|
sData = ExchangeStringUtil.addZeroForNum(sData, 8); |
|
|
|
|
if (sData.substring(7, 8).equalsIgnoreCase("0")) { |
|
|
|
|
sValue = "无故障"; |
|
|
|
|
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) { |
|
|
|
|
sValue = "有故障"; |
|
|
|
|
} |
|
|
|
|
if (!StringUtils.isBlank(sValue)) { |
|
|
|
|
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); |
|
|
|
|
log.info("时间: " + dateStr + "热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); |
|
|
|
|
} else if (registerAddr.equalsIgnoreCase("0656") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065A") |
|
|
|
|
|| registerAddr.equalsIgnoreCase("065E")) { //定时设置值
|
|
|
|
|
String startTime = ExchangeStringUtil.hexToDec(checkStr.substring(8, 10)) + ExchangeStringUtil.hexToDec(checkStr.substring(12, 14)); |
|
|
|
|
String closetTime = ExchangeStringUtil.hexToDec(checkStr.substring(16, 18)) + ExchangeStringUtil.hexToDec(checkStr.substring(20, 22)); |
|
|
|
|
sValue = startTime + closetTime; |
|
|
|
|
} |
|
|
|
|
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化
|
|
|
|
|
log.info("----------------保存楼栋时间点温度变化值!----------------"); |
|
|
|
|
return rtData; |
|
|
|
|
stringBuffer.append(dataType); |
|
|
|
|
return sValue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|