DmitrMakeev commited on
Commit
1ea251c
·
verified ·
1 Parent(s): 2295981

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -135
app.py CHANGED
@@ -302,141 +302,6 @@ def delete_db():
302
 
303
 
304
 
305
- @app.route('/plot_ph', methods=['GET'])
306
- def plot_ph():
307
- try:
308
- # Получаем параметры из URL (если они есть)
309
- start_date = request.args.get('start_date')
310
- end_date = request.args.get('end_date')
311
-
312
- # Если параметры есть, проверяем их корректность
313
- if start_date and end_date:
314
- try:
315
- # Преобразуем даты в формат datetime
316
- start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
317
- end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
318
-
319
- # Проверяем, что дата начала раньше даты окончания
320
- if start_date >= end_date:
321
- return '''
322
- <html>
323
- <body>
324
- <h1>Неправильная дата выбрана</h1>
325
- <p>Дата начала должна быть раньше даты окончания.</p>
326
- <button onclick="window.location.href='/plot_ph'">Новые данные</button>
327
- </body>
328
- </html>
329
- '''
330
- except ValueError:
331
- return '''
332
- <html>
333
- <body>
334
- <h1>Неправильная дата выбрана</h1>
335
- <p>Формат даты должен быть YYYY-MM-DDTHH:MM.</p>
336
- <button onclick="window.location.href='/plot_ph'">Новые данные</button>
337
- </body>
338
- </html>
339
- '''
340
-
341
- # Подключаемся к базе данных
342
- conn = sqlite3.connect('system_data.db')
343
- cursor = conn.cursor()
344
-
345
- # Проверяем, существует ли таблица
346
- cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='system_data'")
347
- table_exists = cursor.fetchone()
348
-
349
- if not table_exists:
350
- return '''
351
- <html>
352
- <body>
353
- <h1>В базе данных отсутствуют значения</h1>
354
- <p>Таблица system_data не существует. Обновите базу данных.</p>
355
- <button onclick="window.location.href='/plot_ph'">Обновить базу данных</button>
356
- </body>
357
- </html>
358
- '''
359
-
360
- # Выполняем запрос для получения данных в заданном диапазоне
361
- cursor.execute('''
362
- SELECT date_time, ph, dey, wek
363
- FROM system_data
364
- WHERE date_time BETWEEN ? AND ?
365
- ORDER BY date_time
366
- ''', (start_date, end_date))
367
- rows = cursor.fetchall()
368
-
369
- conn.close()
370
-
371
- # Проверяем, есть ли данные
372
- if not rows:
373
- return '''
374
- <html>
375
- <body>
376
- <h1>Данные отсутствуют в базе данных</h1>
377
- <p>Для выбранного диапазона дат данные не найдены.</p>
378
- <button onclick="window.location.href='/plot_ph'">Новые данные</button>
379
- </body>
380
- </html>
381
- '''
382
-
383
- # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
384
- dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
385
- ph_values = [float(row[1]) for row in rows] # Значения pH
386
-
387
- # Создаем график
388
- plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
389
- plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
390
- plt.title('График значений pH')
391
- plt.xlabel('Дата и время')
392
- plt.ylabel('Значение pH')
393
- plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
394
- plt.grid(True)
395
- plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
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>
409
- <h1>График значений pH</h1>
410
- <button onclick="window.location.href='/plot_ph'">Новые данные</button>
411
- <button onclick="window.location.reload()">Обновить данные</button>
412
- <br><br>
413
- <img src="data:image/png;base64,{plot_data}" alt="График pH">
414
- </body>
415
- </html>
416
- '''
417
-
418
- # Если параметров нет, отображаем форму для ввода даты и времени
419
- return '''
420
- <html>
421
- <body>
422
- <h1>Выберите диапазон даты и времени для графика pH</h1>
423
- <form method="GET">
424
- <label for="start_date">Начало:</label>
425
- <input type="datetime-local" id="start_date" name="start_date" required>
426
- <br><br>
427
- <label for="end_date">Конец:</label>
428
- <input type="datetime-local" id="end_date" name="end_date" required>
429
- <br><br>
430
- <button type="submit">Показать график</button>
431
- </form>
432
- </body>
433
- </html>
434
- '''
435
- except Exception as e:
436
- return jsonify({'status': 'error', 'message': str(e)}), 500
437
-
438
-
439
-
440
 
441
 
442
 
 
302
 
303
 
304
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
 
306
 
307