Prechádzať zdrojové kódy

alexa删除和更新设备主动上报

peng 2 rokov pred
rodič
commit
a99d0e896d
2 zmenil súbory, kde vykonal 249 pridanie a 82 odobranie
  1. 246 79
      controller/deviceStatus.py
  2. 3 3
      controller/index.py

+ 246 - 79
controller/deviceStatus.py

@@ -24,11 +24,9 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from azoauth.config import *
 
-
-
-
 rtspServer = "rtsp.zositech.com,3.16.66.144"
 
+
 class deviceStatus(TemplateView):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -56,13 +54,16 @@ class deviceStatus(TemplateView):
             return self.addOrUpdate(request_dict, response)
         if operation == 'addOrUpdateV2':
             return self.addOrUpdateV2(request_dict)
+        if operation == 'addOrUpdateSwitch':
+            return self.addOrUpdateSwitch(request_dict)
         if operation == 'delete':
             return self.delete(request_dict)
         if operation == 'stopPush':
             return self.notifiesDeviceStopPush(request_dict, response)
         if operation == 'stateReport':
             return self.StateReport(request_dict)
-
+        if operation == 'deleteSwitch':
+            return self.deleteSwitch(request_dict)
 
     def saveAccessToken(self, request_dict):
         token = request_dict.get("token", '')
@@ -74,14 +75,13 @@ class deviceStatus(TemplateView):
         logger = logging.getLogger('django')
         logger.info('--------认证登录,地区: {}, skill: {}--------'.format(alexa_region, skill_name))
 
-        alexAuth = AlexaAuthModel.objects.filter(token=token)
+        alexAuth = AlexaAuthModel.objects.filter(token=token, skill_name=skill_name)
         nowTime = int(time.time())
         if not alexAuth.exists():
             AlexaAuthModel.objects.create(
                 token=token,
                 addTime=nowTime,
                 updTime=nowTime,
-                skill_name=skill_name,
                 alexa_region=alexa_region,
                 access_token=access_token,
                 refresh_token=refresh_token,
@@ -91,7 +91,6 @@ class deviceStatus(TemplateView):
             alexAuth.update(
                 token=token,
                 updTime=nowTime,
-                skill_name=skill_name,
                 alexa_region=alexa_region,
                 access_token=access_token,
                 refresh_token=refresh_token,
@@ -99,14 +98,14 @@ class deviceStatus(TemplateView):
             )
         return JsonResponse({'code': 200, 'msg': 'success'})
 
-    def getAccessToken(self,request_dict, response):
+    def getAccessToken(self, request_dict, response):
         logger = logging.getLogger('django')
         logger.info('-------------getAccessToken')
         # logger.info(request_dict)
-        return JsonResponse({'code':200,'msg':'success'})
+        return JsonResponse({'code': 200, 'msg': 'success'})
 
     # 向alex事件网关发送更新设备操作,已改成V2接口,后期可删掉
-    def addOrUpdate(self,request_dict, response):
+    def addOrUpdate(self, request_dict, response):
         logger = logging.getLogger('django')
         logger.info('in__________________________first')
 
@@ -116,7 +115,7 @@ class deviceStatus(TemplateView):
         encrypt_pwd = request_dict.get("password", '')
         region = request_dict.get("region", 'EN')
         if UID == '' or userID == '' or uid_nick == '' or encrypt_pwd == '':
-            return JsonResponse({'code':101,'msg':'fail'})
+            return JsonResponse({'code': 101, 'msg': 'fail'})
 
         commonService = CommonService()
         password = commonService.decode_pwd(encrypt_pwd)
@@ -124,7 +123,7 @@ class deviceStatus(TemplateView):
         if not alexAuth.exists():
             logger.info('not found user')
             logger.info(UID)
-            return JsonResponse({'code':102,'msg':'not found user'})
+            return JsonResponse({'code': 102, 'msg': 'not found user'})
         info = alexAuth.values()
         expiresTime = info[0]['expiresTime']
         now_time = int(time.time())
@@ -136,19 +135,19 @@ class deviceStatus(TemplateView):
             logger.info(refresh_token)
             res = self.getRefreshToken(refresh_token)
             logger.info(res)
-            if('error' not in res):
+            if ('error' not in res):
                 alexAuth.update(
-                    access_token = res['access_token'],
-                    refresh_token = res['refresh_token'],
-                    expiresTime = now_time + 3000,
-                    updTime = now_time,
+                    access_token=res['access_token'],
+                    refresh_token=res['refresh_token'],
+                    expiresTime=now_time + 3000,
+                    updTime=now_time,
                 )
                 access_token = res['access_token']
             else:
                 logger.info('get refresh_token fail')
-                return JsonResponse({'code':102,'msg':'get refresh_token fail'})
+                return JsonResponse({'code': 102, 'msg': 'get refresh_token fail'})
 
-        #添加rtsp记录
+        # 添加rtsp记录
         rtko = tkObject(rank=1)
         rtsp_url = rtko.encrypt(data=UID)
         try:
@@ -215,7 +214,7 @@ class deviceStatus(TemplateView):
         response = requests.post(api_uri, json=payload_json, headers=headers)
         logger.info('--------addOrUpdate_response')
         logger.info(response)
-        return JsonResponse({'res':'success'})
+        return JsonResponse({'res': 'success'})
 
     # 向alexa事件网关发送更新设备操作V2接口
     def addOrUpdateV2(self, request_dict):
@@ -225,8 +224,8 @@ class deviceStatus(TemplateView):
         region = request_dict.get("region", 'EN')
         data_list = request_dict.get("data_list", '')
         logger.info('data_list: {}'.format(data_list))
-        data_list = json.loads(data_list)   # 多通道设备才传 channel 键值对
-
+        data_list = json.loads(data_list)  # 多通道设备才传 channel 键值对
+        skill_name = 'zosi smart'
         if not data_list:
             return JsonResponse({'code': 101, 'msg': 'Parameter error'})
 
@@ -237,13 +236,12 @@ class deviceStatus(TemplateView):
             password = CommonService().decode_pwd(password)
 
             # 获取alexa授权信息
-            alexAuth = AlexaAuthModel.objects.filter(userID=userID).\
-                values('expiresTime', 'access_token', 'refresh_token', 'alexa_region', 'skill_name')
+            alexAuth = AlexaAuthModel.objects.filter(userID=userID, skill_name=skill_name). \
+                values('expiresTime', 'access_token', 'refresh_token', 'alexa_region')
             if not alexAuth.exists():
                 logger.info('UID为 {} 的用户不存在'.format(UID))
                 return JsonResponse({'code': 102, 'msg': 'not found user'})
 
-            skill_name = alexAuth[0]['skill_name']
             expiresTime = alexAuth[0]['expiresTime']
             access_token = alexAuth[0]['access_token']
             refresh_token = alexAuth[0]['refresh_token']
@@ -271,15 +269,16 @@ class deviceStatus(TemplateView):
                     return JsonResponse({'code': 102, 'msg': 'get refresh_token fail'})
 
             # 添加rtsp记录
-            channel = len(data_list)    # 列表的元素个数即通道数量
+            channel = len(data_list)  # 列表的元素个数即通道数量
             rtsp_url = tkObject(rank=1).encrypt(data=UID)
             uid_rtsp_qs = UidRtspModel.objects.filter(uid__contains=UID)
             if not uid_rtsp_qs.exists():
                 # 创建UidRtsp数据
                 if channel == 1:
                     # 单通道设备
-                    UidRtspModel.objects.create(uid=UID, nick=data_list[0]['uid_nick'], region=region, rtsp_url=rtsp_url,
-                                               password=password, addTime=now_time, updTime=now_time)
+                    UidRtspModel.objects.create(uid=UID, nick=data_list[0]['uid_nick'], region=region,
+                                                rtsp_url=rtsp_url,
+                                                password=password, addTime=now_time, updTime=now_time)
                 else:
                     # 多通道设备
                     bulk = []
@@ -299,8 +298,9 @@ class deviceStatus(TemplateView):
                 else:
                     # 多通道设备
                     for data in data_list:
-                        uid = UID + '_' + str(data['channel'])   # 多通道设备: uid_通道号
-                        UidRtspModel.objects.filter(uid=uid).update(nick=data['uid_nick'], region=region, password=password)
+                        uid = UID + '_' + str(data['channel'])  # 多通道设备: uid_通道号
+                        UidRtspModel.objects.filter(uid=uid).update(nick=data['uid_nick'], region=region,
+                                                                    password=password)
 
             api_uri = ALEXA_EVENT_API[alexa_region]
             messageId = str(uuid.uuid4()).strip()
@@ -331,7 +331,131 @@ class deviceStatus(TemplateView):
         except Exception as e:
             logger.info('--------添加/更新设备信息V2异常--------: {}'.format(repr(e)))
 
-    # 向alexa事件网关发送更新设备操作V2接口
+    # 向alexa事件网关发送更新设备操作接口
+    def addOrUpdateSwitch(self, request_dict):
+        logger = logging.getLogger('django')
+        logger.info('--------添加/更新插座信息--------')
+
+        region = request_dict.get("region", 'EN')
+        nick_name = request_dict.get("nick_name", '')
+        serial_number = request_dict.get("serial_number", '')
+        user_id = request_dict.get("user_id", '')
+        logger.info('region: {}, nick_name: {}, serial_number: {}, user_id: {}'.format(region, nick_name, serial_number,
+                                                                                       user_id))
+        skill_name = 'loocam'
+        if not all([nick_name, serial_number, user_id]):
+            return JsonResponse({'code': 101, 'msg': 'Parameter error'})
+
+        try:
+            # 获取alexa授权信息
+            alexAuth = AlexaAuthModel.objects.filter(userID=user_id, skill_name=skill_name). \
+                values('expiresTime', 'access_token', 'refresh_token', 'alexa_region')
+            if not alexAuth.exists():
+                logger.info('serial_number {} 的用户不存在'.format(serial_number))
+                return JsonResponse({'code': 102, 'msg': 'not found user'})
+
+            expiresTime = alexAuth[0]['expiresTime']
+            access_token = alexAuth[0]['access_token']
+            refresh_token = alexAuth[0]['refresh_token']
+            alexa_region = alexAuth[0]['alexa_region']
+            if alexa_region not in ALEXA_EVENT_API.keys():
+                logger.info('alexa区域信息错误,alexa_region: {}'.format(alexa_region))
+                return JsonResponse({'code': 102, 'msg': 'alexa_region error'})
+
+            # 更新alexa token
+            now_time = int(time.time())
+            if now_time > expiresTime:
+                logger.info(refresh_token)
+                res = self.getRefreshToken(refresh_token, skill_name)
+                logger.info(res)
+                if 'error' not in res:
+                    alexAuth.update(
+                        updTime=now_time,
+                        expiresTime=now_time + 3000,
+                        access_token=res['access_token'],
+                        refresh_token=res['refresh_token'],
+                    )
+                    access_token = res['access_token']
+                else:
+                    logger.info('get refresh_token fail')
+                    return JsonResponse({'code': 102, 'msg': 'get refresh_token fail'})
+
+            # 添加rtsp记录
+            switch_qs = SwitchModel.objects.filter(serial_number=serial_number, userID=user_id)
+            if not switch_qs.exists():
+                switch_qs.update(region=region, nick=nick_name, updTime=now_time)
+            else:
+                data = {
+                    'nick': nick_name,
+                    'serial_number': serial_number,
+                    'userID': user_id,
+                    'region': region,
+                    'addTime': now_time,
+                    'updTime': now_time,
+
+                }
+                SwitchModel.objects.create(**data)
+
+            api_uri = ALEXA_EVENT_API[alexa_region]
+            messageId = str(uuid.uuid4()).strip()
+            bearer_access_token = "Bearer {access_token}".format(access_token=access_token)
+            headers = {"content-type": "application/json", "Authorization": bearer_access_token}
+            endpoints = [{
+                "endpointId": serial_number,
+                "manufacturerName": skill_name,
+                "friendlyName": nick_name,
+                "description": 'Plug connected via {}'.format(skill_name),
+                "displayCategories": ['SMARTPLUG'],
+                "cookie": {},
+                "capabilities": [
+                    {
+                        "type": 'AlexaInterface',
+                        "interface": 'Alexa.PowerController',
+                        "version": '3',
+                        "properties": {
+                            "supported": [
+                                {
+                                    "name": "powerState"
+                                }
+                            ],
+                            "proactivelyReported": True,
+                            "retrievable": True
+                        },
+                    },
+                    {
+                        "type": 'AlexaInterface',
+                        "interface": 'Alexa',
+                        "version": '3'
+                    }
+                ]
+            }]
+            payload_json = {
+                "event": {
+                    "header": {
+                        "namespace": "Alexa.Discovery",
+                        "name": "AddOrUpdateReport",
+                        "payloadVersion": "3",
+                        "messageId": messageId,
+                    },
+                    "payload": {
+                        "endpoints": endpoints,
+                        "scope": {
+                            "type": "BearerToken",
+                            "token": 'sdf',
+                        },
+                    },
+                }
+            }
+
+            response = requests.post(api_uri, json=payload_json, headers=headers)
+            logger.info('--------Alexa AddOrUpdateReport响应: {}--------'.format(response))
+            return JsonResponse({'res': 'success'})
+        except Exception as e:
+            logger.info('--------添加/更新插座信息异常--------: {}'.format(repr(e)))
+            return JsonResponse({'res': 'error'})
+
+
+    # 向alexa事件网关发送插座状态操作接口
     def StateReport(self, request_dict):
         logger = logging.getLogger('django')
         logger.info('--------alexa智能插座状态上报--------')
@@ -347,7 +471,6 @@ class deviceStatus(TemplateView):
         if not user_qs.exists():
             return response.json(10, res={'msg': '用户数据不存在'})
         user_id = user_qs.first().userID
-        now_time = int(time.time())
         try:
             auth_request_url = '{}/api/loocam/open/socket/getSocketState'.format(SERVER_PREFIX)
             requests_data = {'serial_number': serial_number, 'alexa_user_id': user_id}
@@ -365,22 +488,7 @@ class deviceStatus(TemplateView):
             logger.info('服务器响应: {}'.format(res_json))
             if res_json['result_code'] != 0:
                 return response.json(10, res={'msg': 'error'})
-            nick_name = res_json['result']['nick_name']
             power_state = res_json['result']['power_state']
-            region = res_json['result']['region']
-            switch_qs = SwitchModel.objects.filter(serial_number=serial_number, userID=user_id)
-            if switch_qs.exists():
-                switch_qs.update(nick=nick_name, updTime=now_time, region=region)
-            else:
-                switch = {
-                    'nick': nick_name,
-                    'serial_number': serial_number,
-                    'userID': user_id,
-                    'addTime': now_time,
-                    'updTime': now_time,
-
-                }
-                SwitchModel.objects.create(**switch)
             if power_state:
                 res = {'state': 'ON'}
             else:
@@ -390,12 +498,11 @@ class deviceStatus(TemplateView):
             logger.info('--------上传插座状态异常--------: {}'.format(repr(e)))
             return response.json(10, res={'msg': '上报状态异常'})
 
-
     def append_endpoint(self, data_list, channel):
         # 组织 endpoints 数据
         endpoints = []
         for data in data_list:
-            endpointId = data['UID'] if channel == 1 else data['UID']+'_'+str(data['channel'])
+            endpointId = data['UID'] if channel == 1 else data['UID'] + '_' + str(data['channel'])
             endpoint = {
                 "endpointId": endpointId,
                 "manufacturerName": "zosi smart",
@@ -432,10 +539,10 @@ class deviceStatus(TemplateView):
         logger.info('userID: {}, UID: {}'.format(userID, UID))
         if not all([UID, userID]):
             return JsonResponse({'code': 111, 'msg': 'fail'})
-
+        skill_name = 'zosi smart'
         try:
-            alexAuth = AlexaAuthModel.objects.filter(userID=userID).\
-                values('expiresTime', 'refresh_token', 'access_token', 'alexa_region', 'skill_name')
+            alexAuth = AlexaAuthModel.objects.filter(userID=userID, skill_name=skill_name). \
+                values('expiresTime', 'refresh_token', 'access_token', 'alexa_region')
             if not alexAuth.exists():
                 logger.info('UID为 {} 的用户不存在'.format(UID))
                 return JsonResponse({'code': 102, 'msg': 'not found user'})
@@ -503,6 +610,84 @@ class deviceStatus(TemplateView):
         except Exception as e:
             logger.info('--------删除设备异常--------: {}'.format(repr(e)))
 
+    # 向alexa事件网关发送删除插座操作
+    def deleteSwitch(self, request_dict):
+        serial_number = request_dict.get("serial_number", '')
+        logger = logging.getLogger('django')
+        logger.info('--------删除设备--------')
+        logger.info('serial_number: {}'.format(serial_number))
+        if not all([serial_number]):
+            return JsonResponse({'code': 111, 'msg': '参数异常'})
+        skill_name = 'loocam'
+        try:
+            switch_qs = SwitchModel.objects.filter(serial_number=serial_number).values('serial_number', 'userID')
+            if not switch_qs.exists():
+                return JsonResponse({'code': 103, 'msg': '不存在socket数据'})
+            userID = switch_qs[0]['userID']
+            alexAuth = AlexaAuthModel.objects.filter(userID=userID, skill_name=skill_name). \
+                values('expiresTime', 'refresh_token', 'access_token', 'alexa_region')
+            if not alexAuth.exists():
+                logger.info('序列号为 {} 的用户不存在'.format(serial_number))
+                return JsonResponse({'code': 102, 'msg': 'not found user'})
+
+            expiresTime = alexAuth[0]['expiresTime']
+            refresh_token = alexAuth[0]['refresh_token']
+            access_token = alexAuth[0]['access_token']
+            alexa_region = alexAuth[0]['alexa_region']
+            if alexa_region not in ALEXA_EVENT_API.keys():
+                logger.info('alexa区域信息错误,alexa_region: {}'.format(alexa_region))
+                return JsonResponse({'code': 102, 'msg': 'alexa_region error'})
+
+            now_time = int(time.time())
+            if now_time > expiresTime:
+                res = self.getRefreshToken(refresh_token, skill_name)
+                if 'error' not in res:
+                    alexAuth.update(
+                        access_token=res['access_token'],
+                        refresh_token=res['refresh_token'],
+                        expiresTime=now_time + 300,
+                        updTime=now_time,
+                    )
+                    access_token = res['access_token']
+                else:
+                    return JsonResponse({'code': 102, 'msg': 'get refresh_token fail'})
+
+            endpoints = []
+            for switch in switch_qs:
+                endpointId = {"endpointId": switch['serial_number']}
+                endpoints.append(endpointId)
+            switch_qs.delete()
+            headers = {
+                "Authorization": "Bearer " + access_token,
+                "Content-Type": "application/json;charset=UTF-8",
+                "Cache-Control": "no-cache"
+            }
+
+            payload = {
+                "event": {
+                    "header": {
+                        "namespace": "Alexa.Discovery",
+                        "name": "DeleteReport",
+                        "messageId": str(uuid.uuid4()),
+                        "payloadVersion": "3"
+                    },
+                    "payload": {
+                        "endpoints": endpoints,
+                        "scope": {
+                            "type": "BearerToken",
+                            "token": access_token
+                        }
+                    }
+                }
+            }
+
+            api_uri = ALEXA_EVENT_API[alexa_region]
+            response = requests.post(api_uri, json=payload, headers=headers)
+            logger.info('--------Alexa DeleteReport响应: {}--------'.format(response))
+            return JsonResponse({'res': 'success'})
+        except Exception as e:
+            logger.info('--------删除设备异常--------: {}'.format(repr(e)))
+            return JsonResponse({'res': 'error'})
 
     def getRefreshToken(self, refresh_token, skill_name):
         # 请求更新token
@@ -529,8 +714,7 @@ class deviceStatus(TemplateView):
         request_json = res.json()
         return request_json
 
-
-    def notifiesDeviceStopPush(self,request_dict, response):
+    def notifiesDeviceStopPush(self, request_dict, response):
         play_url = "http://rtsp.zositech.com:10008/api/v1/players"
         push_url = "http://rtsp.zositech.com:10008/api/v1/pushers"
         try:
@@ -543,22 +727,22 @@ class deviceStatus(TemplateView):
             return response.json(103, res='query fail')
         else:
             # response.json(103, res=list(qplay))
-            #正在拉流的ID
+            # 正在拉流的ID
             # play_rows = qplay['rows']
             # play_paths = []
             # for val in play_rows:
             #     play_paths.append(val['path'])
 
-            #正在推流的ID
+            # 正在推流的ID
             push_rows = qpush['rows']
             push_paths = []
             for val in push_rows:
                 startAt = self.str_to_timestamp(val['startAt'])
                 run_time = int(time.time()) - int(startAt)
-                if run_time > 10*60:
+                if run_time > 10 * 60:
                     push_paths.append(val['path'])
             send_flag = False
-            #正在推流但是没有拉流的推流通知设备断掉
+            # 正在推流但是没有拉流的推流通知设备断掉
             # for push_path in push_paths:
             #     if push_path not in play_paths:
             #         path_list = push_path.split('/')
@@ -574,7 +758,7 @@ class deviceStatus(TemplateView):
             success = 0
             for push_path in push_paths:
                 path_list = push_path.split('/')
-                has_rtsp_url = UidRtspModel.objects.filter(rtsp_url=path_list[-1]).values('uid','password')
+                has_rtsp_url = UidRtspModel.objects.filter(rtsp_url=path_list[-1]).values('uid', 'password')
                 # has_rtsp_url = UidRtspModel.objects.filter(rtsp_url='RFJrWk9OVVJPUVRnM1IxaFNXazFFUXpFeE1VRT1U').values('uid')
                 if has_rtsp_url.exists():
                     send_flag = self.runSendStop(has_rtsp_url[0]['uid'], has_rtsp_url[0]['password'], push_path)
@@ -582,7 +766,7 @@ class deviceStatus(TemplateView):
                         success += 1
             return JsonResponse({'successStopNum': success})
 
-    #把格式化时间转换成时间戳
+    # 把格式化时间转换成时间戳
     def str_to_timestamp(self, str_time=None, format='%Y-%m-%d %H:%M:%S'):
         if str_time:
             time_tuple = time.strptime(str_time, format)  # 把格式化好的时间转换成元祖
@@ -602,7 +786,7 @@ class deviceStatus(TemplateView):
     #     utc_dt = local_dt.astimezone(pytz.utc)                              #astimezone切换时区
     #     return utc_dt.strftime(utc_format)                                  #返回世界时间格式
 
-    #触发此方法,让摄像头推流到MSG流地址
+    # 触发此方法,让摄像头推流到MSG流地址
     def runSendStop(self, UID, PWD, MSG):
 
         command = "./pushtool {UID} {PWD} {MSG} 0".format(UID=UID, PWD=PWD, MSG=MSG)
@@ -617,16 +801,7 @@ class deviceStatus(TemplateView):
             return False
 
 
-
-
-
-
-
-
-
-
-
-#请求alexa事件网关接口失败错误码
+# 请求alexa事件网关接口失败错误码
 '''
 400 Bad Request	INVALID_REQUEST_EXCEPTION	消息无效,可能是因为缺少字段、不正确的值或格式错误的 JSON。根据文档检查邮件以验证邮件是否包含所有必需的字段。
 401 Unauthorized	INVALID_ACCESS_TOKEN_EXCEPTION	访问令牌无效,因为它已过期或格式错误。刷新令牌并重试请求。如果用户禁用您的技能,这也会使访问令牌失效。这意味着用户已吊销授权,您可以停止为他们发送更改报告。
@@ -638,11 +813,3 @@ class deviceStatus(TemplateView):
 500 Internal Server Error	INTERNAL_SERVICE_EXCEPTION	Alexa 发生错误,无法处理该消息。重新发送消息最多三次,每次发送尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
 503 Service Unavailable	SERVICE_UNAVAILABLE_EXCEPTION	亚历克萨不能接受这条信息。重新发送消息最多三次,每次尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
 '''
-
-
-
-
-
-
-
-

+ 3 - 3
controller/index.py

@@ -441,7 +441,7 @@ class oa2DiscoveryDevice(TemplateView):
         logger.info('userID: {}'.format(userID))
 
         # 更新事件网关接口
-        alexAuth = AlexaAuthModel.objects.filter(token=access_token).order_by('-addTime')
+        alexAuth = AlexaAuthModel.objects.filter(token=access_token, skill_name=skill_name).order_by('-addTime')
         if alexAuth.exists():
             auth_res = alexAuth.values()
             event_access_token = auth_res[0]['access_token']
@@ -569,7 +569,7 @@ class oa2DiscoverySwitch(TemplateView):
         logger.info('userID: {}'.format(userID))
 
         # 更新事件网关接口
-        alexAuth = AlexaAuthModel.objects.filter(token=access_token).order_by('-addTime')
+        alexAuth = AlexaAuthModel.objects.filter(token=access_token, skill_name=skill_name).order_by('-addTime')
         if alexAuth.exists():
             auth_res = alexAuth.values()
             event_access_token = auth_res[0]['access_token']
@@ -630,7 +630,7 @@ class oa2DiscoverySwitch(TemplateView):
                 'endpointId': serial_number,
                 'friendlyName': nick,
                 'manufacturerName': skill_name,
-                'description': 'Camera connected via {}'.format(skill_name),
+                'description': 'Plug connected via {}'.format(skill_name),
                 'modelName': 'P1425-LE',
                 'manufacturerId': 'zosi-ACCC8E5E7513',
             }