Ver Fonte

网关/插座查询;優化插座統計接口

guanhailong há 2 anos atrás
pai
commit
e47f87766a

+ 81 - 35
Controller/SensorGateway/GatewayDeviceController.py

@@ -15,7 +15,7 @@ from django.views.generic.base import View
 from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC
 from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import FamilyRoomDevice, FamilyRoom, GatewaySubDevice, Device_Info, UserFamily, FamilyMember, \
-    UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog
+    UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog, SocketInfo, SocketPowerStatistics
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -174,9 +174,9 @@ class GatewayDeviceView(View):
                             smart_scene_qs = SmartScene.objects.filter(device_id=device_id)
                         if smart_scene_qs.exists():
                             # 通知设备删除场景id
+                            smart_scene_info = smart_scene_qs.values('id')
                             serial_number = device_qs.first().serial_number
                             topic_name = SMART_SCENE_TOPIC.format(serial_number)
-                            smart_scene_info = smart_scene_qs.values('id')
                             for smart_scene in smart_scene_info:
                                 msg = {
                                     'smart_scene_delete': int(smart_scene['id'])
@@ -188,7 +188,7 @@ class GatewayDeviceView(View):
                                     return response.json(10044)
                                 time.sleep(0.3)
                             smart_scene_qs.delete()
-                        gateway_qs.delete()     # 删除子设备
+                        gateway_qs.delete()  # 删除子设备
                         scene_log_qs = SceneLog.objects.filter(device_id=device_id)
                         if scene_log_qs.exists():
                             scene_log_qs.delete()
@@ -254,41 +254,87 @@ class GatewayDeviceView(View):
         device_id = request_dict.get('deviceId', None)
         if not device_id:
             return response.json(444)
-        device_qs = FamilyRoomDevice.objects.filter(device_id=device_id, sub_device=0)
-        if not device_qs.exists():
+        device_info_qs = Device_Info.objects.filter(id=device_id).values('id', 'Type', 'NickName', 'UID',
+                                                                         'serial_number')
+        if not device_info_qs.exists():
             return response.json(173)
+        device_info_qs = device_info_qs.first()
+        Type = device_info_qs['Type']
         try:
-            device_qs = device_qs.values('family_id', 'device_id', 'room_id', 'device__Type', 'device__NickName',
-                                         'device__UID',
-                                         'device__serial_number')
-            device_qs = device_qs.first()
-            room_id = device_qs['room_id']
-            family_id = device_qs['family_id']
-            gateway_room_name = ''
-            if room_id:
-                room_qs = FamilyRoom.objects.filter(id=room_id)
-                gateway_room_name = room_qs.first().name if room_qs.exists() else ''
-
-            iot_device_info_qs = iotdeviceInfoModel.objects.filter(
-                serial_number=device_qs['device__serial_number'][0:6])
-            iot_data = {}
-            if iot_device_info_qs.exists():
-                iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
-                iot_data = {
-                    'endpoint': iot_device_Info[0]['endpoint'],
-                    'token_iot_number': iot_device_Info[0]['token_iot_number']
-                }
             gateway = {
-                'deviceId': device_qs['device_id'],
-                'deviceType': device_qs['device__Type'],
-                'deviceNickName': device_qs['device__NickName'],
-                'UID': device_qs['device__UID'],
-                'serialNumber': device_qs['device__serial_number'],
-                'roomName': gateway_room_name,
-                'iot': iot_data,
-                'roomId': room_id,
-                'familyId': family_id
+                'deviceId': device_info_qs['id'],
+                'deviceType': device_info_qs['Type'],
+                'deviceNickName': device_info_qs['NickName'],
+                'UID': device_info_qs['UID'],
+                'serialNumber': device_info_qs['serial_number'][:6] if device_info_qs['serial_number'][:6] else '',
+                'power': '',
+                'electricity': '',
+                'accumulatedTime': '',
+                'socketStatus': False,
+                'online': False,
+                'countDownTime': '',
+                'roomName': '',
+                'iot': {},
+                'roomId': '',
+                'familyId': ''
             }
+            # 判斷设备类型
+            if Type != 201:
+                device_qs = FamilyRoomDevice.objects.filter(device_id=device_id, sub_device=0)
+                if not device_qs.exists():
+                    return response.json(173)
+                device_qs = device_qs.values('family_id', 'device_id', 'room_id', 'device__Type', 'device__NickName',
+                                             'device__UID',
+                                             'device__serial_number')
+                device_qs = device_qs.first()
+                #  獲取房间Id家庭Id
+                gateway['roomId'] = device_qs['room_id']
+                gateway['familyId'] = device_qs['family_id']
+                if gateway['roomId']:
+                    room_qs = FamilyRoom.objects.filter(id=gateway['roomId'])
+                    gateway['roomName'] = room_qs.first().name if room_qs.exists() else ''
+
+                iot_device_info_qs = iotdeviceInfoModel.objects.filter(
+                    serial_number=device_qs['device__serial_number'][0:6])
+                if iot_device_info_qs.exists():
+                    iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
+                    gateway['iot'] = {
+                        'endpoint': iot_device_Info[0]['endpoint'],
+                        'token_iot_number': iot_device_Info[0]['token_iot_number']
+                    }
+            else:
+                socket_info_qs = SocketInfo.objects.filter(device_id=device_id).values('online', 'type_switch',
+                                                                                       'status',
+                                                                                       'count_down_time')
+                socket_power_qs = SocketPowerStatistics.objects.filter(device_id=device_id).values('accumulated_time',
+                                                                                                   'power',
+                                                                                                   'electricity')
+                if not socket_info_qs.exists():
+                    return response.json(173)
+                # 插座电量统计
+                gateway['power'] = socket_power_qs[0]['power'] if socket_power_qs.exists() else 0.00
+                gateway['electricity'] = socket_power_qs[0]['electricity'] if socket_power_qs.exists() else 0.00
+                gateway['accumulatedTime'] = socket_power_qs[0][
+                    'accumulated_time'] if socket_power_qs.exists() else '0:00'
+                # 插座信息
+                gateway['socketStatus'] = socket_info_qs[0]['status'] if socket_info_qs[0]['status'] else False
+                gateway['online'] = socket_info_qs[0]['online'] if socket_info_qs[0]['online'] else False
+                gateway['accumulatedTime'] = socket_info_qs[0]['count_down_time'] if socket_info_qs[0][
+                    'count_down_time'] else '00:00:00'
+                # 查詢iot
+                iot_device_info_qs = iotdeviceInfoModel.objects.filter(
+                    serial_number=device_info_qs['serial_number'][0:6])
+                if iot_device_info_qs.exists():
+                    iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
+                    gateway['iot_data'] = {
+                        'endpoint': iot_device_Info[0]['endpoint'] if iot_device_Info[0]['endpoint'] else '',
+                        'token_iot_number': iot_device_Info[0]['token_iot_number'] if iot_device_Info[0][
+                            'token_iot_number'] else ''
+                    }
+                # 設備類型
+                res = {'gateway': gateway, 'sub_device': [], 'sub_device_count': 0,
+                       'scene_count': 0}
+                return response.json(0, res)
             family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
             family_device_qs = family_device_qs.filter(~Q(sub_device=0)).order_by('-created_time')
 
@@ -320,7 +366,7 @@ class GatewayDeviceView(View):
                         'roomName': gateway_room_name,
                         'roomId': room_qs.first().id if room_qs.exists() else 0,
                         'ieeeAddr': gateway_sub_qs['ieee_addr'],
-                        'familyId': family_id,
+                        'familyId': gateway['familyId'],
                     })
             scene_count = SmartScene.objects.filter(Q(device_id=device_id) | Q(sub_device_id__in=sub_id_list)).count()
             res = {'gateway': gateway, 'sub_device': sub_device, 'sub_device_count': len(sub_device),

+ 16 - 61
Controller/SensorGateway/SmartSocketController.py

@@ -68,8 +68,6 @@ class SmartSocketView(View):
             return self.save_count_down(request_dict, response)
         elif operation == 'saveSchedule':  # 添加插座排程
             return self.save_socket_schedule(request_dict, response)
-        elif operation == 'get-today-scene':  # 查询插座电量
-            return self.get_today_scene(request_dict, response)
         elif operation == 'get-all-scene':  # 统计智能插座电量
             return self.get_all_scene(request_dict, response)
         elif operation == 'get-socket-schedule':  # 智能插座排程记录查询
@@ -379,40 +377,6 @@ class SmartSocketView(View):
 
     # 以下是查询智能插座接口
 
-    @staticmethod
-    def get_today_scene(request_dict, response):
-        """
-        查询插座电量
-        @request_dict serialNumber: 序列号
-        @param request_dict: 请求数据
-        @param response: 响应
-        @return: response
-        """
-        serialNumber = request_dict.get('serialNumber', None)
-        if not serialNumber:
-            return response.json(444)
-        socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serialNumber).values('power',
-                                                                                                  'accumulated_time',
-                                                                                                  'electricity')
-        socket_info_qs = SocketInfo.objects.filter(serial_number=serialNumber).values('status', 'online',
-                                                                                      'count_down_time')
-        if not socket_info_qs.exists() or not socket_power_qs.exists():
-            return response.json(173)
-        try:
-            data = {'serialNumber': serialNumber,
-                    'power': socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00,
-                    'electricity': socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00,
-                    'accumulatedTime': socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
-                        'accumulated_time'] else '0:00',
-                    'status': socket_info_qs[0]['status'] if socket_info_qs[0]['status'] else False,
-                    'online': socket_info_qs[0]['online'] if socket_info_qs[0]['online'] else False,
-                    'count_down_time': socket_info_qs[0]['count_down_time'] if socket_info_qs[0][
-                        'count_down_time'] else '00:00:00'}
-            # 查询设备信息
-            return response.json(0, data)
-        except Exception as e:
-            return response.json(500, repr(e))
-
     @classmethod
     def get_all_scene(cls, request_dict, response):
         """
@@ -446,7 +410,7 @@ class SmartSocketView(View):
                 'electricity'] else 0.00
             # 当天累计时长
             data['accumulated_time'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
-                'accumulated_time'] else 0.00
+                'accumulated_time'] else '00:00:00'
             # 功率
             data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00
 
@@ -473,17 +437,14 @@ class SmartSocketView(View):
             yesterday_end_time = int(time.mktime(time.strptime(str(today), '%Y-%m-%d'))) - 1
             socket_qs = socket_power_qs.filter(created_time__gte=yesterday_start_time,
                                                created_time__lt=yesterday_end_time).values('electricity')
-            data['electricityYesterday'] = socket_qs[0]['electricity'] if socket_qs[0][
-                'electricity'] else 0.00
+            data['electricityYesterday'] = socket_qs[0]['electricity'] if socket_qs.exists() else 0
 
             #  时间和功耗
             new_list = []
             socket_qs = socket_power_qs.filter(created_time__gte=startTime, created_time__lt=endTime).aggregate(
                 electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
-            new_list.append({
-                'electricityAll': socket_qs['electricity'] if socket_qs['electricity'] else 0.00,
-                'accumulatedTimeAll': socket_qs['accumulatedTime'] if socket_qs['accumulatedTime'] else '0:00'
-            })
+            data['electricityTimeAll'] = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
+            data['accumulatedTimeAll'] = socket_qs['accumulatedTime'] if socket_qs['accumulatedTime'] else '0:00'
 
             #  分割时间
             diction = cls.splittings_time(startTime, endTime, unit)
@@ -492,27 +453,19 @@ class SmartSocketView(View):
                 socket_qs = socket_power_qs.filter(created_time__gte=startTime,
                                                    created_time__lt=diction['startMonth_time']).aggregate(
                     electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
-                startTime = time.localtime(int(startTime))  # 把时间戳转换成时间元祖
-                startTime = time.strftime('%Y-%m', startTime)
+                electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
                 new_list.append({
-                    'startTime': startTime,
-                    'electricity': socket_qs['electricity'] if socket_qs['electricity'] else 0.00
+                    'startTime': int(startTime),
+                    'electricity': round(electricity, 1)
                 })
-            # 分割时间
             # 查询天月
             for item in diction['time_list']:
                 socket_qs = socket_power_qs.filter(created_time__gte=item[0],
                                                    created_time__lt=item[1]).aggregate(electricity=Sum('electricity'))
-                hearTime = time.localtime(item[0])  # 把时间戳转换成时间元祖
-                if unit == 'year':
-                    startTime = time.strftime('%Y-%m', hearTime)
-                else:
-                    startTime = time.strftime('%Y-%m-%d', hearTime)
-                electricity = socket_qs['electricity'] if socket_qs[
-                    'electricity'] else 0.00
+                electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
                 new_list.append({
-                    'startTime': startTime,
-                    'electricity': electricity
+                    'startTime': item[0],
+                    'electricity': round(electricity, 1)
                 })
 
             if unit == 'year':
@@ -520,11 +473,10 @@ class SmartSocketView(View):
                 socket_qs = socket_power_qs.filter(created_time__gte=diction['endMonth_time'],
                                                    created_time__lt=endTime).aggregate(
                     electricity=Sum('electricity'))
-                endTime = time.localtime(int(endTime))  # 把时间戳转换成时间元祖
-                endTime = time.strftime('%Y-%m', endTime)
+                electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
                 new_list.append({
-                    'startTime': endTime,
-                    'electricity': socket_qs['electricity'] if socket_qs['electricity'] else 0.00
+                    'startTime': int(endTime),
+                    'electricity': round(electricity, 1)
                 })
 
             data['week_or_month_or_year'] = new_list
@@ -621,6 +573,9 @@ class SmartSocketView(View):
 
     @classmethod
     def splittings_time(cls, startTime, endTime, unit):
+        """
+        根據時間單位分割時間
+        """
         diction = {}
         time_list = []
         # 开始时间