device.py 23 KB

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