| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757 | 
							- #!/usr/bin/env python
 
- # -*- coding: utf-8 -*-
 
- """
 
-     demeter web page
 
-     name:device.py
 
-     author:rabin
 
- """
 
- from __load__ import *
 
- from demeter.mqtt import *
 
- # 首页
 
- class index_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		# 获取网关列表
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', state=True, search={'farm_id':self.data['setting']['farm']})
 
- 		# 获取页面
 
- 		self.data['page'] = self.service('common').list('device_page', order='inorder asc,cdate desc', search={'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/index.html")
 
- #批量控制
 
- class mul_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['list'] = self.service('common').list('device_mul', search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['list']:
 
- 			model = Demeter.model('device_mul_queue')
 
- 			for key, value in enumerate(self.data['list']):
 
- 				model.status.ins((2,3))
 
- 				model.mul_id = value['id']
 
- 				info = model.select()
 
- 				#self.data['list'][key]['oper'] = ''
 
- 				if info:
 
- 					for v in info:
 
- 						if v['oper']:
 
- 							self.data['list'][key]['oper'] = v['oper']
 
- 					
 
- 		self.view("device/mul.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		value = self.input('value')
 
- 		if id:
 
- 			info = self.service('common').one('device_mul', id=id)
 
- 			if info:
 
- 				update = {}
 
- 				update['value'] = value
 
- 				if info['device_type'] == 1:
 
- 					if value == '1':
 
- 						update['oper'] = '批量启动中'
 
- 					else:
 
- 						update['oper'] = '批量关闭中'
 
- 				else:
 
- 					if value == '1':
 
- 						update['oper'] = '批量升起中'
 
- 					elif value == '2':
 
- 						update['oper'] = '批量下降中'
 
- 					elif value == '5':
 
- 						update['oper'] = '批量停止中'
 
- 						
 
- 				self.service('common').update('device_mul', id, update, cdate=False)
 
- 				if info['devices']:
 
- 					devices = tuple(eval(info['devices']))
 
- 					for device in devices:
 
- 						Demeter.service('device').switch(device, switch=value, mul=id)
 
- 			self.out('yes', {'id':id})
 
- 		else:
 
- 			self.out('no')
 
- #大屏幕
 
- class screen_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		device = self.input('device')
 
- 		# 获取摄像头图片
 
- 		self.data['camera'] = Device.get(self, search={'hardware_type':6,'farm_id':self.data['setting']['farm']})
 
- 		# 获取当前数据
 
- 		self.data['device'] = Device.get(self, search={'id--ins':self.data['setting']['farmInfo']['gateway'], 'hardware_type--ins':(2,4,5),'farm_id':self.data['setting']['farm']})
 
- 		deviceInfo = {}
 
- 		if self.data['device']:
 
- 			for key, value in enumerate(self.data['device']):
 
- 				if value['type_id'] > 0:
 
- 					type_info = self.service('common').one('device_type', id=value['type_id'])
 
- 					self.data['device'][key]['unit'] = type_info['unit']
 
- 					self.data['device'][key]['typeName'] = type_info['name']
 
- 					if not device and not deviceInfo:
 
- 						deviceInfo = self.data['device'][key]
 
- 		self.data['list'] = ({'name':'实时数据监测', 'device':self.data['device']},)
 
- 		Device.statBase(self, deviceInfo)
 
- 		log_search = {}
 
- 		if device:
 
- 			log_search['device_id'] = device
 
- 		else:
 
- 			log_search['device_id--ins'] = self.data['setting']['farmInfo']['gateways']
 
- 		log_search['device_id--ins'] = self.data['setting']['farmInfo']['gateways']
 
- 		log_search['type_id'] = 2
 
- 		log_search['farm_id'] = self.data['setting']['farm']
 
- 		# 获取设备日志
 
- 		self.data['logs'] = self.service('common').list('msg', search=log_search, limit='0,1')
 
- 		if self.data['logs']:
 
- 			for key, value in enumerate(self.data['logs']):
 
- 				type_info = self.service('common').one('msg_type', id=value['type_id'])
 
- 				self.data['logs'][key]['type'] = type_info['name']
 
- 				self.data['logs'][key]['cdates'] = Demeter.date(value['cdate'])
 
- 		self.data['info'] = self.data['setting']['farmInfo']
 
- 		if not self.data['info']['welcome']:
 
- 			self.data['info']['welcome'] = self.data['info']['name']
 
- 		self.data['noset'] = True
 
- 		self.data['stat'] = True
 
- 		self.view("device/screen.html")
 
- #大屏幕设置
 
- class screen_set_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['info'] = self.data['setting']['farmInfo']
 
- 		self.data['info']['devices'] = self.data['info']['gateway']
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type--ins' : (2,4,5),'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/alert/screen.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['welcome'] = self.input('update_name')
 
- 		update['gateway'] = self.inputs('update_devices')
 
- 		if not update['gateway']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		update['gateway'] = str(update['gateway'])
 
- 		if update['welcome']:
 
- 			value = update['welcome']
 
- 		else:
 
- 			value = self.data['setting']['farmInfo']['name']
 
- 		key = 'update/w/' + id
 
- 		pub = Pub()
 
- 		pub.push(key, value)
 
- 		state = self.service('common').update('farm', id, update)
 
- 		self.out('yes', {'id':state})
 
- #特殊的大屏幕
 
- class screens_path(Load):
 
- 	@Web.setting
 
- 	def get(self):
 
- 		farm = self.input('ids', '2,3,4')
 
- 		self.data['farm'] = farm
 
- 		farm = farm.split(',')
 
- 		device = self.input('device')
 
- 		farmInfo = self.service('common').one('farm', id=farm[0])
 
- 		# 获取摄像头图片
 
- 		#self.data['camera'] = Device.get(self, search={'hardware_type':6,'farm_id--ins':farm})
 
- 		self.data['camera'] = []
 
- 		# 获取当前数据
 
- 		deviceList = Device.get(self, search={'hardware_type--ins':(2,4,5),'farm_id--ins':farm})
 
- 		self.data['device'] = {}
 
- 		for v in farm:
 
- 			self.data['device'][v] = []
 
- 		deviceInfo = {}
 
- 		devices = []
 
- 		if deviceList:
 
- 			for key, value in enumerate(deviceList):
 
- 				if value['type_id'] > 0:
 
- 					type_info = self.service('common').one('device_type', id=value['type_id'])
 
- 					value['unit'] = type_info['unit']
 
- 					value['typeName'] = type_info['name']
 
- 					self.data['device'][str(value['farm_id'])].append(value)
 
- 					devices.append(value['id'])
 
- 					if not device and not deviceInfo:
 
- 						deviceInfo = value
 
- 				else:
 
- 					self.data['device'][str(value['farm_id'])].append(value)
 
- 					devices.append(value['id'])
 
- 		self.data['deviceList'] = {}
 
- 		for v in farm:
 
- 			farmData = self.service('common').one('farm', id=int(v))
 
- 			if farmData:
 
- 				self.data['deviceList'][v] = ({'name':farmData['name'] + '实时检测', 'device':self.data['device'][v]},)
 
- 		Device.statBase(self, deviceInfo)
 
- 		log_search = {}
 
- 		if device:
 
- 			log_search['device_id'] = device
 
- 		else:
 
- 			log_search['device_id--ins'] = devices
 
- 		log_search['device_id--ins'] = devices
 
- 		log_search['type_id'] = 2
 
- 		log_search['farm_id--ins'] = farm
 
- 		# 获取设备日志
 
- 		self.data['logs'] = self.service('common').list('msg', search=log_search, limit='0,1')
 
- 		if self.data['logs']:
 
- 			for key, value in enumerate(self.data['logs']):
 
- 				type_info = self.service('common').one('msg_type', id=value['type_id'])
 
- 				self.data['logs'][key]['type'] = type_info['name']
 
- 				self.data['logs'][key]['cdates'] = Demeter.date(value['cdate'])
 
- 		self.data['info'] = farmInfo
 
- 		if not self.data['info']['welcome']:
 
- 			self.data['info']['welcome'] = self.data['info']['name']
 
- 		self.data['info']['welcome'] = '保定清苑农业局物联网监测系统'
 
- 		self.data['noset'] = True
 
- 		self.data['stat'] = True
 
- 		self.view("device/screens.html")
 
- #获取设备数据和设备控制
 
- class data_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		Device.data(self)
 
- 		if 'stat' in self.data and self.data['stat']:
 
- 			Device.statBase(self, self.data['stat'])
 
- 		self.view("device/data.html")
 
- #获取图像
 
- class pic_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		Device.pic(self)
 
- 		self.view("device/pic.html")
 
- #数据统计
 
- class stat_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		Device.stat(self)
 
- 		self.view("device/stat.html")
 
- #设备日志
 
- class log_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		Device.log(self)
 
- 		self.view("device/logs.html")
 
- #设备分组
 
- class group_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		# 获取页面
 
- 		self.data['page'] = self.service('common').list('device_page', order='inorder asc,cdate desc', search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['page']:
 
- 			for key, value in enumerate(self.data['page']):
 
- 				self.data['page'][key]['group'] = self.service('common').list('device_group', search={'page_id':value['id'],'farm_id':self.data['setting']['farm']} , order='inorder asc,cdate desc')
 
- 				if self.data['page'][key]['group']:
 
- 					for groupk, groupv in enumerate(self.data['page'][key]['group']):
 
- 						self.data['page'][key]['group'][groupk]['device'] = Device.get(self, search={'id--ins':groupv['devices'],'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/group.html")
 
- #更新设备的上下限
 
- class update_device_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('device_id')
 
- 		if id:
 
- 			Device.data(self)
 
- 		else:
 
- 			id = self.input('id')
 
- 		self.data['set'] = {}
 
- 		if id:
 
- 			self.data['set'] = self.service('common').one('device_info', id=id)
 
- 			if self.data['set'] and self.data['set']['type_id'] > 0:
 
- 				self.data['type'] = self.service('common').one('device_type', id=self.data['set']['type_id'])
 
- 		self.view("device/alert/device.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['max'] = self.input('update_max')
 
- 		update['min'] = self.input('update_min')
 
- 		if not update['max'] and not update['min']:
 
- 			self.out(u'请至少输入一个上限或者下限')
 
- 			return
 
- 		if not update['min']:
 
- 			del update['min']
 
- 		if not update['max']:
 
- 			del update['max']
 
- 		state = self.service('common').update('device_info', id, update)
 
- 		self.out('yes', {'id':state})
 
- #更新页面
 
- class update_page_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('id')
 
- 		#self.data['ico'] = ('cj', 'kz', 'syt', 'wg', 'pl', 'dpm', 'fz', 'zn')
 
- 		self.data['ico'] = ('cj', 'kz', 'syt')
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_page', id=id)
 
- 		else:
 
- 			self.data['info']['ico'] = self.data['ico'][0]
 
- 		self.view("device/alert/page.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['name'] = self.input('update_name')
 
- 		update['ico'] = self.input('update_ico')
 
- 		update['inorder'] = self.input('update_inorder', 0)
 
- 		if not update['inorder']:
 
- 			update['inorder'] = 0
 
- 		update['inorder'] = int(update['inorder'])
 
- 		update['stat'] = self.input('update_stat')
 
- 		if not update['name']:
 
- 			self.out(u'请输入页面名称')
 
- 			return
 
- 		if not update['ico']:
 
- 			self.out(u'请选择图标')
 
- 			return
 
- 		if update['stat']:
 
- 			update['stat'] = True
 
- 		else:
 
- 			update['stat'] = False
 
- 		state = self.service('common').update('device_page', id, update)
 
- 		self.out('yes', {'id':state})
 
- #更新分组
 
- class update_group_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		page = self.input('page')
 
- 		self.data['page'] = self.service('common').one('device_page', id=page)
 
- 		id = self.input('id')
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_group', id=id)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/alert/group.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['page_id'] = self.input('update_page_id')
 
- 		update['name'] = self.input('update_name')
 
- 		update['devices'] = self.inputs('update_devices')
 
- 		update['inorder'] = self.input('update_inorder', 0)
 
- 		if not update['inorder']:
 
- 			update['inorder'] = 0
 
- 		update['inorder'] = int(update['inorder'])
 
- 		if not update['name']:
 
- 			self.out(u'请输入分组名称')
 
- 			return
 
- 		if not update['devices']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		update['devices'] = str(update['devices'])
 
- 		state = self.service('common').update('device_group', id, update)
 
- 		self.out('yes', {'id':state})
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def delete(self):
 
- 		id = self.input('id')
 
- 		if not id:
 
- 			self.out('no')
 
- 			return
 
- 		state = self.service('common').rDelete('device_group', id)
 
- 		self.out('yes', {'state':state})
 
- #智能设置-批量设置
 
- class set_mul_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['name'] = '批量控制'
 
- 		Device.set(self)
 
- 		self.data['mul'] = self.service('common').list('device_mul', search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['mul']:
 
- 			for key, value in enumerate(self.data['mul']):
 
- 				self.data['mul'][key]['device'] = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/set/mul.html")
 
- #更新批量控制
 
- class update_set_mul_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('id')
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_mul', id=id)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
 
- 		self.data['type'] = ({'id':1, 'name':'开关'},{'id':2, 'name':'卷帘'})
 
- 		self.view("device/alert/mul.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['name'] = self.input('update_name')
 
- 		update['device_type'] = self.input('update_type')
 
- 		update['devices'] = self.inputs('update_devices')
 
- 		if not update['name']:
 
- 			self.out(u'请输入名称')
 
- 			return
 
- 		if not update['device_type']:
 
- 			self.out(u'请选择设备类型')
 
- 			return
 
- 		if not update['devices']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		update['devices'] = str(update['devices'])
 
- 		state = self.service('common').update('device_mul', id, update)
 
- 		self.out('yes', {'id':state})
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def delete(self):
 
- 		id = self.input('id')
 
- 		if not id:
 
- 			self.out('no')
 
- 			return
 
- 		state = self.service('common').rDelete('device_mul', id)
 
- 		self.out('yes', {'state':state})
 
- #智能设置-定时设置
 
- class set_timing_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['name'] = '定时设置'
 
- 		Device.set(self)
 
- 		Device.setCronOper(self)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
 
- 		self.data['list'] = self.service('common').list('device_set_timing', state=True, page={'num':10}, search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['list']:
 
- 			for key, value in enumerate(self.data['list']):
 
- 				self.data['list'][key]['device'] = []
 
- 				if value['devices']:
 
- 					device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
 
- 					if device:
 
- 						self.data['list'][key]['device'] = device
 
- 				self.data['list'][key]['oper'] = self.data['oper'][value['oper']-1]['name']
 
- 				self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
 
- 				self.data['list'][key]['zdates'] = Demeter.date(value['zdate'])
 
- 				if value['status'] == 1:
 
- 					self.data['list'][key]['status_text'] = '执行成功'
 
- 				elif value['status'] == 2:
 
- 					self.data['list'][key]['status_text'] = '执行失败'
 
- 		self.view("device/set/timing.html")
 
- class update_set_timing_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('id')
 
- 		Device.setCronOper(self)
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_set_timing', id=id)
 
- 			if self.data['info'] and self.data['info']['zdate']:
 
- 				self.data['info']['zdate'] = Demeter.date(self.data['info']['zdate'])
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/alert/timing.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['devices'] = self.inputs('update_devices')
 
- 		update['oper'] = self.input('update_oper')
 
- 		update['zdate'] = self.input('update_zdate')
 
- 		if not update['devices']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		if not update['oper']:
 
- 			self.out(u'请选择执行结果')
 
- 			return
 
- 		if not update['zdate']:
 
- 			self.out(u'请选择执行时间')
 
- 			return
 
- 		update['devices'] = str(update['devices'])
 
- 		state = self.service('common').update('device_set_timing', id, update)
 
- 		self.out('yes', {'id':state})
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def delete(self):
 
- 		id = self.input('id')
 
- 		if not id:
 
- 			self.out('no')
 
- 			return
 
- 		state = self.service('common').rDelete('device_set_timing', id)
 
- 		self.out('yes', {'state':state})
 
- #智能设置-周期设置
 
- class set_loop_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['name'] = '周期设置'
 
- 		Device.set(self)
 
- 		Device.setCronOper(self)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
 
- 		self.data['list'] = self.service('common').list('device_set_loop', page={'num':10}, search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['list']:
 
- 			for key, value in enumerate(self.data['list']):
 
- 				self.data['list'][key]['device'] = []
 
- 				if value['devices']:
 
- 					device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
 
- 					if device:
 
- 						self.data['list'][key]['device'] = device
 
- 				if value['looptype'] == 2:
 
- 					value['loop'] = value['loop'].split(',')
 
- 					loop = []
 
- 					for v in self.data['week']:
 
- 						if str(v['id']) in value['loop']:
 
- 							loop.append(v['name'])
 
- 					loop = ' '.join(loop) + ' '
 
- 				elif value['looptype'] == 3:
 
- 					loop = value['loop'].replace(',', ' ') + ' '
 
- 				else:
 
- 					loop = ''
 
- 				self.data['list'][key]['loop'] = loop
 
- 				self.data['list'][key]['oper'] = self.data['oper'][value['oper']-1]['name']
 
- 				self.data['list'][key]['looptype'] = self.data['looptype'][value['looptype']-1]['list']
 
- 				self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
 
- 				self.data['list'][key]['hour'] = Demeter.hour(value['hour'])
 
- 				self.data['list'][key]['minute'] = Demeter.hour(value['minute'])
 
- 		self.view("device/set/loop.html")
 
- class update_set_loop_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('id')
 
- 		Device.setCronOper(self)
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_set_loop', id=id)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/alert/loop.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['devices'] = self.inputs('update_devices')
 
- 		update['oper'] = self.input('update_oper')
 
- 		update['loop'] = self.input('update_loop')
 
- 		update['hour'] = self.input('update_hour')
 
- 		update['minute'] = self.input('update_minute')
 
- 		update['looptype'] = self.input('update_looptype')
 
- 		if not update['devices']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		if not update['oper']:
 
- 			self.out(u'请选择执行结果')
 
- 			return
 
- 		if not update['hour']:
 
- 			self.out(u'请选择执行时间')
 
- 			return
 
- 		if not update['looptype']:
 
- 			self.out(u'请选择执行时间')
 
- 			return
 
- 		if update['looptype'] != '1' and not update['loop']:
 
- 			self.out(u'请选择执行时间')
 
- 			return
 
- 		update['devices'] = str(update['devices'])
 
- 		state = self.service('common').update('device_set_loop', id, update)
 
- 		self.out('yes', {'id':state})
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def delete(self):
 
- 		id = self.input('id')
 
- 		if not id:
 
- 			self.out('no')
 
- 			return
 
- 		state = self.input('state', False)
 
- 		update = {}
 
- 		update['status'] = state
 
- 		state = self.service('common').update('device_set_loop', id, update)
 
- 		self.out('yes', {'state':state})
 
- #智能设置-条件控制
 
- class set_condition_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		self.data['name'] = '条件控制'
 
- 		Device.set(self)
 
- 		Device.setCronOper(self)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
 
- 		self.data['list'] = self.service('common').list('device_set_condition', state=True, page={'num':10}, search={'farm_id':self.data['setting']['farm']})
 
- 		if self.data['list']:
 
- 			for key, value in enumerate(self.data['list']):
 
- 				self.data['list'][key]['device'] = []
 
- 				if value['devices']:
 
- 					device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
 
- 					if device:
 
- 						self.data['list'][key]['device'] = device
 
- 				self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
 
- 				self.data['list'][key]['oper'] = self.data['opers'][value['oper']-1]['name']
 
- 				self.data['list'][key]['condition'] = self.data['condition'][value['condition']-1]['exp']
 
- 				gateway = self.service('common').one('device_gateway', id=value['gateway_id'])
 
- 				self.data['list'][key]['gatewayName'] = gateway['name']
 
- 				device = self.service('common').one('device_info', id=value['device_id'])
 
- 				if device:
 
- 					self.data['list'][key]['deviceName'] = device['name']
 
- 					type_info = self.service('common').one('device_type', id=device['type_id'])
 
- 					self.data['list'][key]['unit'] = type_info['unit']
 
- 		self.view("device/set/condition.html")
 
- class update_set_condition_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		id = self.input('id')
 
- 		Device.setCronOper(self)
 
- 		self.data['info'] = {}
 
- 		if id:
 
- 			self.data['info'] = self.service('common').one('device_set_condition', id=id)
 
- 		self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
 
- 		self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
 
- 		self.data['device_list'] = self.service('common').list('device_info', search={'hardware_type--ins' : (2,4),'gateway_id':self.data['gateway'][0]['id']})
 
- 		self.view("device/alert/condition.html")
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		update = {}
 
- 		update['devices'] = self.inputs('update_devices')
 
- 		update['oper'] = self.input('update_oper')
 
- 		update['gateway_id'] = self.input('update_gateway_id')
 
- 		update['device_id'] = self.input('update_device_id')
 
- 		update['condition'] = self.input('update_condition')
 
- 		update['value'] = self.input('update_value')
 
- 		update['notice'] = self.input('update_notice')
 
- 		if not update['devices']:
 
- 			self.out(u'请选择设备')
 
- 			return
 
- 		if not update['oper']:
 
- 			self.out(u'请选择执行结果')
 
- 			return
 
- 		if not update['gateway_id']:
 
- 			self.out(u'请选择设备条件')
 
- 			return
 
- 		if not update['device_id']:
 
- 			self.out(u'请选择设备条件')
 
- 			return
 
- 		if not update['condition']:
 
- 			self.out(u'请选择判断条件')
 
- 			return
 
- 		if not update['value']:
 
- 			self.out(u'请输入判断条件的值')
 
- 			return
 
- 		if update['notice']:
 
- 			update['notice'] = True
 
- 		else:
 
- 			update['notice'] = False
 
- 		
 
- 		update['devices'] = str(update['devices'])
 
- 		state = self.service('common').update('device_set_condition', id, update)
 
- 		self.out('yes', {'id':state})
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def delete(self):
 
- 		id = self.input('id')
 
- 		if not id:
 
- 			self.out('no')
 
- 			return
 
- 		state = self.input('state', False)
 
- 		update = {}
 
- 		update['status'] = state
 
- 		state = self.service('common').update('device_set_condition', id, update)
 
- 		self.out('yes', {'state':state})
 
- #更新控制设备的状态
 
- class update_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def post(self):
 
- 		id = self.input('id')
 
- 		value = self.input('value')
 
- 		if id:
 
- 			Demeter.service('device').switch(id, switch=value)
 
- 			
 
- 			self.out('yes', {'id':id})
 
- 			"""
 
- 			yield self.switch(id, value)
 
- 			Shell.popen(Demeter.path + 'switch.py ' + id + ' ' + value, bg=True)
 
- 			response = response.replace("\n", "")
 
- 			if response == 'ok':
 
- 				self.out('yes', {'id':id})
 
- 			else:
 
- 				model = Demeter.model('notice_type')
 
- 				model.key = response
 
- 				info = model.select(type='fetchone')
 
- 				if info:
 
- 					response = info['name']
 
- 				self.out(response)
 
- 			"""
 
- 		else:
 
- 			self.out('no')
 
- 	@tornado.gen.coroutine
 
- 	def switch(self, id, value):
 
- 		Demeter.service('device').switch(id, switch=value)
 
- class get_path(Load):
 
- 	@Web.auth
 
- 	@Web.setting
 
- 	def get(self):
 
- 		# 根据网关id获取设备
 
- 		id = self.input('id')
 
- 		device = Device.get(self, search={'gateway_id':id, 'hardware_type': 2,'farm_id':self.data['setting']['farm']})
 
- 		self.view("device/alert/select_device.html")
 
 
  |