|
@@ -118,16 +118,17 @@ class SmartSocketView(View):
|
|
|
"""
|
|
|
try:
|
|
|
serial_number = request_dict.get('serialNumber', None)
|
|
|
- electricity = request_dict.get('electricity', 0.00)
|
|
|
- power = request_dict.get('power', 0.00)
|
|
|
+ watt = request_dict.get('electricity', 0.00) # 功率
|
|
|
+ power = request_dict.get('power', 0.00) # 负载功率
|
|
|
+ # 在线时长分钟
|
|
|
accumulated_time = request_dict.get('accumulatedTime', None)
|
|
|
device_time = request_dict.get('deviceTime', None)
|
|
|
LOGGER.info('{}上报电量统计data:{}'.format(serial_number, request_dict))
|
|
|
- if not all([serial_number, electricity, power, accumulated_time, device_time]):
|
|
|
+ if not all([serial_number, watt, power, accumulated_time, device_time]):
|
|
|
return response.json(444)
|
|
|
device_time = int(device_time)
|
|
|
- electricity = Decimal(electricity).quantize(Decimal("0.00"))
|
|
|
- power = Decimal(power).quantize(Decimal("0.00"))
|
|
|
+ watt = float(watt)
|
|
|
+ power = float(power)
|
|
|
accumulated_time = int(accumulated_time)
|
|
|
now_time = int(time.time())
|
|
|
start_time, end_time = LocalDateTimeUtil.get_today_date(True)
|
|
@@ -136,10 +137,9 @@ class SmartSocketView(View):
|
|
|
created_time__gt=start_time,
|
|
|
created_time__lte=end_time)
|
|
|
data = {
|
|
|
- 'electricity': electricity,
|
|
|
'power': power,
|
|
|
- 'accumulated_time': accumulated_time,
|
|
|
- 'updated_time': now_time
|
|
|
+ 'updated_time': now_time,
|
|
|
+ 'watt': watt
|
|
|
}
|
|
|
if not power_qs.exists(): # 添加插座上报电量统计
|
|
|
socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('device_id')
|
|
@@ -148,8 +148,22 @@ class SmartSocketView(View):
|
|
|
data['device_id'] = socket_info_qs[0]['device_id']
|
|
|
data['created_time'] = device_time
|
|
|
data['serial_number'] = serial_number
|
|
|
+ data['electricity'] = cls.calculated_power(watt, accumulated_time)
|
|
|
+ data['accumulated_time'] = accumulated_time
|
|
|
+ data['load_time'] = accumulated_time if watt > 0.1 else 0
|
|
|
SocketPowerStatistics.objects.create(**data)
|
|
|
return response.json(0)
|
|
|
+ power_vo = power_qs.first()
|
|
|
+ # 累加在线时间目前是以分钟为单位
|
|
|
+ data['accumulated_time'] = power_vo.accumulated_time + accumulated_time
|
|
|
+ load_time = power_vo.load_time
|
|
|
+ if watt > 0.1:
|
|
|
+ load_time = power_vo.load_time + accumulated_time
|
|
|
+ # kwh 千瓦时
|
|
|
+ data['electricity'] = cls.calculated_power((float(power_vo.watt) + watt), load_time)
|
|
|
+ # 当前时段统计的w值
|
|
|
+ data['watt'] = float(power_vo.watt) + watt
|
|
|
+ data['load_time'] = load_time
|
|
|
# 更新当天电量统计
|
|
|
power_qs.update(**data)
|
|
|
return response.json(0)
|
|
@@ -157,6 +171,18 @@ class SmartSocketView(View):
|
|
|
LOGGER.info('智能插座电量存库异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return response.json(177)
|
|
|
|
|
|
+ @staticmethod
|
|
|
+ def calculated_power(watt, minute):
|
|
|
+ """
|
|
|
+ 计算电功率
|
|
|
+ """
|
|
|
+ if watt == 0 or watt < 0.1 or minute == 0:
|
|
|
+ return 0.00
|
|
|
+ hours = minute / 60
|
|
|
+ kilowatt_hour = watt * hours / 1000
|
|
|
+ LOGGER.info('计算结果{}'.format(kilowatt_hour))
|
|
|
+ return kilowatt_hour
|
|
|
+
|
|
|
@staticmethod
|
|
|
def get_serial_number_by_device_id(deviceId):
|
|
|
"""
|
|
@@ -399,7 +425,7 @@ class SmartSocketView(View):
|
|
|
socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('electricity',
|
|
|
'accumulated_time',
|
|
|
'power',
|
|
|
- 'created_time').\
|
|
|
+ 'created_time'). \
|
|
|
order_by('-created_time')
|
|
|
if not socket_power_qs.exists():
|
|
|
return response.json(0, {})
|