瀏覽代碼

新增设备获取智能场景数据接口

locky 3 年之前
父節點
當前提交
72413bf5a2
共有 2 個文件被更改,包括 40 次插入1 次删除
  1. 1 0
      Ansjer/config.py
  2. 39 1
      Controller/SensorGateway/SmartSceneController.py

+ 1 - 0
Ansjer/config.py

@@ -84,6 +84,7 @@ AWS_ARN = ['arn:aws-cn:s3','arn:aws:s3']
 
 # MQTT主题名
 SMART_SCENE_TOPIC_NAME = 'loocam/gateway_sensor/smart_scene/{}'
+GET_SCENE_TOPIC_NAME = 'loocam/gateway_sensor/get_scene/{}'
 
 #尚云服务器CRCKey
 CRCKey = {'AUS':'CRCKey', 'ACN':'CRCKey'}   #{平台名:CRCKey值}

+ 39 - 1
Controller/SensorGateway/SmartSceneController.py

@@ -12,9 +12,10 @@ from django.db import transaction
 from django.db.models import F, Q, Count
 from django.views import View
 
-from Ansjer.config import SMART_SCENE_TOPIC_NAME
+from Ansjer.config import SMART_SCENE_TOPIC_NAME, GET_SCENE_TOPIC_NAME
 from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info, \
     SceneLog
+from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
 
 
@@ -30,6 +31,8 @@ class SmartSceneView(View):
         return self.validation(request.POST, request, operation)
 
     def validation(self, request_dict, request, operation):
+        if operation == 'get-scene':  # 设备获取智能场景数据
+            return self.get_scene_data(request_dict, ResponseObject('cn'))
         token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
         if token_code != 0:
             return response.json(token_code)
@@ -783,3 +786,38 @@ class SmartSceneView(View):
             return response.json(0, log_date_list)
         except Exception as e:
             return response.json(500, repr(e))
+
+    @staticmethod
+    def get_scene_data(request_dict, response):
+        """
+        设备获取智能场景数据
+        @param request_dict: 请求参数
+        @request_dict serial_number: 序列号
+        @param response: 响应对象
+        @return: response
+        """
+        serial_number = request_dict.get('serial_number', None)
+
+        if not serial_number:
+            return response.json(444, {'error param': 'serial_number'})
+
+        try:
+            device_info_qs = Device_Info.objects.filter(serial_number=serial_number).values('userID_id')
+            if not device_info_qs.exists():
+                return response.json(173)
+            smart_scene_qs = SmartScene.objects.filter(user_id=device_info_qs[0]['userID_id']).values('device_data')
+            if not smart_scene_qs.exists():
+                return response.json(173)
+
+            topic_name = GET_SCENE_TOPIC_NAME.format(serial_number)
+            for smart_scene in smart_scene_qs:
+                msg = eval(smart_scene['device_data'])
+                success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                try:
+                    assert success
+                except AssertionError:
+                    return response.json(10044)
+                time.sleep(1)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, repr(e))