Update app.py
Browse files
app.py
CHANGED
@@ -9,7 +9,7 @@ import base64
|
|
9 |
from dotenv import load_dotenv
|
10 |
import globs
|
11 |
from flask import render_template
|
12 |
-
|
13 |
load_dotenv()
|
14 |
|
15 |
# Инициализация базы данных
|
@@ -181,32 +181,24 @@ def get_all_data():
|
|
181 |
|
182 |
|
183 |
|
184 |
-
@app.route('/plot_ph', methods=['GET'
|
185 |
def plot_ph():
|
186 |
try:
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
# Сохраняем данные в сессии
|
192 |
-
session['start_date'] = start_date
|
193 |
-
session['end_date'] = end_date
|
194 |
-
|
195 |
-
# Перенаправляем на GET с параметрами
|
196 |
-
return redirect(url_for('plot_ph'))
|
197 |
-
|
198 |
-
# Если метод GET, проверяем наличие данных в сессии
|
199 |
-
start_date = session.get('start_date')
|
200 |
-
end_date = session.get('end_date')
|
201 |
|
|
|
202 |
if start_date and end_date:
|
203 |
# Преобразуем даты в формат datetime
|
204 |
start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
|
205 |
end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
|
206 |
|
207 |
-
#
|
208 |
conn = sqlite3.connect('system_data.db')
|
209 |
cursor = conn.cursor()
|
|
|
|
|
210 |
cursor.execute('''
|
211 |
SELECT date_time, ph, dey, wek
|
212 |
FROM system_data
|
@@ -214,24 +206,26 @@ def plot_ph():
|
|
214 |
ORDER BY date_time
|
215 |
''', (start_date, end_date))
|
216 |
rows = cursor.fetchall()
|
|
|
217 |
conn.close()
|
218 |
|
|
|
219 |
if not rows:
|
220 |
return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
|
221 |
|
222 |
# Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
|
223 |
-
dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows]
|
224 |
-
ph_values = [float(row[1]) for row in rows]
|
225 |
|
226 |
# Создаем график
|
227 |
-
plt.figure(figsize=(15, 6))
|
228 |
-
plt.plot(dates, ph_values, marker='o', linestyle='-', color='b')
|
229 |
plt.title('График значений pH')
|
230 |
plt.xlabel('Дата и время')
|
231 |
plt.ylabel('Значение pH')
|
232 |
-
plt.xticks(rotation=90)
|
233 |
plt.grid(True)
|
234 |
-
plt.gcf().subplots_adjust(bottom=0.4)
|
235 |
|
236 |
# Сохраняем график в буфер
|
237 |
buffer = io.BytesIO()
|
@@ -251,12 +245,12 @@ def plot_ph():
|
|
251 |
</html>
|
252 |
'''
|
253 |
|
254 |
-
# Если
|
255 |
return '''
|
256 |
<html>
|
257 |
<body>
|
258 |
<h1>Выберите диапазон даты и времени для графика pH</h1>
|
259 |
-
<form method="
|
260 |
<label for="start_date">Начало:</label>
|
261 |
<input type="datetime-local" id="start_date" name="start_date" required>
|
262 |
<br><br>
|
|
|
9 |
from dotenv import load_dotenv
|
10 |
import globs
|
11 |
from flask import render_template
|
12 |
+
|
13 |
load_dotenv()
|
14 |
|
15 |
# Инициализация базы данных
|
|
|
181 |
|
182 |
|
183 |
|
184 |
+
@app.route('/plot_ph', methods=['GET'])
|
185 |
def plot_ph():
|
186 |
try:
|
187 |
+
# Получаем параметры из URL (если они есть)
|
188 |
+
start_date = request.args.get('start_date')
|
189 |
+
end_date = request.args.get('end_date')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
|
191 |
+
# Если параметры есть, строим график
|
192 |
if start_date and end_date:
|
193 |
# Преобразуем даты в формат datetime
|
194 |
start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
|
195 |
end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
|
196 |
|
197 |
+
# Подключаемся к базе данных
|
198 |
conn = sqlite3.connect('system_data.db')
|
199 |
cursor = conn.cursor()
|
200 |
+
|
201 |
+
# Выполняем запрос для получения данных в заданном диапазоне
|
202 |
cursor.execute('''
|
203 |
SELECT date_time, ph, dey, wek
|
204 |
FROM system_data
|
|
|
206 |
ORDER BY date_time
|
207 |
''', (start_date, end_date))
|
208 |
rows = cursor.fetchall()
|
209 |
+
|
210 |
conn.close()
|
211 |
|
212 |
+
# Проверяем, есть ли данные
|
213 |
if not rows:
|
214 |
return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
|
215 |
|
216 |
# Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
|
217 |
+
dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
|
218 |
+
ph_values = [float(row[1]) for row in rows] # Значения pH
|
219 |
|
220 |
# Создаем график
|
221 |
+
plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
|
222 |
+
plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
|
223 |
plt.title('График значений pH')
|
224 |
plt.xlabel('Дата и время')
|
225 |
plt.ylabel('Значение pH')
|
226 |
+
plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
|
227 |
plt.grid(True)
|
228 |
+
plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
|
229 |
|
230 |
# Сохраняем график в буфер
|
231 |
buffer = io.BytesIO()
|
|
|
245 |
</html>
|
246 |
'''
|
247 |
|
248 |
+
# Если параметров нет, отображаем форму для ввода даты и времени
|
249 |
return '''
|
250 |
<html>
|
251 |
<body>
|
252 |
<h1>Выберите диапазон даты и времени для графика pH</h1>
|
253 |
+
<form method="GET">
|
254 |
<label for="start_date">Начало:</label>
|
255 |
<input type="datetime-local" id="start_date" name="start_date" required>
|
256 |
<br><br>
|