from random import uniform import datetime import time import configparser import os from flask import Flask, render_template, jsonify import flask.json from sqlalchemy import create_engine class JSONEncoder(flask.json.JSONEncoder): def default(self, object): if isinstance(object, datetime.datetime): return object.isoformat() return super().default(object) app = Flask(__name__) app.json_encoder = JSONEncoder config = configparser.ConfigParser() config.read(os.environ['SEEPARKINI']) apikey = config.get('openweathermap', 'apikey') def open_engine(config): user = config.get('database', 'user') pwd = config.get('database', 'password') host = config.get('database', 'hostname') db = config.get('database', 'database') engine = create_engine('mysql+mysqldb://{}:{}@{}/{}'.format(user, pwd, host, db), echo=False) return engine @app.route('/api//sensors/') def sensors(version): """List all sensors found in the database""" engine = open_engine(config) with engine.connect() as conn: cursor = conn.execute('select distinct sensor_id, sensor_name, value_type from sensors') result = [dict(row) for row in cursor] return jsonify(result) @app.route('/api//sensor/') def sensor(version, sensor_id): """Return all sensor data""" engine = open_engine(config) with engine.connect() as conn: cursor = conn.execute('select * from sensors where sensor_id=%s order by id', sensor_id) result = [dict(row) for row in cursor] return jsonify(result) @app.route('/data/', defaults={'timespan': 1}) @app.route("/data/", methods=['GET']) def data(timespan): granularity = 5 * timespan # (every) minute(s) per day samples = 60/granularity * 24 * timespan # per hour over whole timespan s4m = [] s4m_x = [] s5m = [] s5m_x = [] end = time.time() start = end - samples * granularity * 60 for i in range(int(samples)): s4m.append(uniform(-10,30)) s5m.append(uniform(-10,30)) s4mt = uniform(start, end) s5mt = uniform(start, end) s4m_x.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(s4mt))) s5m_x.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(s5mt))) data = { '0316a2193bff': s4m, '0316a2193bff_x': s4m_x, '0316a21383ff': s5m, '0316a21383ff_x': s5m_x, } return jsonify(data) @app.route("/") def index(): return render_template('seepark_web.html', apikey=apikey)