123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- from apps.web.constant import DeviceCmdCode, Const, MQTT_TIMEOUT
- from apps.web.core.adapter.base import SmartBox
- from apps.web.core.exceptions import ServiceException
- from apps.web.core.networking import MessageSender
- class WasherCWBox(SmartBox):
- STATUS_CODE_INFO = {
- '00': u'待机中',
- '01': u'预约中',
- '02': u'消毒清洁中',
- '03': u'洗衣工作中',
- '04': u'洗衣机洗涤结束',
- '05': u'洗衣机自检中',
- '06': u'进水超时',
- '07': u'排水超时',
- '08': u'脱水时撞桶',
- '09': u'脱水开盖',
- '0A': u'水位传感器异常',
- '0B': u'溢水报警',
- '0C': u'电机故障',
- '0D': u'通讯故障',
- 'FD': u'IMEI',
- 'FE': u'投币金额',
- }
- def __init__(self, device):
- super(WasherCWBox, self).__init__(device)
- # 向洗衣发送查询信息
- def send_data(self, funCode, data='', timeout=MQTT_TIMEOUT.NORMAL):
- result = MessageSender.send(device = self.device, cmd = DeviceCmdCode.OPERATE_DEV_SYNC, payload = {
- "IMEI": self._device["devNo"],
- "funCode": funCode,
- "data": data
- }, timeout = timeout)
- 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'系统错误'})
- return result
- #获取设备信息
- def getDevInfo(self):
- """
- 获取 洗衣机的状态信息
- funCode指令:
- 01-查询
- 02-工作
- 03-预约
- 05-取消预约
- """
- devInfo = self.send_data("01")
- data = devInfo.get("data", "")
- #网络连同判断
- 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'当前洗衣机忙,无响应,请您稍候再试'})
- #当前状态判断
- temp = data[6:8]
- if temp == '00':
- status = Const.DEV_WORK_STATUS_IDLE
- statusInfo = u'待机中'
- elif temp == '01':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'预约中'
- elif temp == '02':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'消毒清洁中'
- elif temp == '03':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'洗衣工作中'
- elif temp == '04':
- status = Const.DEV_WORK_STATUS_FINISHED
- statusInfo = u'洗衣机洗涤结束'
- elif temp == '05':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'洗衣机自检中'
- elif temp == '06':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'进水超时'
- elif temp == '07':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'排水超时'
- elif temp == '08':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'脱水时撞桶'
- elif temp == '09':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'脱水开盖'
- elif temp == '0A':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'水位传感器异常'
- elif temp == '0B':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'溢水报警'
- elif temp == '0C':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'电机故障'
- elif temp == '0D':
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'通讯故障'
- elif temp == 'FD':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'IMEI'
- elif temp == 'FE':
- status = Const.DEV_WORK_STATUS_WORKING
- statusInfo = u'投币金额'
- else:
- status = Const.DEV_WORK_STATUS_FAULT
- statusInfo = u'未知错误'
- temp = data[14:16]
- leftTime = int(temp, 16)
- return {'status': status, 'statusInfo': statusInfo, 'leftTime': leftTime}
- def check_dev_status(self, attachParas = None):
- """
- 检查洗衣机的当前状态
- :param attachParas:
- :return:
- """
- status = self.getDevInfo().get("status")
- if status != Const.DEV_WORK_STATUS_IDLE:
- raise ServiceException({"result": 2, "description": u"请稍后使用"})
- #入口函数
- def start_device(self, package, openId, attachParas):
- info = self.getDevInfo()
- if info['status'] == Const.DEV_WORK_STATUS_FAULT:
- raise ServiceException(
- {'result': 2, 'description': u'当前洗衣机故障:%s' % info['statusInfo']})
- if u'待机' not in info['statusInfo']:
- raise ServiceException(
- {'result': 2, 'description': u'当前洗衣机%s,请稍候使用' % info['statusInfo']})
- '''
- 指令:
- 01-查询
- 02-工作
- 03-预约
- 05-取消预约
- '''
- #定义发送的指令信息如果有预约
- data = ''
- washName = package['name']
- temp = ''
- if washName == Const.WASHER_BOX_SET_DWX: # 大物件 --> 加强洗 46min
- temp = '01'
- elif washName == Const.WASHER_BOX_SET_BZX: # 标准洗 --> 标准洗 38min
- temp = '02'
- elif washName == Const.WASHER_BOX_SET_KSX: # 快速洗 --> 快速洗 22min
- temp = '03'
- elif washName == Const.WASHER_BOX_SET_DTS: # 单脱水 --> 单脱水 6min
- temp = '04'
- elif washName == Const.WASHER_BOX_SET_TQJ: # 桶清洁 --> 桶清洁 4min
- temp = '05'
- elif washName == Const.WASHER_BOX_SET_DWX: # 自检 --> 洗衣机自检 30sec 复位洗衣机状态!!!
- temp = '06'
- data = data + temp
- result = MessageSender.send(device = self.device, cmd = DeviceCmdCode.OPERATE_DEV_SYNC, payload = {
- 'IMEI': self._device['devNo'],
- "funCode": "02",
- "data": data
- }, 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'系统错误,您的金币还在,款请尝试投币哦'})
|