Browse Source

修改电流上报接口

zhangdongming 2 years ago
parent
commit
9509c365b0
1 changed files with 35 additions and 9 deletions
  1. 35 9
      Controller/SensorGateway/SmartSocketController.py

+ 35 - 9
Controller/SensorGateway/SmartSocketController.py

@@ -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, {})