device.py 21 KB

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