|
@@ -5,6 +5,7 @@
|
|
|
@File :SmartSceneController.py
|
|
|
"""
|
|
|
import time
|
|
|
+import json
|
|
|
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
from django.db.models import F, Q
|
|
@@ -193,6 +194,8 @@ class SmartSceneView(View):
|
|
|
return response.json(444, {'error param': 'conditions and tasks'})
|
|
|
|
|
|
now_time = int(time.time())
|
|
|
+ conditions_dict = eval(conditions)
|
|
|
+ tasks_list = eval(tasks)
|
|
|
try:
|
|
|
# 判断是否已存在该场景名
|
|
|
smart_scene_qs = SmartScene.objects.filter(user_id=user_id, scene_name=scene_name)
|
|
@@ -223,7 +226,7 @@ class SmartSceneView(View):
|
|
|
serial_number = sub_device_qs[0]['device__serial_number']
|
|
|
|
|
|
if not is_all_day: # 没传时间
|
|
|
- SmartScene.objects.create(**smart_scene_dict)
|
|
|
+ smart_scene_qs = SmartScene.objects.create(**smart_scene_dict)
|
|
|
else:
|
|
|
if is_all_day == '0':
|
|
|
effective_time_qs = EffectiveTime.objects.filter(is_all_day=True).values('id')
|
|
@@ -247,12 +250,31 @@ class SmartSceneView(View):
|
|
|
effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time,
|
|
|
repeat=repeat).id
|
|
|
smart_scene_dict['effective_time_id'] = effective_time_id
|
|
|
- SmartScene.objects.create(**smart_scene_dict)
|
|
|
-
|
|
|
+ smart_scene_qs = SmartScene.objects.create(**smart_scene_dict)
|
|
|
+ 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_qs[0].id,
|
|
|
+ 'sensor_type': conditions_dict['sensor']['device_type'],
|
|
|
+ 'sensor_src': int(sub_device_qs['src_addr'], 16),
|
|
|
+ 'sensor_status': conditions_dict['sensor']['eventValues'][0]['value'],
|
|
|
+ }
|
|
|
+ task_list = []
|
|
|
+ for task in tasks_list:
|
|
|
+ sub_device_id = task['subDeviceId']
|
|
|
+ sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
|
|
|
+ task_temp = {
|
|
|
+ 'sensor_type': task['device_type'],
|
|
|
+ 'sensor_src': int(sub_device_qs['src_addr'], 16),
|
|
|
+ 'sensor_action': task['event_type']
|
|
|
+ }
|
|
|
+ task_list.append(task_temp)
|
|
|
+ msg['task'] = task_list
|
|
|
+ smart_scene_qs.update(device_data=json.dumps(msg))
|
|
|
# 发布MQTT消息通知网关设备
|
|
|
thing_name = serial_number
|
|
|
topic_name = 'loocam/gateway_sensor/{}/smart_scene'.format(serial_number)
|
|
|
- msg = ''
|
|
|
+
|
|
|
success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
|
|
|
if not success:
|
|
|
return response.json(10044)
|
|
@@ -372,6 +394,7 @@ class SmartSceneView(View):
|
|
|
if not smart_scene_qs.exists():
|
|
|
return response.json(173)
|
|
|
return response.json(0, list(smart_scene_qs))
|
|
|
+
|
|
|
except Exception as e:
|
|
|
return response.json(500, repr(e))
|
|
|
|