Spaces:
Running
Running
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>
|