# coding: utf-8 import os import time import datetime import calendar import bottle from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from ebus.sql import model app = bottle.Bottle("ebus") bottle.debug() engine = create_engine("postgresql://jack:jack@10.2.2.22:5432/ebus",echo=True) Session = sessionmaker() Session.configure(bind=engine) @app.route("/") def do_index(): return serve_static("index.html") @app.route('/static/:filename') def serve_static(filename): return bottle.static_file(filename, root=os.path.join(os.path.dirname(__file__),"static")) @app.route("/list") def list(): sensors = Session().query(model.Sensor).all() return {"type":"list","data":map(lambda sensor: sensor.name, sensors)} @app.route("/:when#today|yesterday|week|month#/:sensor") def get_value(when,sensor): s = Session() sensor = s.query(model.Sensor).filter(model.Sensor.name == sensor).first() values = Session().query(model.Value).add_columns("value_float","value_string","value_int") values = values.filter(model.Value.sensor == sensor) now = datetime.datetime.now() f,t = None, None if when == "today": f = now.date() t = now.date() + datetime.timedelta(1) elif when == "yesterday": f = now.date() - datetime.timedelta(1) t = now elif when == "week": f = now.date() - datetime.timedelta(now.isoweekday()) t = now.date() + datetime.timedelta(7-now.isoweekday()) elif when == "month": f = now.date() - datetime.timedelta(now.day) t = f + datetime.timedelta( calendar.monthrange(f.year, f.month)[1] ) else: raise Exception("illegal timerange") values = values.filter(model.Value.timestamp.between(f,t)) x = values.all() v=[] for value in values.all(): v.append(value.value()) return {"type":when,"data":v}