Go to file
xyj 1b26df75e2 fixed 2024-03-06 18:02:27 +08:00
.idea fixed 2024-02-24 09:38:55 +08:00
sql fixed 2024-03-06 18:02:27 +08:00
.gitignore update 2024-02-22 10:25:34 +08:00
Readme.md fixed 2024-02-26 17:52:28 +08:00
config.py fixed 2024-02-24 09:38:55 +08:00
requirements.txt update 2024-01-26 14:18:24 +08:00
xumu.py fixed 2024-03-06 18:02:27 +08:00

Readme.md

设备类型和字段

设备字段

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 说明: 该接口通过icciddeviceId参数构造动态sql语句进行查询两个参数都是可选。sql语句如下

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语句如下

select deviceId from root.rfid where rfid='{rfid}'

其他设备数据查询接口

其他设备包括空气设备、氮气设备、甲烷设备、噪音设备和烟雾设备。 请求接口:GET /api/xumu/data/query 参数:deviceId 说明: 该接口通过deviceId参数构建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语句如下

select * from root.warning.{deviceId}

项目设计架构

该项目通过iotdb存储嵌入式设备上传数据。iotdb的结构如下

image.png

  • root.device 设备注册时,会将设备的注册信息存储到该表。表的字段为:

    iccid:设备的实际出厂编号
    deviceId:设备映射编号
    type:设备类型
    
  • root.rfid 嵌入式设备上传数据时rfid会上传到对应的4G中转站。此时将rfid和对应的中转站设备进行关联。表的字段为

    rfid:设备的rfid编号
    deviceId:中转设备的编号
    
  • root.farm

image.png 设备数据库包含三种类型的表,第一种是root.farm.b001root.farm.b002root.farm.b003,其中b001b002b003代表deviceId。 第一种类型是项圈设备,第二种类型是空气检测设备,第三种是普通检测设备。其中,普通设备包括甲烷检测设备、氮气检测设备、噪音检测设备和烟雾检测设备。

项圈设备包含的字段:

iccid: 设备的iccid编号
temperature:设备检测温度值
RFID:rfid编号
type:设备类型

空气检测设备包含的字段:

iccid: 设备的iccid编号
air_temperature:设备检测空气温度值
air_humidity:设备检测空气湿度值
type:设备类型

普通检测设备包含的字段:

iccid: 设备的iccid编号
value:设备检测值
type:设备类型
  • root.warning 嵌入式设备上传数据时进行校验不符合校验的数据保存到报警数据表。表的字段和root.farm一致。

设备注册流程

image.png

  1. 首先嵌入式设备将数据传到MQTT服务器MQTT转发到HTTP设备注册接口。
  2. 然后对接收到的数据进行校验,检验失败则丢弃。
  3. 然后查询该设备是否注册过即查询root.device表查看是否有iccid, deviceId对应的设备
  4. 如果没有注册过则将设备信息插入到root.device表。表示该设备已注册。
  5. 设备注册后创建相应的数据存储表即在root.farm表根据相应的设备类型创建相应的字段。
  6. 然后在root.warning数据库中根据相应的设备类型创建相应的字段。和root.farm保持一致。

设备数据上传流程

image.png

  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点获取当天所有的报警数量
select count(iccid) from root.warning.{deviceId} where time >= {now}T00:00:00"
  • 获取所有报警数量sql语句
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天。
select MAX_VALUE(air_temperature),MAX_VALUE(air_humidity) from root.warning.{deviceId} group by ([{past_6_days_date}, {tomorrow}), 1d)
  • 如果是其他普通设备则返回一个字段即传感器检测值sql语句如下
select MAX_VALUE(value) from root.warning.{deviceId} group by ([{past_6_days_date}, {tomorrow}), 1d)

报警数据所有接口

请求接口:GET /api/xumu/warning 参数:deviceId, limit, offset sql语句

select * from root.warning.{deviceId} limit  {limit} offset {offset}