Browse Source

修改智能场景编辑接口发送mqtt数据逻辑
根据智能按钮开关状态修改智能场景状态

peng 3 years ago
parent
commit
9887b98da1

+ 35 - 6
Controller/SensorGateway/SmartSceneController.py

@@ -504,8 +504,6 @@ class SmartSceneView(View):
         if is_all_day:
             is_all_day = int(is_all_day)
             effective_time['is_all_day'] = is_all_day
-        else:
-            is_all_day = 0
 
         if not all([smart_scene_id, scene_name, conditions, tasks]):
             return response.json(444, {'error param': 'smartSceneId,sceneName,conditions or tasks'})
@@ -529,16 +527,25 @@ class SmartSceneView(View):
                         return response.json(180)
 
                 device_id = ''
-                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
+                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr',
+                                                                                         'device__serial_number')
+                if not sub_device_qs.exists():
+                    return response.json(173)
+                serial_number = sub_device_qs[0]['device__serial_number']
                 msg['smart_scene_id'] = smart_scene_id
                 msg['scene_status'] = 1
-                msg['sensor_type'] = int(conditions_dict['sensor']['device_type'])
-                msg['sensor_src'] = int(sub_device_qs['src_addr'], 16)
+                msg['sensor_type'] = conditions_dict['sensor']['device_type']
+                msg['sensor_src'] = int(sub_device_qs[0]['src_addr'], 16)
                 msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
             else:
                 if not device_id:
                     return response.json(444, {'error param': 'deviceId'})
                 sub_device_id = 0
+                device_qs = Device_Info.objects.filter(id=device_id).value('serial_number')
+                if not device_qs.exists():
+                    return response.json(173)
+                serial_number = device_qs[0]['serial_number']
+
 
             task_list = []
             for task in tasks_list:
@@ -558,8 +565,17 @@ class SmartSceneView(View):
                                       device_data=json.dumps(msg), updated_time=now_time, device_id=device_id,
                                       sub_device_id=sub_device_id)
 
-                if is_all_day == 0 or is_all_day == 1:  # 不设置时间或全天
+                if is_all_day is None:  # 不设置时间或全天
+                    smart_scene_qs.update(effective_time_id=0, is_all_day=0)
+                    time_dict = {
+                        'start_time': conditions_dict['time']['minutes'] * 60,
+                        'repeat': conditions_dict['time']['repeat']
+                    }
+                elif is_all_day == 1:
                     smart_scene_qs.update(effective_time_id=0, is_all_day=is_all_day)
+                    time_dict = {
+                        'is_all_day': is_all_day
+                    }
                 else:
                     start_time = int(request_dict.get('startTime', None))
                     end_time = int(request_dict.get('endTime', None))
@@ -572,12 +588,25 @@ class SmartSceneView(View):
                         effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time,
                                                                          repeat=repeat).id
                     smart_scene_qs.update(effective_time_id=effective_time_id, is_all_day=is_all_day)
+                    time_dict = {
+                        'is_all_day': is_all_day,
+                        'start_time': start_time * 60,
+                        'end_time': end_time * 60,
+                        'repeat': repeat
+                    }
                     effective_time = {
                         'isAllDay': is_all_day,
                         'startTime': start_time,
                         'endTime': end_time,
                         'repeat': repeat
                     }
+                msg['time'] = time_dict
+
+            # 通过mqtt发送设备数据
+            thing_name = serial_number
+            topic_name = 'loocam/gateway_sensor/smart_scene/{}'.format(serial_number)
+            success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
+
             res['effectiveTime'] = effective_time
             return response.json(0, res)
 

+ 33 - 1
Controller/SensorGateway/SubDeviceController.py

@@ -443,7 +443,39 @@ class GatewaySubDeviceView(View):
             return response.json(444, {'error param': 'gatewaySubId or emergency_status'})
 
         try:
-            GatewaySubDevice.objects.filter(id=sub_device_id).update(is_tampered=emergency_status)
+            with transaction.atomic():
+                # 更新智能按钮开关状态
+                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id)
+                if not sub_device_qs.exists():
+                    response.json(173)
+                sub_device_qs.update(status=emergency_status)
+
+                # 更新智能按钮场景状态
+                if emergency_status == '0':
+                    smart_scene_status = 0
+                else:
+                    smart_scene_status = 1
+                smart_scene_qs = SmartScene.objects.filter(sub_device_id=sub_device_id)
+                if not smart_scene_qs:
+                    return response.json(173)
+                smart_scene_qs.update(is_enable=smart_scene_status)
+
+            # 通过mqtt发送设备数据
+            sub_device_qs = sub_device_qs.values('device__serial_number')
+            if not sub_device_qs.exists():
+                return response.json(173)
+            serial_number = sub_device_qs[0]['device__serial_number']
+            thing_name = serial_number
+            topic_name = 'loocam/gateway_sensor/smart_scene/{}'.format(serial_number)
+            for item in smart_scene_qs:
+                msg = {
+                    'scene_id': item.id,
+                    'scene_status': item.is_enable
+                }
+
+                success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
+                time.sleep(0.3)
+
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))