device.py 23 KB

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