|
@@ -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 亚历克萨不能接受这条信息。重新发送消息最多三次,每次尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
|
|
|
'''
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|