delixi.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import json
  5. import logging
  6. import requests
  7. from apps.web.api.exceptions import ApiDeviceModeException
  8. from apps.web.common.models import District
  9. from apps.web.constant import Const
  10. from apps.web.dealer.models import Dealer
  11. from apps.web.device.models import Group, Device
  12. logger = logging.getLogger(__name__)
  13. class DelixiNorther(object):
  14. @staticmethod
  15. def send_dev_event(dev, eventData):
  16. logger.info('[Delixi] start to send alert event to north, devNo=%s' % dev.devNo)
  17. if not dev.isApi:
  18. raise ApiDeviceModeException()
  19. controlCache = Device.get_dev_control_cache(dev.devNo)
  20. data = dict()
  21. group = Group.get_group(dev['groupId'])
  22. try:
  23. districtInfo = District.get_district(group['districtId'])
  24. data['province'] = districtInfo.split(' ')[0]
  25. data['city'] = districtInfo.split(' ')[1]
  26. data['block'] = districtInfo.split(' ')[2]
  27. except Exception as e:
  28. data['province'] = ''
  29. data['city'] = ''
  30. data['block'] = ''
  31. data['provinceId'] = ''
  32. data['cityId'] = ''
  33. data['blockId'] = ''
  34. data['chargingNum'] = controlCache.get('usedPorts', 0)
  35. data['temperatureAlarmNum'] = 0
  36. data['overloadAlarmNum'] = 0
  37. data['smogAlarmNum'] = 0
  38. data['chargingFaultNum'] = 0 # 对应涓流异常
  39. data['batteryFaultNum'] = 0 # 对应电池或充电器故障
  40. faultCode = eventData['FaultCode']
  41. if faultCode == '01':
  42. data['chargingFaultNum'] = 1
  43. data['faultAlarmNum'] = 9
  44. elif faultCode == '02':
  45. data['overloadAlarmNum'] = 1
  46. data['faultAlarmNum'] = 6
  47. elif faultCode == '03':
  48. data['batteryFaultNum'] = 1
  49. data['faultAlarmNum'] = 13
  50. data['realTimeAlarmList'] = [{
  51. 'id': 1,
  52. 'chargerId': dev.logicalCode,
  53. 'chargerName': group.groupName,
  54. 'pileNum': int(eventData['port']) if int(eventData['port']) else -1,
  55. 'faultName': eventData['statusInfo'],
  56. 'faultConten': eventData['statusInfo'],
  57. 'createTime': datetime.datetime.now().strftime(Const.DATETIME_FMT)
  58. }]
  59. data['faultHandlerList'] = [{
  60. 'id': 1,
  61. 'handleMemo': '',
  62. 'handleTime': '',
  63. 'handlerName': ''
  64. }]
  65. dataList = [data]
  66. dealer = Dealer.objects(id=dev['ownerId']).first()
  67. response = requests.post(url=dealer.domain + '/charger/faultList', data=json.dumps(dataList), headers={'Content-Type': 'application/json'}, timeout=15)
  68. logger.info(str(response))
  69. @staticmethod
  70. def send_port_status(dev):
  71. logger.info('[Delixi] start to send port status to north, devNo=%s' % dev.devNo)
  72. if not dev.isApi:
  73. raise ApiDeviceModeException()
  74. controlCache = Device.get_dev_control_cache(dev.devNo)
  75. data = dict()
  76. group = Group.get_group(dev['groupId'])
  77. try:
  78. districtInfo = District.get_district(group['districtId'])
  79. data['province'] = districtInfo.split(' ')[0]
  80. data['city'] = districtInfo.split(' ')[1]
  81. data['block'] = districtInfo.split(' ')[2]
  82. except Exception as e:
  83. data['province'] = ''
  84. data['city'] = ''
  85. data['block'] = ''
  86. data['provinceId'] = ''
  87. data['cityId'] = ''
  88. data['blockId'] = ''
  89. data['chargeNum'] = controlCache.get('usedPorts', 0)
  90. data['orderCount'] = controlCache.get('usedPorts', 0)
  91. data['street'] = group.address
  92. data['chargerName'] = group.groupName
  93. data['lat'] = dev.lat
  94. data['lng'] = dev.lng
  95. data['isOnline'] = 1
  96. data['id'] = dev.logicalCode
  97. data['barcode'] = dev.devNo
  98. data['status'] = 1 if data['orderCount'] == 0 else 2
  99. pileList = [{'num': _, 'status': 1} for _ in range(1, controlCache.get('allPorts', 10) + 1)]
  100. for _ in range(1, len(pileList) + 1):
  101. num = pileList[_ - 1]['num']
  102. pileList[_ - 1]['status'] = controlCache.get(str(num), {}).get('status', 0) + 1
  103. data['chargerList'] = [{'pileList': pileList}]
  104. dataList = [data]
  105. dealer = Dealer.objects(id=dev['ownerId']).first()
  106. response = requests.post(url=dealer.domain + '/charger/device', data=json.dumps(dataList), headers={'Content-Type': 'application/json'},
  107. timeout=15)
  108. logger.info(str(response))