summaryrefslogtreecommitdiff
path: root/ebus/web/controller.py
diff options
context:
space:
mode:
Diffstat (limited to 'ebus/web/controller.py')
-rw-r--r--ebus/web/controller.py93
1 files changed, 18 insertions, 75 deletions
diff --git a/ebus/web/controller.py b/ebus/web/controller.py
index edf174d..406db01 100644
--- a/ebus/web/controller.py
+++ b/ebus/web/controller.py
@@ -4,79 +4,12 @@ import os, time
import itty
from werkzeug.contrib.cache import SimpleCache
from simplejson import dumps as dump_json
+from sqlalchemy.orm import sessionmaker
from ebus.web import model
-def data(name):
- return {"name":name}
-"""
-def data(name):
- if name in (
- "solarDaten.tempKollektor",
- "solarDaten.tempWarmwasserSolar",
- "betriebsdatenRegler1.boilerTemperatur",
- "betriebsdatenRegler1.kesselTemperatur",
- "betriebsdatenRegler1.aussenTemperatur",
- "betriebsdatenFeuerungsautomat.brauchwasserSollwert",
- "betriebsdatenFeuerungsautomat.kesselSollwertTemperatur"):
- m = Code('''
- function () {
- emit(parseInt(this.time/900)*900000, {sum: this.values[field], count:1});
- }''')
- r = Code('''
- function (key, values) {
- var n = { sum:0, count:0 };
- for (var i = 0; i<values.length; i++) {
- n.sum += values[i].sum;
- n.count += values[i].count;
- };
- return n;
- }''')
- f = Code('''
- function (who,r) {
- r.avg = r.sum/r.count;
- return r;
- }''')
- q={
- "name":name.split(".")[0],
- "time":{"$gt": ( time.time() - (72*3600))},
- }
- fs=["name", "values.%s"%name.split(".")[1]]
- s={
- "field":name.split(".")[1],
- }
- print "query q=%s fs=%s s=%s" % (q,fs,s)
- collection.ensure_index([('time',pymongo.ASCENDING),('name',pymongo.ASCENDING)])
- data = collection.map_reduce(m,r,query=q,finalize=f,fields=fs,scope=s).find().sort('time',pymongo.ASCENDING)
- return map(lambda it: [it['_id'], it['value']['avg']], data)
- elif name in (
- "betriebsdatenFeuerungsautomat.betriebszustand.reduced",
- "solarDaten.solarPumpe.reduced"):
- pName = name.split(".")[0]
- pField = name.split(".")[1]
- q={
- "name":pName,
- "time":{"$gt":(time.time()-(72*3600))}
- }
- fs=["values.%s"%pField, "time"]
- collection.ensure_index([('time',pymongo.ASCENDING),('name',pymongo.ASCENDING)])
- data=collection.find(q,fields=fs).sort('time', pymongo.ASCENDING)
- #TODO.map(Code('''function(it) { return [it.time, it.values.betriebszustand]; }'''))
- data=map(lambda it: [it['time']*1000, it['values'][pField]], data)
-
- #Fast die ände auf einen Eintrag pro Änderung zusammen
- def reduce(data):
- prev = None
- for item in data:
- if item[1] != prev:
- prev = item[1]
- yield item
-
- return list(reduce(data))
- else:
- return []
-"""
+Session = sessionmaker()
class CacheDecorator(object):
def __init__(self,key,timeout=20):
@@ -96,18 +29,27 @@ class CacheDecorator(object):
self.func = func
return self.cachedFunc
+def data(sensor, from_date=None, till_date=None):
+ session = Session()
+ values = session.query(model.Value)\
+ .join(model.Sensor)\
+ .filter(model.Sensor.name == sensor)\
+ .all()
+ return {"sensor":sensor, "from_date":from_date, "till_date":till_date, "values":values}
+
@itty.get("/")
def index(req):
filename=os.path.join(os.path.dirname(__file__), "static", "index.html")
return open(filename,"r").read()
-@itty.get('/json/(?P<name>[^/]+)')
-@itty.get('/json/(?P<name>[^/]+)/from_date/(?P<from_date>.+)')
+@itty.get('/json/(?P<sensor>[^/]+)')
+@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)')
+@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)/till_date/(?P<till_date>[^/]+)')
@CacheDecorator(key=lambda args,kwargs: tuple(kwargs.keys()) + tuple(kwargs.values()),
timeout=20)
-def json(req,name=None,from_date=None):
+def json(req,sensor=None,from_date=None,till_date=None):
print "name=%s from_date=%s" % (name,from_date)
- return itty.Response(dump_json( {"label":name, "data":data(name)} ),
+ return itty.Response(dump_json(data(sensor)),
content_type="application/json")
@@ -117,5 +59,6 @@ def static(request,filename):
return itty.Response(file, content_type=itty.content_type(file))
-def run():
- return itty.run_itty(host="0.0.0.0",port=5000)
+def run(db_engine,host="0.0.0.0",port=5000):
+ Session.configure(bind=db_engine)
+ return itty.run_itty(host=host,port=port)