Skip to content

Commit 240d83c

Browse files
committed
aaa
1 parent 45b4615 commit 240d83c

3 files changed

Lines changed: 76 additions & 15 deletions

File tree

main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ def analyze_data():
2525
@app.route('/do_analyze_data', methods=["GET"])
2626
def do_analyze_data():
2727
params = request.args
28-
return generate_table()
28+
print(params)
29+
return generate_table(params.get('only_warn','否'))
2930

3031
@app.route('/champion_pool_analyze', methods=["POST"])
3132
def champion_pool_analyze():

service.py

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
from collections import defaultdict
22
from datetime import datetime
3-
3+
import matplotlib.pyplot as plt
44
import pandas
55
import requests
66
from flask import json
7+
from matplotlib.font_manager import FontProperties
78

89

910
def url():
1011
return 'http://123.139.89.242:60000/api/rxframes'
1112

1213

13-
1414
def params_generate(_page, _perPage, _sortDir, _sortField):
1515
params = []
1616
params.append(['_page', _page])
@@ -20,30 +20,82 @@ def params_generate(_page, _perPage, _sortDir, _sortField):
2020
print(params)
2121
return params
2222

23-
def generate_table():
23+
24+
def parse_time(time_str):
25+
try:
26+
return datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S.%fZ')
27+
except ValueError:
28+
return datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%SZ')
29+
30+
31+
def generate_table(only_warn='否'):
32+
print(only_warn)
2433
headers = {
2534
'Authorization': 'Digest username="admin", realm="lorawan-server", nonce="1926482c41e2ef6920550754dd337b9d", uri="/api/rxframes?_page=1&_perPage=30&_sortDir=DESC&_sortField=datetime", response="49f64634dce3c378e78113455f32ecb4"'
2635
}
27-
response = requests.get(url(), headers=headers, params=params_generate(1, 30, 'DESC', 'datetime'))
28-
data=json.loads(response.content)
36+
response = requests.get(url(), headers=headers, params=params_generate(1, 1000, 'DESC', 'datetime'))
37+
response_data = json.loads(response.content)
2938

3039
# 创建一个字典对象,以devaddr作为key,默认值为一个空列表
3140
grouped_data = {}
3241

3342
# 遍历原始列表中的元素,将每个元素添加到它对应的devaddr的列表中
34-
for item in data:
35-
item['datetime'] = datetime.strptime(item['datetime'], "%Y-%m-%dT%H:%M:%S.%fZ")
43+
for item in response_data:
44+
item['datetime'] = parse_time(item['datetime'])
3645
if item['devaddr'] not in grouped_data:
37-
grouped_data[item['devaddr']]=[]
46+
grouped_data[item['devaddr']] = []
3847
grouped_data[item['devaddr']].append(item)
3948

4049
# 对每个devaddr的列表按照datetime从新到旧排序
4150
for devaddr in grouped_data:
4251
grouped_data[devaddr].sort(key=lambda x: x['datetime'], reverse=True)
4352

44-
result=[]
53+
result = []
4554
for key in grouped_data:
46-
item=grouped_data.get(key)[0]
47-
result.append([item['devaddr'],item['datetime']])
55+
try:
56+
item = grouped_data.get(key)[0]
57+
data = item['data']
58+
last_eight = data[-8:]
59+
TH = int(str(last_eight[0:2]), 16)
60+
TL = int(str(last_eight[2:4]), 16)
61+
HH = int(str(last_eight[4:6]), 16)
62+
HL = int(str(last_eight[6:8]), 16)
63+
64+
tem = ((TH & 7) * 256 + TL) * 0.0625
65+
hum = ((HH & 3) * 256 + HL) / 10
66+
warn = False
67+
if tem > 35:
68+
warn = True
69+
if only_warn=='否' or warn==True:
70+
result.append([item['devaddr'], item['datetime'], tem, hum, warn])
71+
72+
except:
73+
pass
74+
75+
return pandas.DataFrame(result, columns=['devaddr', '时间', '温度', '湿度', '是否报警']).to_html()
76+
77+
def draw():
78+
# 假设数据在这个列表中
79+
data = [
80+
{'时间': '2021-01-01', '温度': 10},
81+
{'时间': '2021-01-02', '温度': 11},
82+
{'时间': '2021-01-03', '温度': 12},
83+
{'时间': '2021-01-04', '温度': 13},
84+
{'时间': '2021-01-05', '温度': 12},
85+
]
86+
87+
# 将时间和温度分别保存到两个列表中
88+
time_list = [d['时间'] for d in data]
89+
temperature_list = [d['温度'] for d in data]
90+
91+
# 画图
92+
fig, ax = plt.subplots()
93+
ax.plot(time_list, temperature_list)
94+
ax.set(xlabel='datetime', ylabel='温度', title='温度变化折线图')
95+
ax.grid()
96+
97+
# 将绘制的图形保存到文件中
98+
fig.savefig("temperature.png")
4899

49-
return pandas.DataFrame(result, columns=['devaddr','datetime']).to_html()
100+
if __name__ == "__main__":
101+
draw()

templates/analyze_data.html

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
var tables1 = document.getElementById('tables1');
1313
tables1.style.display = "block";
1414
tables1.innerHTML = "<h2>...</h2>";
15-
15+
params = "?only_warn="+document.getElementById('only_warn').value;
1616
var xhr = new XMLHttpRequest();
17-
xhr.open('GET', `do_analyze_data`);
17+
xhr.open('GET', `do_analyze_data`+params);
1818
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
1919
xhr.onreadystatechange = function () {
2020
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
@@ -43,9 +43,17 @@
4343

4444
</head>
4545

46+
<datalist id="bool">
47+
<option value=""></option>
48+
<option value=""></option>
49+
</datalist>
50+
4651
<body>
52+
<img src="temperature.png">
4753
<div>
4854
<button id="run" onclick="refresh(1)">分析</button>
55+
<label for="only_warn">只看报警</label>
56+
<input id="only_warn" type="text" list="bool">
4957
<br>
5058
<div id="tables1" style="margin:0;width:800px;text-align:left;">
5159
</div>

0 commit comments

Comments
 (0)