toushi.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. # -*- coding: utf-8 -*-
  2. from apps.web.core.adapter.base import *
  3. from apps.web.device.models import Device
  4. from django.core.cache import caches
  5. class WasherTSBox(SmartBox):
  6. def __init__(self, device):
  7. super(WasherTSBox, self).__init__(device)
  8. def analyze_event_data(self, devInfo):
  9. code = devInfo[8:10]
  10. faultDict = {
  11. 'E1': u'进水故障',
  12. 'E4': u"排水故障",
  13. 'E2': u'异常开盖',
  14. '03': u'繁忙状态',
  15. '01': u'待机状态',
  16. }
  17. if code in faultDict.keys():
  18. if code == '01':
  19. return {"cmdCode": 100,'faultCode':code,'faultReason':faultDict.get(code),"type":'work'}
  20. return {"cmdCode": 100,'faultCode':code,'faultReason':faultDict.get(code)}
  21. else:
  22. logger.info("Array is not format")
  23. def translate_funcode(self, funCode):
  24. funCodeDict ={
  25. u"单脱水":"01",
  26. u"速洗": "02",
  27. u"快洗": "03",
  28. u"标准洗": "04",
  29. u"大件洗": "05",
  30. u"超强洗": "06",
  31. u"速洗洗衣液": "07",
  32. u"快洗洗衣液": "08",
  33. u"标准洗洗衣液": "09",
  34. u"大件洗洗衣液": "10",
  35. u"超强洗衣液": "11",
  36. }
  37. return funCodeDict.get(funCode, '')
  38. def check_dev_status(self, attachParas=None):
  39. devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
  40. {'IMEI': self._device['devNo'], "funCode": 'F2', 'data': '00'})
  41. if devInfo.has_key('rst') and devInfo['rst'] != 0:
  42. if devInfo['rst'] == -1:
  43. raise ServiceException({'result': 2, 'description': u'洗衣机正在玩命找网络,建议您试试旁边其他设备,或者稍后再试哦'})
  44. elif devInfo['rst'] == 1:
  45. raise ServiceException({'result': 2, 'description': u'洗衣机繁忙,无响应,请您稍后再试哦'})
  46. data = devInfo['data']
  47. dataFlag = data[8:10]
  48. if dataFlag != '01':
  49. raise ServiceException({'result': 2, 'description': u'当前洗衣机正忙,不允许下发启动命令'})
  50. def start_device(self, package, openId, attachParas):
  51. coins = package['coins']
  52. washName = package['name']
  53. needTime = package['time']
  54. sendData = self.translate_funcode(washName)
  55. result = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
  56. {'IMEI': self._device['devNo'], "funCode": "C3", "data": sendData},
  57. timeout = MQTT_TIMEOUT.START_DEVICE)
  58. if result['rst'] != 0:
  59. if result['rst'] == -1:
  60. raise ServiceException(
  61. {'result': 2, 'description': u'洗衣机正在玩命找网络,您的金币还在,重试不需要重新付款,建议您试试旁边其他设备,或者试试投硬币,或者稍后再试哦'})
  62. elif result['rst'] == 1:
  63. raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障,您的金币还在,设备暂时不能网络支付,请尝试投币哦'})
  64. else:
  65. raise ServiceException({'result': 2, 'description': u'系统错误,您的金币还在,请尝试投币哦'})
  66. resCode = result['data'][8:10]
  67. if resCode != '03':
  68. raise ServiceException({'result': 2, 'description': u'主板间通讯失败,请试试投币,并报障给老板哦'})
  69. Device.update_dev_control_cache(
  70. self._device['devNo'],
  71. {
  72. 'openId': openId,
  73. "coins":coins,
  74. "washName":washName,
  75. 'status': Const.DEV_WORK_STATUS_WORKING,
  76. 'finishedTime': int(time.time()) + int(needTime) * 60
  77. })
  78. return result
  79. def __sendData(self, funCode, data, settingParame):
  80. result = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
  81. {'IMEI': self._device['devNo'], "funCode": funCode, "data": data})
  82. if result['rst'] != 0:
  83. logger.error("There is an error in {} setting of the device parameter, and the error code is {}".format(settingParame,result['rst']))
  84. if result['rst'] == -1:
  85. raise ServiceException({'result': 2, 'description': u'洗衣机正在玩命找网络,请稍候再试'})
  86. elif result['rst'] == 1:
  87. raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障,请检查下GSM模块和主板之间的连接'})
  88. else:
  89. raise ServiceException({'result': 2, 'description': u'系统错误'})
  90. return result
  91. def get_dev_setting(self):
  92. """
  93. <变量释义>
  94. -------------------------------------------------------
  95. 变量名 变量名称 变量意义和范围
  96. -------------------------------------------------------
  97. delayTime 延时时间 设定延时时间【0,20】
  98. numberCoin 投币个数 设定投币或刷卡个数【0,15】
  99. dtsCoin 单脱水启动币数 设定单脱水启动币数【0,15】
  100. sxCoin 速洗启动币数 设定速洗启动币数【0,15】
  101. kxCoin 快洗启动币数 设定快洗启动币数【0,15】
  102. bzxCoin 标准洗启动币数 设定标准洗启动币数【0,15】
  103. jqxCoin 加强洗启动币数 设定加强洗启动币数【0,15】
  104. dwxCoin 大物洗启动币数 设定大物洗启动币数【0,15】
  105. creditCoin 刷卡等效币数 设定刷卡等效币数【0,15】
  106. memoryFunction 记忆功能 设定记忆功能【0,2】
  107. safetySwitch 安全开关 设定安全开关【0,1】
  108. dtsAddTime 单脱水增加时间 设定单脱水增加时间【0,30】
  109. sxAddTime 速洗增加时间 设定速洗增加时间【0,30】
  110. kxAddTime 快洗增加时间 设定快洗增加时间【0,30】
  111. bzxAddTime 标准洗增加时间 设定标准洗增加时间【0,30】
  112. jqxAddTime 加强洗增加时间 设定加强洗增加时间【0,30】
  113. dwxAdTime 大物洗增加时间 设定大物洗增加时间【0,30】
  114. """
  115. getCodeDict = {
  116. "delayTime": "D0",
  117. "numberCoin": "D1",
  118. "dtsCoin": "D2",
  119. "sxCoin": "D3",
  120. "kxCoin": "D4",
  121. "bzxCoin": "D5",
  122. "jqxCoin": "D6",
  123. "dwxCoin": "D7",
  124. "creditCoin": "D8",
  125. "memoryFunction": "D9",
  126. "safetySwitch": "DA",
  127. "dtsAddTime": "DD",
  128. "sxAddTime": "DC",
  129. "kxAddTime": "DD",
  130. "bzxAddTime": "DE",
  131. "jqxAddTime": "DF",
  132. "dwxAdTime": "F0",
  133. }
  134. paramDict = {
  135. "delayTime": "",
  136. "numberCoin": "",
  137. "dtsCoin": "",
  138. "sxCoin": "",
  139. "kxCoin": "",
  140. "bzxCoin": "",
  141. "jqxCoin": "",
  142. "dwxCoin": "",
  143. "creditCoin": "",
  144. "memoryFunction": "",
  145. "safetySwitch": "",
  146. "dtsAddTime": "",
  147. "sxAddTime": "",
  148. "kxAddTime": "",
  149. "bzxAddTime": "",
  150. "jqxAddTime": "",
  151. "dwxAdTime": "",
  152. }
  153. try:
  154. settingConfig = caches['devmgr'].get('settingConf_%s' % (self._device["devNo"],))
  155. # 看是否有设置 现在处理没有设置的情况
  156. if not settingConfig:
  157. for _ in paramDict.keys():
  158. result = self.__sendData(getCodeDict.get(_),'00',_)
  159. data = result['data'][6:8] if result['data'][-2] != '0' else result['data'][-1]
  160. paramDict.update({_: data})
  161. else:
  162. paramDict.update(settingConfig)
  163. except Exception, e:
  164. logger.exception('{}' % (e))
  165. return paramDict
  166. def set_special_config(self,specialConfig):
  167. setCodeDict = {
  168. "delayTime": "B0",
  169. "numberCoin": "B1",
  170. "dtsCoin": "B2",
  171. "sxCoin": "B3",
  172. "kxCoin": "B4",
  173. "bzxCoin": "B5",
  174. "jqxCoin": "B6",
  175. "dwxCoin": "B7",
  176. "creditCoin": "B8",
  177. "memoryFunction": "B9",
  178. "safetySwitch": "BA",
  179. "dtsAddTime": "BB",
  180. "sxAddTime": "BC",
  181. "kxAddTime": "BD",
  182. "bzxAddTime": "BE",
  183. "jqxAddTime": "BF",
  184. "dwxAdTime": "F0",
  185. }
  186. for _ in specialConfig.keys():
  187. self.__sendData(setCodeDict.get(_), specialConfig.get(_), _)
  188. if _ != 'numberCoin':
  189. #固化参数
  190. self.__sendData('CF', '00', _)
  191. def set_device_function(self, request, lastSetConf):
  192. oldSConfig = {'safetySwitch':lastSetConf.get('safetySwitch','')}
  193. if request.POST.has_key('safetySwitch'):
  194. if request.POST['safetySwitch'] != oldSConfig['safetySwitch']:
  195. safetySwitch = bool(request.POST.get('safetySwitch'))
  196. safetySwitch = 1 if safetySwitch else 0
  197. oldSConfig.update({'safetySwitch': str(safetySwitch)})
  198. lastSetConf.update({'safetySwitch': str(safetySwitch)})
  199. self.set_special_config(oldSConfig)
  200. def set_device_function_param(self, request, lastSetConf):
  201. oldPConfig = {ii:lastSetConf.get(ii,'') for ii in request.POST if ii != 'logicalCode'}
  202. if not oldPConfig:
  203. logger.error("this number is {} device is not settingConfig".format(self._device["devNo"]))
  204. return
  205. for v in request.POST.keys():
  206. if v != 'logicalCode':
  207. if oldPConfig[v] != request.POST.get(v):
  208. oldPConfig[v] = request.POST.get(v)
  209. lastSetConf[v] = request.POST.get(v)
  210. else:
  211. del oldPConfig[v]
  212. self.set_special_config(oldPConfig)