Przeglądaj źródła

loocam添加查询设备信息接口

peng 2 lat temu
rodzic
commit
f0f5d587f9

+ 21 - 3
Controller/SensorGateway/SmartSceneController.py

@@ -111,7 +111,7 @@ class SmartSceneView(View):
 
                 if device_type != SENSOR_TYPE['smart_button']:  # 非智能按钮只返回网关
                     res = [cls.get_gateway_data(device_id)]
-                else:   # 智能按钮返回网关,门磁和人体传感器(如果存在)
+                else:  # 智能按钮返回网关,门磁和人体传感器(如果存在)
                     gateway_data = cls.get_gateway_data(device_id)
                     sub_device_qs = GatewaySubDevice.objects.filter(
                         Q(device_id=device_id) & Q(device_type=SENSOR_TYPE['door_magnet']) | Q(
@@ -373,8 +373,26 @@ class SmartSceneView(View):
                 smart_scene_qs = SmartScene.objects.filter(user_id=user_id, sub_device_id=sub_device_id)
             if not smart_scene_qs.exists():
                 return response.json(173)
-            smart_scene_qs = smart_scene_qs.values('id', 'scene_name', 'is_enable')
-            return response.json(0, list(smart_scene_qs))
+            smart_scene_qs = smart_scene_qs.values('id', 'scene_name', 'is_enable', 'device_id', 'sub_device_id')
+            smart_scene_list = []
+            for item in smart_scene_qs:
+                smart_scene_dict = {
+                    'id': item['id'],
+                    'scene_name': item['scene_name'],
+                    'is_enable': item['is_enable']
+                }
+                if item['device_id']:
+                    device_qs = Device_Info.objects.filter(id=item['device_id'], userID=user_id).values('NickName',
+                                                                                                        'Type')
+                    smart_scene_dict['device_type'] = device_qs[0]['Type'] if device_qs.exists() else ''
+                    smart_scene_dict['device_nickname'] = device_qs[0]['NickName'] if device_qs.exists() else ''
+                else:
+                    device_qs = GatewaySubDevice.objects.filter(id=item['sub_device_id']).values('device_type',
+                                                                                                 'nickname')
+                    smart_scene_dict['device_type'] = device_qs[0]['device_type'] if device_qs.exists() else ''
+                    smart_scene_dict['device_nickname'] = device_qs[0]['nickname'] if device_qs.exists() else ''
+                smart_scene_list.append(smart_scene_dict)
+            return response.json(0, smart_scene_list)
         except Exception as e:
             return response.json(500, repr(e))
 

+ 62 - 0
Controller/SensorGateway/SubDeviceController.py

@@ -51,6 +51,8 @@ class GatewaySubDeviceView(View):
             return self.update_emergency_status(request_dict, response)
         elif operation == 'list':  # 获取子设备信息
             return self.get_sensor_list(request_dict, response)
+        elif operation == 'device-list':  # 获取设备信息
+            return self.get_device_list(request_dict, response)
         else:
             return response.json(414)
 
@@ -106,6 +108,10 @@ class GatewaySubDeviceView(View):
             if sub_device_qs.exists():
                 sub_device_qs.update(src_addr=src_addr)  # 更新短地址
                 return response.json(174)
+            if device_type == SENSOR_TYPE['smart_button']:
+                sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id, device_type=device_type)
+                if sub_device_qs.exists():
+                    return response.json(181)
 
             with transaction.atomic():
                 sub_device = GatewaySubDevice.objects.create(device_id=device_id, device_type=device_type,
@@ -566,6 +572,62 @@ class GatewaySubDeviceView(View):
         except Exception as e:
             return response.json(500, repr(e))
 
+    @staticmethod
+    def get_device_list(request_dict, response):
+        """
+        获取设备信息
+        @param request_dict: 请求参数
+        @request_dict familyId: 家庭id
+        @param response: 响应对象
+        @return: response
+        """
+        family_id = request_dict.get('familyId', None)
+        room_id = request_dict.get('roomId', None)
+        if not family_id:
+            return response.json(444, {'error param': 'familyId'})
+
+        try:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=0,
+                                                                    device__Type=200).values(
+                'device_id', 'device__NickName').order_by('-device__data_joined')
+            if room_id:
+                family_room_device_qs = family_room_device_qs.filter(room_id=room_id)
+            device_list = []
+            for item in family_room_device_qs:
+                device_dict = {
+                    'deviceId': item['device_id'],
+                    'deviceType': 200,
+                    'deviceNickName': item['device__NickName'],
+                }
+                sub_device = []
+                family_room_sub_device_qs = FamilyRoomDevice.objects.filter(Q(family_id=family_id), ~Q(sub_device=0),
+                                                                            Q(device_id=item['device_id'])).values(
+                    'sub_device', 'room_id').order_by('sort')
+                if family_room_sub_device_qs.exists():
+                    for each in family_room_sub_device_qs:
+                        room_qs = FamilyRoom.objects.filter(id=each['room_id']).values('name')
+                        room_name = room_qs[0]['name'] if room_qs.exists() else ''
+                        device_qs = GatewaySubDevice.objects.filter(id=each['sub_device']).values('id', 'nickname',
+                                                                                                  'device_type',
+                                                                                                  'src_addr',
+                                                                                                  'status',
+                                                                                                  'created_time')
+                        if device_qs.exists():
+                            sub_device.append({
+                                'gatewaySubId': device_qs[0]['id'],
+                                'nickName': device_qs[0]['nickname'],
+                                'deviceType': device_qs[0]['device_type'],
+                                'srcAddr': device_qs[0]['src_addr'],
+                                'status': device_qs[0]['status'],
+                                'createdTime': device_qs[0]['created_time'],
+                                'roomName': room_name,
+                                'familyId': family_id
+                            })
+                    device_dict['subDevice'] = sub_device
+                    device_list.append(device_dict)
+            return response.json(0, device_list)
+        except Exception as e:
+            return response.json(500, repr(e))
 #
 #                   ___====-_  _-====___
 #             _--^^^#####//      \\#####^^^--_