def awsConfig(): """ connect to AWS """ host = "a1x0fiabery709-ats.iot.us-east-2.amazonaws.com" rootCAPath = "cert/root-CA.pem" certificatePath = "cert/4ad4027780-certificate.pem.crt" privateKeyPath = "cert/4ad4027780-private.pem.key" port = 8883 clientId = "TEST_COMM" upstream_topic = "$aws/things/cse521/shadow/message_to_iot" downstream_topic = "$aws/things/cse521/shadow/message_to_pi" # myAWSIoTMQTTClient = None myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureEndpoint(host, port) myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath) myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTClient.configureOfflinePublishQueueing(-1) myAWSIoTMQTTClient.configureDrainingFrequency(2) myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) myAWSIoTMQTTClient.configureMQTTOperationTimeout(awsSendPeriod) # 5 sec # Connect and subscribe to AWS IoT myAWSIoTMQTTClient.on_connect = on_connect myAWSIoTMQTTClient.on_message = on_message myAWSIoTMQTTClient.connect() myAWSIoTMQTTClient.subscribe(downstream_topic, 1, on_message) return myAWSIoTMQTTClient, upstream_topic
with open(privateKeyPath, "wb") as f: f.write(base64.b64decode(os.getenv("AWS_PK")) ) with open(rootCAPath, "w") as f: f.write(requests.get( "https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem").text) except Exception as e: logger = logging.getLogger('errors') print("error getting certs!!!!") logger.debug("Messenger Error: Certificate and Private Key ENV Variable Missing! %s", e) mqtt_client = AWSIoTMQTTClient(clientId) mqtt_client.configureEndpoint(host, port) mqtt_client.configureCredentials(rootCAPath, privateKeyPath, certificatePath) mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message mqtt_client.on_publish = on_publish mqtt_client.on_disconnect = on_disconnect mqtt_client.configureAutoReconnectBackoffTime(1, 32, 20) mqtt_client.configureOfflinePublishQueueing(-1) # Infinite offline Publish self.in_topicqueueing mqtt_client.configureDrainingFrequency(2) # Draining: 2 Hz mqtt_client.configureConnectDisconnectTimeout(10) # 10 sec mqtt_client.configureMQTTOperationTimeout(5) # 5 sec mqtt_client.connect() mqtt_client.subscribe("babylon/farm_out",1,on_message) while True: print("mqtt still alive!")