| | |
| | | package com.sandu.ximon.admin.manager.iot.frame.inner.report; |
| | | |
| | | import cn.hutool.core.util.HexUtil; |
| | | 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; |
| | |
| | | return null; |
| | | } |
| | | this.c3Mac = hex.substring(0, 8); |
| | | this.year = hex.substring(8, 10); |
| | | this.month = hex.substring(10, 12); |
| | | this.day = hex.substring(12, 14); |
| | | this.hour = hex.substring(14, 16); |
| | | this.min = hex.substring(16, 18); |
| | | this.sec = hex.substring(18, 20); |
| | | this.chargingPort = hex.substring(20, 24); |
| | | this.statusBit = hex.substring(24, 26); |
| | | this.deviceTemperature = (parseVal(hex, 26, 28) + "." + parseVal(hex, 28, 30)); |
| | | this.gridVoltage = hex.substring(30, 34); |
| | | this.gridCurrent = hex.substring(34, 38); |
| | | this.frequency = hex.substring(38, 42); |
| | | this.powerFactor = hex.substring(42, 46); |
| | | this.activePower = hex.substring(46, 50); |
| | | this.reactivePower = hex.substring(50, 54); |
| | | this.chargedCapacity = hex.substring(54, 58); |
| | | this.reservedCapacity = hex.substring(58, 62); |
| | | this.remainingAmount = hex.substring(62, 66); |
| | | this.alreadyChargingTime = hex.substring(66, 72); |
| | | this.year = parseVal(hex.substring(8, 10)); |
| | | this.month = parseVal(hex.substring(10, 12)); |
| | | this.day = parseVal(hex.substring(12, 14)); |
| | | this.hour = parseVal(hex.substring(14, 16)); |
| | | this.min = parseVal(hex.substring(16, 18)); |
| | | this.sec = parseVal(hex.substring(18, 20)); |
| | | this.chargingPort = parseVal(hex.substring(20, 24)); |
| | | this.statusBit = parseVal(hex.substring(24, 26)); |
| | | this.deviceTemperature = temperatureTransition(hex.substring(26, 30)) + ""; |
| | | this.gridVoltage = (parseVal(hex, 30, 34) * 0.01) + ""; |
| | | this.gridCurrent = (parseVal(hex, 34, 38) * 0.01 + ""); |
| | | this.frequency = (parseVal(hex, 38, 42) * 0.01 + ""); |
| | | this.powerFactor = (parseVal(hex, 42, 46) * 0.01 + ""); |
| | | this.activePower = (parseVal(hex, 46, 50) * 0.01 + ""); |
| | | this.reactivePower = (parseVal(hex, 50, 54) * 0.01 + ""); |
| | | this.chargedCapacity = (parseVal(hex, 54, 58) * 0.01 + ""); |
| | | this.reservedCapacity = (parseVal(hex, 58, 62) * 0.01 + ""); |
| | | this.remainingAmount = (parseVal(hex, 62, 66) * 0.01 + ""); |
| | | this.alreadyChargingTime = parseVal(hex.substring(66, 72)); |
| | | //72-80保留,暂未使用 |
| | | |
| | | return this; |
| | | } |
| | |
| | | private Integer parseVal(String frame, int start, int end) { |
| | | return Integer.parseInt(frame.substring(start, end), 16); |
| | | } |
| | | |
| | | private String parseVal(String hex) { |
| | | return Integer.parseInt(hex, 16) + ""; |
| | | } |
| | | |
| | | /** |
| | | * 将16进制转成2进制,进行补码(反码基础上+1),得到正确数值 |
| | | * 传入16进制的温度,类型为String |
| | | * 如F500 |
| | | */ |
| | | public Double temperatureTransition(String temperature) { |
| | | |
| | | //将传进来的16进制的转为2进制 |
| | | String twoBinStr = hexStr2BinStr(temperature); |
| | | |
| | | if ("1".equals(twoBinStr.substring(0, 1))) { |
| | | //最高位是1,为负数,将16进制的进行补码,返回 |
| | | int max = 0b1111111111111111; |
| | | double result = (max - HexUtil.hexToInt(temperature)) * (-0.01); |
| | | return result; |
| | | |
| | | } else if ("0".equals(twoBinStr.substring(0, 1))) { |
| | | //最高位是0,正数,直接返回 |
| | | double result = (HexUtil.hexToInt(temperature)) * (0.01); |
| | | return result; |
| | | |
| | | } |
| | | // |
| | | return 0.00; |
| | | } |
| | | |
| | | /** |
| | | * 16进制字符串转为二进制 |
| | | */ |
| | | public String hexStr2BinStr(String hexStr) { |
| | | if (hexStr == null || hexStr.length() % 2 != 0) { |
| | | return null; |
| | | } |
| | | String bString = "", tmp; |
| | | for (int i = 0; i < hexStr.length(); i++) { |
| | | tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hexStr.substring(i, i + 1), 16)); |
| | | bString += tmp.substring(tmp.length() - 4); |
| | | } |
| | | return bString; |
| | | } |
| | | } |
| | | } |