# -*- 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))