From 41f01abcbf2c5fd6f63da15a0dabeb34ceb9c3ec Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期三, 03 八月 2022 15:33:50 +0800
Subject: [PATCH] 大气设备
---
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java | 247 ++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 191 insertions(+), 56 deletions(-)
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
index 83c66e0..36fcf3a 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
@@ -39,7 +39,7 @@
setDestinationAddress(hex.substring(8, 12));
- String heartBeatData = hex.substring(12, 76);
+ String heartBeatData = hex.substring(12, hex.length() - 8);
HeartBeatDataPackage heartBeatDataPackage = new HeartBeatDataPackage();
heartBeatDataPackage.transformFrame(heartBeatData);
setHeartBeatDataPackage(heartBeatDataPackage);
@@ -53,96 +53,231 @@
@Data
public static class HeartBeatDataPackage implements IResponseInnerFrame<HeartBeatDataPackage> {
+// 缂栧彿 鏁版嵁 鍚箟 鍗曚綅
+// D7:D6 D5:D4 D3:D2 D1:D0
+// 0x01 绌猴紝鐢�0x00濉厖 0x00~0xEC 0x00~0x09 娓╁害 0.1鈩�
+// 0x02 绌猴紝鐢�0x00濉厖 0x00~0x64 0x00~0x09 婀垮害 0.1%
+// 0x03 绌猴紝鐢�0x00濉厖 0x00 0x00 椋庨�� 0.1m/s
+// 0x04 绌猴紝鐢�0x00濉厖 0xF8鎴�0x00 0x00 椋庡悜 鍏柟鍚�/0.1鈩�
+// 0x05 绌猴紝鐢�0x00濉厖 绌猴紝鐢�0x00濉厖 0x00~0x12 椋庡姏 绾�
+// 0x06 0x00 0x00 0x00 澶ф皵鍘� 0.01hPA(鐧惧笗鏂崱锛�
+// 0x07 0x00 0x00 0x00 鍏夊己 Lux
+// 0x08 绌猴紝鐢�0x00濉厖 0x00 0x00 鍣煶 0.1dB
+// 0x09 绌猴紝鐢�0x00濉厖 0x00 0x00 PM2.5 ug/m3
+// 0x0A 绌猴紝鐢�0x00濉厖 0x00 0x00 PM10 ug/m3
+// 0x0B 绌猴紝鐢�0x00濉厖 0x00 0x00 TSP ug/m3
+// 0x0C 绌猴紝鐢�0x00濉厖 0x00 0x00 闆ㄩ噺 0.1mm
+// 0x0D 绌猴紝鐢�0x00濉厖 0x00 0x00 鐢查啗 ppm
+// 0x0E 绌猴紝鐢�0x00濉厖 0x00 0x00 TVOC ppm
+// 0x0F 绌猴紝鐢�0x00濉厖 0x00 0x00 eCO2 ppm
+// 0x10 绌猴紝鐢�0x00濉厖 0x00 0x00 SO2浜屾哀鍖栫~ ppm
+// 0x11 绌猴紝鐢�0x00濉厖 0x00 0x00 NO2浜屾哀鍖栨爱 ppm
+// 0x12 绌猴紝鐢�0x00濉厖 0x00 0x00 CO涓�姘у寲纰� ppm
+// 0x13 绌猴紝鐢�0x00濉厖 0x00 0x00 O3鑷哀 ppm
+// 0x14 绌猴紝鐢�0x00濉厖 0x00 0x00 F姘熷寲鐗� ppm
+
// 璁惧鍨嬪彿 2
private String deviceType;
// 妯″潡棰勭儹鐘舵�佹爣蹇� 1
private String moduleWarmUpStatusFlag;
// 娓╁害鍊�
- private Double temperature;
+ private String temperature;
// 婀垮害鍊�
- private Double humidity;
+ private String humidity;
// 椋庨��
- private Double windSpeed;
+ private String windSpeed;
// 椋庡悜
- private Double windDirection;
+ private String windDirection;
+ // 椋庡姏
+ private String windPower;
// 澶ф皵鍘�
- private Integer pressure;
+ private String pressure;
// 鍏夊己
- private Integer lightIntensity;
+ private String lightIntensity;
// 鍣煶
- private Double noise;
+ private String noise;
// PM2.5
- private Integer pm25;
+ private String pm25;
// PM10
- private Integer pm10;
+ private String pm10;
+ //鎬绘偓娴绮掔墿TSP
+ private String tsp;
// 闆ㄩ噺
- private Double rainfall;
+ private String rain;
// SO2浜屾哀鍖栫~鐩稿鍊�
- private Integer so2;
+ private String so2;
// 鐢查啗鐩稿鍊�
- private Integer ech2o;
+ private String ech2o;
// NO2浜屾哀鍖栨爱
- private Integer no2;
+ private String no2;
// TVOC
- private Integer tvoc;
+ private String tvoc;
// CO涓�姘у寲纰�
- private Integer co;
+ private String co;
// 浜屾哀鍖栫⒊
- private Integer co2;
+ private String co2;
// O3鑷哀
- private Integer o3;
+ private String o3;
// F姘熷寲鐗�
- private Integer fluoride;
+ private String fluoride;
@Override
public HeartBeatDataPackage transformFrame(String hex) {
- if (hex.length() != 64) {
+ //鍒ゆ柇鏁版嵁闀垮害鏄惁姝g‘
+ if (hex == null || hex.substring(6).length() % 8 != 0) {
+ System.out.println("hex:---" + hex);
+ System.out.println("蹇冭烦鍖呮暟鎹紓甯革紒");
return null;
}
+
+ //璁惧鍨嬪彿
Integer type = 0;
this.deviceType = hex.substring(0, 4);
if (this.deviceType.equals(DeviceType.SENSOR_V1.getType())) {
type = 1;
}
+ //妯″潡棰勭儹鐘舵�佹爣蹇�
this.moduleWarmUpStatusFlag = hex.substring(4, 6);
- this.temperature = Double.parseDouble(
- parseVal(hex, 6, 8)
- + "."
- + parseVal(hex, 8, 10)
- );
- this.humidity = Double.parseDouble(
- parseVal(hex, 10, 12)
- + "."
- + parseVal(hex, 12, 14)
- );
- this.windSpeed = parseVal(hex, 14, 18) * .1;
- this.windDirection = parseVal(hex, 18, 22) * .1;
- this.pressure = parseVal(hex, 22, 26);
- this.lightIntensity = parseVal(hex, 26, 32);
- this.noise = parseVal(hex, 32, 36) * .1;
- this.pm25 = parseVal(hex, 36, 40);
- this.pm10 = parseVal(hex, 40, 44);
- this.rainfall = parseVal(hex, 44, 48) * .1;
- /**
- * 浠ヤ笅鍖哄垎鐗堟湰
- */
- if (type.equals(1)) {
- this.ech2o = parseVal(hex, 48, 52);
- this.tvoc = parseVal(hex, 52, 56);
- this.co2 = parseVal(hex, 56, 60);
- } else {
- this.so2 = parseVal(hex, 48, 52);
- this.ech2o = parseVal(hex, 48, 52);
- this.tvoc = parseVal(hex, 52, 56);
- this.no2 = parseVal(hex, 52, 56);
- this.co = parseVal(hex, 56, 60);
- this.co2 = parseVal(hex, 56, 60);
+ //蹇冭烦鍖呰澶囨暟鎹�
+ String data = hex.substring(6, hex.length() - 8);
+ int lenght = data.length() / 8;
+ //璁惧鏁版嵁
+ String sub;
+ for (int i = 0; i < lenght; i++) {
+ sub = data.substring(i * 8, i * 8 + 8);
+ switch (data.substring(i * 8, i * 8 + 2)) {
+ //娓╁害
+ case "01":
+ //01001E01
+ this.temperature = Double.parseDouble(
+ parseVal(sub, 4, 6)
+ + "."
+ + parseVal(sub, 6, 8)
+ ) + "鈩�";
+ break;
+ //婀垮害
+ case "02":
+ //02003608
+ this.humidity = Double.parseDouble(
+ parseVal(sub, 4, 6)
+ + "."
+ + parseVal(sub, 6, 8)
+ ) + "%";
+ break;
+ //椋庨��
+ case "03":
+ //03000000
+ this.windSpeed = parseVal(sub, 4, 8) * .1 + "m/s";
+ break;
+ //椋庡悜
+ case "04":
+ //0400F804
+ if ("F8".equals(sub.substring(4, 6))) {
+ //鍏悜娆鹃鍚戜华
+ switch (sub.substring(6, 8)) {
+ case "00":
+ this.windDirection = "鍖楅";
+ break;
+ case "01":
+ this.windDirection = "涓滃寳椋�";
+ break;
+ case "02":
+ this.windDirection = "涓滈";
+ break;
+ case "03":
+ this.windDirection = "涓滃崡椋�";
+ break;
+ case "04":
+ this.windDirection = "鍗楅";
+ break;
+ case "05":
+ this.windDirection = "瑗垮崡椋�";
+ break;
+ case "06":
+ this.windDirection = "瑗块";
+ break;
+ case "07":
+ this.windDirection = "瑗垮寳椋�";
+ break;
+ default:
+ this.windDirection = "鏈煡椋庡悜";
+ }
+ } else if ("00".equals(sub.substring(4, 6))) {
+ //360搴︽椋庡悜浠�
+ this.windDirection = parseVal(sub, 4, 8) * .1 + "鈩�";
+ }
+ break;
+ //椋庡姏
+ case "05":
+ this.windPower = sub.substring(6, 8) + "绾�";
+ break;
+ //澶ф皵鍘�
+ case "06":
+ //06000000
+ this.pressure = parseVal(sub, 2, 8) * .01 + "hPA";
+ break;
+ //鍏夊己
+ case "07":
+ this.lightIntensity = parseVal(sub, 2, 8) + "Lux";
+ break;
+ //鍣煶
+ case "08":
+
+ this.noise = parseVal(sub, 4, 8) * .1 + "dB";
+ break;
+ //PM2.5
+ case "09":
+ this.pm25 = parseVal(sub, 4, 8) + "ug/m3";
+ break;
+ //PM10
+ case "0A":
+ this.pm10 = parseVal(sub, 4, 8) + "ug/m3";
+ break;
+ //TSP
+ case "0B":
+ this.tsp = parseVal(sub, 4, 8) + "ug/m3";
+ break;
+ //闆ㄩ噺
+ case "0C":
+ this.rain = parseVal(sub, 4, 8) * .1 + "mm";
+ break;
+ //鐢查啗
+ case "0D":
+ this.ech2o = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //TVOC
+ case "0E":
+ this.tvoc = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //eCO2
+ case "0F":
+ this.co2 = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //SO2浜屾哀鍖栫~
+ case "10":
+ this.so2 = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //NO2浜屾哀鍖栨爱
+ case "11":
+ this.no2 = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //CO涓�姘у寲纰�
+ case "12":
+ this.co = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //O3鑷哀
+ case "13":
+ this.o3 = parseVal(sub, 4, 8) + "ppm";
+ break;
+ //F姘熷寲鐗�
+ case "14":
+ this.fluoride = parseVal(sub, 4, 8) + "ppm";
+ break;
+ default:
+ return null;
+ }
}
-
- this.o3 = parseVal(hex, 60, 62);
- this.fluoride = parseVal(hex, 62, 64);
-
return this;
}
--
Gitblit v1.9.3