device.py 20 KB

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