aoqiang_socket_gateway.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. from apps.web.constant import DeviceCmdCode
  4. from apps.web.core.adapter.aoqiang_socket_node import AoQiangSocketNodeBox
  5. from apps.web.core.exceptions import ServiceException
  6. from apps.web.core.networking import MessageSender
  7. from apps.web.device.models import Device
  8. class AoQiangSocketGetewayBox(AoQiangSocketNodeBox):
  9. def get_node_list(self):
  10. devInfo = MessageSender.send(self.device, self.make_random_cmdcode(),
  11. {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x01}})
  12. self.check_feedback_result(devInfo)
  13. result = []
  14. for nodeId, nodeInfo in devInfo['data']['devs_status'].items():
  15. if nodeInfo['status'] == 1:
  16. nodeInfo['online'] = True
  17. else:
  18. nodeInfo['online'] = False
  19. nodeInfo.update({'devNo': nodeId})
  20. result.append(nodeInfo)
  21. return result
  22. def get_node(self, nodeDevNo):
  23. devInfo = MessageSender.send(self.device, self.make_random_cmdcode(),
  24. {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x01}})
  25. self.check_feedback_result(devInfo)
  26. return devInfo['data']['subdevs_status'].get(nodeDevNo, None)
  27. def add_node(self, nodeDevNo):
  28. devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
  29. {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x03, 'sub_id': nodeDevNo}})
  30. self.check_feedback_result(devInfo)
  31. # 子节点的父节点也要更新
  32. try:
  33. devObj = Device.objects.get(devNo=nodeDevNo)
  34. devObj.gatewayNode = self._device['devNo']
  35. devObj.save()
  36. except Exception, e:
  37. raise ServiceException({'result': 2, 'description': u'请先扫码注册子设备插座,然后再加入网关'})
  38. def remove_node(self, nodeDevNo):
  39. devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
  40. {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x05, 'sub_id': nodeDevNo}})
  41. self.check_feedback_result(devInfo)
  42. # 子节点的父节点也要更新
  43. try:
  44. devObj = Device.objects.get(devNo=nodeDevNo)
  45. devObj.gatewayNode = ''
  46. devObj.save()
  47. except Exception, e:
  48. pass