Ver Fonte

Merge remote-tracking branch 'remotes/origin/peng' into test

Ansjer há 3 anos atrás
pai
commit
176405aca9
2 ficheiros alterados com 28 adições e 4 exclusões
  1. 27 4
      Controller/SensorGateway/SmartSceneController.py
  2. 1 0
      Model/models.py

+ 27 - 4
Controller/SensorGateway/SmartSceneController.py

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

+ 1 - 0
Model/models.py

@@ -2633,6 +2633,7 @@ class SmartScene(models.Model):
     tasks = models.CharField(default='', max_length=255, verbose_name=u'任务')
     effective_time_id = models.IntegerField(default=0, verbose_name=u'关联场景执行时间id')
     is_enable = models.BooleanField(default=True, verbose_name=u'是否开启')
+    device_data = models.CharField(default='', max_length=255, verbose_name=u'设备场景数据')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     updated_time = models.IntegerField(default=0, verbose_name='更新时间')