rabin 6 years ago
parent
commit
be8e74816b
6 changed files with 81 additions and 14 deletions
  1. 35 4
      admin/page/device.py
  2. 1 0
      conf/dev.conf
  3. 23 7
      model/data.py
  4. 2 2
      pub.py
  5. 1 1
      service/record_sensor.py
  6. 19 0
      sub.py

+ 35 - 4
admin/page/device.py

@@ -224,7 +224,7 @@ class info_path(Load):
 			,add = False
 			#,edit = False
 			,search = (('farm_id-select-','type_id-select-', 'gateway_id-select-', 'hardware_type-select-'), (u'选择农场',u'设备名称',u'设备类型',u'网关',u'硬件类型'))
-			,thead = (u'所属农场', u'设备id', u'连接状态', u'数值', u'设备类型', u'网关',u'硬件类型')
+			,thead = (u'所属农场', u'设备名称', u'设备id', u'连接状态', u'数值', u'设备类型', u'网关',u'硬件类型')
 			,tbody = ('farm','name', 'hardware_id', 'status', 'show_num', 'type', 'gateway', 'hardware_type')
 			,state = False
 		)
@@ -249,7 +249,7 @@ class info_path(Load):
 
 				if value['show_num']:
 					# 根据设备类型type_id得到单位和计算公式
-					self.data['list'][key]['show_num'] = value['show_num'] + '<br />更新时间:' + Demeter.date(value['cdate'])
+					self.data['list'][key]['show_num'] = '<a href="/device/stat?id='+value['id']+'">'value['show_num'] + '</a><br />更新时间:' + Demeter.date(value['cdate'])
 				else:
 					self.data['list'][key]['show_num'] = '0'
 				hardware_type = self.service('common').one('hardware_type', id=value['hardware_type'])
@@ -264,8 +264,8 @@ class info_update_path(Load):
 		self.common(
 			path = 'info'
 			#,label = (u'网关名称', u'设备id',u'网关连接状态',u'电源数值',u'电源连接状态')
-			,label = (u'所属农场',u'设备名称', u'设备id')
-			,update = ('farm_id-select-required', 'name-input-required','hardware_id-show-')
+			,label = (u'设备名称', u'设备id')
+			,update = ('name-input-required','hardware_id-show-')
 			#,update = ('name-input-required','hardware_id-input-required','status-switch--开启|关闭','power_num-input-','power_status-switch--连接|断开')
 			,update_farm_id = Demeter.config['setting']['farmList']
 		)
@@ -278,6 +278,37 @@ class info_update_path(Load):
 	def delete(self):
 		self.commonDelete('device_info')
 
+class stat_path(Load):
+	@Web.auth
+	def get(self):
+		self.common(
+			name = u'设备统计'
+			,path = 'stat'
+			,width = '600'
+			,height = '300'
+			,add = False
+			,edit = False
+			,search = (('label-1','cdate-time-start','cdate-time-end', 'date-select-'), (u'日期范围',u'开始时间',u'截止时间',u'周期选择'))
+			,state = False
+		)
+		self.data['common']['search_date-select-'] = [{'id':'1d', 'name':'一天'},{'id':'7d', 'name':'一周'},{'id':'1m', 'name':'一个月'},{'id':'6m', 'name':'半年'}]
+		id = self.input('id')
+		data = self.service('common').one('device_info', id=id)
+		model = Demeter.model('data', 'tsdb')
+		search = []
+		if 'date-select-' in self.data['search'] and self.data['search']['date-select-']:
+			value = self.data['search']['date-select-']
+			if value == '1d':
+				search.append('group by time(30m) where time > now() – 1d')
+			elif value == '7d':
+				search.append('group by time(300m) where time > now() – 7d')
+			elif value == '1m':
+				search.append('group by time(1d) where time > now() – 1m')
+			elif value == '6m':
+				search.append('group by time(10d) where time > now() – 6m')
+		self.data['list'] = model.select(data['farm_id'], data['hardware_id'], search=search)
+		self.commonView('stat')
+
 
 class type_path(Load):
 	@Web.auth

+ 1 - 0
conf/dev.conf

@@ -24,6 +24,7 @@ password			= public
 timeout				= 60
 ;topic定义
 topic				= method/type/gateway/device
+sub					= pic,sensor
 
 [postgresql]
 host				= 0.0.0.0

+ 23 - 7
model/data.py

@@ -11,13 +11,12 @@ class Data(Model):
 	__table__ = 'data'
 
 	def setTable(self, data):
-		self.table = self.__table__ + '_' + data['farm'] + '_' + data['device']
+		self.table = self.__table__ + '_' + str(data['farm']) + '_' + str(data['device']) + '1'
 
 	def insert(self, data):
 		self.setTable(data)
 		json = self.insert_json(data)
 		self.db.write_points(json)
-		self.select()
 
 	def insert_json(self, data):
 		json = [
@@ -30,13 +29,30 @@ class Data(Model):
 			},
 			#"time": data['time'],
 			"fields": {
-				'source' : data['source'],
-				'value' : data['value']
+				'source' : int(data['source']),
+				'value' : int(data['value'])
 			}
 		}]
 		return json
 
-	def select(self, data):
+	def select(self, farm, device, type=None, hard=None, gateway=None, value=None, search=None):
+		data = {}
+		data['farm'] = farm
+		data['device'] = device
 		self.setTable(data)
-		result = self.db.query('select * from ' + self.table)    
-		print("Result: {0}".format(result))
+		where = []
+		if type:
+			where.append('type = \'' + type + '\'')
+		if hard:
+			where.append('hard = \'' + hard + '\'')
+		if gateway:
+			where.append('gateway = \'' + gateway + '\'')
+		if search:
+			for value in search:
+				where.append(value)
+		if where:
+			where = ' where ' + " and ".join(where)
+		#group by time(30m) where time > now() – 1d 30分钟聚合,大于昨天的数据 1d 1h
+		sql = 'select value from ' + self.table + where
+		data = self.db.query(sql)
+		return [value for value in data.raw['series'][0]['values']]

+ 2 - 2
pub.py

@@ -59,5 +59,5 @@ def pic():
 	"""
 	#pub.push(key, value)
 
-#sensor()
-pic()
+sensor()
+#pic()

+ 1 - 1
service/record_sensor.py

@@ -37,7 +37,7 @@ class Record_sensor(object):
 					#insert
 					model.hardware_id = config['child']
 					model.farm_id = gateway['farm_id']
-					model.name = device_type['name'] + '#' + str(data['device'])
+					model.name = device_type['name'] + '#' + str(config['child'])
 					model.hardware_type = hard['id']
 					model.gateway_id = gateway['id']
 					model.type_id = device_type['id']

+ 19 - 0
sub.py

@@ -6,4 +6,23 @@
     author:rabin
 """
 from demeter.mqtt import *
+import random
 Sub()
+
+"""
+data = {}
+data['type'] = 'temprature'
+data['gateway'] = '10086'
+data['device'] = '100010'
+data['hard'] = 'sensor'
+data['farm'] = 1
+data['source'] = str(random.randint(1, 50))
+data['value'] = str(random.randint(1, 50))
+
+model = Demeter.model('data', 'tsdb')
+#model.insert(data)
+
+data = model.select(data['farm'], data['device'], type=data['type'], hard=data['hard'], gateway=data['gateway'])
+
+print data
+"""