def page_timer(): """ Display Timer settings """ if not logged_in(): return redirect(url_for('general_routes.home')) timer = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Timer, entry='all') relay = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Relay, entry='all') relay_choices = flaskutils.choices_id_name(relay) display_order_unsplit = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], DisplayOrder, entry='first').timer if display_order_unsplit: display_order = display_order_unsplit.split(",") else: display_order = [] form_timer = flaskforms.Timer() if request.method == 'POST': form_name = request.form['form-name'] if form_name == 'addTimer': flaskutils.timer_add(form_timer, request.form['timer_type'], display_order) elif form_name == 'modTimer': if form_timer.timerDel.data: flaskutils.timer_del(form_timer, display_order) elif (form_timer.orderTimerUp.data or form_timer.orderTimerDown.data): flaskutils.timer_reorder(form_timer, display_order) elif form_timer.activate.data: flaskutils.timer_activate(form_timer) elif form_timer.deactivate.data: flaskutils.timer_deactivate(form_timer) elif form_timer.timerMod.data: flaskutils.timer_mod(form_timer) return redirect('/timer') return render_template('pages/timer.html', timer=timer, displayOrder=display_order, relay_choices=relay_choices, form_timer=form_timer)
def page_timer(): """ Display Timer settings """ timer = Timer.query.all() relay = Relay.query.all() relay_choices = flaskutils.choices_id_name(relay) display_order = csv_to_list_of_int(DisplayOrder.query.first().timer) form_timer = flaskforms.Timer() if request.method == 'POST': if not flaskutils.user_has_permission('edit_controllers'): return redirect(url_for('general_routes.home')) form_name = request.form['form-name'] if form_name == 'addTimer': flaskutils.timer_add(form_timer, request.form['timer_type'], display_order) elif form_name == 'modTimer': if form_timer.timerDel.data: flaskutils.timer_del(form_timer) elif form_timer.orderTimerUp.data: flaskutils.timer_reorder(form_timer.timer_id.data, display_order, 'up') elif form_timer.orderTimerDown.data: flaskutils.timer_reorder(form_timer.timer_id.data, display_order, 'down') elif form_timer.activate.data: flaskutils.timer_activate(form_timer) elif form_timer.deactivate.data: flaskutils.timer_deactivate(form_timer) elif form_timer.timerMod.data: flaskutils.timer_mod(form_timer) return redirect('/timer') return render_template('pages/timer.html', timer=timer, displayOrder=display_order, relay_choices=relay_choices, form_timer=form_timer)
def page_export(): """ Export measurement data in CSV format """ export_options = flaskforms.ExportOptions() relay = Relay.query.all() sensor = Sensor.query.all() relay_choices = flaskutils.choices_id_name(relay) sensor_choices = flaskutils.choices_sensors(sensor) if request.method == 'POST': start_time = export_options.date_range.data.split(' - ')[0] start_seconds = int( time.mktime(time.strptime(start_time, '%m/%d/%Y %H:%M'))) end_time = export_options.date_range.data.split(' - ')[1] end_seconds = int( time.mktime(time.strptime(end_time, '%m/%d/%Y %H:%M'))) unique_id = export_options.measurement.data.split(',')[0] measurement = export_options.measurement.data.split(',')[1] url = '/export_data/{meas}/{id}/{start}/{end}'.format( meas=measurement, id=unique_id, start=start_seconds, end=end_seconds) return redirect(url) # Generate start end end times for date/time picker end_picker = datetime.datetime.now().strftime('%m/%d/%Y %H:%M') start_picker = datetime.datetime.now() - datetime.timedelta(hours=6) start_picker = start_picker.strftime('%m/%d/%Y %H:%M') return render_template('tools/export.html', start_picker=start_picker, end_picker=end_picker, exportOptions=export_options, relay_choices=relay_choices, sensor_choices=sensor_choices)
def page_export(): """ Export measurement data in CSV format """ if not logged_in(): return redirect(url_for('general_routes.home')) export_options = flaskforms.ExportOptions() relay = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Relay, entry='all') sensor = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Sensor, entry='all') relay_choices = flaskutils.choices_id_name(relay) sensor_choices = flaskutils.choices_sensors(sensor) if request.method == 'POST': start_time = export_options.date_range.data.split(' - ')[0] start_seconds = int(time.mktime( time.strptime(start_time, '%m/%d/%Y %H:%M'))) end_time = export_options.date_range.data.split(' - ')[1] end_seconds = int(time.mktime( time.strptime(end_time, '%m/%d/%Y %H:%M'))) url = '/export_data/{meas}/{id}/{start}/{end}'.format( meas=export_options.measurement.data.split(',')[1], id=export_options.measurement.data.split(',')[0], start=start_seconds, end=end_seconds) return redirect(url) # Generate start end end times for date/time picker end_picker = datetime.datetime.now().strftime('%m/%d/%Y %H:%M') start_picker = datetime.datetime.now() - datetime.timedelta(hours=6) start_picker = start_picker.strftime('%m/%d/%Y %H:%M') return render_template('tools/export.html', start_picker=start_picker, end_picker=end_picker, exportOptions=export_options, relay_choices=relay_choices, sensor_choices=sensor_choices)
def page_graph(): """ Generate custom graphs to display sensor data retrieved from influxdb. """ if not logged_in(): return redirect(url_for('general_routes.home')) # Create form objects form_mod_graph = flaskforms.ModGraph() form_del_graph = flaskforms.DelGraph() form_order_graph = flaskforms.OrderGraph() form_add_graph = flaskforms.AddGraph() # Retrieve the order to display graphs display_order_unsplit = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], DisplayOrder, entry='first').graph if display_order_unsplit: display_order = display_order_unsplit.split(",") else: display_order = [] # Retrieve tables from SQL database graph = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Graph, entry='all') pid = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], PID, entry='all') relay = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Relay, entry='all') sensor = db_retrieve_table( current_app.config['MYCODO_DB_PATH'], Sensor, entry='all') # Retrieve all choices to populate form drop-down menu pid_choices = flaskutils.choices_id_name(pid) relay_choices = flaskutils.choices_id_name(relay) sensor_choices = flaskutils.choices_sensors(sensor) # Add multi-select values as form choices, for validation form_mod_graph.pidIDs.choices = [] form_mod_graph.relayIDs.choices = [] form_mod_graph.sensorIDs.choices = [] for key, value in pid_choices.iteritems(): form_mod_graph.pidIDs.choices.append((key, value)) for key, value in relay_choices.iteritems(): form_mod_graph.relayIDs.choices.append((key, value)) for key, value in sensor_choices.iteritems(): form_mod_graph.sensorIDs.choices.append((key, value)) # Generate dictionary of custom colors for each graph dict_colors = dict_custom_colors(graph) # Detect which form on the page was submitted if request.method == 'POST': form_name = request.form['form-name'] if form_name == 'modGraph': flaskutils.graph_mod(form_mod_graph, request.form) elif form_name == 'delGraph': flaskutils.graph_del(form_del_graph, display_order) elif form_name == 'orderGraph': flaskutils.graph_reorder(form_order_graph, display_order) elif form_name == 'addGraph': flaskutils.graph_add(form_add_graph, display_order) return redirect('/graph') return render_template('pages/graph.html', graph=graph, pid=pid, relay=relay, sensor=sensor, pid_choices=pid_choices, relay_choices=relay_choices, sensor_choices=sensor_choices, dict_colors=dict_colors, measurement_units=MEASUREMENT_UNITS, displayOrder=display_order, form_mod_graph=form_mod_graph, form_del_graph=form_del_graph, form_order_graph=form_order_graph, form_add_graph=form_add_graph)
def page_graph(): """ Generate custom graphs to display sensor data retrieved from influxdb. """ # Create form objects form_mod_graph = flaskforms.GraphMod() form_del_graph = flaskforms.GraphDel() form_order_graph = flaskforms.GraphOrder() form_add_graph = flaskforms.GraphAdd() # Retrieve the order to display graphs display_order = csv_to_list_of_int(DisplayOrder.query.first().graph) # Retrieve tables from SQL database graph = Graph.query.all() pid = PID.query.all() relay = Relay.query.all() sensor = Sensor.query.all() # Retrieve all choices to populate form drop-down menu pid_choices = flaskutils.choices_pids(pid) relay_choices = flaskutils.choices_id_name(relay) sensor_choices = flaskutils.choices_sensors(sensor) # Add multi-select values as form choices, for validation form_mod_graph.pidIDs.choices = [] form_mod_graph.relayIDs.choices = [] form_mod_graph.sensorIDs.choices = [] for key, value in pid_choices.items(): form_mod_graph.pidIDs.choices.append((key, value)) for key, value in relay_choices.items(): form_mod_graph.relayIDs.choices.append((key, value)) for key, value in sensor_choices.items(): form_mod_graph.sensorIDs.choices.append((key, value)) # Generate dictionary of custom colors for each graph dict_colors = dict_custom_colors() # Detect which form on the page was submitted if request.method == 'POST': if not flaskutils.user_has_permission('edit_controllers'): return redirect(url_for('general_routes.home')) form_name = request.form['form-name'] if form_name == 'modGraph': flaskutils.graph_mod(form_mod_graph, request.form) elif form_name == 'delGraph': flaskutils.graph_del(form_del_graph) elif form_order_graph.orderGraphUp.data: flaskutils.graph_reorder(form_order_graph.orderGraph_id.data, display_order, 'up') elif form_order_graph.orderGraphDown.data: flaskutils.graph_reorder(form_order_graph.orderGraph_id.data, display_order, 'down') elif form_name == 'addGraph': flaskutils.graph_add(form_add_graph, display_order) return redirect('/graph') return render_template('pages/graph.html', graph=graph, pid=pid, relay=relay, sensor=sensor, pid_choices=pid_choices, relay_choices=relay_choices, sensor_choices=sensor_choices, dict_colors=dict_colors, measurement_units=MEASUREMENT_UNITS, displayOrder=display_order, form_mod_graph=form_mod_graph, form_del_graph=form_del_graph, form_order_graph=form_order_graph, form_add_graph=form_add_graph)