|
@@ -42,7 +42,7 @@ class IotCoreView(View):
|
|
|
if operation == 'createKeysAndCertificate':
|
|
|
return self.create_keys_and_certificate(request_dict, response, request)
|
|
|
elif operation == 'requestPublishMessage':
|
|
|
- return self.request_publish_message(request_dict, response, request)
|
|
|
+ return self.request_publish_message(request_dict, response)
|
|
|
elif operation == 'getS3PullKey':
|
|
|
return self.get_s3_pull_key(request_dict, response, request)
|
|
|
elif operation == 'thingRegroup':
|
|
@@ -244,8 +244,9 @@ class IotCoreView(View):
|
|
|
else:
|
|
|
return response.json(444)
|
|
|
|
|
|
- def request_publish_message(self, request_dict, response, request):
|
|
|
- # Alexa请求IoT Core下发MQTT消息通知设备开始或停止推流,或唤醒设备
|
|
|
+ # Alexa请求IoT Core下发MQTT消息通知设备开始或停止推流,或唤醒设备
|
|
|
+ @staticmethod
|
|
|
+ def request_publish_message(request_dict, response):
|
|
|
UID = request_dict.get('UID', None)
|
|
|
rtsp = request_dict.get('rtsp', None)
|
|
|
enable = request_dict.get('enable', '1')
|
|
@@ -253,51 +254,18 @@ class IotCoreView(View):
|
|
|
return response.json(444)
|
|
|
|
|
|
try:
|
|
|
- # 获取设备的物品名后缀
|
|
|
- device_info_qs = Device_Info.objects.filter(UID=UID).values('UID', 'serial_number')
|
|
|
- if not device_info_qs.exists():
|
|
|
- return response.json(10043)
|
|
|
- uid = device_info_qs[0]['UID']
|
|
|
- serial_number = device_info_qs[0]['serial_number']
|
|
|
- # 如果device_info表的serial_number不为空,物品名为'Ansjer_Device_序列号'
|
|
|
- thing_name_suffix = serial_number if serial_number != '' else uid
|
|
|
- # 获取数据组织将要请求的url
|
|
|
- iot = iotdeviceInfoModel.objects.filter(thing_name__contains=thing_name_suffix).values('thing_name',
|
|
|
- 'endpoint',
|
|
|
- 'token_iot_number')
|
|
|
- if not iot.exists():
|
|
|
- return response.json(10043)
|
|
|
- thing_name = iot[0]['thing_name'][14:] # IoT core上的物品名: Ansjer_Device_ + 序列号+企业编码/uid
|
|
|
- endpoint = iot[0]['endpoint']
|
|
|
- Token = iot[0]['token_iot_number']
|
|
|
- # Token = '297a601b3925e04daab5a60280650e09'
|
|
|
- topic_name = 'ansjer/generic/' + thing_name # MQTT主题名
|
|
|
-
|
|
|
- # api doc: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/http.html
|
|
|
- # url: https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
|
|
|
- # post请求url来发布MQTT消息
|
|
|
- url = 'https://{}/topics/{}'.format(endpoint, topic_name)
|
|
|
- authorizer_name = 'Ansjer_Iot_Auth'
|
|
|
- signature = CommonService.rsa_sign(Token) # Token签名
|
|
|
- headers = {'x-amz-customauthorizer-name': authorizer_name, 'Token': Token,
|
|
|
- 'x-amz-customauthorizer-signature': signature}
|
|
|
- params = OrderedDict(
|
|
|
+ thing_name = CommonService.query_serial_with_uid(UID) # 存在序列号则为使用序列号作为物品名
|
|
|
+ topic_name = 'ansjer/generic/{}'.format(thing_name)
|
|
|
+ msg = OrderedDict(
|
|
|
[
|
|
|
('alexaRtspCommand', rtsp),
|
|
|
('enable', int(enable)),
|
|
|
]
|
|
|
)
|
|
|
- r = requests.post(url=url, headers=headers, json=params, timeout=2)
|
|
|
- if r.status_code == 200:
|
|
|
- res = r.json()
|
|
|
- if res['message'] == 'OK':
|
|
|
- return response.json(0)
|
|
|
- return response.json(10044)
|
|
|
- else:
|
|
|
- # print('发布失败')
|
|
|
+ if not CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg):
|
|
|
return response.json(10044)
|
|
|
+ return response.json(0)
|
|
|
except Exception as e:
|
|
|
- # print(e)
|
|
|
return response.json(500, repr(e))
|
|
|
|
|
|
def get_s3_pull_key(self, request_dict, response, request):
|