123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import json
- import logging
- import requests
- from apps.web.api.exceptions import ApiDeviceModeException
- from apps.web.common.models import District
- from apps.web.constant import Const
- from apps.web.dealer.models import Dealer
- from apps.web.device.models import Group, Device
- logger = logging.getLogger(__name__)
- class DelixiNorther(object):
- @staticmethod
- def send_dev_event(dev, eventData):
- logger.info('[Delixi] start to send alert event to north, devNo=%s' % dev.devNo)
- if not dev.isApi:
- raise ApiDeviceModeException()
- controlCache = Device.get_dev_control_cache(dev.devNo)
- data = dict()
- group = Group.get_group(dev['groupId'])
- try:
- districtInfo = District.get_district(group['districtId'])
- data['province'] = districtInfo.split(' ')[0]
- data['city'] = districtInfo.split(' ')[1]
- data['block'] = districtInfo.split(' ')[2]
- except Exception as e:
- data['province'] = ''
- data['city'] = ''
- data['block'] = ''
- data['provinceId'] = ''
- data['cityId'] = ''
- data['blockId'] = ''
- data['chargingNum'] = controlCache.get('usedPorts', 0)
- data['temperatureAlarmNum'] = 0
- data['overloadAlarmNum'] = 0
- data['smogAlarmNum'] = 0
- data['chargingFaultNum'] = 0 # 对应涓流异常
- data['batteryFaultNum'] = 0 # 对应电池或充电器故障
- faultCode = eventData['FaultCode']
- if faultCode == '01':
- data['chargingFaultNum'] = 1
- data['faultAlarmNum'] = 9
- elif faultCode == '02':
- data['overloadAlarmNum'] = 1
- data['faultAlarmNum'] = 6
- elif faultCode == '03':
- data['batteryFaultNum'] = 1
- data['faultAlarmNum'] = 13
- data['realTimeAlarmList'] = [{
- 'id': 1,
- 'chargerId': dev.logicalCode,
- 'chargerName': group.groupName,
- 'pileNum': int(eventData['port']) if int(eventData['port']) else -1,
- 'faultName': eventData['statusInfo'],
- 'faultConten': eventData['statusInfo'],
- 'createTime': datetime.datetime.now().strftime(Const.DATETIME_FMT)
- }]
- data['faultHandlerList'] = [{
- 'id': 1,
- 'handleMemo': '',
- 'handleTime': '',
- 'handlerName': ''
- }]
- dataList = [data]
- dealer = Dealer.objects(id=dev['ownerId']).first()
- response = requests.post(url=dealer.domain + '/charger/faultList', data=json.dumps(dataList), headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- @staticmethod
- def send_port_status(dev):
- logger.info('[Delixi] start to send port status to north, devNo=%s' % dev.devNo)
- if not dev.isApi:
- raise ApiDeviceModeException()
- controlCache = Device.get_dev_control_cache(dev.devNo)
- data = dict()
- group = Group.get_group(dev['groupId'])
- try:
- districtInfo = District.get_district(group['districtId'])
- data['province'] = districtInfo.split(' ')[0]
- data['city'] = districtInfo.split(' ')[1]
- data['block'] = districtInfo.split(' ')[2]
- except Exception as e:
- data['province'] = ''
- data['city'] = ''
- data['block'] = ''
- data['provinceId'] = ''
- data['cityId'] = ''
- data['blockId'] = ''
- data['chargeNum'] = controlCache.get('usedPorts', 0)
- data['orderCount'] = controlCache.get('usedPorts', 0)
- data['street'] = group.address
- data['chargerName'] = group.groupName
- data['lat'] = dev.lat
- data['lng'] = dev.lng
- data['isOnline'] = 1
- data['id'] = dev.logicalCode
- data['barcode'] = dev.devNo
- data['status'] = 1 if data['orderCount'] == 0 else 2
- pileList = [{'num': _, 'status': 1} for _ in range(1, controlCache.get('allPorts', 10) + 1)]
- for _ in range(1, len(pileList) + 1):
- num = pileList[_ - 1]['num']
- pileList[_ - 1]['status'] = controlCache.get(str(num), {}).get('status', 0) + 1
- data['chargerList'] = [{'pileList': pileList}]
- dataList = [data]
- dealer = Dealer.objects(id=dev['ownerId']).first()
- response = requests.post(url=dealer.domain + '/charger/device', data=json.dumps(dataList), headers={'Content-Type': 'application/json'},
- timeout=15)
- logger.info(str(response))
|