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