DmitrMakeev commited on
Commit
a9ab5af
·
verified ·
1 Parent(s): ed1f354

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -28
app.py CHANGED
@@ -324,11 +324,14 @@ def plot_ph():
324
  @app.route('/plot_ph_week', methods=['GET'])
325
  def plot_ph_week():
326
  try:
327
- # Получаем номер недели из параметра (по умолчанию 1)
328
  week_number = request.args.get('week', default=1, type=int)
329
 
330
- # Проверяем границы (1-30 недель)
331
- week_number = max(1, min(30, week_number))
 
 
 
332
 
333
  # Подключаемся к базе данных
334
  conn = sqlite3.connect('system_data.db')
@@ -336,7 +339,9 @@ def plot_ph_week():
336
 
337
  # Проверяем, существует ли таблица
338
  cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
339
- if not cursor.fetchone():
 
 
340
  return '''
341
  <html>
342
  <body>
@@ -347,18 +352,18 @@ def plot_ph_week():
347
  </html>
348
  '''
349
 
350
- # Выбираем данные за указанную неделю
351
  cursor.execute('''
352
- SELECT dey, ph
353
  FROM system_data
354
  WHERE wek = ?
355
- ORDER BY dey
356
  ''', (week_number,))
357
  rows = cursor.fetchall()
358
 
359
  conn.close()
360
 
361
- # Если данных нет, вывести сообщение
362
  if not rows:
363
  return f'''
364
  <html>
@@ -371,28 +376,19 @@ def plot_ph_week():
371
  </html>
372
  '''
373
 
374
- # Создаём словарь {день недели: список значений pH}
375
- data_by_day = {i: [] for i in range(1, 8)}
376
- for day, ph in rows:
377
- if ph is not None: # Проверка, что pH не пустой
378
- try:
379
- data_by_day[day].append(float(ph))
380
- except ValueError:
381
- print(f"Ошибка приведения pH ({ph}) в день {day}")
382
-
383
- # Создаём график (X: дни 1-7, Y: pH)
384
- plt.figure(figsize=(10, 5))
385
-
386
- # Наносим точки для каждого дня
387
- for day in range(1, 8):
388
- if data_by_day[day]: # Проверяем, есть ли данные для дня
389
- plt.scatter([day] * len(data_by_day[day]), data_by_day[day], label=f'День {day}')
390
 
391
- plt.title(f'Значения pH за {week_number}-ю неделю')
392
- plt.xlabel('День недели')
 
 
 
393
  plt.ylabel('Значение pH')
394
- plt.xticks(range(1, 8)) # Подписи оси X (1-7)
395
  plt.grid(True)
 
396
 
397
  # Сохраняем график в буфер
398
  buffer = io.BytesIO()
@@ -406,7 +402,7 @@ def plot_ph_week():
406
  return f'''
407
  <html>
408
  <body>
409
- <h1>Значения pH за {week_number}-ю неделю</h1>
410
  <button onclick="window.location.href='/plot_ph_week?week={week_number - 1}'" {"disabled" if week_number == 1 else ""}>Предыдущая неделя</button>
411
  <button onclick="window.location.href='/plot_ph_week?week={week_number + 1}'" {"disabled" if week_number == 30 else ""}>Следующая неделя</button>
412
  <br><br>
 
324
  @app.route('/plot_ph_week', methods=['GET'])
325
  def plot_ph_week():
326
  try:
327
+ # Получаем номер недели из параметра, если его нет - начинаем с 1
328
  week_number = request.args.get('week', default=1, type=int)
329
 
330
+ # Проверяем, что номер недели в пределах 1-30
331
+ if week_number < 1:
332
+ week_number = 1
333
+ elif week_number > 30:
334
+ week_number = 30
335
 
336
  # Подключаемся к базе данных
337
  conn = sqlite3.connect('system_data.db')
 
339
 
340
  # Проверяем, существует ли таблица
341
  cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
342
+ table_exists = cursor.fetchone()
343
+
344
+ if not table_exists:
345
  return '''
346
  <html>
347
  <body>
 
352
  </html>
353
  '''
354
 
355
+ # Выбираем данные за выбранную неделю
356
  cursor.execute('''
357
+ SELECT date_time, ph, dey
358
  FROM system_data
359
  WHERE wek = ?
360
+ ORDER BY date_time
361
  ''', (week_number,))
362
  rows = cursor.fetchall()
363
 
364
  conn.close()
365
 
366
+ # Если данных нет, вывести сообщение и оставить кнопки
367
  if not rows:
368
  return f'''
369
  <html>
 
376
  </html>
377
  '''
378
 
379
+ # Формируем данные для графика
380
+ dates = [f"{row[0]} (d: {row[2]})" for row in rows]
381
+ ph_values = [float(row[1]) for row in rows]
 
 
 
 
 
 
 
 
 
 
 
 
 
382
 
383
+ # Создаём график
384
+ plt.figure(figsize=(15, 6))
385
+ plt.plot(dates, ph_values, marker='o', linestyle='-', color='b')
386
+ plt.title(f'График pH за {week_number}-ю неделю')
387
+ plt.xlabel('Дата и день недели')
388
  plt.ylabel('Значение pH')
389
+ plt.xticks(rotation=90)
390
  plt.grid(True)
391
+ plt.gcf().subplots_adjust(bottom=0.4)
392
 
393
  # Сохраняем график в буфер
394
  buffer = io.BytesIO()
 
402
  return f'''
403
  <html>
404
  <body>
405
+ <h1>График pH за {week_number}-ю неделю</h1>
406
  <button onclick="window.location.href='/plot_ph_week?week={week_number - 1}'" {"disabled" if week_number == 1 else ""}>Предыдущая неделя</button>
407
  <button onclick="window.location.href='/plot_ph_week?week={week_number + 1}'" {"disabled" if week_number == 30 else ""}>Следующая неделя</button>
408
  <br><br>