Эх сурвалжийг харах

通知设备修改sos状态

locky 3 жил өмнө
parent
commit
a896b1fe17

+ 23 - 7
Controller/SensorGateway/SubDeviceController.py

@@ -450,23 +450,39 @@ class GatewaySubDeviceView(View):
             with transaction.atomic():
                 # 更新智能按钮紧急开关状态
                 sub_device_qs.update(is_tampered=emergency_status)
-
+                # 获取序列号
+                sub_device_qs = sub_device_qs.values('device_id', 'src_addr', 'device__serial_number')
+                serial_number = sub_device_qs[0]['device__serial_number']
+                topic_name = 'loocam/gateway_sensor/smart_scene/{}'.format(serial_number)
+                sos_count = GatewaySubDevice.objects.filter(device_id=sub_device_qs[0]['device_id']).count()
+                # 通知设备修改sos状态
+                msg = {
+                    'sos_count': sos_count,     # 该网关下的智能按钮数量
+                    'sensor_src': int(sub_device_qs[0]['src_addr']),
+                    'sos_select': emergency_status
+                }
+                success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                try:
+                    assert success
+                except AssertionError:
+                    return response.json(10044)
+                time.sleep(0.3)
                 # 如果打开紧急开关,关闭已开启的场景
                 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)
+                        success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                        try:
+                            assert success
+                        except AssertionError:
+                            return response.json(10044)
                         time.sleep(0.3)
                     smart_scene_qs.update(is_enable=False)