|
@@ -389,15 +389,80 @@ class SmartSceneView(View):
|
|
|
@return: response
|
|
|
"""
|
|
|
smart_scene_id = request_dict.get('smartSceneId', None)
|
|
|
+ scene_name = request_dict.get('sceneName', None)
|
|
|
+ conditions = request_dict.get('conditions', None)
|
|
|
+ tasks = request_dict.get('tasks', None)
|
|
|
+ is_all_day = request_dict.get('isAllDay', None)
|
|
|
|
|
|
- if not smart_scene_id:
|
|
|
- return response.json(444, {'error param': 'smartSceneId'})
|
|
|
+ conditions_dict = eval(conditions)
|
|
|
+ tasks_list = eval(tasks)
|
|
|
+ res = {
|
|
|
+ 'scene_name': scene_name,
|
|
|
+ 'conditions': conditions_dict,
|
|
|
+ 'tasks': tasks_list
|
|
|
+ }
|
|
|
+ effective_time = {}
|
|
|
+
|
|
|
+ if is_all_day:
|
|
|
+ is_all_day = int(is_all_day)
|
|
|
+ effective_time['is_all_day'] = is_all_day
|
|
|
+ else:
|
|
|
+ is_all_day = 0
|
|
|
+
|
|
|
+ if not all([smart_scene_id, scene_name, conditions, tasks]):
|
|
|
+ return response.json(444, {'error param': 'smartSceneId,sceneName,conditions or tasks'})
|
|
|
try:
|
|
|
- smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).values('id', 'scene_name', 'conditions',
|
|
|
- 'tasks', 'effective_time_id')
|
|
|
+ smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id)
|
|
|
if not smart_scene_qs.exists():
|
|
|
return response.json(173)
|
|
|
- return response.json(0, list(smart_scene_qs))
|
|
|
+ msg = {}
|
|
|
+ if conditions_dict['type'] == 2: # 条件为选择子设备
|
|
|
+ sub_device_id = conditions_dict['sensor']['subDeviceId']
|
|
|
+ sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
|
|
|
+ msg['smart_scene_id'] = smart_scene_id
|
|
|
+ msg['scene_status'] = 1
|
|
|
+ msg['sensor_type'] = conditions_dict['sensor']['device_type']
|
|
|
+ msg['sensor_src'] = int(sub_device_qs['src_addr'], 16)
|
|
|
+ msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
|
|
|
+
|
|
|
+ task_list = []
|
|
|
+ for task in tasks_list:
|
|
|
+ task_temp = {
|
|
|
+ 'sensor_type': task['device_type'],
|
|
|
+ 'sensor_action': task['event_type']
|
|
|
+ }
|
|
|
+ sub_device_id = task.get('subDeviceId', None)
|
|
|
+ if sub_device_id:
|
|
|
+ sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
|
|
|
+ task_temp['sensor_src'] = int(sub_device_qs['src_addr'], 16)
|
|
|
+ task_list.append(task_temp)
|
|
|
+ msg['task'] = task_list
|
|
|
+
|
|
|
+ with transaction.atomic():
|
|
|
+ smart_scene_qs.update(scene_name=scene_name, conditions=conditions, tasks=tasks,
|
|
|
+ device_data=json.dumps(msg))
|
|
|
+ if is_all_day == 0 or is_all_day == 1: # 不设置时间或全天
|
|
|
+ smart_scene_qs.update(effective_time_id=0, is_all_day=is_all_day)
|
|
|
+ else:
|
|
|
+ start_time = int(request_dict.get('startTime', None))
|
|
|
+ end_time = int(request_dict.get('endTime', None))
|
|
|
+ repeat = int(request_dict.get('repeat', None))
|
|
|
+ effective_time_qs = EffectiveTime.objects.filter(start_time=start_time, end_time=end_time,
|
|
|
+ repeat=repeat).values('id')
|
|
|
+ if effective_time_qs.exists():
|
|
|
+ effective_time_id = effective_time_qs[0]['id']
|
|
|
+ else:
|
|
|
+ effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time,
|
|
|
+ repeat=repeat).id
|
|
|
+ smart_scene_qs.update(effective_time_id=effective_time_id, is_all_day=is_all_day)
|
|
|
+ effective_time = {
|
|
|
+ 'isAllDay': is_all_day,
|
|
|
+ 'startTime': start_time,
|
|
|
+ 'endTime': end_time,
|
|
|
+ 'repeat': repeat
|
|
|
+ }
|
|
|
+ res['effectiveTime'] = effective_time
|
|
|
+ return response.json(0, res)
|
|
|
|
|
|
except Exception as e:
|
|
|
return response.json(500, repr(e))
|