|
@@ -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)
|
|
|
|