DmitrMakeev commited on
Commit
b6a5636
·
verified ·
1 Parent(s): 049aac0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -49
app.py CHANGED
@@ -180,59 +180,90 @@ def get_all_data():
180
 
181
 
182
 
183
- # Маршрут для вывода графика pH с датой и временем
184
- @app.route('/plot_ph', methods=['GET'])
185
  def plot_ph():
186
  try:
187
- conn = sqlite3.connect('system_data.db')
188
- cursor = conn.cursor()
189
-
190
- # Выполняем запрос для получения данных по параметру ph, dey и wek
191
- cursor.execute('SELECT date_time, ph, dey, wek FROM system_data ORDER BY date_time')
192
- rows = cursor.fetchall()
193
-
194
- conn.close()
195
-
196
- # Проверяем, есть ли данные
197
- if not rows:
198
- return jsonify({'status': 'error', 'message': 'Нет данных для построения графика'}), 400
199
-
200
- # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
201
- dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
202
- ph_values = [float(row[1]) for row in rows] # Значения pH
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
 
204
- # Создаем график
205
- plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
206
- plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
207
- plt.title('График значений pH')
208
- plt.xlabel('Дата и время')
209
- plt.ylabel('Значение pH')
210
- plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
211
- plt.grid(True)
212
-
213
- # Убираем лишние надписи на графике
214
- plt.tick_params(axis='x', which='both', length=0) # Убираем засечки на оси X
215
-
216
- # Автоматическое масштабирование подписей оси X
217
- plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10)) # Отображаем не более 10 подписей
218
-
219
- # Увеличиваем ширину надписей оси X
220
- plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
221
-
222
- # Сохраняем график в буфер
223
- buffer = io.BytesIO()
224
- plt.savefig(buffer, format='png')
225
- buffer.seek(0)
226
-
227
- # Кодируем график в base64
228
- plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
229
-
230
- # Возвращаем график в формате HTML
231
- return f'''
232
  <html>
233
  <body>
234
- <h1>График значений pH</h1>
235
- <img src="data:image/png;base64,{plot_data}" alt="График pH">
 
 
 
 
 
 
 
 
236
  </body>
237
  </html>
238
  '''
@@ -246,7 +277,6 @@ def plot_ph():
246
 
247
 
248
 
249
-
250
  @app.route("/")
251
  def index():
252
  return flask.render_template('index.html')
 
180
 
181
 
182
 
183
+ @app.route('/plot_ph', methods=['GET', 'POST'])
 
184
  def plot_ph():
185
  try:
186
+ # Если метод POST, обрабатываем данные из формы
187
+ if request.method == 'POST':
188
+ start_date = request.form.get('start_date')
189
+ end_date = request.form.get('end_date')
190
+
191
+ # Преобразуем даты в формат datetime
192
+ start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
193
+ end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
194
+
195
+ conn = sqlite3.connect('system_data.db')
196
+ cursor = conn.cursor()
197
+
198
+ # Выполняем запрос для получения данных по параметру ph, dey и wek в заданном диапазоне
199
+ cursor.execute('''
200
+ SELECT date_time, ph, dey, wek
201
+ FROM system_data
202
+ WHERE date_time BETWEEN ? AND ?
203
+ ORDER BY date_time
204
+ ''', (start_date, end_date))
205
+ rows = cursor.fetchall()
206
+
207
+ conn.close()
208
+
209
+ # Проверяем, есть ли данные
210
+ if not rows:
211
+ return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
212
+
213
+ # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
214
+ dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
215
+ ph_values = [float(row[1]) for row in rows] # Значения pH
216
+
217
+ # Создаем график
218
+ plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
219
+ plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
220
+ plt.title('График значений pH')
221
+ plt.xlabel('Дата и время')
222
+ plt.ylabel('Значение pH')
223
+ plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
224
+ plt.grid(True)
225
+
226
+ # Убираем лишние надписи на графике
227
+ plt.tick_params(axis='x', which='both', length=0) # Убираем засечки на оси X
228
+
229
+ # Автоматическое масштабирование подписей оси X
230
+ plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10)) # Отображаем не более 10 подписей
231
+
232
+ # Увеличиваем ширину надписей оси X
233
+ plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
234
+
235
+ # Сохраняем график в буфер
236
+ buffer = io.BytesIO()
237
+ plt.savefig(buffer, format='png')
238
+ buffer.seek(0)
239
+
240
+ # Кодируем график в base64
241
+ plot_data = base64.b64encode(buffer.getvalue()).decode('utf-8')
242
+
243
+ # Возвращаем график в формате HTML
244
+ return f'''
245
+ <html>
246
+ <body>
247
+ <h1>График значений pH</h1>
248
+ <img src="data:image/png;base64,{plot_data}" alt="График pH">
249
+ </body>
250
+ </html>
251
+ '''
252
 
253
+ # Если метод GET, отображаем форму для выбора даты и времени
254
+ return '''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  <html>
256
  <body>
257
+ <h1>Выберите диапазон даты и времени для графика pH</h1>
258
+ <form method="POST">
259
+ <label for="start_date">Начало:</label>
260
+ <input type="datetime-local" id="start_date" name="start_date" required>
261
+ <br><br>
262
+ <label for="end_date">Конец:</label>
263
+ <input type="datetime-local" id="end_date" name="end_date" required>
264
+ <br><br>
265
+ <button type="submit">Показать график</button>
266
+ </form>
267
  </body>
268
  </html>
269
  '''
 
277
 
278
 
279
 
 
280
  @app.route("/")
281
  def index():
282
  return flask.render_template('index.html')