123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- from apps.web.constant import DeviceCmdCode, 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 ChargingPlugBox(SmartBox):
- def __init__(self, device):
- super(ChargingPlugBox, self).__init__(device)
- def translate_funcode(self, fun_code):
- fun_codeDict = {
- '01': u'查询所有子设备状态',
- '02': u'查询全部端口详情',
- '03': u'绑定设备',
- '04': u'重启设备',
- '05': u'解绑设备',
- '07': u'启动端口',
- '08': u'查询设备信息',
- '09': u'查询端口信息',
- '0B': u'设置设备配置',
- '0C': u'查询设备配置',
- }
- return fun_codeDict.get(fun_code, '')
- def translate_event_cmdcode(self, cmdCode):
- cmdDict = {
- }
- return cmdDict.get(cmdCode, '')
- def test(self, coins):
- data = {'fun_code':0x07,'order_id':'1111','chrmt':0,'port_id':0,'amount':60}
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], 'data': data})
- return devInfo
-
- def check_feedback_result(self,devInfo):
- if not devInfo.has_key('rst'):
- raise ServiceException({'result': 2, 'description': u'报文异常'})
-
- if devInfo['rst'] == -1:
- raise ServiceException({'result': 2, 'description': u'网关正在玩命找网络,请您稍候再试'})
-
- if devInfo['rst'] == 1:
- raise ServiceException({'result': 2, 'description': u'串口通讯失败,您稍候再试,或者联系客服'})
-
- if devInfo['rst'] == 2:
- raise ServiceException({'result': 2, 'description': u'操作失败'})
-
- if devInfo['rst'] == 5:
- raise ServiceException({'result': 2, 'description': u'设备正在自检'})
- # result = devInfo['data']['result']
- # if result == 0:
- # return
- # else:#等待设备的错误码进行细化
- # raise ServiceException({'result': 2, 'description': u'网关返回了错误,请您重试看看能否解决问题'})
-
- def start_device(self, package, openId, attachParas):
- return None
- def analyze_event_data(self, data):
- if data['fun_code'] == '34':#如果是结束事件,需要把reason翻译出来
- descDict = {
- '5':u'支付的金额已经使用完毕',
- '6':u'用户手工停止了充电',
- '7':u'电池充满自停',
- '8':u'故障导致充电停止',
- '9':u'本端口功率过载,主动关闭',
- '10':u'没有连接充电器,主动关闭',
- '11':u'远程关闭',
- '12':u'检测到烟雾告警,主动关闭'
- }
- order = data['order']
- order['reason'] = descDict.get(str(order['closeType']),u'')
- data['order'] = order
- return data
-
- def get_node_list(self):
- devInfo = MessageSender.send(self.device, self.make_random_cmdcode(),
- {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x01}})
-
- self.check_feedback_result(devInfo)
- result = []
- for nodeId,nodeInfo in devInfo['data']['subdevs_status'].items():
- if nodeInfo['status'] == 1:
- nodeInfo['online'] = True
- else:
- nodeInfo['online'] = False
- nodeInfo.update({'devNo':str(int(nodeId))})
- result.append(nodeInfo)
- return result
-
- def get_node(self,nodeDevNo):
- devInfo = MessageSender.send(self.device, self.make_random_cmdcode(),
- {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x01}})
-
- self.check_feedback_result(devInfo)
-
- return devInfo['data']['subdevs_status'].get(nodeDevNo,None)
-
- def __translate_status_from_str(self,status):
- dictConf = {
- '0':Const.DEV_WORK_STATUS_IDLE,
- '1':Const.DEV_WORK_STATUS_WORKING,
- '2':Const.DEV_WORK_STATUS_FAULT,
- '3':Const.DEV_WORK_STATUS_FAULT,
- }
- return dictConf.get(status,Const.DEV_WORK_STATUS_IDLE)
- def add_node(self,nodeDevNo):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x03, 'dev_id': nodeDevNo}})
-
- self.check_feedback_result(devInfo)
-
- # 子节点的父节点也要更新
- try:
- devObj = Device.objects.get(devNo = nodeDevNo)
- devObj.gatewayNode = self._device['devNo']
- devObj.save()
- except Exception,e:
- raise ServiceException({'result': 2, 'description': u'请先扫码注册子设备插座,然后再加入网关'})
-
- def remove_node(self,nodeDevNo):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], 'data': {'fun_code': 0x05, 'dev_id': nodeDevNo}})
-
- self.check_feedback_result(devInfo)
-
- # 子节点的父节点也要更新
- try:
- devObj = Device.objects.get(devNo = nodeDevNo)
- devObj.gatewayNode = ''
- devObj.save()
- except Exception,e:
- pass
-
- def ack_event(self,orderNo,funCode):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.PASSTHROUGH_OPERATE_DEV_NO_RESPONSE,
- {'IMEI': self._device['devNo'], 'data': {'fun_code':funCode,'order_id':orderNo}})
-
- self.check_feedback_result(devInfo)
-
- def reboot_device(self):
- MessageSender.send(self.device, DeviceCmdCode.OPERATE_DEV_SYNC,
- {'IMEI': self._device['devNo'], 'data': {'fun_code':0x04}})
-
|