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) output_choices = flaskutils.choices_outputs(relay) sensor_choices = flaskutils.choices_sensors(sensor) # Add multi-select values as form choices, for validation form_mod_graph.pid_ids.choices = [] form_mod_graph.relay_ids.choices = [] form_mod_graph.sensor_ids.choices = [] for key, value in pid_choices.items(): form_mod_graph.pid_ids.choices.append((key, value)) for key, value in output_choices.items(): form_mod_graph.relay_ids.choices.append((key, value)) for key, value in sensor_choices.items(): form_mod_graph.sensor_ids.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, output_choices=output_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. """ 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)