xumu_iotdb/config.py

175 lines
4.8 KiB
Python
Raw Normal View History

2024-01-24 15:32:58 +08:00
# 数据库插入类型
import base64
2024-02-03 18:04:54 +08:00
import time
2024-01-24 15:32:58 +08:00
2024-01-24 16:27:34 +08:00
rfid_type = ["TEXT", "TEXT", "FLOAT", "INT32"]
air_type = ["TEXT", "FLOAT", "FLOAT", "INT32"]
else_type = ["TEXT", "FLOAT", "INT32"]
2024-02-05 10:56:21 +08:00
rfid_measurement = ["iccid", "RFID", "temperature" "type"]
2024-02-03 18:04:54 +08:00
air_measurement = ["iccid", "air_temperature", "air_humidity", "type"]
else_measurement = ["iccid", "value", "type"]
2024-01-24 15:32:58 +08:00
dataTypes = {
0: rfid_type,
1: air_type,
2: else_type,
3: else_type,
4: else_type,
5: else_type,
}
2024-02-03 18:04:54 +08:00
measurements = {
0: rfid_measurement,
1: air_measurement,
2: else_measurement,
3: else_measurement,
4: else_measurement,
5: else_measurement,
}
2024-01-24 15:32:58 +08:00
baseHost = "https://iot.lihaink.cn/iotdb_restapi"
# 注意这里前面不能加/
insertUri = "rest/v2/insertRecords"
queryUri = "rest/v2/query"
2024-01-25 09:42:51 +08:00
nonQueryUri = "rest/v2/nonQuery"
2024-01-24 15:32:58 +08:00
# 鉴权
username = 'root'
password = 'root'
code = (username + ":" + password).encode("utf-8")
token = base64.encodebytes(code).decode("utf-8").strip()
headers = {
'ContentType': 'application/json',
'Authorization': "Basic " + token
}
2024-01-25 17:10:40 +08:00
2024-01-24 17:09:03 +08:00
2024-02-03 18:04:54 +08:00
def RFID_template(type, deviceId):
2024-01-24 17:09:03 +08:00
return [
2024-02-03 18:04:54 +08:00
f"CREATE TIMESERIES root.{type}.{deviceId}.iccid(cid) WITH datatype=TEXT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.temperature(v) WITH datatype=FLOAT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.RFID(r) WITH datatype=TEXT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.type(t) WITH datatype=INT32,ENCODING=PLAIN",
2024-01-24 17:09:03 +08:00
]
2024-02-03 18:04:54 +08:00
def common_template(type, deviceId):
2024-01-24 17:09:03 +08:00
return [
2024-02-03 18:04:54 +08:00
f"CREATE TIMESERIES root.{type}.{deviceId}.iccid(cid) WITH datatype=TEXT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.value(v) WITH datatype=FLOAT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.type(t) WITH datatype=INT32,ENCODING=PLAIN",
2024-01-24 17:09:03 +08:00
]
2024-02-03 18:04:54 +08:00
def air_template(type, deviceId):
2024-01-24 17:09:03 +08:00
return [
2024-02-03 18:04:54 +08:00
f"CREATE TIMESERIES root.{type}.{deviceId}.iccid(cid) WITH datatype=TEXT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.air_temperature(at) WITH datatype=FLOAT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.air_humidity(ah) WITH datatype=FLOAT,ENCODING=PLAIN",
f"CREATE TIMESERIES root.{type}.{deviceId}.type(t) WITH datatype=INT32,ENCODING=PLAIN",
2024-01-24 17:09:03 +08:00
]
2024-02-03 18:04:54 +08:00
def warning_sql(deviceId, type):
template = "warning"
match type:
case 0:
return RFID_template(template, deviceId)
case 1:
return air_template(template, deviceId)
case _:
return common_template(template, deviceId)
2024-01-25 14:10:42 +08:00
def rfid_deviceId(rfid, deviceId):
return [
2024-01-25 14:54:28 +08:00
f"insert into root.rfid(rfid, deviceId) values('{rfid}', '{deviceId}')"
2024-01-25 14:10:42 +08:00
]
2024-02-05 10:51:39 +08:00
def is_warning(deviceId, v, t):
match t:
case 0:
temperature = v[1]
if 41.0 <= temperature or temperature <= 37.0:
return True
case 1:
air_temperature = v[1]
air_humidity = v[2]
if 40.0 <= air_temperature or air_temperature <= 0:
return True
if 80.0 <= air_humidity or air_humidity <= 30.0:
return True
case 2:
danqi = v[1]
if danqi >= 1.24:
return True
case 3:
jiawan = v[1]
2024-02-05 10:55:12 +08:00
if jiawan > 3000:
2024-02-05 10:51:39 +08:00
return True
case 4:
zaoyin = v[1]
if zaoyin >= 55:
return True
case 5:
yanwu = v[1]
if yanwu >= 200:
return True
return False
2024-02-03 18:04:54 +08:00
def insert_to_warning_sql(deviceId, v, t):
return {
"devices": ["root.warning." + deviceId],
"timestamps": [int(time.time() * 1000)],
"measurements_list": [measurements[t]],
"data_types_list": [dataTypes[t]],
"values_list": [v],
"is_aligned": False
}
2024-01-24 17:09:03 +08:00
# 数据库创建字段sql语句
2024-02-03 18:04:54 +08:00
def farm_sql(deviceId, type):
template = "farm"
2024-01-24 17:09:03 +08:00
match type:
case 0:
2024-02-03 18:04:54 +08:00
return RFID_template(template, deviceId)
2024-01-24 17:09:03 +08:00
case 1:
2024-02-03 18:04:54 +08:00
return air_template(template, deviceId)
2024-01-24 17:09:03 +08:00
case _:
2024-02-03 18:04:54 +08:00
return common_template(template, deviceId)
2024-01-25 17:10:40 +08:00
2024-01-26 16:28:47 +08:00
def get_client_change_status_sql(timestamp, status):
if status:
return [f"insert into root.farm.clientId(timestamp, is_online) values({timestamp}, True)"]
else:
return [f"insert into root.farm.clientId(timestamp, is_online) values({timestamp}, False)"]
2024-01-25 17:10:40 +08:00
# 监控视频接口
def get_video_url(username):
2024-01-28 16:34:25 +08:00
return f"http://rtsp.lihaink.cn/live/xumu_{username}.live.mp4"
2024-02-03 18:05:40 +08:00
# example
# RFID
send1 = {
"m": ["cid", "r", "v"],
"v": ["abcd", "rfid", 10.62],
"t": 0,
"l": 63
}
# 空气
send2 = {
"m": ["cid", "at", "ah"],
"v": ["test2", 10.62, 50.22],
"t": 1,
"l": 65
}
# 普通
send3 = {
"m": ["cid", "v"],
"v": ["test1", 10.62],
"t": 2,
"l": 50
}