]> ToastFreeware Gitweb - chrisu/seepark.git/blobdiff - web/seepark_web.py
editorial change: move a def() around
[chrisu/seepark.git] / web / seepark_web.py
index 42bbf30740db0f42292f89901d432b5611f382e6..59e0c8b0264d8d0a0a9067afea2e2f9c1dc82e9c 100644 (file)
@@ -59,19 +59,6 @@ class OpenWeatherMap(db.Model):
     __tablename__ = 'openweathermap'
 
 
-def select_sensordata(sensor_id, sensor_type, begin, end):
-    query = Sensors.query
-    if sensor_id is not None:
-        query = query.filter(Sensors.sensor_id == sensor_id)
-    if sensor_type is not None:
-        query = query.filter(Sensors.value_type == sensor_type)
-    if begin is not None:
-        query = query.filter(Sensors.timestamp >= begin)
-    if end is not None:
-        query = query.filter(Sensors.timestamp <= end)
-    return query.all()
-
-
 def calc_grouping_resolution(begin, end):
     """How many data points should be between the timestamps begin and end?"""
     # copied from munin/master/_bin/munin-cgi-graph.in
@@ -94,6 +81,19 @@ def calc_grouping_resolution(begin, end):
     return resolution
 
 
+def select_sensordata(sensor_id, sensor_type, begin, end):
+    query = Sensors.query
+    if sensor_id is not None:
+        query = query.filter(Sensors.sensor_id == sensor_id)
+    if sensor_type is not None:
+        query = query.filter(Sensors.value_type == sensor_type)
+    if begin is not None:
+        query = query.filter(Sensors.timestamp >= begin)
+    if end is not None:
+        query = query.filter(Sensors.timestamp <= end)
+    return query.all()
+
+
 def select_sensordata_grouped(sensor_id, sensor_type, begin, end):
     # determine resolution (interval in seconds for data points)
     resolution = calc_grouping_resolution(begin, end)
@@ -101,7 +101,7 @@ def select_sensordata_grouped(sensor_id, sensor_type, begin, end):
     # Let the database do the grouping. Example in SQL (MySQL):
     # select to_seconds(datetime) DIV (60*60*24) as interval_id, min(datetime), max(datetime), min(temp), avg(temp), max(temp), count(temp) from openweathermap group by interval_id order by interval_id;
     query = db.session.query(func.to_seconds(Sensors.timestamp).op('div')(resolution).label('g'),
-            func.min(Sensors.timestamp).label('timestamp'),
+            func.from_unixtime(func.avg(func.unix_timestamp(Sensors.timestamp))).label('timestamp'),
             func.avg(Sensors.value).label('value'),
             Sensors.sensor_id, Sensors.value_type, Sensors.sensor_name)
     if sensor_id is not None:
@@ -130,12 +130,12 @@ def select_openweatherdata_grouped(cityid, begin, end):
     # Let the database do the grouping. Example in SQL (MySQL):
     # select to_seconds(datetime) DIV (60*60*24) as interval_id, min(datetime), max(datetime), min(temp), avg(temp), max(temp), count(temp) from openweathermap group by interval_id order by interval_id;
     query = db.session.query(func.to_seconds(OpenWeatherMap.datetime).op('div')(resolution).label('g'),
-            func.min(OpenWeatherMap.datetime).label('datetime'),
+            func.from_unixtime(func.avg(func.unix_timestamp(OpenWeatherMap.datetime))).label('datetime'),
             func.avg(OpenWeatherMap.temp).label('temp'),
             OpenWeatherMap.cityid)
     OpenWeatherMap.query.filter(OpenWeatherMap.cityid == cityid)
-    query = query.filter(Sensors.timestamp >= begin)
-    query = query.filter(Sensors.timestamp <= end)
+    query = query.filter(OpenWeatherMap.datetime >= begin)
+    query = query.filter(OpenWeatherMap.datetime <= end)
     query = query.group_by('g', OpenWeatherMap.cityid)
     return query.all()