device.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. demeter service
  5. name:device.py 处理设备
  6. author:rabin
  7. """
  8. from demeter.core import *
  9. from demeter.mqtt import *
  10. class Device(object):
  11. # 新增网关时,增加状态和电源
  12. def upGatewayStatus(self, farm_id, gateway_id, hardware_id):
  13. if hardware_id and gateway_id > 0:
  14. info = Demeter.service('common').list('device_info', search={'hardware_id':hardware_id})
  15. if not info:
  16. # 网关状态
  17. insert = {}
  18. insert['farm_id'] = farm_id
  19. insert['name'] = '网关状态'
  20. insert['hardware_id'] = hardware_id
  21. insert['gateway_id'] = gateway_id
  22. insert['hardware_type'] = 5
  23. insert['value'] = '0'
  24. insert['type_id'] = 0
  25. insert['status'] = False
  26. Demeter.service('common').update('device_info', None, insert)
  27. # 电源
  28. insert = {}
  29. insert['farm_id'] = farm_id
  30. insert['name'] = '电源状态'
  31. insert['hardware_id'] = hardware_id
  32. insert['gateway_id'] = gateway_id
  33. insert['hardware_type'] = 4
  34. insert['value'] = '0'
  35. insert['type_id'] = 8
  36. insert['status'] = False
  37. Demeter.service('common').update('device_info', None, insert)
  38. # 批量处理开关
  39. def switchMul(self, value):
  40. if value['devices']:
  41. model = Demeter.model('device_info')
  42. value['devices'] = tuple(eval(value['devices']))
  43. if value['oper'] == 1:
  44. switch = 1
  45. else:
  46. switch = 0
  47. for v in value['devices']:
  48. self.switch(v, switch)
  49. # 处理开关-向设备发送请求
  50. def switch(self, device_id, switch=1):
  51. model = Demeter.model('device_info')
  52. model.id = device_id
  53. info = model.select(type='fetchone')
  54. if info:
  55. model.id = device_id
  56. model.update(value=switch)
  57. model = Demeter.model('device_gateway')
  58. model.id = info['gateway_id']
  59. gateway_info = model.select(type='fetchone')
  60. if info['type_id'] > 0:
  61. model = Demeter.model('device_type')
  62. model.id = info['type_id']
  63. type_info = model.select(type='fetchone')
  64. if type_info:
  65. info['hardware_id'] = str(info['hardware_id'])
  66. switch = str(switch)
  67. gateway_info['hardware_id'] = str(gateway_info['hardware_id'])
  68. # 这里要向服务器发送pub请求了,暂时使用临时文件代替
  69. Demeter.temp(key=type_info['key'], name=info['hardware_id'], value=switch)
  70. #pub
  71. pub = Pub()
  72. key = 'update/' + type_info['key'] + '/' + gateway_info['hardware_id'] + '/' + info['hardware_id']
  73. value = switch
  74. pub.push(key, value, qos=2, callback=self.switchAction, param={'id':info['id'], 'switch':switch})
  75. # 处理开关-响应
  76. def switchAction(self, param, client, userdata, mid):
  77. model = Demeter.model('device_info')
  78. model.id = param['id']
  79. model.update(value=param['switch'])