From 9a139b15be65dcd83ae187bb384627097c6a811a Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期二, 26 十二月 2023 20:29:16 +0800
Subject: [PATCH] 修改解析,增加仓温仓湿度
---
src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java | 6 +
src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java | 114 ++++++++++++++++++++--
src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java | 6
src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java | 4
src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java | 13 +
src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java | 109 +++++++++++++--------
6 files changed, 192 insertions(+), 60 deletions(-)
diff --git a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
index c26897a..22c4418 100644
--- a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
+++ b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
@@ -13,8 +13,8 @@
TCP_FZZY_V3("TCP_FZZY_V3", "绮儏-椋庢鑷磋繙鎺у埗鏌滃崗璁甐3"),
GRAIN_FZZY_IGDS_V40("GRAIN_FZZY_IGDS_V40", "绮儏-椋庢鑷磋繙绯荤粺V40"),
- GRAIN_FZZY_BHZN_WEB("GRAIN_FZZY_BHZN_WEB", "绮儏-FZZY-閭︽捣鏅鸿兘缃戝彛鍗忚"),
- GRAIN_FZZY_ZLDZ_WEB("GRAIN_FZZY_ZLDZ_WEB", "绮儏-FZZY-姝f潵鐢靛瓙缃戝彛鍗忚"),
+ GRAIN_FZZY_BHZN_WEB("GRAIN_FZZY_BHZN_WEB", "绮儏-FZZY-BHZN缃戝彛鍗忚"),
+ GRAIN_FZZY_ZLDZ_WEB("GRAIN_FZZY_ZLDZ_WEB", "绮儏-FZZY-ZLDZ缃戝彛鍗忚"),
GRAIN_YOUXIAN0_2023("GRAIN_YOUXIAN0_2023", "绮儏-娓镐粰涓诲簱鍗忚"),
GRAIN_YOUXIAN1_2023("GRAIN_YOUXIAN1_2023", "绮儏-娓镐粰鍒嗗簱鍗忚"),
DEVICE_WEIGHT_HTTP("DEVICE_WEIGHT_HTTP", "鍦扮-HTTP鍗忚"),
diff --git a/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java
index f44c036..ed9e782 100644
--- a/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java
+++ b/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java
@@ -229,7 +229,7 @@
THDto thDto = this.getTH(message);
if (null != thDto) {
- log.debug("-------THDto--={}", thDto);
+ log.info("-------THDto--={}", thDto);
}
//娓呯┖
String key = "GRAIN_" + message.getAddr();
@@ -379,8 +379,8 @@
try {
THDto th = new THDto();
String data = message.getContent();
- String houseNo = data.substring(0, 4);
- int depotId = BytesUtil.hexToInt(BytesUtil.tran_LH(houseNo));
+ String houseNo = data.substring(0, 2);
+ int depotId = BytesUtil.hexToInt(houseNo);
String t = data.substring(4, 8);
String h = data.substring(8, 12);
double humy;
diff --git a/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
index fd3b52b..bab4d2e 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
@@ -80,27 +80,52 @@
if (ServiceUtils.FUNCTION_66.equalsIgnoreCase(funId)) {
log.info("---------寮�濮嬭В鏋愮伯鎯呬俊鎭�---------");
- this.analysisGrainStep1(device, msgId, strMsg);
+ try{
+ this.analysisGrainStep1(device, msgId, strMsg);
+ }catch (Exception e){
+ log.error(e.getMessage(),e);
+ }
+
+ log.info("---------瑙f瀽绮儏淇℃伅缁撴潫---------");
}
//娓╂箍搴﹁繑鍥�
if (ServiceUtils.FUNCTION_68.equalsIgnoreCase(funId)) {
log.info("---------寮�濮嬭В鏋愪粨娓╂箍搴︿俊鎭�---------");
- this.analysisGrainTh(device, strMsg);
+ try{
+ this.analysisGrainTh(device, strMsg);
+ }catch (Exception e){
+ log.error(e.getMessage(),e);
+ }
+
}
}
private void analysisGrainTh(GatewayDevice device, String strMsg) {
- THDto th = new THDto();
+ try{
+ THDto th = new THDto();
- //TODO----->>> 寰呰В鏋愯皟鏁达紝鍏堢敤澶栭儴姘旇薄淇℃伅
- //绯荤粺姘旇薄绔欎俊鎭�
- WeatherWebDto weather = WeatherWebDto.contextMap.get("default");
- th.setTempIn(Double.valueOf(weather.getTem()) - 1);
- th.setHumidityIn(Double.valueOf(weather.getHumidity()) - 1);
+ //TODO----->>> 寰呰В鏋愯皟鏁达紝鍏堢敤澶栭儴姘旇薄淇℃伅
+ //7E 00 01 01 00 06 00 00 A0 FF FF 68 1A 05 CC 16 3A 62 36 7E
+ //绯荤粺姘旇薄绔欎俊鎭�
+// WeatherWebDto weather = WeatherWebDto.contextMap.get("default");
+// th.setTempIn(Double.valueOf(weather.getTem()) - 2);
+// th.setHumidityIn(Double.valueOf(weather.getHumidity()) - 10);
+ double t,h;
+ String temp = strMsg.substring(30,32);
+ t = BytesUtil.hexToInt(temp)/2;
+ log.info("娓╁害锛歿}",t);
+ temp = strMsg.substring(32,34);
+ h = BytesUtil.hexToInt(temp);
+ log.info("婀垮害锛歿}",h);
+ th.setTempIn(t);
+ th.setHumidityIn(h);
+ this.add2ThMap(device.getDepotIdSys(), th);
+ }catch (Exception e){
+ log.error(e.getMessage(),e);
+ }
- this.add2ThMap(device.getDepotIdSys(), th);
}
@@ -114,53 +139,57 @@
* @param msgId 鍛戒护ID
*/
private void analysisGrainStep1(GatewayDevice device, int msgId, String strMsg) {
-
+ String[] attCable = device.getCableRule().split("-");
+ int cableZ = Integer.valueOf(attCable[0]);
+ int cableY = Integer.valueOf(attCable[1]);
+ int cableX = Integer.valueOf(attCable[2]);
+ log.info("z={},x={},y={}",cableZ,cableX,cableY);
//鑾峰彇璇锋眰淇℃伅
BaseReqData reqData = ProtocolUtils.getSyncReq(device.getDepotIdSys());
if (null == reqData) {
log.error("---------娌℃湁鑾峰彇鍒拌姹備俊鎭紝涓嶆墽琛岃В鏋�------{}", device.getDeviceName());
return;
}
-
//鍙繚鐣欑伯鎯呬俊鎭�
- int start = 22 * 2;
+ int start = 15 * 2;
strMsg = strMsg.substring(start);
-
- //瀵嗛挜鍜岀偣鏁�
- String kyeNumHex = strMsg.substring(2, 4);
- String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt(kyeNumHex));
-
- String key = "00000" + kyeNumBin.substring(0, 3);
- int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
- key = "0000" + kyeNumBin.substring(4);
- int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
-
- //02 A4 BB BA BA B4
- start = 2 * 2;
- String tempHex;
GrainRoot grainRoot = new GrainRoot();
grainRoot.setKey(buildGrainRootKey(device.getDeviceSn(), msgId));
grainRoot.setNum(msgId);
- double point = 0;
- for (int i = 0; i < numValue; i++) {
- start = start + i * 2;
- tempHex = strMsg.substring(start, start + 2);
- //瀹為檯娓╁害锛濆瘑閽�*瀵嗛挜*37(婧㈠嚭涓烘棤绗﹀彿瀛楄妭)鍐嶅紓鎴栧姞瀵嗗悗鐨勬俯搴�/2銆�
- point = this.getGrainTemp(keyValue, tempHex);
- log.debug("--------瑙f瀽鍚庣殑娓╁害鐐�----{}---{}", tempHex, point);
- grainRoot.getPoints().add(point);
- start = 2 * 2;
- }
+ String tempStr = "";
+ for (int j = 0;j<cableY;j++){
+ tempStr = strMsg.substring(12 * j,12 * j +12);
+ //瀵嗛挜鍜岀偣鏁� 02 A4 BB BA BA B4
+ String kyeNumHex = tempStr.substring(2, 4);
+ String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt(kyeNumHex));
+
+ String key = "00000" + kyeNumBin.substring(0, 3);
+ int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+ key = "0000" + kyeNumBin.substring(4);
+ int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+
+ //02 A4 BB BA BA B4
+ start = 2 * 2;
+ String tempHex;
+
+ double point = 0;
+ for (int i = 0; i < numValue; i++) {
+ start = start + i * 2;
+ tempHex = tempStr.substring(start, start + 2);
+ //瀹為檯娓╁害锛濆瘑閽�*瀵嗛挜*37(婧㈠嚭涓烘棤绗﹀彿瀛楄妭)鍐嶅紓鎴栧姞瀵嗗悗鐨勬俯搴�/2銆�
+ point = this.getGrainTemp(keyValue, tempHex);
+ log.info("--------瑙f瀽鍚庣殑娓╁害鐐�----{}---{}", tempHex, point);
+ grainRoot.getPoints().add(point);
+ start = 2 * 2;
+ }
+ }
this.add2GrainMap(grainRoot);
//鍒ゆ柇鏄笉鏄渶鍚庝竴鍖呮暟鎹紝濡傛灉鏄渶鍚庝竴鍖呮墽琛岃В鏋�
- String[] attCable = device.getCableRule().split("-");
- int cableZ = Integer.valueOf(attCable[0]);
- int cableY = Integer.valueOf(attCable[1]);
- int cableX = Integer.valueOf(attCable[2]);
+
if (grainRoot.getNum() == cableX) {
analysisGrainStep2(reqData, cableZ, cableY, cableX);
}
@@ -182,7 +211,7 @@
root = this.getGrainRoot(buildGrainRootKey(reqData.getDevice().getDeviceSn(), i));
if (null == root || null == root.getPoints()) {
- log.error("-----------瑙f瀽鑾峰彇鎵�鏈夌伯鎯呮娴嬬偣澶辫触锛屽彇娑堟墽琛�---------{}", reqData.getDevice().getDeviceName());
+ log.error("-----------瑙f瀽鑾峰彇鎵�鏈夌伯鎯呮娴嬬偣澶辫触锛屽彇娑堟墽琛�---------{}---{}", reqData.getDevice().getDeviceName(),i);
return;
}
points.addAll(root.getPoints());
diff --git a/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java b/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java
index 044b901..2bc98f2 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java
@@ -30,7 +30,7 @@
private String host;
private int port;
- public Channel defaultChannel;
+ public static Channel defaultChannel;
public ClientEngine(String host, int port) {
@@ -46,6 +46,7 @@
@Override
public void run() {
try {
+
startClient();
} catch (Exception e) {
e.printStackTrace();
@@ -53,6 +54,10 @@
}
public void startClient() throws Exception {
+ if(defaultChannel != null){
+ log.info("-----IP={},杩炴帴瀛樺湪锛岀洿鎺ヤ娇鐢�",host);
+ return;
+ }
EventLoopGroup group = new OioEventLoopGroup();
Bootstrap b = new Bootstrap();
//榛樿闀胯繛鎺�
@@ -82,9 +87,9 @@
@Override
public void operationComplete(ChannelFuture arg0) throws Exception {
if (channelFuture.isSuccess()) {
- log.info("-----IP={},杩炴帴鎴愬姛");
+ log.info("-----IP={},杩炴帴鎴愬姛",host);
} else {
- log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�");
+ log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�",host);
channelFuture.cause().printStackTrace();
group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
}
@@ -107,7 +112,7 @@
}
- public Channel getChannel() {
+ public static Channel getChannel() {
return defaultChannel;
}
diff --git a/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
index 41e4c99..f29fd15 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
@@ -49,7 +49,11 @@
analysisService = SpringUtil.getBean(AnalysisService.class);
}
- analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg);
+ try{
+ analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg);
+ }catch (Exception e){
+ log.error(e.getMessage(),e);
+ }
}
diff --git a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
index ba4473e..0495501 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
@@ -38,7 +38,7 @@
* @return
*/
@Override
- public BaseResp syncGrain(BaseReqData reqData) {
+ public synchronized BaseResp syncGrain(BaseReqData reqData) {
BaseResp resp = new BaseResp();
@@ -50,8 +50,8 @@
log.error("----------------绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅,鏃犳硶鎵ц---------");
return resp;
}
-
try {
+ this.syncGrainTh(reqData);
//Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨
ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData);
@@ -62,7 +62,7 @@
int start = 0, length = cableY;
// 鐢熸垚绮儏淇℃伅
- String hexStr = "";
+ String hexStr = "";
InvokeResult message;
for (int i = 1; i <= cableX; i++) {
if (1 == i) {
@@ -70,9 +70,7 @@
} else {
start = (i - 1) * cableY + 1;
}
-
- hexStr = this.buildGrainCmd(device, i, start, length);
-
+ hexStr = buildGrainCmd(device, i, start, length);
// 鍙戦�佸懡浠� TODO----->>>鏆傛椂璋冩暣涓烘瘡娆″垱寤轰竴涓柊杩炴帴
//Channel channel = ClientEngine.getChannel(device.getIp());
Channel channel = null;
@@ -92,6 +90,7 @@
resp.setCode(500);
resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage());
}
+ Thread.sleep(500);
}
} catch (Exception e) {
log.error("绮儏妫�娴嬪紓甯革細{}", e);
@@ -104,7 +103,46 @@
@Override
public BaseResp syncGrainTh(BaseReqData reqData) {
- return new BaseResp();
+
+ BaseResp resp = new BaseResp();
+
+ GatewayDevice device = reqData.getDevice();
+
+ if (null == device) {
+ resp.setCode(500);
+ resp.setMsg("绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅锛屾棤娉曟墽琛�");
+ log.error("----------------绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅,鏃犳硶鎵ц---------");
+ return resp;
+ }
+
+ try {
+ //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨
+ ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData);
+ InvokeResult message;
+ Channel channel = null;
+ if (null == channel) {
+ ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
+ clientEngine.start();
+ Thread.sleep(300);
+ channel = clientEngine.getChannel();
+ }
+ String hexStr = this.buildTHCmd(device);
+ message = ClientEngine.send2(hexStr, channel);
+ log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-{}---{}", message,hexStr);
+ // 灏佽杩斿洖淇℃伅
+ if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) {
+ log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触{}", message.getMessage());
+ resp.setCode(500);
+ resp.setMsg("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触锛�" + message.getMessage());
+ }
+ Thread.sleep(500);
+ } catch (Exception e) {
+ log.error("娓╂箍搴︽娴嬪紓甯革細{}", e);
+ resp.setCode(500);
+ resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佹俯婀垮害妫�娴嬪懡浠わ細" + e.getMessage());
+ return resp;
+ }
+ return resp;
}
/**
@@ -124,7 +162,7 @@
deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn));
content = content.replace("{id}", deviceSn);
content = content.replace("{id}", deviceSn);
-
+ content = content.replace("{id}", deviceSn);
//鍛戒护ID
String msgIdHex = BytesUtil.intToHexStr1(cur);
content = content.replace("{msgId}", msgIdHex);
@@ -147,7 +185,40 @@
return start + content + crcCode + end;
}
+ private String buildTHCmd(GatewayDevice device) {
+ String start = "7e";
+ //娴嬫俯鍛戒护--7e 01 00 00 01 06 00 02 00 01 a0 ff ff 68 1a 05 88 5c 7e
+ String content = "{id}0000{id}{msgId}000200{id}a0ffff{funId}{start}{length}";
+
+ //寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID
+ String deviceSn = device.getDeviceSn();
+ deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn));
+ content = content.replace("{id}", deviceSn);
+ content = content.replace("{id}", deviceSn);
+ content = content.replace("{id}", deviceSn);
+ //鍛戒护ID
+ String msgIdHex = BytesUtil.intToHexStr1(20);
+ content = content.replace("{msgId}", msgIdHex);
+
+ //鍛戒护绫诲瀷
+ content = content.replace("{funId}", ServiceUtils.FUNCTION_68);
+
+ //寮�濮嬫牴鍙�
+ String startCurHex = BytesUtil.intToHexStr1(0);
+ content = content.replace("{start}", startCurHex);
+
+ //鎴彇闀垮害
+ String lenHex = BytesUtil.intToHexStr1(0);
+ content = content.replace("{length}", lenHex);
+
+ //鏍¢獙鐮�
+ String crcCode = this.getCRC(content);
+
+ String end = "7e";
+
+ return start + content + crcCode + end;
+ }
/**
* 鍙傝�冪粨鏋滐細http://www.ip33.com/crc.html
* <p>
@@ -159,17 +230,40 @@
* @param content
* @return
*/
- private String getCRC(String content) {
+ private static String getCRC(String content) {
byte[] bytes = HexStringToBytes(content);//16杩涘埗瀛楃涓茶浆鎴�16杩涘埗瀛楃涓叉暟缁�
int i = CRC16_XMODEM(bytes);//杩涜CRC鈥擷MODEM鏍¢獙寰楀埌鍗佽繘鍒舵牎楠屾暟
String CRC = Integer.toHexString(i);//10杩涘埗杞�16杩涘埗
-
+ if(CRC.length() < 4){
+ CRC = "0"+CRC;
+ }
+ if(CRC.length() < 4){
+ CRC = "0"+CRC;
+ }
//璋冩暣楂樹綅鍦ㄥ彸锛屽湴浣嶅湪宸︿晶
CRC = tran_LH(CRC);
return CRC;
}
+ public static void main(String[] args) {
+ //System.out.println(getCRC("010000010400020001a0ffff661005"));
+ //System.out.println(getCRC("010000010500020001a0ffff661505"));
+ String strMsg = "7E00010100010000A0FFFF66FF05BE01635B696FCE02A38ABAB5CE03E3003131CE044383B7B6CE0583497276D9FA";
+ int start = 15 * 2;
+ strMsg = strMsg.substring(start);
+ System.out.println(strMsg);
+ String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt("A3"));
+ System.out.println(kyeNumBin);
+ String key = "00000" + kyeNumBin.substring(0, 3);
+ int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+ key = "0000" + kyeNumBin.substring(4);
+ int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+ System.out.println((keyValue + ""));
+ System.out.println((numValue + ""));
+
+ }
+
public static String tran_LH(String info) {
return info.substring(2) + info.substring(0, 2);
}
--
Gitblit v1.9.3