2021与蓝度共同重构项目,服务端
Van333
2022-12-29 727a69f859060093e685582fa10e5de82dcc138a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
 
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;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
 
/**
 * 查询传感器数量/故障
 *
 * @author ZZQ
 * @date 2022/8/1 14:02
 */
@Data
public class A5AtmosphereQuerySensorInfoReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQuerySensorInfoReportInnerFrame> {
    //设备地址
    private String deviceAddress;
    //传感器信息
    private SensorInfoPackage sensorInfoPackage;
 
    @Override
    public A5AtmosphereQuerySensorInfoReportInnerFrame transformFrame(String hex) {
        if (StrUtil.isBlank(hex) || hex.length() != 100) {
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  功能码(1)
        setFunctionCode(hex.substring(2, 4));
        //  负荷长度(2)
        setPayloadLength(hex.substring(4, 8));
        //设备地址
        setDeviceAddress(hex.substring(8, 12));
        //传感器信息
        String infoStr = hex.substring(14, hex.length() - 8);
        SensorInfoPackage sensorInfoPackage = new SensorInfoPackage().transformFrame(infoStr);
        setSensorInfoPackage(sensorInfoPackage);
 
        //校验
        setCrc32(hex.substring(hex.length() - 8));
        //  校验CRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
 
    @Data
    public static class SensorInfoPackage implements IResponseInnerFrame<SensorInfoPackage> {
        //  温度值
        private String temperature;
        //  湿度值
        private String humidity;
        //  风速
        private String windSpeed;
        //  风向
        private String windDirection;
        //  风力
        private String windPower;
        //  大气压
        private String pressure;
        //  光强
        private String lightIntensity;
        //  噪音
        private String noise;
        //  PM2.5
        private String pm25;
        //  PM10
        private String pm10;
        //  总悬浮颗粒物(TSP)
        private String tsp;
        //  雨量
        private String rainfall;
        //  甲醛
        private String ech2o;
        //  TVOC
        private String tvoc;
        //  二氧化碳
        private String co2;
        //  SO2二氧化硫相对值
        private String so2;
        //  NO2二氧化氮
        private String no2;
        //  CO一氧化碳
        private String co;
        //  O3臭氧
        private String o3;
        //  F氟化物
        private String fluoride;
 
        @Override
        public SensorInfoPackage transformFrame(String hex) {
            if (StrUtil.isBlank(hex) || hex.length() != 80) {
                System.out.println("数据校验异常!");
                return null;
            }
            //  温度
            setTemperature(hex.substring(2, 4));
            //  湿度
            setHumidity(hex.substring(6, 8));
            //  风速
            setWindSpeed(hex.substring(10, 12));
            //  风向
            setWindDirection(hex.substring(14, 16));
            //  风力
            setWindPower(hex.substring(18, 20));
            //  大气压
            setPressure(hex.substring(22, 24));
            //  光强
            setLightIntensity(hex.substring(26, 28));
            //  噪音
            setNoise(hex.substring(30, 32));
            //  PM2.5
            setPm25(hex.substring(34, 36));
            //  PM10
            setPm10(hex.substring(38, 40));
            //  总悬浮颗粒物(TSP)
            setTsp(hex.substring(42, 44));
            //  雨量
            setRainfall(hex.substring(46, 48));
            //  甲醛
            setEch2o(hex.substring(50, 52));
            //  TVOC
            setTvoc(hex.substring(54, 56));
            //  二氧化碳
            setCo2(hex.substring(58, 60));
            //  SO2二氧化硫相对值
            setSo2(hex.substring(62, 64));
            //  NO2二氧化氮
            setNo2(hex.substring(66, 68));
            //  CO一氧化碳
            setCo(hex.substring(70, 72));
            //  O3臭氧
            setO3(hex.substring(74, 76));
            //  F氟化物
            setFluoride(hex.substring(78, 80));
            return this;
        }
    }
}