From ea8e8e7dd5f10cff4054f5fde8fd3961aaac1834 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期五, 14 十月 2022 16:55:30 +0800
Subject: [PATCH] 大气设备农耕
---
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java | 135 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 113 insertions(+), 22 deletions(-)
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
index d00066a..87c5b04 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereNewHeartbeatReportInnerFrame.java
@@ -5,6 +5,7 @@
import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC16Utils;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRCUtils;
import lombok.Data;
import java.math.BigDecimal;
@@ -15,7 +16,7 @@
*/
@Data
public class A5AtmosphereNewHeartbeatReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereNewHeartbeatReportInnerFrame> {
- //ff03200241000000000000000000000009000a198a186327b8000c000000000000000b8c35c1cad6bf
+ //010326FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B341022277F000D05B5000000015DDD0000FFFF000070C9 涓诲姩涓婃姤蹇冭烦鍖�
private HeartBeatDataPackage heartBeatDataPackage;
@Override
@@ -26,7 +27,7 @@
}
//鏍¢獙
hex = hex.replaceAll(" ", "");
- if (hex.length() < 74) {
+ if (hex.length() != 86) {
return null;
}
@@ -44,9 +45,9 @@
setHeartBeatDataPackage(heartBeatDataPackage);
setCrc16(hex.substring(hex.length() - 4));
- // 鏍¢獙CRC32
+ // 鏍¢獙CRC16
String frame = hex.substring(0, hex.length() - 4);
- this.setValidate(getCrc16().equals(CRC16Utils.getCRC16(frame)));
+ this.setValidate(getCrc16().equals(CRCUtils.getCRC16(frame)));
return this;
}
@@ -84,47 +85,137 @@
private BigDecimal radiation;
//("鍏夌収")
private BigDecimal illumination;
+ //绱鎸囨暟
+ private BigDecimal ultraviolet;
+ //CO2
+ private BigDecimal co2;
+ //璐熸哀绂诲瓙
+ private BigDecimal o2;
@Override
public HeartBeatDataPackage transformFrame(String hex) {
- //ff 03 20 0241000000000000000000000009000a198a186327b8000c000000000000000b8c35c1ca(鍙傝�冨��)
- // 0241 0000 0000 0000 0000 0000 0009 000a 198a 1863 27b8 000c 0000 0000 0000 000b 8c35 c1ca
+// 010326FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B341022277F000D05B5000000015DDD0000FFFF000070C9 涓诲姩涓婃姤蹇冭烦鍖�
+// 01锛氱郴缁熷湴鍧�
+// 03锛氬姛鑳界爜
+// 26锛氭暟鎹瀛� 鑺傛暟閲�
+// FFFF锛氬櫔澹�-------銆�
+// FFFF锛氱~鍖栨阿-------銆�
+// FFFF锛歋O2 娴撳害-------銆�
+// FFFF锛歂O2 娴撳害-------銆�
+// FFFF锛欳O 娴撳害-------銆�
+// FFFF锛歄3 娴撳害-------銆�
+// FFFF锛歅M2.5 娴撳害-------銆�
+// FFFF锛歅M10 娴撳害-------銆�
+// 1B34锛氱┖姘旀俯搴�-------銆�29.64鈩�
+// 1022锛氱┖姘旀箍搴�-------銆�41.30%
+// 277F锛氬ぇ姘斿帇寮�-------銆�101.11hPa
+// 000D锛氶閫�-------銆�0.13m/s
+// 05B5锛氶鍚�-------銆�146.1掳
+// 0000锛氳繛缁洦閲�-------銆�0mm
+// 0001锛氳緪灏�-------銆�1W/銕�
+// 5DDD锛氬厜鐓�-------銆�240.29Klux
+// 0000锛氱传澶栨寚鏁�-------銆�
+// FFFF锛欳O2-------銆�
+// 0000锛氳礋姘х瀛�-------銆�
+// 70C9锛欳RC16 鏍¢獙浣�
//鍣0
- this.noise = BigDecimal.valueOf(parseVal(hex, 6, 10) / 10.0);
+ if (isValidData(hex, 6, 10)) {
+ this.noise = new BigDecimal(parseVal(hex, 6, 10)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+ }
//纭寲姘�
- this.hydrogenSulfide = BigDecimal.valueOf(parseVal(hex, 10, 14) / 1.0);
+ if (isValidData(hex, 10, 14)) {
+ this.hydrogenSulfide = new BigDecimal(parseVal(hex, 10, 14));
+ }
//SO2 娴撳害
- this.so2 = BigDecimal.valueOf(parseVal(hex, 14, 18) / 1.0);
+ if (isValidData(hex, 14, 18)) {
+ this.so2 = new BigDecimal(parseVal(hex, 14, 18));
+ }
//NO2 娴撳害
- this.no2 = BigDecimal.valueOf(parseVal(hex, 18, 22) / 1.0);
+ if (isValidData(hex, 18, 22)) {
+ this.no2 = new BigDecimal(parseVal(hex, 18, 22));
+ }
//CO 娴撳害
- this.co = BigDecimal.valueOf(parseVal(hex, 22, 26) / 1.0);
+ if (isValidData(hex, 22, 26)) {
+ this.co = new BigDecimal(parseVal(hex, 22, 26));
+ }
//O3 娴撳害
- this.o3 = BigDecimal.valueOf(parseVal(hex, 26, 30) / 1.0);
+ if (isValidData(hex, 26, 30)) {
+ this.o3 = new BigDecimal(parseVal(hex, 26, 30));
+ }
//PM2.5 娴撳害
- this.pm2point5 = BigDecimal.valueOf(parseVal(hex, 30, 34) / 1.0);
+ if (isValidData(hex, 30, 34)) {
+ this.pm2point5 = new BigDecimal(parseVal(hex, 30, 34));
+ }
//PM10 娴撳害
- this.pm10 = BigDecimal.valueOf(parseVal(hex, 34, 38) / 1.0);
+ if (isValidData(hex, 34, 38)) {
+ this.pm10 = new BigDecimal(parseVal(hex, 34, 38));
+ }
//绌烘皵娓╁害
- this.airTemperature = BigDecimal.valueOf(parseVal(hex, 38, 42) / 100.0 - 40);
+ if (isValidData(hex, 38, 42)) {
+ this.airTemperature = new BigDecimal(parseVal(hex, 38, 42)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(40));
+ }
//绌烘皵婀垮害
- this.airHumidity = BigDecimal.valueOf(parseVal(hex, 42, 46) / 100.0);
+ if (isValidData(hex, 42, 46)) {
+ this.airHumidity = new BigDecimal(parseVal(hex, 42, 46)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+ }
//澶ф皵鍘嬪己
- this.airPressure = BigDecimal.valueOf(parseVal(hex, 46, 50) / 10.0);
+ if (isValidData(hex, 46, 50)) {
+ this.airPressure = new BigDecimal(parseVal(hex, 46, 50)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+ }
//椋庨��
- this.windSpeed = BigDecimal.valueOf(parseVal(hex, 50, 54) / 100.0);
+ if (isValidData(hex, 50, 54)) {
+ this.windSpeed = new BigDecimal(parseVal(hex, 50, 54)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+ }
//椋庡悜
- this.windDirection = BigDecimal.valueOf(parseVal(hex, 54, 58) / 10.0);
+ if (isValidData(hex, 54, 58)) {
+ this.windDirection = new BigDecimal(parseVal(hex, 54, 58)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+ }
//10 鍒嗛挓闆ㄩ噺
- this.tenRainfallMin = BigDecimal.valueOf(parseVal(hex, 58, 62) / 10.0);
+ if (isValidData(hex, 58, 62)) {
+ this.tenRainfallMin = new BigDecimal(parseVal(hex, 58, 62)).divide(new BigDecimal(10), 1, BigDecimal.ROUND_HALF_UP);
+ }
//杈愬皠
- this.radiation = BigDecimal.valueOf(parseVal(hex, 62, 66) / 1.0);
+ if (isValidData(hex, 62, 66)) {
+ this.radiation = new BigDecimal(parseVal(hex, 62, 66));
+ }
//鍏夌収
- this.illumination = BigDecimal.valueOf(parseVal(hex, 66, 70) / 100.0);
+ if (isValidData(hex, 66, 70)) {
+ this.illumination = new BigDecimal(parseVal(hex, 66, 70)).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+ }
+ //绱鎸囨暟
+ if (isValidData(hex, 70, 74)) {
+ this.ultraviolet = new BigDecimal(parseVal(hex, 70, 74)).divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP);
+ }
+ //CO2
+ if (isValidData(hex, 74, 78)) {
+ this.co2 = new BigDecimal(parseVal(hex, 74, 78));
+ }
+ //璐熸哀绂诲瓙
+ if (isValidData(hex, 78, 82)) {
+ this.o2 = BigDecimal.valueOf(parseVal(hex, 78, 82) * 10.0);
+ this.o2 = new BigDecimal(parseVal(hex, 78, 82)).multiply(new BigDecimal(1));
+ }
return this;
}
+ /**
+ * 鍒ゆ柇璇ュぇ姘旇澶囨槸鍚︽湁瀵瑰簲鐨勬劅搴斿櫒
+ *
+ * @param value
+ * @param startIndex
+ * @param endIndex
+ * @return
+ */
+ private boolean isValidData(String value, int startIndex, int endIndex) {
+ //FFFF鏄唬琛ㄨ繖涓澶囦笉鏀寔杩欎釜鏁版嵁椤广��0000鏄〃绀烘敮鎸佷絾鏄暟鎹负闆�
+ if ("FFFF".equals(value.substring(startIndex, endIndex))) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
private Integer parseVal(String frame, int start, int end) {
return Integer.parseInt(frame.substring(start, end), 16);
}
--
Gitblit v1.9.3