DmitrMakeev commited on
Commit
3489455
·
verified ·
1 Parent(s): 9001b2d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -21
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
- plt.figure(figsize=(15, 12)) # Увеличил высоту для двух графиков
370
-
 
 
371
  # График pH
372
- plt.subplot(2, 1, 1)
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(2, 1, 2)
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.4, bottom=0.3)
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 и EC">
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
  '''