chuangwei_2.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. from apps.web.constant import DeviceCmdCode, Const, MQTT_TIMEOUT
  4. from apps.web.core.adapter.base import SmartBox
  5. from apps.web.core.exceptions import ServiceException
  6. from apps.web.core.networking import MessageSender
  7. class WasherCWBox(SmartBox):
  8. STATUS_CODE_INFO = {
  9. '00': u'待机中',
  10. '01': u'预约中',
  11. '02': u'消毒清洁中',
  12. '03': u'洗衣工作中',
  13. '04': u'洗衣机洗涤结束',
  14. '05': u'洗衣机自检中',
  15. '06': u'进水超时',
  16. '07': u'排水超时',
  17. '08': u'脱水时撞桶',
  18. '09': u'脱水开盖',
  19. '0A': u'水位传感器异常',
  20. '0B': u'溢水报警',
  21. '0C': u'电机故障',
  22. '0D': u'通讯故障',
  23. 'FD': u'IMEI',
  24. 'FE': u'投币金额',
  25. }
  26. def __init__(self, device):
  27. super(WasherCWBox, self).__init__(device)
  28. # 向洗衣发送查询信息
  29. def send_data(self, funCode, data='', timeout=MQTT_TIMEOUT.NORMAL):
  30. result = MessageSender.send(device = self.device, cmd = DeviceCmdCode.OPERATE_DEV_SYNC, payload = {
  31. "IMEI": self._device["devNo"],
  32. "funCode": funCode,
  33. "data": data
  34. }, timeout = timeout)
  35. if result["rst"] != 0:
  36. if result['rst'] == -1:
  37. raise ServiceException({'result': 2, 'description': u'洗衣机正在玩命找网络,请稍候再试'})
  38. elif result['rst'] == 1:
  39. raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障'})
  40. else:
  41. raise ServiceException({'result': 2, 'description': u'系统错误'})
  42. return result
  43. #获取设备信息
  44. def getDevInfo(self):
  45. """
  46. 获取 洗衣机的状态信息
  47. funCode指令:
  48. 01-查询
  49. 02-工作
  50. 03-预约
  51. 05-取消预约
  52. """
  53. devInfo = self.send_data("01")
  54. data = devInfo.get("data", "")
  55. #网络连同判断
  56. if devInfo.has_key('rst') and devInfo['rst'] != 0:
  57. if devInfo['rst'] == -1:
  58. raise ServiceException(
  59. {'result': 2, 'description': u'当前洗衣机正在玩命找网络,请您稍候再试'})
  60. elif devInfo['rst'] == 1:
  61. raise ServiceException(
  62. {'result': 2, 'description': u'当前洗衣机忙,无响应,请您稍候再试'})
  63. #当前状态判断
  64. temp = data[6:8]
  65. if temp == '00':
  66. status = Const.DEV_WORK_STATUS_IDLE
  67. statusInfo = u'待机中'
  68. elif temp == '01':
  69. status = Const.DEV_WORK_STATUS_WORKING
  70. statusInfo = u'预约中'
  71. elif temp == '02':
  72. status = Const.DEV_WORK_STATUS_WORKING
  73. statusInfo = u'消毒清洁中'
  74. elif temp == '03':
  75. status = Const.DEV_WORK_STATUS_WORKING
  76. statusInfo = u'洗衣工作中'
  77. elif temp == '04':
  78. status = Const.DEV_WORK_STATUS_FINISHED
  79. statusInfo = u'洗衣机洗涤结束'
  80. elif temp == '05':
  81. status = Const.DEV_WORK_STATUS_WORKING
  82. statusInfo = u'洗衣机自检中'
  83. elif temp == '06':
  84. status = Const.DEV_WORK_STATUS_FAULT
  85. statusInfo = u'进水超时'
  86. elif temp == '07':
  87. status = Const.DEV_WORK_STATUS_FAULT
  88. statusInfo = u'排水超时'
  89. elif temp == '08':
  90. status = Const.DEV_WORK_STATUS_FAULT
  91. statusInfo = u'脱水时撞桶'
  92. elif temp == '09':
  93. status = Const.DEV_WORK_STATUS_FAULT
  94. statusInfo = u'脱水开盖'
  95. elif temp == '0A':
  96. status = Const.DEV_WORK_STATUS_FAULT
  97. statusInfo = u'水位传感器异常'
  98. elif temp == '0B':
  99. status = Const.DEV_WORK_STATUS_FAULT
  100. statusInfo = u'溢水报警'
  101. elif temp == '0C':
  102. status = Const.DEV_WORK_STATUS_FAULT
  103. statusInfo = u'电机故障'
  104. elif temp == '0D':
  105. status = Const.DEV_WORK_STATUS_FAULT
  106. statusInfo = u'通讯故障'
  107. elif temp == 'FD':
  108. status = Const.DEV_WORK_STATUS_WORKING
  109. statusInfo = u'IMEI'
  110. elif temp == 'FE':
  111. status = Const.DEV_WORK_STATUS_WORKING
  112. statusInfo = u'投币金额'
  113. else:
  114. status = Const.DEV_WORK_STATUS_FAULT
  115. statusInfo = u'未知错误'
  116. temp = data[14:16]
  117. leftTime = int(temp, 16)
  118. return {'status': status, 'statusInfo': statusInfo, 'leftTime': leftTime}
  119. def check_dev_status(self, attachParas = None):
  120. """
  121. 检查洗衣机的当前状态
  122. :param attachParas:
  123. :return:
  124. """
  125. status = self.getDevInfo().get("status")
  126. if status != Const.DEV_WORK_STATUS_IDLE:
  127. raise ServiceException({"result": 2, "description": u"请稍后使用"})
  128. #入口函数
  129. def start_device(self, package, openId, attachParas):
  130. info = self.getDevInfo()
  131. if info['status'] == Const.DEV_WORK_STATUS_FAULT:
  132. raise ServiceException(
  133. {'result': 2, 'description': u'当前洗衣机故障:%s' % info['statusInfo']})
  134. if u'待机' not in info['statusInfo']:
  135. raise ServiceException(
  136. {'result': 2, 'description': u'当前洗衣机%s,请稍候使用' % info['statusInfo']})
  137. '''
  138. 指令:
  139. 01-查询
  140. 02-工作
  141. 03-预约
  142. 05-取消预约
  143. '''
  144. #定义发送的指令信息如果有预约
  145. data = ''
  146. washName = package['name']
  147. temp = ''
  148. if washName == Const.WASHER_BOX_SET_DWX: # 大物件 --> 加强洗 46min
  149. temp = '01'
  150. elif washName == Const.WASHER_BOX_SET_BZX: # 标准洗 --> 标准洗 38min
  151. temp = '02'
  152. elif washName == Const.WASHER_BOX_SET_KSX: # 快速洗 --> 快速洗 22min
  153. temp = '03'
  154. elif washName == Const.WASHER_BOX_SET_DTS: # 单脱水 --> 单脱水 6min
  155. temp = '04'
  156. elif washName == Const.WASHER_BOX_SET_TQJ: # 桶清洁 --> 桶清洁 4min
  157. temp = '05'
  158. elif washName == Const.WASHER_BOX_SET_DWX: # 自检 --> 洗衣机自检 30sec 复位洗衣机状态!!!
  159. temp = '06'
  160. data = data + temp
  161. result = MessageSender.send(device = self.device, cmd = DeviceCmdCode.OPERATE_DEV_SYNC, payload = {
  162. 'IMEI': self._device['devNo'],
  163. "funCode": "02",
  164. "data": data
  165. }, timeout = MQTT_TIMEOUT.START_DEVICE)
  166. if result['rst'] != 0:
  167. if result['rst'] == -1:
  168. raise ServiceException(
  169. {'result': 2, 'description': u'洗衣机正在玩命找网络,您的金币还在,重试不需要重新付款,建议您试试旁边其他设备,或者试试投硬币,或者稍后再试哦'})
  170. elif result['rst'] == 1:
  171. raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障,您的金币还在,设备暂时不能网络支付,请尝试投币哦'})
  172. else:
  173. raise ServiceException({'result': 2, 'description': u'系统错误,您的金币还在,款请尝试投币哦'})