DmitrMakeev commited on
Commit
27fd97f
·
verified ·
1 Parent(s): 8b64810

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -25
app.py CHANGED
@@ -9,7 +9,7 @@ import base64
9
  from dotenv import load_dotenv
10
  import globs
11
  from flask import render_template
12
- from flask import session
13
  load_dotenv()
14
 
15
  # Инициализация базы данных
@@ -181,32 +181,24 @@ def get_all_data():
181
 
182
 
183
 
184
- @app.route('/plot_ph', methods=['GET', 'POST'])
185
  def plot_ph():
186
  try:
187
- if request.method == 'POST':
188
- start_date = request.form.get('start_date')
189
- end_date = request.form.get('end_date')
190
-
191
- # Сохраняем данные в сессии
192
- session['start_date'] = start_date
193
- session['end_date'] = end_date
194
-
195
- # Перенаправляем на GET с параметрами
196
- return redirect(url_for('plot_ph'))
197
-
198
- # Если метод GET, проверяем наличие данных в сессии
199
- start_date = session.get('start_date')
200
- end_date = session.get('end_date')
201
 
 
202
  if start_date and end_date:
203
  # Преобразуем даты в формат datetime
204
  start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
205
  end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
206
 
207
- # Выполняем запрос для получения данных
208
  conn = sqlite3.connect('system_data.db')
209
  cursor = conn.cursor()
 
 
210
  cursor.execute('''
211
  SELECT date_time, ph, dey, wek
212
  FROM system_data
@@ -214,24 +206,26 @@ def plot_ph():
214
  ORDER BY date_time
215
  ''', (start_date, end_date))
216
  rows = cursor.fetchall()
 
217
  conn.close()
218
 
 
219
  if not rows:
220
  return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
221
 
222
  # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
223
- dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows]
224
- ph_values = [float(row[1]) for row in rows]
225
 
226
  # Создаем график
227
- plt.figure(figsize=(15, 6))
228
- plt.plot(dates, ph_values, marker='o', linestyle='-', color='b')
229
  plt.title('График значений pH')
230
  plt.xlabel('Дата и время')
231
  plt.ylabel('Значение pH')
232
- plt.xticks(rotation=90)
233
  plt.grid(True)
234
- plt.gcf().subplots_adjust(bottom=0.4)
235
 
236
  # Сохраняем график в буфер
237
  buffer = io.BytesIO()
@@ -251,12 +245,12 @@ def plot_ph():
251
  </html>
252
  '''
253
 
254
- # Если данных в сессии нет, отображаем форму
255
  return '''
256
  <html>
257
  <body>
258
  <h1>Выберите диапазон даты и времени для графика pH</h1>
259
- <form method="POST">
260
  <label for="start_date">Начало:</label>
261
  <input type="datetime-local" id="start_date" name="start_date" required>
262
  <br><br>
 
9
  from dotenv import load_dotenv
10
  import globs
11
  from flask import render_template
12
+
13
  load_dotenv()
14
 
15
  # Инициализация базы данных
 
181
 
182
 
183
 
184
+ @app.route('/plot_ph', methods=['GET'])
185
  def plot_ph():
186
  try:
187
+ # Получаем параметры из URL (если они есть)
188
+ start_date = request.args.get('start_date')
189
+ end_date = request.args.get('end_date')
 
 
 
 
 
 
 
 
 
 
 
190
 
191
+ # Если параметры есть, строим график
192
  if start_date and end_date:
193
  # Преобразуем даты в формат datetime
194
  start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
195
  end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
196
 
197
+ # Подключаемся к базе данных
198
  conn = sqlite3.connect('system_data.db')
199
  cursor = conn.cursor()
200
+
201
+ # Выполняем запрос для получения данных в заданном диапазоне
202
  cursor.execute('''
203
  SELECT date_time, ph, dey, wek
204
  FROM system_data
 
206
  ORDER BY date_time
207
  ''', (start_date, end_date))
208
  rows = cursor.fetchall()
209
+
210
  conn.close()
211
 
212
+ # Проверяем, есть ли данные
213
  if not rows:
214
  return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
215
 
216
  # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
217
+ dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
218
+ ph_values = [float(row[1]) for row in rows] # Значения pH
219
 
220
  # Создаем график
221
+ plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
222
+ plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
223
  plt.title('График значений pH')
224
  plt.xlabel('Дата и время')
225
  plt.ylabel('Значение pH')
226
+ plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
227
  plt.grid(True)
228
+ plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
229
 
230
  # Сохраняем график в буфер
231
  buffer = io.BytesIO()
 
245
  </html>
246
  '''
247
 
248
+ # Если параметров нет, отображаем форму для ввода даты и времени
249
  return '''
250
  <html>
251
  <body>
252
  <h1>Выберите диапазон даты и времени для графика pH</h1>
253
+ <form method="GET">
254
  <label for="start_date">Начало:</label>
255
  <input type="datetime-local" id="start_date" name="start_date" required>
256
  <br><br>