Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -308,20 +308,16 @@ def plot_ph():
|
|
| 308 |
@app.route('/plot_ph_week', methods=['GET'])
|
| 309 |
def plot_ph_week():
|
| 310 |
try:
|
| 311 |
-
# Получаем номер недели из параметра, если его нет - начинаем с 1
|
| 312 |
week_number = request.args.get('week', default=1, type=int)
|
| 313 |
|
| 314 |
-
# Проверяем, что номер недели в пределах 1-30
|
| 315 |
if week_number < 1:
|
| 316 |
week_number = 1
|
| 317 |
elif week_number > 30:
|
| 318 |
week_number = 30
|
| 319 |
|
| 320 |
-
# Подключаемся к базе данных
|
| 321 |
conn = sqlite3.connect('system_data.db')
|
| 322 |
cursor = conn.cursor()
|
| 323 |
-
|
| 324 |
-
# Проверяем, существует ли таблица
|
| 325 |
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
|
| 326 |
table_exists = cursor.fetchone()
|
| 327 |
|
|
@@ -336,9 +332,8 @@ def plot_ph_week():
|
|
| 336 |
</html>
|
| 337 |
'''
|
| 338 |
|
| 339 |
-
# Выбираем данные за выбранную неделю
|
| 340 |
cursor.execute('''
|
| 341 |
-
SELECT date_time, ph, ec, dey
|
| 342 |
FROM system_data
|
| 343 |
WHERE wek = ?
|
| 344 |
ORDER BY date_time
|
|
@@ -347,7 +342,6 @@ def plot_ph_week():
|
|
| 347 |
|
| 348 |
conn.close()
|
| 349 |
|
| 350 |
-
# Если данных нет, вывести сообщение и оставить кнопки
|
| 351 |
if not rows:
|
| 352 |
return f'''
|
| 353 |
<html>
|
|
@@ -360,25 +354,26 @@ def plot_ph_week():
|
|
| 360 |
</html>
|
| 361 |
'''
|
| 362 |
|
| 363 |
-
# Формируем данные для графиков
|
| 364 |
dates = [f"{row[0]} (d: {row[3]})" for row in rows]
|
| 365 |
ph_values = [float(row[1]) for row in rows]
|
| 366 |
ec_values = [float(row[2]) for row in rows]
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
|
|
|
|
|
|
|
| 371 |
# График pH
|
| 372 |
-
plt.subplot(
|
| 373 |
plt.plot(dates, ph_values, linestyle='-', color='b')
|
| 374 |
plt.title(f'График pH за {week_number}-ю неделю', fontsize=14)
|
| 375 |
plt.xlabel('Дата и день недели', fontsize=12)
|
| 376 |
plt.ylabel('Значение pH', fontsize=12)
|
| 377 |
plt.xticks(rotation=90, fontsize=10)
|
| 378 |
plt.grid(True)
|
| 379 |
-
|
| 380 |
# График EC
|
| 381 |
-
plt.subplot(
|
| 382 |
plt.plot(dates, ec_values, linestyle='-', color='g')
|
| 383 |
plt.title(f'График EC за {week_number}-ю неделю', fontsize=14)
|
| 384 |
plt.xlabel('Дата и день недели', fontsize=12)
|
|
@@ -386,18 +381,27 @@ def plot_ph_week():
|
|
| 386 |
plt.xticks(rotation=90, fontsize=10)
|
| 387 |
plt.grid(True)
|
| 388 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
# Увеличиваем расстояние между графиками
|
| 390 |
-
plt.subplots_adjust(hspace=1.
|
| 391 |
|
| 392 |
-
# Сохраняем графики в буфер
|
| 393 |
buffer = io.BytesIO()
|
| 394 |
plt.savefig(buffer, format='png')
|
| 395 |
buffer.seek(0)
|
| 396 |
|
| 397 |
-
# Кодируем график в base64
|
| 398 |
plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
|
| 399 |
|
| 400 |
-
# Возвращаем HTML
|
| 401 |
return f'''
|
| 402 |
<html>
|
| 403 |
<body>
|
|
@@ -405,7 +409,7 @@ def plot_ph_week():
|
|
| 405 |
<button onclick="window.location.href='/plot_ph_week?week={week_number - 1}'" {"disabled" if week_number == 1 else ""}>Предыдущая неделя</button>
|
| 406 |
<button onclick="window.location.href='/plot_ph_week?week={week_number + 1}'" {"disabled" if week_number == 30 else ""}>Следующая неделя</button>
|
| 407 |
<br><br>
|
| 408 |
-
<img src="data:image/png;base64,{plot_data}" alt="Графики pH и
|
| 409 |
</body>
|
| 410 |
</html>
|
| 411 |
'''
|
|
|
|
| 308 |
@app.route('/plot_ph_week', methods=['GET'])
|
| 309 |
def plot_ph_week():
|
| 310 |
try:
|
|
|
|
| 311 |
week_number = request.args.get('week', default=1, type=int)
|
| 312 |
|
|
|
|
| 313 |
if week_number < 1:
|
| 314 |
week_number = 1
|
| 315 |
elif week_number > 30:
|
| 316 |
week_number = 30
|
| 317 |
|
|
|
|
| 318 |
conn = sqlite3.connect('system_data.db')
|
| 319 |
cursor = conn.cursor()
|
| 320 |
+
|
|
|
|
| 321 |
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
|
| 322 |
table_exists = cursor.fetchone()
|
| 323 |
|
|
|
|
| 332 |
</html>
|
| 333 |
'''
|
| 334 |
|
|
|
|
| 335 |
cursor.execute('''
|
| 336 |
+
SELECT date_time, ph, ec, dey, onA, onB, onC
|
| 337 |
FROM system_data
|
| 338 |
WHERE wek = ?
|
| 339 |
ORDER BY date_time
|
|
|
|
| 342 |
|
| 343 |
conn.close()
|
| 344 |
|
|
|
|
| 345 |
if not rows:
|
| 346 |
return f'''
|
| 347 |
<html>
|
|
|
|
| 354 |
</html>
|
| 355 |
'''
|
| 356 |
|
|
|
|
| 357 |
dates = [f"{row[0]} (d: {row[3]})" for row in rows]
|
| 358 |
ph_values = [float(row[1]) for row in rows]
|
| 359 |
ec_values = [float(row[2]) for row in rows]
|
| 360 |
+
onA_values = [float(row[4]) for row in rows]
|
| 361 |
+
onB_values = [float(row[5]) for row in rows]
|
| 362 |
+
onC_values = [float(row[6]) for row in rows]
|
| 363 |
+
|
| 364 |
+
plt.figure(figsize=(15, 18)) # Увеличил высоту для трех графиков
|
| 365 |
+
|
| 366 |
# График pH
|
| 367 |
+
plt.subplot(3, 1, 1)
|
| 368 |
plt.plot(dates, ph_values, linestyle='-', color='b')
|
| 369 |
plt.title(f'График pH за {week_number}-ю неделю', fontsize=14)
|
| 370 |
plt.xlabel('Дата и день недели', fontsize=12)
|
| 371 |
plt.ylabel('Значение pH', fontsize=12)
|
| 372 |
plt.xticks(rotation=90, fontsize=10)
|
| 373 |
plt.grid(True)
|
| 374 |
+
|
| 375 |
# График EC
|
| 376 |
+
plt.subplot(3, 1, 2)
|
| 377 |
plt.plot(dates, ec_values, linestyle='-', color='g')
|
| 378 |
plt.title(f'График EC за {week_number}-ю неделю', fontsize=14)
|
| 379 |
plt.xlabel('Дата и день недели', fontsize=12)
|
|
|
|
| 381 |
plt.xticks(rotation=90, fontsize=10)
|
| 382 |
plt.grid(True)
|
| 383 |
|
| 384 |
+
# График насосов
|
| 385 |
+
plt.subplot(3, 1, 3)
|
| 386 |
+
plt.plot(dates, onA_values, linestyle='-', color='green', label='Насос A')
|
| 387 |
+
plt.plot(dates, onB_values, linestyle='-', color='brown', label='Насос B')
|
| 388 |
+
plt.plot(dates, onC_values, linestyle='-', color='orange', label='Насос C')
|
| 389 |
+
plt.title(f'График работы насосов за {week_number}-ю неделю', fontsize=14)
|
| 390 |
+
plt.xlabel('Дата и день недели', fontsize=12)
|
| 391 |
+
plt.ylabel('Состояние насосов', fontsize=12)
|
| 392 |
+
plt.xticks(rotation=90, fontsize=10)
|
| 393 |
+
plt.legend()
|
| 394 |
+
plt.grid(True)
|
| 395 |
+
|
| 396 |
# Увеличиваем расстояние между графиками
|
| 397 |
+
plt.subplots_adjust(hspace=1.6, bottom=0.3)
|
| 398 |
|
|
|
|
| 399 |
buffer = io.BytesIO()
|
| 400 |
plt.savefig(buffer, format='png')
|
| 401 |
buffer.seek(0)
|
| 402 |
|
|
|
|
| 403 |
plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
|
| 404 |
|
|
|
|
| 405 |
return f'''
|
| 406 |
<html>
|
| 407 |
<body>
|
|
|
|
| 409 |
<button onclick="window.location.href='/plot_ph_week?week={week_number - 1}'" {"disabled" if week_number == 1 else ""}>Предыдущая неделя</button>
|
| 410 |
<button onclick="window.location.href='/plot_ph_week?week={week_number + 1}'" {"disabled" if week_number == 30 else ""}>Следующая неделя</button>
|
| 411 |
<br><br>
|
| 412 |
+
<img src="data:image/png;base64,{plot_data}" alt="Графики pH, EC и насосов">
|
| 413 |
</body>
|
| 414 |
</html>
|
| 415 |
'''
|