device.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. demeter web page
  5. name:device.py
  6. author:rabin
  7. """
  8. from __load__ import *
  9. from demeter.mqtt import *
  10. # 首页
  11. class index_path(Load):
  12. @Web.auth
  13. @Web.setting
  14. def get(self):
  15. # 获取网关列表
  16. self.data['gateway'] = self.service('common').list('device_gateway', state=True, search={'farm_id':self.data['setting']['farm']})
  17. # 获取页面
  18. self.data['page'] = self.service('common').list('device_page', order='inorder asc,cdate desc', search={'farm_id':self.data['setting']['farm']})
  19. self.view("device/index.html")
  20. #批量控制
  21. class mul_path(Load):
  22. @Web.auth
  23. @Web.setting
  24. def get(self):
  25. self.data['list'] = self.service('common').list('device_mul', search={'farm_id':self.data['setting']['farm']})
  26. if self.data['list']:
  27. model = Demeter.model('device_mul_queue')
  28. for key, value in enumerate(self.data['list']):
  29. model.status.ins((2,3))
  30. model.mul_id = value['id']
  31. info = model.select()
  32. #self.data['list'][key]['oper'] = ''
  33. if info:
  34. for v in info:
  35. if v['oper']:
  36. self.data['list'][key]['oper'] = v['oper']
  37. self.view("device/mul.html")
  38. @Web.auth
  39. @Web.setting
  40. def post(self):
  41. id = self.input('id')
  42. value = self.input('value')
  43. if id:
  44. info = self.service('common').one('device_mul', id=id)
  45. if info:
  46. update = {}
  47. update['value'] = value
  48. if info['device_type'] == 1:
  49. if value == '1':
  50. update['oper'] = '批量启动中'
  51. else:
  52. update['oper'] = '批量关闭中'
  53. else:
  54. if value == '1':
  55. update['oper'] = '批量升起中'
  56. elif value == '2':
  57. update['oper'] = '批量下降中'
  58. elif value == '5':
  59. update['oper'] = '批量停止中'
  60. self.service('common').update('device_mul', id, update, cdate=False)
  61. if info['devices']:
  62. devices = tuple(eval(info['devices']))
  63. for device in devices:
  64. Demeter.service('device').switch(device, switch=value, mul=id)
  65. self.out('yes', {'id':id})
  66. else:
  67. self.out('no')
  68. #大屏幕
  69. class screen_path(Load):
  70. @Web.auth
  71. @Web.setting
  72. def get(self):
  73. device = self.input('device')
  74. # 获取摄像头图片
  75. self.data['camera'] = Device.get(self, search={'hardware_type':6,'farm_id':self.data['setting']['farm']})
  76. # 获取当前数据
  77. 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']})
  78. deviceInfo = {}
  79. if self.data['device']:
  80. for key, value in enumerate(self.data['device']):
  81. if value['type_id'] > 0:
  82. type_info = self.service('common').one('device_type', id=value['type_id'])
  83. self.data['device'][key]['unit'] = type_info['unit']
  84. self.data['device'][key]['typeName'] = type_info['name']
  85. if not device and not deviceInfo:
  86. deviceInfo = self.data['device'][key]
  87. self.data['list'] = ({'name':'实时数据监测', 'device':self.data['device']},)
  88. Device.statBase(self, deviceInfo)
  89. log_search = {}
  90. """
  91. if device:
  92. log_search['device_id'] = device
  93. else:
  94. log_search['device_id--ins'] = self.data['setting']['farmInfo']['gateways']
  95. """
  96. log_search['device_id--ins'] = self.data['setting']['farmInfo']['gateways']
  97. log_search['type_id'] = 2
  98. log_search['farm_id'] = self.data['setting']['farm']
  99. # 获取设备日志
  100. self.data['logs'] = self.service('common').list('msg', search=log_search, limit='0,1')
  101. if self.data['logs']:
  102. for key, value in enumerate(self.data['logs']):
  103. type_info = self.service('common').one('msg_type', id=value['type_id'])
  104. self.data['logs'][key]['type'] = type_info['name']
  105. self.data['logs'][key]['cdates'] = Demeter.date(value['cdate'])
  106. self.data['info'] = self.data['setting']['farmInfo']
  107. if not self.data['info']['welcome']:
  108. self.data['info']['welcome'] = self.data['info']['name']
  109. self.data['noset'] = True
  110. self.data['stat'] = True
  111. self.view("device/screen.html")
  112. #大屏幕设置
  113. class screen_set_path(Load):
  114. @Web.auth
  115. @Web.setting
  116. def get(self):
  117. self.data['info'] = self.data['setting']['farmInfo']
  118. self.data['info']['devices'] = self.data['info']['gateway']
  119. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  120. self.data['device'] = Device.getByGateway(self, search={'hardware_type--ins' : (2,4,5),'farm_id':self.data['setting']['farm']})
  121. self.view("device/alert/screen.html")
  122. @Web.auth
  123. @Web.setting
  124. def post(self):
  125. id = self.input('id')
  126. update = {}
  127. update['welcome'] = self.input('update_name')
  128. update['gateway'] = self.inputs('update_devices')
  129. if not update['gateway']:
  130. self.out(u'请选择设备')
  131. return
  132. update['gateway'] = str(update['gateway'])
  133. if update['welcome']:
  134. value = update['welcome']
  135. else:
  136. value = self.data['setting']['farmInfo']['name']
  137. key = 'update/w/' + id
  138. pub = Pub()
  139. pub.push(key, value)
  140. state = self.service('common').update('farm', id, update)
  141. self.out('yes', {'id':state})
  142. #特殊的大屏幕
  143. class screens_path(Load):
  144. @Web.setting
  145. def get(self):
  146. farm = self.input('ids', '2,3,4')
  147. self.data['farm'] = farm
  148. farm = farm.split(',')
  149. device = self.input('device')
  150. farmInfo = self.service('common').one('farm', id=farm[0])
  151. # 获取摄像头图片
  152. #self.data['camera'] = Device.get(self, search={'hardware_type':6,'farm_id--ins':farm})
  153. self.data['camera'] = []
  154. # 获取当前数据
  155. deviceList = Device.get(self, search={'hardware_type--ins':(2,4,5),'farm_id--ins':farm})
  156. self.data['device'] = {}
  157. for v in farm:
  158. self.data['device'][v] = []
  159. deviceInfo = {}
  160. devices = []
  161. if deviceList:
  162. for key, value in enumerate(deviceList):
  163. if value['type_id'] > 0:
  164. type_info = self.service('common').one('device_type', id=value['type_id'])
  165. value['unit'] = type_info['unit']
  166. value['typeName'] = type_info['name']
  167. self.data['device'][str(value['farm_id'])].append(value)
  168. devices.append(value['id'])
  169. if not device and not deviceInfo:
  170. deviceInfo = value
  171. else:
  172. self.data['device'][str(value['farm_id'])].append(value)
  173. devices.append(value['id'])
  174. self.data['deviceList'] = {}
  175. for v in farm:
  176. farmData = self.service('common').one('farm', id=int(v))
  177. if farmData:
  178. self.data['deviceList'][v] = ({'name':farmData['name'] + '实时检测', 'device':self.data['device'][v]},)
  179. Device.statBase(self, deviceInfo)
  180. log_search = {}
  181. """
  182. if device:
  183. log_search['device_id'] = device
  184. else:
  185. log_search['device_id--ins'] = devices
  186. """
  187. log_search['device_id--ins'] = devices
  188. log_search['type_id'] = 2
  189. log_search['farm_id--ins'] = farm
  190. # 获取设备日志
  191. self.data['logs'] = self.service('common').list('msg', search=log_search, limit='0,1')
  192. if self.data['logs']:
  193. for key, value in enumerate(self.data['logs']):
  194. type_info = self.service('common').one('msg_type', id=value['type_id'])
  195. self.data['logs'][key]['type'] = type_info['name']
  196. self.data['logs'][key]['cdates'] = Demeter.date(value['cdate'])
  197. self.data['info'] = farmInfo
  198. if not self.data['info']['welcome']:
  199. self.data['info']['welcome'] = self.data['info']['name']
  200. self.data['info']['welcome'] = '保定清苑农业局物联网监测系统'
  201. self.data['noset'] = True
  202. self.data['stat'] = True
  203. self.view("device/screens.html")
  204. #获取设备数据和设备控制
  205. class data_path(Load):
  206. @Web.auth
  207. @Web.setting
  208. def get(self):
  209. Device.data(self)
  210. if 'stat' in self.data and self.data['stat']:
  211. Device.statBase(self, self.data['stat'])
  212. self.view("device/data.html")
  213. #获取图像
  214. class pic_path(Load):
  215. @Web.auth
  216. @Web.setting
  217. def get(self):
  218. Device.pic(self)
  219. self.view("device/pic.html")
  220. #数据统计
  221. class stat_path(Load):
  222. @Web.auth
  223. @Web.setting
  224. def get(self):
  225. Device.stat(self)
  226. self.view("device/stat.html")
  227. #设备日志
  228. class log_path(Load):
  229. @Web.auth
  230. @Web.setting
  231. def get(self):
  232. Device.log(self)
  233. self.view("device/logs.html")
  234. #设备分组
  235. class group_path(Load):
  236. @Web.auth
  237. @Web.setting
  238. def get(self):
  239. # 获取页面
  240. self.data['page'] = self.service('common').list('device_page', order='inorder asc,cdate desc', search={'farm_id':self.data['setting']['farm']})
  241. if self.data['page']:
  242. for key, value in enumerate(self.data['page']):
  243. 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')
  244. if self.data['page'][key]['group']:
  245. for groupk, groupv in enumerate(self.data['page'][key]['group']):
  246. self.data['page'][key]['group'][groupk]['device'] = Device.get(self, search={'id--ins':groupv['devices'],'farm_id':self.data['setting']['farm']})
  247. self.view("device/group.html")
  248. #更新设备的上下限
  249. class update_device_path(Load):
  250. @Web.auth
  251. @Web.setting
  252. def get(self):
  253. id = self.input('device_id')
  254. if id:
  255. Device.data(self)
  256. else:
  257. id = self.input('id')
  258. self.data['set'] = {}
  259. if id:
  260. self.data['set'] = self.service('common').one('device_info', id=id)
  261. if self.data['set'] and self.data['set']['type_id'] > 0:
  262. self.data['type'] = self.service('common').one('device_type', id=self.data['set']['type_id'])
  263. self.view("device/alert/device.html")
  264. @Web.auth
  265. @Web.setting
  266. def post(self):
  267. id = self.input('id')
  268. update = {}
  269. update['max'] = self.input('update_max')
  270. update['min'] = self.input('update_min')
  271. if not update['max'] and not update['min']:
  272. self.out(u'请至少输入一个上限或者下限')
  273. return
  274. if not update['min']:
  275. del update['min']
  276. if not update['max']:
  277. del update['max']
  278. state = self.service('common').update('device_info', id, update)
  279. self.out('yes', {'id':state})
  280. #更新页面
  281. class update_page_path(Load):
  282. @Web.auth
  283. @Web.setting
  284. def get(self):
  285. id = self.input('id')
  286. #self.data['ico'] = ('cj', 'kz', 'syt', 'wg', 'pl', 'dpm', 'fz', 'zn')
  287. self.data['ico'] = ('cj', 'kz', 'syt')
  288. self.data['info'] = {}
  289. if id:
  290. self.data['info'] = self.service('common').one('device_page', id=id)
  291. else:
  292. self.data['info']['ico'] = self.data['ico'][0]
  293. self.view("device/alert/page.html")
  294. @Web.auth
  295. @Web.setting
  296. def post(self):
  297. id = self.input('id')
  298. update = {}
  299. update['name'] = self.input('update_name')
  300. update['ico'] = self.input('update_ico')
  301. update['inorder'] = self.input('update_inorder', 0)
  302. if not update['inorder']:
  303. update['inorder'] = 0
  304. update['inorder'] = int(update['inorder'])
  305. update['stat'] = self.input('update_stat')
  306. if not update['name']:
  307. self.out(u'请输入页面名称')
  308. return
  309. if not update['ico']:
  310. self.out(u'请选择图标')
  311. return
  312. if update['stat']:
  313. update['stat'] = True
  314. else:
  315. update['stat'] = False
  316. state = self.service('common').update('device_page', id, update)
  317. self.out('yes', {'id':state})
  318. #更新分组
  319. class update_group_path(Load):
  320. @Web.auth
  321. @Web.setting
  322. def get(self):
  323. page = self.input('page')
  324. self.data['page'] = self.service('common').one('device_page', id=page)
  325. id = self.input('id')
  326. self.data['info'] = {}
  327. if id:
  328. self.data['info'] = self.service('common').one('device_group', id=id)
  329. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  330. self.data['device'] = Device.getByGateway(self, search={'farm_id':self.data['setting']['farm']})
  331. self.view("device/alert/group.html")
  332. @Web.auth
  333. @Web.setting
  334. def post(self):
  335. id = self.input('id')
  336. update = {}
  337. update['page_id'] = self.input('update_page_id')
  338. update['name'] = self.input('update_name')
  339. update['devices'] = self.inputs('update_devices')
  340. update['inorder'] = self.input('update_inorder', 0)
  341. if not update['inorder']:
  342. update['inorder'] = 0
  343. update['inorder'] = int(update['inorder'])
  344. if not update['name']:
  345. self.out(u'请输入分组名称')
  346. return
  347. if not update['devices']:
  348. self.out(u'请选择设备')
  349. return
  350. update['devices'] = str(update['devices'])
  351. state = self.service('common').update('device_group', id, update)
  352. self.out('yes', {'id':state})
  353. @Web.auth
  354. @Web.setting
  355. def delete(self):
  356. id = self.input('id')
  357. if not id:
  358. self.out('no')
  359. return
  360. state = self.service('common').rDelete('device_group', id)
  361. self.out('yes', {'state':state})
  362. #智能设置-批量设置
  363. class set_mul_path(Load):
  364. @Web.auth
  365. @Web.setting
  366. def get(self):
  367. self.data['name'] = '批量控制'
  368. Device.set(self)
  369. self.data['mul'] = self.service('common').list('device_mul', search={'farm_id':self.data['setting']['farm']})
  370. if self.data['mul']:
  371. for key, value in enumerate(self.data['mul']):
  372. self.data['mul'][key]['device'] = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
  373. self.view("device/set/mul.html")
  374. #更新批量控制
  375. class update_set_mul_path(Load):
  376. @Web.auth
  377. @Web.setting
  378. def get(self):
  379. id = self.input('id')
  380. self.data['info'] = {}
  381. if id:
  382. self.data['info'] = self.service('common').one('device_mul', id=id)
  383. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  384. self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
  385. self.data['type'] = ({'id':1, 'name':'开关'},{'id':2, 'name':'卷帘'})
  386. self.view("device/alert/mul.html")
  387. @Web.auth
  388. @Web.setting
  389. def post(self):
  390. id = self.input('id')
  391. update = {}
  392. update['name'] = self.input('update_name')
  393. update['device_type'] = self.input('update_type')
  394. update['devices'] = self.inputs('update_devices')
  395. if not update['name']:
  396. self.out(u'请输入名称')
  397. return
  398. if not update['device_type']:
  399. self.out(u'请选择设备类型')
  400. return
  401. if not update['devices']:
  402. self.out(u'请选择设备')
  403. return
  404. update['devices'] = str(update['devices'])
  405. state = self.service('common').update('device_mul', id, update)
  406. self.out('yes', {'id':state})
  407. @Web.auth
  408. @Web.setting
  409. def delete(self):
  410. id = self.input('id')
  411. if not id:
  412. self.out('no')
  413. return
  414. state = self.service('common').rDelete('device_mul', id)
  415. self.out('yes', {'state':state})
  416. #智能设置-定时设置
  417. class set_timing_path(Load):
  418. @Web.auth
  419. @Web.setting
  420. def get(self):
  421. self.data['name'] = '定时设置'
  422. Device.set(self)
  423. Device.setCronOper(self)
  424. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  425. self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
  426. self.data['list'] = self.service('common').list('device_set_timing', state=True, page={'num':10}, search={'farm_id':self.data['setting']['farm']})
  427. if self.data['list']:
  428. for key, value in enumerate(self.data['list']):
  429. self.data['list'][key]['device'] = []
  430. if value['devices']:
  431. device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
  432. if device:
  433. self.data['list'][key]['device'] = device
  434. self.data['list'][key]['oper'] = self.data['oper'][value['oper']-1]['name']
  435. self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
  436. self.data['list'][key]['zdates'] = Demeter.date(value['zdate'])
  437. if value['status'] == 1:
  438. self.data['list'][key]['status_text'] = '执行成功'
  439. elif value['status'] == 2:
  440. self.data['list'][key]['status_text'] = '执行失败'
  441. self.view("device/set/timing.html")
  442. class update_set_timing_path(Load):
  443. @Web.auth
  444. @Web.setting
  445. def get(self):
  446. id = self.input('id')
  447. Device.setCronOper(self)
  448. self.data['info'] = {}
  449. if id:
  450. self.data['info'] = self.service('common').one('device_set_timing', id=id)
  451. if self.data['info'] and self.data['info']['zdate']:
  452. self.data['info']['zdate'] = Demeter.date(self.data['info']['zdate'])
  453. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  454. self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
  455. self.view("device/alert/timing.html")
  456. @Web.auth
  457. @Web.setting
  458. def post(self):
  459. id = self.input('id')
  460. update = {}
  461. update['devices'] = self.inputs('update_devices')
  462. update['oper'] = self.input('update_oper')
  463. update['zdate'] = self.input('update_zdate')
  464. if not update['devices']:
  465. self.out(u'请选择设备')
  466. return
  467. if not update['oper']:
  468. self.out(u'请选择执行结果')
  469. return
  470. if not update['zdate']:
  471. self.out(u'请选择执行时间')
  472. return
  473. update['devices'] = str(update['devices'])
  474. state = self.service('common').update('device_set_timing', id, update)
  475. self.out('yes', {'id':state})
  476. @Web.auth
  477. @Web.setting
  478. def delete(self):
  479. id = self.input('id')
  480. if not id:
  481. self.out('no')
  482. return
  483. state = self.service('common').rDelete('device_set_timing', id)
  484. self.out('yes', {'state':state})
  485. #智能设置-周期设置
  486. class set_loop_path(Load):
  487. @Web.auth
  488. @Web.setting
  489. def get(self):
  490. self.data['name'] = '周期设置'
  491. Device.set(self)
  492. Device.setCronOper(self)
  493. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  494. self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
  495. self.data['list'] = self.service('common').list('device_set_loop', page={'num':10}, search={'farm_id':self.data['setting']['farm']})
  496. if self.data['list']:
  497. for key, value in enumerate(self.data['list']):
  498. self.data['list'][key]['device'] = []
  499. if value['devices']:
  500. device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
  501. if device:
  502. self.data['list'][key]['device'] = device
  503. if value['looptype'] == 2:
  504. value['loop'] = value['loop'].split(',')
  505. loop = []
  506. for v in self.data['week']:
  507. if str(v['id']) in value['loop']:
  508. loop.append(v['name'])
  509. loop = ' '.join(loop) + ' '
  510. elif value['looptype'] == 3:
  511. loop = value['loop'].replace(',', ' ') + ' '
  512. else:
  513. loop = ''
  514. self.data['list'][key]['loop'] = loop
  515. self.data['list'][key]['oper'] = self.data['oper'][value['oper']-1]['name']
  516. self.data['list'][key]['looptype'] = self.data['looptype'][value['looptype']-1]['list']
  517. self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
  518. self.data['list'][key]['hour'] = Demeter.hour(value['hour'])
  519. self.data['list'][key]['minute'] = Demeter.hour(value['minute'])
  520. self.view("device/set/loop.html")
  521. class update_set_loop_path(Load):
  522. @Web.auth
  523. @Web.setting
  524. def get(self):
  525. id = self.input('id')
  526. Device.setCronOper(self)
  527. self.data['info'] = {}
  528. if id:
  529. self.data['info'] = self.service('common').one('device_set_loop', id=id)
  530. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  531. self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
  532. self.view("device/alert/loop.html")
  533. @Web.auth
  534. @Web.setting
  535. def post(self):
  536. id = self.input('id')
  537. update = {}
  538. update['devices'] = self.inputs('update_devices')
  539. update['oper'] = self.input('update_oper')
  540. update['loop'] = self.input('update_loop')
  541. update['hour'] = self.input('update_hour')
  542. update['minute'] = self.input('update_minute')
  543. update['looptype'] = self.input('update_looptype')
  544. if not update['devices']:
  545. self.out(u'请选择设备')
  546. return
  547. if not update['oper']:
  548. self.out(u'请选择执行结果')
  549. return
  550. if not update['hour']:
  551. self.out(u'请选择执行时间')
  552. return
  553. if not update['looptype']:
  554. self.out(u'请选择执行时间')
  555. return
  556. if update['looptype'] != '1' and not update['loop']:
  557. self.out(u'请选择执行时间')
  558. return
  559. update['devices'] = str(update['devices'])
  560. state = self.service('common').update('device_set_loop', id, update)
  561. self.out('yes', {'id':state})
  562. @Web.auth
  563. @Web.setting
  564. def delete(self):
  565. id = self.input('id')
  566. if not id:
  567. self.out('no')
  568. return
  569. state = self.input('state', False)
  570. update = {}
  571. update['status'] = state
  572. state = self.service('common').update('device_set_loop', id, update)
  573. self.out('yes', {'state':state})
  574. #智能设置-条件控制
  575. class set_condition_path(Load):
  576. @Web.auth
  577. @Web.setting
  578. def get(self):
  579. self.data['name'] = '条件控制'
  580. Device.set(self)
  581. Device.setCronOper(self)
  582. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  583. self.data['device'] = Device.getByGateway(self, search={'hardware_type': 3,'farm_id':self.data['setting']['farm']})
  584. self.data['list'] = self.service('common').list('device_set_condition', state=True, page={'num':10}, search={'farm_id':self.data['setting']['farm']})
  585. if self.data['list']:
  586. for key, value in enumerate(self.data['list']):
  587. self.data['list'][key]['device'] = []
  588. if value['devices']:
  589. device = Device.get(self, search={'id--ins':value['devices'],'farm_id':self.data['setting']['farm']})
  590. if device:
  591. self.data['list'][key]['device'] = device
  592. self.data['list'][key]['cdates'] = Demeter.date(value['cdate'])
  593. self.data['list'][key]['oper'] = self.data['opers'][value['oper']-1]['name']
  594. self.data['list'][key]['condition'] = self.data['condition'][value['condition']-1]['exp']
  595. gateway = self.service('common').one('device_gateway', id=value['gateway_id'])
  596. self.data['list'][key]['gatewayName'] = gateway['name']
  597. device = self.service('common').one('device_info', id=value['device_id'])
  598. if device:
  599. self.data['list'][key]['deviceName'] = device['name']
  600. type_info = self.service('common').one('device_type', id=device['type_id'])
  601. self.data['list'][key]['unit'] = type_info['unit']
  602. self.view("device/set/condition.html")
  603. class update_set_condition_path(Load):
  604. @Web.auth
  605. @Web.setting
  606. def get(self):
  607. id = self.input('id')
  608. Device.setCronOper(self)
  609. self.data['info'] = {}
  610. if id:
  611. self.data['info'] = self.service('common').one('device_set_condition', id=id)
  612. self.data['gateway'] = self.service('common').list('device_gateway', search={'farm_id':self.data['setting']['farm']})
  613. self.data['device'] = Device.getByGateway(self, search={'hardware_type' : 3,'farm_id':self.data['setting']['farm']})
  614. self.data['device_list'] = self.service('common').list('device_info', search={'hardware_type--ins' : (2,4),'gateway_id':self.data['gateway'][0]['id']})
  615. self.view("device/alert/condition.html")
  616. @Web.auth
  617. @Web.setting
  618. def post(self):
  619. id = self.input('id')
  620. update = {}
  621. update['devices'] = self.inputs('update_devices')
  622. update['oper'] = self.input('update_oper')
  623. update['gateway_id'] = self.input('update_gateway_id')
  624. update['device_id'] = self.input('update_device_id')
  625. update['condition'] = self.input('update_condition')
  626. update['value'] = self.input('update_value')
  627. update['notice'] = self.input('update_notice')
  628. if not update['devices']:
  629. self.out(u'请选择设备')
  630. return
  631. if not update['oper']:
  632. self.out(u'请选择执行结果')
  633. return
  634. if not update['gateway_id']:
  635. self.out(u'请选择设备条件')
  636. return
  637. if not update['device_id']:
  638. self.out(u'请选择设备条件')
  639. return
  640. if not update['condition']:
  641. self.out(u'请选择判断条件')
  642. return
  643. if not update['value']:
  644. self.out(u'请输入判断条件的值')
  645. return
  646. if update['notice']:
  647. update['notice'] = True
  648. else:
  649. update['notice'] = False
  650. update['devices'] = str(update['devices'])
  651. state = self.service('common').update('device_set_condition', id, update)
  652. self.out('yes', {'id':state})
  653. @Web.auth
  654. @Web.setting
  655. def delete(self):
  656. id = self.input('id')
  657. if not id:
  658. self.out('no')
  659. return
  660. state = self.input('state', False)
  661. update = {}
  662. update['status'] = state
  663. state = self.service('common').update('device_set_condition', id, update)
  664. self.out('yes', {'state':state})
  665. #更新控制设备的状态
  666. class update_path(Load):
  667. @Web.auth
  668. @Web.setting
  669. def post(self):
  670. id = self.input('id')
  671. value = self.input('value')
  672. if id:
  673. Demeter.service('device').switch(id, switch=value)
  674. self.out('yes', {'id':id})
  675. """
  676. yield self.switch(id, value)
  677. Shell.popen(Demeter.path + 'switch.py ' + id + ' ' + value, bg=True)
  678. response = response.replace("\n", "")
  679. if response == 'ok':
  680. self.out('yes', {'id':id})
  681. else:
  682. model = Demeter.model('notice_type')
  683. model.key = response
  684. info = model.select(type='fetchone')
  685. if info:
  686. response = info['name']
  687. self.out(response)
  688. """
  689. else:
  690. self.out('no')
  691. @tornado.gen.coroutine
  692. def switch(self, id, value):
  693. Demeter.service('device').switch(id, switch=value)
  694. class get_path(Load):
  695. @Web.auth
  696. @Web.setting
  697. def get(self):
  698. # 根据网关id获取设备
  699. id = self.input('id')
  700. device = Device.get(self, search={'gateway_id':id, 'hardware_type': 2,'farm_id':self.data['setting']['farm']})
  701. self.view("device/alert/select_device.html")