123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- # -*- coding: utf-8 -*-
- from apps.web.core.adapter.base import *
- from apps.web.device.models import Device
- from django.core.cache import caches
- class WasherTSBox(SmartBox):
- def __init__(self, device):
- super(WasherTSBox, self).__init__(device)
- def analyze_event_data(self, devInfo):
- code = devInfo[8:10]
- faultDict = {
- 'E1': u'进水故障',
- 'E4': u"排水故障",
- 'E2': u'异常开盖',
- '03': u'繁忙状态',
- '01': u'待机状态',
- }
- if code in faultDict.keys():
- if code == '01':
- return {"cmdCode": 100,'faultCode':code,'faultReason':faultDict.get(code),"type":'work'}
- return {"cmdCode": 100,'faultCode':code,'faultReason':faultDict.get(code)}
- else:
- logger.info("Array is not format")
- def translate_funcode(self, funCode):
- funCodeDict ={
- u"单脱水":"01",
- u"速洗": "02",
- u"快洗": "03",
- u"标准洗": "04",
- u"大件洗": "05",
- u"超强洗": "06",
- u"速洗洗衣液": "07",
- u"快洗洗衣液": "08",
- u"标准洗洗衣液": "09",
- u"大件洗洗衣液": "10",
- u"超强洗衣液": "11",
- }
- return funCodeDict.get(funCode, '')
- def check_dev_status(self, attachParas=None):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": 'F2', 'data': '00'})
- if devInfo.has_key('rst') and devInfo['rst'] != 0:
- if devInfo['rst'] == -1:
- raise ServiceException({'result': 2, 'description': u'洗衣机正在玩命找网络,建议您试试旁边其他设备,或者稍后再试哦'})
- elif devInfo['rst'] == 1:
- raise ServiceException({'result': 2, 'description': u'洗衣机繁忙,无响应,请您稍后再试哦'})
- data = devInfo['data']
- dataFlag = data[8:10]
- if dataFlag != '01':
- raise ServiceException({'result': 2, 'description': u'当前洗衣机正忙,不允许下发启动命令'})
- def start_device(self, package, openId, attachParas):
- coins = package['coins']
- washName = package['name']
- needTime = package['time']
- sendData = self.translate_funcode(washName)
- result = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": "C3", "data": sendData},
- timeout = MQTT_TIMEOUT.START_DEVICE)
- if result['rst'] != 0:
- if result['rst'] == -1:
- raise ServiceException(
- {'result': 2, 'description': u'洗衣机正在玩命找网络,您的金币还在,重试不需要重新付款,建议您试试旁边其他设备,或者试试投硬币,或者稍后再试哦'})
- elif result['rst'] == 1:
- raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障,您的金币还在,设备暂时不能网络支付,请尝试投币哦'})
- else:
- raise ServiceException({'result': 2, 'description': u'系统错误,您的金币还在,请尝试投币哦'})
- resCode = result['data'][8:10]
- if resCode != '03':
- raise ServiceException({'result': 2, 'description': u'主板间通讯失败,请试试投币,并报障给老板哦'})
- Device.update_dev_control_cache(
- self._device['devNo'],
- {
- 'openId': openId,
- "coins":coins,
- "washName":washName,
- 'status': Const.DEV_WORK_STATUS_WORKING,
- 'finishedTime': int(time.time()) + int(needTime) * 60
- })
- return result
- def __sendData(self, funCode, data, settingParame):
- result = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": funCode, "data": data})
- if result['rst'] != 0:
- logger.error("There is an error in {} setting of the device parameter, and the error code is {}".format(settingParame,result['rst']))
- if result['rst'] == -1:
- raise ServiceException({'result': 2, 'description': u'洗衣机正在玩命找网络,请稍候再试'})
- elif result['rst'] == 1:
- raise ServiceException({'result': 2, 'description': u'洗衣机主板连接故障,请检查下GSM模块和主板之间的连接'})
- else:
- raise ServiceException({'result': 2, 'description': u'系统错误'})
- return result
- def get_dev_setting(self):
- """
- <变量释义>
- -------------------------------------------------------
- 变量名 变量名称 变量意义和范围
- -------------------------------------------------------
- delayTime 延时时间 设定延时时间【0,20】
- numberCoin 投币个数 设定投币或刷卡个数【0,15】
- dtsCoin 单脱水启动币数 设定单脱水启动币数【0,15】
- sxCoin 速洗启动币数 设定速洗启动币数【0,15】
- kxCoin 快洗启动币数 设定快洗启动币数【0,15】
- bzxCoin 标准洗启动币数 设定标准洗启动币数【0,15】
- jqxCoin 加强洗启动币数 设定加强洗启动币数【0,15】
- dwxCoin 大物洗启动币数 设定大物洗启动币数【0,15】
- creditCoin 刷卡等效币数 设定刷卡等效币数【0,15】
- memoryFunction 记忆功能 设定记忆功能【0,2】
- safetySwitch 安全开关 设定安全开关【0,1】
- dtsAddTime 单脱水增加时间 设定单脱水增加时间【0,30】
- sxAddTime 速洗增加时间 设定速洗增加时间【0,30】
- kxAddTime 快洗增加时间 设定快洗增加时间【0,30】
- bzxAddTime 标准洗增加时间 设定标准洗增加时间【0,30】
- jqxAddTime 加强洗增加时间 设定加强洗增加时间【0,30】
- dwxAdTime 大物洗增加时间 设定大物洗增加时间【0,30】
- """
- getCodeDict = {
- "delayTime": "D0",
- "numberCoin": "D1",
- "dtsCoin": "D2",
- "sxCoin": "D3",
- "kxCoin": "D4",
- "bzxCoin": "D5",
- "jqxCoin": "D6",
- "dwxCoin": "D7",
- "creditCoin": "D8",
- "memoryFunction": "D9",
- "safetySwitch": "DA",
- "dtsAddTime": "DD",
- "sxAddTime": "DC",
- "kxAddTime": "DD",
- "bzxAddTime": "DE",
- "jqxAddTime": "DF",
- "dwxAdTime": "F0",
- }
- paramDict = {
- "delayTime": "",
- "numberCoin": "",
- "dtsCoin": "",
- "sxCoin": "",
- "kxCoin": "",
- "bzxCoin": "",
- "jqxCoin": "",
- "dwxCoin": "",
- "creditCoin": "",
- "memoryFunction": "",
- "safetySwitch": "",
- "dtsAddTime": "",
- "sxAddTime": "",
- "kxAddTime": "",
- "bzxAddTime": "",
- "jqxAddTime": "",
- "dwxAdTime": "",
- }
- try:
- settingConfig = caches['devmgr'].get('settingConf_%s' % (self._device["devNo"],))
- # 看是否有设置 现在处理没有设置的情况
- if not settingConfig:
- for _ in paramDict.keys():
- result = self.__sendData(getCodeDict.get(_),'00',_)
- data = result['data'][6:8] if result['data'][-2] != '0' else result['data'][-1]
- paramDict.update({_: data})
- else:
- paramDict.update(settingConfig)
- except Exception, e:
- logger.exception('{}' % (e))
- return paramDict
- def set_special_config(self,specialConfig):
- setCodeDict = {
- "delayTime": "B0",
- "numberCoin": "B1",
- "dtsCoin": "B2",
- "sxCoin": "B3",
- "kxCoin": "B4",
- "bzxCoin": "B5",
- "jqxCoin": "B6",
- "dwxCoin": "B7",
- "creditCoin": "B8",
- "memoryFunction": "B9",
- "safetySwitch": "BA",
- "dtsAddTime": "BB",
- "sxAddTime": "BC",
- "kxAddTime": "BD",
- "bzxAddTime": "BE",
- "jqxAddTime": "BF",
- "dwxAdTime": "F0",
- }
- for _ in specialConfig.keys():
- self.__sendData(setCodeDict.get(_), specialConfig.get(_), _)
- if _ != 'numberCoin':
- #固化参数
- self.__sendData('CF', '00', _)
- def set_device_function(self, request, lastSetConf):
- oldSConfig = {'safetySwitch':lastSetConf.get('safetySwitch','')}
- if request.POST.has_key('safetySwitch'):
- if request.POST['safetySwitch'] != oldSConfig['safetySwitch']:
- safetySwitch = bool(request.POST.get('safetySwitch'))
- safetySwitch = 1 if safetySwitch else 0
- oldSConfig.update({'safetySwitch': str(safetySwitch)})
- lastSetConf.update({'safetySwitch': str(safetySwitch)})
- self.set_special_config(oldSConfig)
- def set_device_function_param(self, request, lastSetConf):
- oldPConfig = {ii:lastSetConf.get(ii,'') for ii in request.POST if ii != 'logicalCode'}
- if not oldPConfig:
- logger.error("this number is {} device is not settingConfig".format(self._device["devNo"]))
- return
- for v in request.POST.keys():
- if v != 'logicalCode':
- if oldPConfig[v] != request.POST.get(v):
- oldPConfig[v] = request.POST.get(v)
- lastSetConf[v] = request.POST.get(v)
- else:
- del oldPConfig[v]
- self.set_special_config(oldPConfig)
|