From 4e7500b8db55753fb0d1332c0b495e817a822924 Mon Sep 17 00:00:00 2001 From: xyj <1090822794@qq.com> Date: Mon, 26 Feb 2024 17:52:28 +0800 Subject: [PATCH] fixed --- Readme.md | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 Readme.md diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..6255ed1 --- /dev/null +++ b/Readme.md @@ -0,0 +1,198 @@ + +# 设备类型和字段 +## 设备字段 +1、RFID设备 +| 字段 | 说明 | 类型 | 别名 +| --- | --- |--- | --- | +| iccid | 设备实际iccid | String | cid | +| temperature | 设备检测温度 | Float | t | +| RFID | rfid值 | String | r | +| type | 设备类型(默认0) | INT32 | t | + +2、空气设备 +| 字段 | 说明 | 类型 | 别名 +| --- | --- |--- | --- | +| iccid | 设备实际iccid | String |cid | +| air_temperature | 空气温度 | Float | at| +| air_humidity | 空气湿度 | Float | ah | +| type | 设备类型(默认1) | INT32 |t| + +2、其他设备 +| 字段 | 说明 | 类型 | 别名 +| --- | --- |--- | --- | +| iccid | 设备实际iccid | String |cid | +| value | 设备检测值 | Float | v| +| type | 设备类型 | INT32 | t| +## 设备类型(type字段) + +| **字段** | **说明** | +| --- | --- | +| 0 | RFID设备(耳环) | +| 1 | 空气设备 | +| 2 | 氮气 | +| 3 | 甲烷 | +| 4 | 噪音 | +| 5 | 烟雾(防火) | + +# 设备查询接口 +请求接口:`GET /api/xumu/device/query` +参数:`iccid`,`deviceId` +说明: +该接口通过`iccid`和`deviceId`参数,构造动态sql语句进行查询,两个参数都是可选。sql语句如下: + +```python +sql = "SELECT * FROM root.device where time>=0" +# 检查iccid是否有值,如果有,添加到SQL语句中 +if iccid: + sql += f" and iccid = '{iccid}'" +# 检查deviceId是否有值,如果有,添加到SQL语句中 +if deviceId: + sql += f" and deviceId = '{deviceId}'" +``` +# RFID设备数据查询接口 +**RFID设备是指耳环设备** +请求接口:`GET /api/xumu/rfid/query` +参数:`rfid` +说明: +该接口通过`rfid`参数,构建sql语句进行查询,sql语句如下: + +```sql +select deviceId from root.rfid where rfid='{rfid}' +``` +# 其他设备数据查询接口 +其他设备包括**空气设备、氮气设备、甲烷设备、噪音设备和烟雾设备**。 +请求接口:`GET /api/xumu/data/query` +参数:`deviceId` +说明: +该接口通过`deviceId`参数,构建sql语句进行查询,sql语句如下,**只查询最新的一条数据**: + +```sql +select last * from root.farm.{deviceId} +``` +# 监控视频地址接口 +请求接口:`GET /api/xumu/video` +参数:`username` +摄像机网页登录密码:`lihai123` +摄像机网页登录用户名:`admin` +摄像机网页地址:`192.168.0.123` + +# 报警数据接口 +请求接口:`GET /api/xumu/warning` +参数:`deviceId` +该接口通过`deviceId`参数,构造动态sql语句进行查询。sql语句如下: + +```js +select * from root.warning.{deviceId} +``` + + +# 项目设计架构 +该项目通过iotdb存储嵌入式设备上传数据。iotdb的结构如下: + +![image.png](https://api.apifox.com/api/v1/projects/3951783/resources/422353/image-preview) +- root.device + 设备注册时,会将设备的注册信息存储到该表。表的字段为: + + ```js + iccid:设备的实际出厂编号 + deviceId:设备映射编号 + type:设备类型 + ``` +- root.rfid + 嵌入式设备上传数据时,rfid会上传到对应的4G中转站。此时将rfid和对应的中转站设备进行关联。表的字段为: + ```js + rfid:设备的rfid编号 + deviceId:中转设备的编号 + ``` + +- root.farm + +![image.png](https://api.apifox.com/api/v1/projects/3951783/resources/422374/image-preview) +设备数据库包含三种类型的表,第一种是`root.farm.b001`,`root.farm.b002`,`root.farm.b003`,其中`b001`、`b002`、`b003`代表`deviceId`。 +第一种类型是项圈设备,第二种类型是空气检测设备,第三种是普通检测设备。其中,普通设备包括甲烷检测设备、氮气检测设备、噪音检测设备和烟雾检测设备。 + +项圈设备包含的字段: + +```js +iccid: 设备的iccid编号 +temperature:设备检测温度值 +RFID:rfid编号 +type:设备类型 +``` + +空气检测设备包含的字段: + +```js +iccid: 设备的iccid编号 +air_temperature:设备检测空气温度值 +air_humidity:设备检测空气湿度值 +type:设备类型 +``` + +普通检测设备包含的字段: + +```js +iccid: 设备的iccid编号 +value:设备检测值 +type:设备类型 +``` + +- root.warning + 嵌入式设备上传数据时,进行校验,不符合校验的数据保存到报警数据表。表的字段和root.farm一致。 + +# 设备注册流程 + +![image.png](https://api.apifox.com/api/v1/projects/3951783/resources/422378/image-preview) + +1. 首先,嵌入式设备将数据传到MQTT服务器,MQTT转发到HTTP设备注册接口。 +2. 然后对接收到的数据进行校验,检验失败则丢弃。 +3. 然后查询该设备是否注册过,即查询root.device表,查看是否有iccid, deviceId对应的设备 +4. 如果没有注册过,则将设备信息插入到root.device表。表示该设备已注册。 +5. 设备注册后,创建相应的数据存储表,即在root.farm表,根据相应的设备类型创建相应的字段。 +6. 然后在root.warning数据库中,根据相应的设备类型创建相应的字段。和root.farm保持一致。 + +# 设备数据上传流程 + +![image.png](https://api.apifox.com/api/v1/projects/3951783/resources/422382/image-preview) +1. 首先,嵌入式设备将数据传到MQTT服务器,MQTT转发到HTTP设备数据上传接口。 +2. 然后对接收到的数据进行校验,检验失败则丢弃。 +3. 判断是否为RFID设备,如果是,则将RFID和deviceId进行一个映射。即插入root.rfid表。 +4. 将数据插入到root.farm表 +5. 判断数据是否为异常数据,如果是异常数据,则插入到root.warning表。 + +# 报警数据统计接口 +请求接口:`GET /api/xumu/warning/statistics` +参数:`deviceId` +返回:`totoal_warning_count`,`today_warning_count`。分别代表总的报警数量和当天报警数量 +说明:获取该设备的所有报警数据数量和当天报警数据数量 +- 获取当天报警数据数量,sql语句 + 通过限制time不小于当天0点,获取当天所有的报警数量 +```js +select count(iccid) from root.warning.{deviceId} where time >= {now}T00:00:00" +``` +- 获取所有报警数量,sql语句 + +```js +select count(iccid) from root.warning.{deviceId} +``` +# 报警7天历史数据接口 +请求接口:`/api/xumu/warning/past_seven_days` +参数:`deviceId` +说明:获取该设备的7天历史数据,但每天只返回一个数据。总共返回7条数据。该项目返回当天数据的最大值。 +- 如果是空气设备,则返回两个字段,即空气温度和空气湿度,sql语句如下,past_6_days_date代表过去第6天的时间,tomorow表示当天晚上12点时间,1d代表时间间隔为1天。 +```js +select MAX_VALUE(air_temperature),MAX_VALUE(air_humidity) from root.warning.{deviceId} group by ([{past_6_days_date}, {tomorrow}), 1d) +``` +- 如果是其他普通设备,则返回一个字段,即传感器检测值,sql语句如下: +```js +select MAX_VALUE(value) from root.warning.{deviceId} group by ([{past_6_days_date}, {tomorrow}), 1d) +``` + +# 报警数据所有接口 +请求接口:`GET /api/xumu/warning` +参数:`deviceId`, `limit`, `offset` +sql语句: + +```js +select * from root.warning.{deviceId} limit {limit} offset {offset} +```