device.py 22 KB

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