123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import time
- from apilib.utils_json import JsonResponse
- from apps.web.constant import DeviceCmdCode, MQTT_TIMEOUT, Const
- from apps.web.core.adapter.base import SmartBox
- from apps.web.core.exceptions import ServiceException
- from apps.web.core.networking import MessageSender
- from apps.web.device.models import Device
- class TimeSwitchBox2(SmartBox):
- def test(self, coins):
- return MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": '01', 'data': '0101'})
- def start_device(self, package, openId, attachParas):
- infoDict = self.get_dev_status_from_dev()
- if infoDict['switch']:
- raise ServiceException({'result': 2, 'description': u'足疗机已经开机了哦!还有%s分钟结束' % infoDict['leftTime']})
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": '55', 'data': '0101'},
- timeout = MQTT_TIMEOUT.START_DEVICE)
- 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'][6::]
- switch = True if data[0:2] == '01' else False
- if not switch:
- raise ServiceException({'result': 2, 'description': u'足疗机启动失败,您的金币还在,请您再重试看看吧'})
- shake = True if data[2:4] == '01' else False
- hot = True if data[4:6] == '01' else False
- mode = 'mode%s' % (int(data[6:8]))
- leftTime = int(data[8:10], 16)
- # 这款足疗机的运行时间固定是15分钟
- Device.update_dev_control_cache(
- self._device['devNo'],
- {
- 'status': Const.DEV_WORK_STATUS_WORKING,
- 'switch': switch,
- 'shake': shake,
- 'hot': hot,
- 'mode': mode,
- 'leftTime': leftTime,
- 'finishedTime': int(time.time()) + leftTime * 60
- })
- return devInfo
- def get_dev_status_from_dev(self):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": '55', 'data': '010F'})
- 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'][6::]
- switch = True if data[0:2] == '01' else False
- shake = True if data[2:4] == '01' else False
- hot = True if data[4:6] == '01' else False
- mode = 'mode%s' % (int(data[6:8]))
- leftTime = int(data[8:10], 16)
- if not switch:
- leftTime = 0
- return {'switch': switch, 'shake': shake, 'hot': hot, 'mode': mode, 'leftTime': leftTime}
- def get_left_time(self):
- infoDict = self.get_dev_status_from_dev()
- return infoDict['leftTime']
- def press_button(self, buttonName, value):
- if buttonName == 'mode':
- buttonName = value
- data = '01'
- cmdDict = {'start': '01', 'shake': '02', 'hot': '03', 'mode1': '04', 'mode2': '05', 'mode3': '06',
- 'mode4': '07'}
- data += cmdDict[buttonName]
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], "funCode": '55', 'data': 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'足疗机正在忙,无响应,您的金币还在,请稍后再试哦'})
- data = devInfo['data'][6::]
- switch = True if data[0:2] == '01' else False
- shake = True if data[2:4] == '01' else False
- hot = True if data[4:6] == '01' else False
- mode = 'mode%s' % (int(data[6:8]))
- leftTime = int(data[8:10], 16)
- # 这款足疗机的运行时间固定是15分钟
- Device.update_dev_control_cache(
- self._device['devNo'],
- {
- 'status': Const.DEV_WORK_STATUS_WORKING if switch else Const.DEV_WORK_STATUS_IDLE,
- 'switch': switch,
- 'shake': shake,
- 'hot': hot,
- 'mode': mode,
- 'leftTime': leftTime,
- 'finishedTime': int(time.time()) + leftTime * 60
- })
- return {'switch': switch, 'shake': shake, 'hot': hot, 'mode': mode}
- def get_dev_status(self):
- infoDict = self.get_dev_status_from_dev()
- # 这款足疗机的运行时间固定是15分钟
- Device.update_dev_control_cache(
- self._device['devNo'],
- {'status': Const.DEV_WORK_STATUS_WORKING,
- 'switch': infoDict['switch'],
- 'shake': infoDict['shake'],
- 'hot': infoDict['hot'],
- 'mode': infoDict['mode'],
- 'leftTime': infoDict['leftTime'],
- 'finishedTime': int(time.time()) + infoDict['leftTime'] * 60
- })
- return infoDict
- def support_count_down(self, openId = None, port = None):
- return True
- def count_down(self, request, dev, agent, group, devType, lastOpenId, port = None):
- devInfo = self.get_dev_status()
- return JsonResponse(
- {
- 'result': 1,
- 'description': '',
- 'payload': {
- 'surplus': devInfo['leftTime'],
- 'sum': 15,
- 'name': group['groupName'],
- 'address': group['address'],
- 'code': devType.get('code'),
- 'orderProcessing': False,
- 'logicalCode': dev['logicalCode'],
- 'user': 'me' if lastOpenId == request.user.openId else 'notme',
- 'agentFeatures': agent.features,
- 'status': devInfo
- }
- })
- def stop(self, port = None):
- Device.invalid_device_control_cache(self.device.devNo)
- devInfo = MessageSender.send(device = self.device, cmd = DeviceCmdCode.STOP_DEVICE, payload = {
- 't': int(time.time())
- })
- if devInfo['rst'] == 0:
- if 'left_time' in devInfo:
- devInfo['remainder_time'] = int(devInfo['left_time'] / 60.0)
- else:
- devInfo['remainder_time'] = int(devInfo['remainder_time'] / 60.0)
- return devInfo
|