|
@@ -182,8 +182,8 @@ class SmartSceneView(View):
|
|
|
}
|
|
|
return res
|
|
|
|
|
|
- @staticmethod
|
|
|
- def create_smart_scene(request_dict, user_id, response):
|
|
|
+ @classmethod
|
|
|
+ def create_smart_scene(cls, request_dict, user_id, response):
|
|
|
"""
|
|
|
创建智能场景
|
|
|
@param request_dict: 请求参数
|
|
@@ -246,6 +246,7 @@ class SmartSceneView(View):
|
|
|
if not device_info_qs.exists():
|
|
|
return response.json(173)
|
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
|
+ msg['sensor_status'] = 2002
|
|
|
else: # 子设备设置场景
|
|
|
if not sub_device_id:
|
|
|
return response.json(444, {'error param': 'subDeviceId'})
|
|
@@ -322,36 +323,9 @@ class SmartSceneView(View):
|
|
|
|
|
|
msg['time'] = time_dict
|
|
|
msg['scene_id'] = smart_scene_qs.id
|
|
|
- task_list = []
|
|
|
- for task in tasks_list:
|
|
|
- sensor_type = int(task['device_type'])
|
|
|
- task_temp = {
|
|
|
- 'sensor_type': sensor_type
|
|
|
- }
|
|
|
- if sensor_type != -1: # 不为-1时需要其他数据
|
|
|
- task_temp['sensor_action'] = int(task['event_type'])
|
|
|
-
|
|
|
- # 延时
|
|
|
- if 'delay_time' in task and task['delay_time'] != 0:
|
|
|
- task_temp['sensor_delay'] = task['delay_time']
|
|
|
-
|
|
|
- # 子设备返回长地址
|
|
|
- sub_device_id = task.get('subDeviceId', None)
|
|
|
- if sub_device_id:
|
|
|
- sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('ieee_addr').first()
|
|
|
- task_temp['sensor_ieee_addr'] = sub_device_qs['ieee_addr']
|
|
|
- # 网关添加报警类型数据
|
|
|
- else:
|
|
|
- task_temp['voice_type'] = task.get('voice_type')
|
|
|
- task_temp['voice_id'] = task.get('voice_id')
|
|
|
- task_temp['count'] = task.get('count')
|
|
|
- task_temp['delay_time'] = task.get('delay_time')
|
|
|
- task_temp['duration'] = task.get('duration')
|
|
|
- task_temp['value_type'] = task.get('value_type')
|
|
|
-
|
|
|
- task_list.append(task_temp)
|
|
|
-
|
|
|
- msg['task'] = task_list
|
|
|
+
|
|
|
+ # 获取设备任务数据
|
|
|
+ msg['task'] = cls.get_msg_task_list(tasks_list)
|
|
|
|
|
|
smart_scene_qs.device_data = json.dumps(msg)
|
|
|
smart_scene_qs.save()
|
|
@@ -561,8 +535,8 @@ class SmartSceneView(View):
|
|
|
except Exception as e:
|
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
- @staticmethod
|
|
|
- def edit_smart_scene(request_dict, user_id, response):
|
|
|
+ @classmethod
|
|
|
+ def edit_smart_scene(cls, request_dict, user_id, response):
|
|
|
"""
|
|
|
编辑智能场景
|
|
|
@param request_dict: 请求参数
|
|
@@ -654,37 +628,10 @@ class SmartSceneView(View):
|
|
|
if not device_qs.exists():
|
|
|
return response.json(173)
|
|
|
serial_number = device_qs[0]['serial_number']
|
|
|
+ msg['sensor_status'] = 2002
|
|
|
|
|
|
- task_list = []
|
|
|
- for task in tasks_list:
|
|
|
- sensor_type = int(task['device_type'])
|
|
|
- task_temp = {
|
|
|
- 'sensor_type': sensor_type
|
|
|
- }
|
|
|
- if sensor_type != -1: # 不为-1时需要其他数据
|
|
|
- task_temp['sensor_action'] = int(task['event_type'])
|
|
|
-
|
|
|
- # 延时
|
|
|
- if 'delay_time' in task and task['delay_time'] != 0:
|
|
|
- task_temp['sensor_delay'] = task['delay_time']
|
|
|
-
|
|
|
- # 子设备返回长地址
|
|
|
- task_sub_device_id = task.get('subDeviceId', None)
|
|
|
- if task_sub_device_id:
|
|
|
- sub_device_qs = GatewaySubDevice.objects.filter(id=task_sub_device_id).values('ieee_addr').first()
|
|
|
- task_temp['sensor_ieee_addr'] = sub_device_qs['ieee_addr']
|
|
|
- # 网关添加报警类型数据
|
|
|
- else:
|
|
|
- task_temp['voice_type'] = task.get('voice_type')
|
|
|
- task_temp['voice_id'] = task.get('voice_id')
|
|
|
- task_temp['count'] = task.get('count')
|
|
|
- task_temp['delay_time'] = task.get('delay_time')
|
|
|
- task_temp['duration'] = task.get('duration')
|
|
|
- task_temp['value_type'] = task.get('value_type')
|
|
|
-
|
|
|
- task_list.append(task_temp)
|
|
|
-
|
|
|
- msg['task'] = task_list
|
|
|
+ # 获取设备任务数据
|
|
|
+ msg['task'] = cls.get_msg_task_list(tasks_list)
|
|
|
|
|
|
with transaction.atomic():
|
|
|
smart_scene_qs.update(scene_name=scene_name, conditions=conditions, tasks=tasks,
|
|
@@ -1019,6 +966,45 @@ class SmartSceneView(View):
|
|
|
except Exception as e:
|
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
+ @staticmethod
|
|
|
+ def get_msg_task_list(tasks_list):
|
|
|
+ """
|
|
|
+ 获取设备任务数据
|
|
|
+ @param tasks_list: app任务列表
|
|
|
+ @return: task_list
|
|
|
+ """
|
|
|
+ task_list = []
|
|
|
+ # 下发最后一个任务;如果最后一个任务有延时,则下发最后两个任务
|
|
|
+ # task_temp = tasks_list[-1:]
|
|
|
+ for task in tasks_list:
|
|
|
+ sensor_type = int(task['device_type'])
|
|
|
+ task_temp = {
|
|
|
+ 'sensor_type': sensor_type
|
|
|
+ }
|
|
|
+ if sensor_type != -1: # 不为-1时需要其他数据
|
|
|
+ task_temp['sensor_action'] = int(task['event_type'])
|
|
|
+
|
|
|
+ # 延时
|
|
|
+ if 'delay_time' in task and task['delay_time'] != 0:
|
|
|
+ task_temp['sensor_delay'] = task['delay_time']
|
|
|
+
|
|
|
+ # 子设备返回长地址
|
|
|
+ sub_device_id = task.get('subDeviceId', None)
|
|
|
+ if sub_device_id:
|
|
|
+ sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('ieee_addr').first()
|
|
|
+ task_temp['sensor_ieee_addr'] = sub_device_qs['ieee_addr']
|
|
|
+ # 网关长地址返回'FFFFFFFFFFFFFFFF',添加报警类型数据
|
|
|
+ else:
|
|
|
+ task_temp['sensor_ieee_addr'] = 'FFFFFFFFFFFFFFFF'
|
|
|
+ task_temp['voice_type'] = task.get('voice_type')
|
|
|
+ task_temp['voice_id'] = task.get('voice_id')
|
|
|
+ task_temp['count'] = task.get('count')
|
|
|
+ task_temp['delay_time'] = task.get('delay_time')
|
|
|
+ task_temp['duration'] = task.get('duration')
|
|
|
+ task_temp['value_type'] = task.get('value_type')
|
|
|
+ task_list.append(task_temp)
|
|
|
+ return task_list
|
|
|
+
|
|
|
|
|
|
#
|
|
|
# ___====-_ _-====___
|