from flask import Flask, request, render_template, redirect, url_for from time import strftime import datetime import pendulum from dotenv import dotenv_values import influxdb_client from influxdb_client.client.write_api import SYNCHRONOUS config = dotenv_values(".env") app = Flask(__name__) client = influxdb_client.InfluxDBClient( url=config['DB_URL'], token=config['DB_TOKEN'], org=config['DB_ORG'] ) @app.route('/success') def success(): return "Form success!" @app.route('/', methods=['GET', 'POST']) def main_page(): query_api = client.query_api() query = 'from(bucket: "gas")\ |> range(start: -96h)\ |> filter(fn: (r) => r["_measurement"] == "2016_odyssey")\ |> filter(fn: (r) => r["_field"] == "odometer")' #query = 'select TOP(odometer, 5) from odyssey' #data = client.query(query) result = query_api.query(org=config['DB_ORG'], query=query) # print(result) results = [] for table in result: for record in table.records: results.append((record.get_time(), record.get_field(), record.get_value())) # print(results) data= results return render_template('index.html', data=data) @app.route('/add_time', methods=['POST', 'GET']) def add_time(): today = strftime("%Y-%m-%d") now = strftime("%H:%M:%S") # database = request.form['db'] # table = request.form['table'] date = request.form['date'] if date == '': date = today time = request.form['time'] if time == '': time = now odometer = request.form['odometer'] oilhealth= request.form['oilhealth'] if oilhealth != '': oilhealth = float(oilhealth) fuel = request.form['fuel'] if fuel != '': fuel = float(fuel) fuelcost = request.form['fuelcost'] if fuelcost != '': fuelcost = float(fuelcost) winter = request.form['winter'] if winter == 'TRUE': winter = True else: winter = False json_body = [ { "time": date + "T" + time + "Z", "measurement": "odyssey", "fields": { "odometer": float(odometer), "oilhealth": oilhealth, "fuel": fuel, "fuelcost": fuelcost, "winter": winter } } ] timestamp = date + "T" + time + "Z" dt = pendulum.parse(timestamp) print() print(dt) print() write_api = client.write_api(write_options=SYNCHRONOUS) p = influxdb_client.Point("2016_odyssey").time(timestamp).tag("oilhealth", oilhealth)\ .tag("fuel", fuel).tag("fuelcost", fuelcost).tag("winter", winter).field("odometer", float(odometer)) write_api.write(bucket="gas", org=config['DB_ORG'], record=p) print ("Submitting data to DB: {0}".format(json_body)) #client.write_points(json_body) return redirect(url_for('main_page')) @app.route('/repeat_last_odometer') def repeat_last_odometer(): query_api = client.query_api() query = 'from(bucket: "gas")\ |> range(start: -7d)\ |> filter(fn: (r) => r["_measurement"] == "2016_odyssey")\ |> filter(fn: (r) => r["_field"] == "odometer")\ |> last()' result = query_api.query(org=config['DB_ORG'], query=query) print() print() print(result) print() results = {} for table in result: for record in table.records: results[record.get_field()] = record.get_value() results['time'] = record.get_time() # .append((record.get_time(), record.get_field(), record.get_value())) print(results) print() date = strftime("%Y-%m-%d") time = strftime("%H:%M:%S") timestamp = date + "T" + time + "Z" print(results['odometer']) write_api = client.write_api(write_options=SYNCHRONOUS) p = influxdb_client.Point("2016_odyssey").time(timestamp).field("odometer", float(results['odometer'])) write_api.write(bucket="gas", org=config['DB_ORG'], record=p) return redirect(url_for('main_page')) @app.route('/admin') def admin_index(): return 'admin' @app.route('/login') def login(): pass @app.route('/logout') def logout(): pass if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port='9001')