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 |
'''
|