|
@@ -4,10 +4,12 @@ import json
|
|
|
from abc import ABCMeta,abstractmethod
|
|
|
|
|
|
import boto3
|
|
|
+from awscrt import mqtt
|
|
|
|
|
|
from Ansjer.config import AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_CHINA_ID, AWS_IOT_SES_ACCESS_CHINA_SECRET, \
|
|
|
AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA, AWS_IOT_SES_ACCESS_FOREIGN_ID, AWS_IOT_SES_ACCESS_FOREIGN_SECRET, \
|
|
|
- AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE, AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA
|
|
|
+ AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE, AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA, AWS_IOT_SES_ACCESS_CHINA_ROLE, \
|
|
|
+ AWS_IOT_SES_ACCESS_FOREIGN_ROLE
|
|
|
|
|
|
|
|
|
class IOTObject(metaclass=ABCMeta):
|
|
@@ -30,24 +32,28 @@ class IOTClient(IOTObject):
|
|
|
aws_access_key_id=AWS_IOT_SES_ACCESS_CHINA_ID,
|
|
|
aws_secret_access_key=AWS_IOT_SES_ACCESS_CHINA_SECRET)
|
|
|
self.endpoint = 'a250bbr0p9u7as-ats.iot.cn-northwest-1.amazonaws.com.cn'
|
|
|
+ self.iotrole = AWS_IOT_SES_ACCESS_CHINA_ROLE
|
|
|
|
|
|
if region_id == 2:
|
|
|
self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA,
|
|
|
aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
|
|
|
aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
|
|
|
self.endpoint = 'a2rqy12o004ad8-ats.iot.ap-southeast-1.amazonaws.com'
|
|
|
+ self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
|
|
|
|
|
|
if region_id == 3:
|
|
|
self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA,
|
|
|
aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
|
|
|
aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
|
|
|
self.endpoint = 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
|
|
|
+ self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
|
|
|
|
|
|
if region_id == 4:
|
|
|
self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE,
|
|
|
aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
|
|
|
aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
|
|
|
self.endpoint = 'a2rqy12o004ad8-ats.iot.eu-west-1.amazonaws.com'
|
|
|
+ self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
|
|
|
|
|
|
|
|
|
|
|
@@ -151,6 +157,24 @@ class IOTClient(IOTObject):
|
|
|
templateBody=templateBody,
|
|
|
parameters=parameters
|
|
|
)
|
|
|
+
|
|
|
+ self.client.create_topic_rule(
|
|
|
+ ruleName= 'Ansjer_Device_' + serial_number+'_LWT',
|
|
|
+ topicRulePayload={
|
|
|
+ "sql": 'my/things/'+ 'Ansjer_Device_' + serial_number+'/shadow/update-lwt',
|
|
|
+ "ruleDisabled": False,
|
|
|
+ "awsIotSqlVersion": "2016-03-23",
|
|
|
+ 'actions': [
|
|
|
+ {
|
|
|
+ 'republish': {
|
|
|
+ 'roleArn': self.iotrole,
|
|
|
+ 'topic': '$$aws/things/'+ 'Ansjer_Device_' + serial_number+'/shadow/update',
|
|
|
+ 'qos': mqtt.QoS.AT_LEAST_ONCE
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ )
|
|
|
return res, parameters
|
|
|
except Exception as e:
|
|
|
print(e)
|