Просмотр исходного кода

Merge remote-tracking branch 'remotes/origin/locky' into test

Ansjer 3 лет назад
Родитель
Сommit
815279b059

+ 4 - 2
Controller/SensorGateway/SmartSceneController.py

@@ -217,7 +217,9 @@ class SmartSceneView(View):
                 'created_time': now_time,
                 'updated_time': now_time,
             }
-            msg = {}
+            msg = {
+                'scene_status': 1
+            }
             # 处理设置时间
             if is_all_day is not None:
                 is_all_day = int(is_all_day)
@@ -251,7 +253,7 @@ class SmartSceneView(View):
                 if not sub_device_qs.exists():
                     return response.json(173)
                 serial_number = sub_device_qs[0]['device__serial_number']
-                msg['scene_status'] = 1
+
                 msg['sensor_type'] = int(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'])

+ 25 - 31
Controller/SensorGateway/SubDeviceController.py

@@ -443,38 +443,32 @@ class GatewaySubDeviceView(View):
             return response.json(444, {'error param': 'gatewaySubId or emergency_status'})
 
         try:
-            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')
+            emergency_status = int(emergency_status)
+            sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id)
             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)
+                response.json(173)
+            with transaction.atomic():
+                # 更新智能按钮紧急开关状态
+                sub_device_qs.update(is_tampered=emergency_status)
+
+                # 如果打开紧急开关,关闭已开启的场景
+                if emergency_status == 1:
+                    smart_scene_qs = SmartScene.objects.filter(sub_device_id=sub_device_id, is_enable=True)
+                    if not smart_scene_qs.exists():
+                        return response.json(0)
+
+                    # 通过mqtt发送设备数据
+                    sub_device_qs = sub_device_qs.values('device__serial_number')
+                    serial_number = sub_device_qs[0]['device__serial_number']
+                    topic_name = 'loocam/gateway_sensor/smart_scene/{}'.format(serial_number)
+                    for smart_scene in smart_scene_qs:
+                        msg = {
+                            'scene_id': smart_scene.id,
+                            'scene_status': 0
+                        }
+                        CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                        time.sleep(0.3)
+                    smart_scene_qs.update(is_enable=False)
 
             return response.json(0)
         except Exception as e: