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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -34
app.py CHANGED
@@ -327,17 +327,16 @@ def plot_ph_week():
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')
335
  cursor = conn.cursor()
336
 
337
- # Проверяем существование таблицы
338
  cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
339
  if not cursor.fetchone():
340
- conn.close()
341
  return '''
342
  <html>
343
  <body>
@@ -348,7 +347,7 @@ def plot_ph_week():
348
  </html>
349
  '''
350
 
351
- # Выборка данных за указанную неделю
352
  cursor.execute('''
353
  SELECT dey, ph
354
  FROM system_data
@@ -359,7 +358,7 @@ def plot_ph_week():
359
 
360
  conn.close()
361
 
362
- # Если данных нет
363
  if not rows:
364
  return f'''
365
  <html>
@@ -375,42 +374,35 @@ def plot_ph_week():
375
  # Создаём словарь {день недели: список значений pH}
376
  data_by_day = {i: [] for i in range(1, 8)}
377
  for day, ph in rows:
378
- # Преобразуем ph в float, если оно строка
379
- try:
380
- ph_value = float(ph)
381
- data_by_day[day].append(ph_value)
382
- except (ValueError, TypeError):
383
- continue # Пропускаем некорректные значения
384
-
385
- # Очищаем предыдущий график
386
- plt.clf()
387
 
388
- # Создаём график
389
  plt.figure(figsize=(10, 5))
 
 
390
  for day in range(1, 8):
391
- if data_by_day[day]: # Проверяем, есть ли данные
392
  plt.scatter([day] * len(data_by_day[day]), data_by_day[day], label=f'День {day}')
393
 
394
  plt.title(f'Значения pH за {week_number}-ю неделю')
395
  plt.xlabel('День недели')
396
  plt.ylabel('Значение pH')
397
- plt.xticks(range(1, 8))
398
  plt.grid(True)
399
- plt.legend() # Добавляем легенду для ясности
400
 
401
  # Сохраняем график в буфер
402
  buffer = io.BytesIO()
403
  plt.savefig(buffer, format='png')
404
  buffer.seek(0)
405
 
406
- # Кодируем в base64
407
  plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
408
 
409
- # Закрываем буфер и очищаем график
410
- buffer.close()
411
- plt.close() # Закрываем фигуру, чтобы избежать утечек памяти
412
-
413
- # Возвращаем HTML
414
  return f'''
415
  <html>
416
  <body>
@@ -424,16 +416,7 @@ def plot_ph_week():
424
  '''
425
 
426
  except Exception as e:
427
- # Возвращаем HTML вместо JSON для консистентности
428
- return f'''
429
- <html>
430
- <body>
431
- <h1>Ошибка!</h1>
432
- <p>Произошла ошибка: {str(e)}</p>
433
- <button onclick="window.location.href='/plot_ph_week'">Назад</button>
434
- </body>
435
- </html>
436
- ''', 500
437
 
438
 
439
 
 
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')
335
  cursor = conn.cursor()
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
  </html>
348
  '''
349
 
350
+ # Выбираем данные за указанную неделю
351
  cursor.execute('''
352
  SELECT dey, ph
353
  FROM system_data
 
358
 
359
  conn.close()
360
 
361
+ # Если данных нет, вывести сообщение
362
  if not rows:
363
  return f'''
364
  <html>
 
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()
399
  plt.savefig(buffer, format='png')
400
  buffer.seek(0)
401
 
402
+ # Кодируем график в base64
403
  plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
404
 
405
+ # Возвращаем HTML с кнопками управления
 
 
 
 
406
  return f'''
407
  <html>
408
  <body>
 
416
  '''
417
 
418
  except Exception as e:
419
+ return jsonify({'status': 'error', 'message': str(e)}), 500
 
 
 
 
 
 
 
 
 
420
 
421
 
422