|
@@ -14,7 +14,7 @@ from django.db import transaction
|
|
|
from django.db.models import Q
|
|
|
from django.views.generic.base import View
|
|
|
|
|
|
-from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SCENE_EVENT_DELETE
|
|
|
+from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SCENE_EVENT_DELETE, SUB_DEVICE_TOPIC
|
|
|
from Ansjer.config import CONFIG_INFO, AWS_IOT_SES_ACCESS_CHINA_ID, AWS_IOT_SES_ACCESS_CHINA_SECRET, \
|
|
|
AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_FOREIGN_ID, AWS_IOT_SES_ACCESS_FOREIGN_SECRET, \
|
|
|
AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA
|
|
@@ -197,6 +197,22 @@ class GatewayDeviceView(View):
|
|
|
sub_id_list = gateway_qs.values_list('id', flat=True)
|
|
|
smart_scene_qs = SmartScene.objects.filter(
|
|
|
Q(device_id=device_id) | Q(sub_device_id__in=sub_id_list))
|
|
|
+
|
|
|
+ # 下发删除设备消息
|
|
|
+ ieee_addr_list = gateway_qs.values_list('ieee_addr', flat=True)
|
|
|
+ topic_name = SUB_DEVICE_TOPIC.format(serial_number)
|
|
|
+ for ieee_addr in ieee_addr_list:
|
|
|
+ msg = {
|
|
|
+ 'zigbee': 'delete',
|
|
|
+ 'ieee': ieee_addr
|
|
|
+ }
|
|
|
+ success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
|
|
|
+ try:
|
|
|
+ assert success
|
|
|
+ except AssertionError:
|
|
|
+ return response.json(10044)
|
|
|
+ time.sleep(0.3)
|
|
|
+
|
|
|
else:
|
|
|
smart_scene_qs = SmartScene.objects.filter(device_id=device_id)
|
|
|
if smart_scene_qs.exists():
|
|
@@ -223,14 +239,31 @@ class GatewayDeviceView(View):
|
|
|
sub_id_list = list(map(int, sub_ids.split(',')))
|
|
|
FamilyRoomDevice.objects.filter(sub_device__in=sub_id_list).delete()
|
|
|
|
|
|
+ # 查询网关序列号,确定MQTT主题
|
|
|
+ sub_device_qs = GatewaySubDevice.objects.filter(id=sub_id_list[0]). \
|
|
|
+ values('device__serial_number')
|
|
|
+ assert sub_device_qs.exists()
|
|
|
+ serial_number = sub_device_qs[0]['device__serial_number']
|
|
|
+
|
|
|
+ # 下发删除设备消息
|
|
|
+ gateway_sub_device_qs = GatewaySubDevice.objects.filter(id__in=sub_id_list)
|
|
|
+ ieee_addr_list = gateway_sub_device_qs.values_list('ieee_addr', flat=True)
|
|
|
+ topic_name = SUB_DEVICE_TOPIC.format(serial_number)
|
|
|
+ for ieee_addr in ieee_addr_list:
|
|
|
+ msg = {
|
|
|
+ 'zigbee': 'delete',
|
|
|
+ 'ieee': ieee_addr
|
|
|
+ }
|
|
|
+ success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
|
|
|
+ try:
|
|
|
+ assert success
|
|
|
+ except AssertionError:
|
|
|
+ return response.json(10044)
|
|
|
+ time.sleep(0.3)
|
|
|
+
|
|
|
# 删除场景,下发MQTT通知设备
|
|
|
smart_scene_qs = SmartScene.objects.filter(sub_device_id__in=sub_id_list)
|
|
|
if smart_scene_qs.exists():
|
|
|
- # 查询网关序列号,确定MQTT主题
|
|
|
- sub_device_qs = GatewaySubDevice.objects.filter(id=sub_id_list[0]).\
|
|
|
- values('device__serial_number')
|
|
|
- assert sub_device_qs.exists()
|
|
|
- serial_number = sub_device_qs[0]['device__serial_number']
|
|
|
topic_name = SMART_SCENE_TOPIC.format(serial_number)
|
|
|
|
|
|
smart_scene_info = smart_scene_qs.values('id')
|
|
@@ -248,7 +281,7 @@ class GatewayDeviceView(View):
|
|
|
time.sleep(0.3)
|
|
|
smart_scene_qs.delete()
|
|
|
|
|
|
- GatewaySubDevice.objects.filter(id__in=sub_id_list).delete()
|
|
|
+ gateway_sub_device_qs.delete()
|
|
|
SceneLog.objects.filter(sub_device_id__in=sub_id_list).delete()
|
|
|
|
|
|
return response.json(0)
|