diff --git a/AmazonRootCA1.pem b/AmazonRootCA1.pem new file mode 100644 index 0000000..61ae256 --- /dev/null +++ b/AmazonRootCA1.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/robot.py b/robot.py index 11ef170..7482ce8 100644 --- a/robot.py +++ b/robot.py @@ -23,7 +23,7 @@ class Dolphin: 'appkey': '346BDE92-53D1-4829-8A2E-B496014B586C', 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' } - + ca_file = "AmazonRootCA1.pem" login_token = '' aws_token = '' serial = '' @@ -31,6 +31,7 @@ class Dolphin: aws_key = '' aws_secret = '' awsiot_id = '' + awsiot_client = False def __init__(self): #Nothing really to do here @@ -183,14 +184,42 @@ def mapWorkType(self, work_type): return work_type - def connectIotHub(self): + def buildClient(self): + script_dir = os.path.dirname(__file__) + + ca_file_path = os.path.join(script_dir, self.ca_file) myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(self.awsiot_id, useWebsocket=True) - myAWSIoTMQTTClient.configureEndpoint(self.IOT_URL, 8883) - myAWSIoTMQTTClient.configureIAMCredentials(self.aws_key, self.aws_secret, self.aws_token) + myAWSIoTMQTTClient.configureEndpoint(self.IOT_URL, 443) + #print(ca_file_path) + myAWSIoTMQTTClient.configureCredentials(ca_file_path) + myAWSIoTMQTTClient.configureIAMCredentials(self.aws_key, self.aws_secret, self.aws_token) + myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) + myAWSIoTMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing + myAWSIoTMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz + myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) + myAWSIoTMQTTClient.configureMQTTOperationTimeout(5) + myAWSIoTMQTTClient.enableMetricsCollection() + print("Our client is setup, lets try and connect") + connected = myAWSIoTMQTTClient.connect() + if not connected: + raise ConnectionError + + self.awsiot_client = myAWSIoTMQTTClient + return True + + def subscribe(self, topic): + if not self.awsiot_client: + self.buildClient() while True: - myAWSIoTMQTTClient.subscribe("#", 1, self.customCallback) + self.awsiot_client.subscribe(topic, 1, self.customCallback) time.sleep(1) + def publish(self, topic, message): + if not self.awsiot_client: + self.buildClient() + + self.awsiot_client.publish(topic, message, 1) + def customCallback(client, userdata, message): print(client) print (userdata)