device.py 23 KB

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