def greengrass_infinite_infer_run(): try: # certificate based connection myMQTTClient = AWSIoTMQTTClient(device_name) myMQTTClient.configureEndpoint(iot_endpoint, 8883) myMQTTClient.configureCredentials(ca, private, cert) myMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myMQTTClient.configureOfflinePublishQueueing( -1) # Infinite offline Publish queueing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec print("connect to MQTT topic...") myMQTTClient.onOnline = is_online myMQTTClient.connect(keepAliveIntervalSecond=60) myMQTTClient.publish(topic_name, '{"message": "Connected!"}', 0) print('Subscribe') myMQTTClient.subscribe(topic_name, 1, custom_callback) time.sleep(2) loopCount = 0 # always listen doInfer = True while doInfer: loopCount += 1 time.sleep(1) except Exception as e: print "crap, something failed: %s" % str(e) # for resilience: asynchronously schedule this function to be run again in 10 seconds Timer(10, greengrass_infinite_infer_run).start()
def getClient(): # For certificate based connection myMQTTClient = AWSIoTMQTTClient(AWS_CLIENT_ID) myMQTTClient.configureEndpoint(AWS_ENDPOINT, AWS_ENDPOINT_PORT) myMQTTClient.configureCredentials(AWS_ROOT_CA, AWS_PRIVATE_KEY_PATH, AWS_CERT_PATH) # myMQTTClient.configureOfflinePublishQueueing( 0) # Disable offline Publish queueing myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec # myMQTTClient.onOnline = myOnOnlineCallback myMQTTClient.offOnline = myOnOfflineCallback return myMQTTClient
def setup_client(self): if self._mqtt is None: accessKey = self._settings.get(["broker", "awsaccesskey"]) secretAccessKey = self._settings.get([ "broker", "secretawsaccesskey" ]) if (not accessKey or not secretAccessKey): return os.environ["AWS_ACCESS_KEY_ID"] = accessKey os.environ["AWS_SECRET_ACCESS_KEY"] = secretAccessKey clientId = self._settings.get(["publish", "baseTopic"]) host = self._settings.get(["broker", "url"]) port = 443 broker_tls = self._settings.get(["broker", "tls"], asdict=True) rootCAPath = broker_tls.get('ca_certs') # NOTE it's critical that the AWSIoTMQTTClient is constructed _before_ the socket is monkey patched with the default proxy, otherwise Paho (the MQTT client) just blocks when trying to connect to 127.0.0.1 myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId, useWebsocket=True) myAWSIoTMQTTClient.configureEndpoint(host, port) myAWSIoTMQTTClient.configureCredentials(rootCAPath) # AWSIoTMQTTClient connection configuration myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 3200, 20) myAWSIoTMQTTClient.configureOfflinePublishQueueing( -1 ) # Infinite offline Publish queueing myAWSIoTMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myAWSIoTMQTTClient.configureConnectDisconnectTimeout(30) # 30 seconds myAWSIoTMQTTClient.configureMQTTOperationTimeout(5) # 5 seconds myAWSIoTMQTTClient.onOffline = self._on_mqtt_disconnect myAWSIoTMQTTClient.onOnline = self._on_mqtt_connect myAWSIoTMQTTClient.onMessage = self._on_mqtt_message self._mqtt = myAWSIoTMQTTClient
def setupAWSClient(config_json): logger.debug("setting up device connection to AWS") # Init AWSIoTMQTTClient global AWSIOT_CLIENT AWSIOT_CLIENT = AWSIoTMQTTClient(config_json["awsIoT"]["clientId"]) AWSIOT_CLIENT.configureEndpoint(config_json["awsIoT"]["endpoint"], config_json["awsIoT"]["port"]) AWSIOT_CLIENT.configureCredentials( config_json["awsIoT"]["rootCACertFile"], config_json["awsIoT"]["privateKeyFile"], config_json["awsIoT"]["certificateFile"]) # AWSIoTMQTTClient connection configuration AWSIOT_CLIENT.configureAutoReconnectBackoffTime(1, 32, 20) # Infinite offline Publish queueing #AWSIOT_CLIENT.configureOfflinePublishQueueing(-1) #AWSIOT_CLIENT.configureDrainingFrequency(2) # Draining: 2 Hz AWSIOT_CLIENT.configureConnectDisconnectTimeout(10) # 10 sec AWSIOT_CLIENT.configureMQTTOperationTimeout(5) # 5 sec # track connection status AWSIOT_CLIENT.onOnline = onClientConnected AWSIOT_CLIENT.onOffline = onClientDisconnected
# define a function to be called when the MQTT client goes online def myOnOnlineCallback(): # print a message to the console print("MQTT client connected and online") # also send a MQTT message to the sensors/info topic # The payload of the message is formatted as JSON with values for # the sensor ID, the current date and time, and an information message as text myClient.publishAsync( "sensors/info", '{{"sensor":"{:s}","timestamp":"{:s}","info":"MQTT client online"}}'. format(sensor_id, get_local_timestamp()), 1) time.sleep(10) # Register the function defined above to be called when the MQTT goes online myClient.onOnline = myOnOnlineCallback def myOnOfflineCallback(): # print a message to the console print("MQTT client disconnected and offline") # also send a MQTT message to the sensors/info topic myClient.publishAsync( "sensors/info", '{{"sensor":"{:s}","timestamp":"{:s}","info":"MQTT client offline"}}'. format(sensor_id, get_local_timestamp()), 1) time.sleep(10) # Register the function defined above to be called when the MQTT goes online myClient.onOffline = myOnOfflineCallback
# Init AWSIoTMQTTClient myAWSIoTMQTTClient = None myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureEndpoint(AWS_HOST, 8883) myAWSIoTMQTTClient.configureCredentials(ROOT_CA, KEY, CERT) # AWSIoTMQTTClient connection configuration myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTClient.configureOfflinePublishQueueing( -1) # Infinite offline Publish queueing myAWSIoTMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myAWSIoTMQTTClient.configureMQTTOperationTimeout(5) # 5 sec # Connect and subscribe to AWS IoT myAWSIoTMQTTClient.onOnline = onConnect print("***** Connect *****") myAWSIoTMQTTClient.connect() if args.mode == 'both' or args.mode == 'subscribe': myAWSIoTMQTTClient.subscribe(SUBJECT, 1, customCallback) time.sleep(2) # Publish to the same topic in a loop forever loopCount = 0 while True: if args.mode == 'both' or args.mode == 'publish': message = {} message['serialNumber'] = "ABCDEFG67890" message['clickType'] = "DOUBLE" message['batteryVoltage'] = "3000 mV" messageJson = json.dumps(message)
myAWSIoTMQTTClient.configureCredentials(rootCAPath) # Set aws access key os.environ["AWS_ACCESS_KEY_ID"] = aws_access_key_id os.environ["AWS_SECRET_ACCESS_KEY"] = aws_secret_access_key # AWSIoTMQTTClient connection configuration myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTClient.configureOfflinePublishQueueing( -1) # Infinite offline Publish queueing myAWSIoTMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myAWSIoTMQTTClient.configureMQTTOperationTimeout(10) # 5 sec # AWSIoTMQTTClient onOnline and onOffline configuration myAWSIoTMQTTClient.onOnline = myOnOnlineCallback myAWSIoTMQTTClient.onOffline = myOnOfflineCallback # Create an S3 client s3 = boto3.client('s3') # BME280 sensor i2c = busio.I2C(board.SCL, board.SDA) bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c) image = 'last_picture_taken.jpg' # Start functions in threads threading.Thread(target=take_pic, args=[True], name="camera").start() threading.Thread(target=read_sensor, args=[True], name="sensor").start() # Connect and subscribe to AWS IoT
logger.info("done.") except: logging.exception("Caught Exception in on_alexa_control_message()") if __name__ == '__main__': myMQTTClient = AWSIoTMQTTClient(CLIENT_ID) myMQTTClient.configureEndpoint(AWS_IOT_ENDPOINT, 8883) myMQTTClient.configureCredentials(ROOT_CA_CERT, DEV_CERT_PRIV, DEV_CERT) myMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myMQTTClient.configureOfflinePublishQueueing(-1) myMQTTClient.configureDrainingFrequency(2) myMQTTClient.configureConnectDisconnectTimeout(10) myMQTTClient.configureMQTTOperationTimeout(5) myMQTTClient.onOnline = on_online myMQTTClient.onOffline = on_offline myMQTTClient.connect() time.sleep(2) logger.info("connexted to {} as {}".format(AWS_IOT_ENDPOINT, CLIENT_ID)) myMQTTClient.subscribe(SUBSCRIPTION_TOPIC, 1, on_alexa_control_message) logger.info("subscribed topic: {}".format(SUBSCRIPTION_TOPIC)) while True: time.sleep(1)
#-------------------- MQTT setup --------------------- endpoint = 'endpoint...' topic = 'testTopic/testClient' qos = 1 myMQTTClinet = AWSIoTMQTTClient('testClient') myMQTTClinet.disableMetricsCollection() myMQTTClinet.configureEndpoint(endpoint, 8883) myMQTTClinet.configureCredentials('cert/rootCA.pem', 'cert/priv.pem.key', 'cert/cert.pem.crt') myMQTTClinet.configureAutoReconnectBackoffTime(15, 180, 30) myMQTTClinet.configureOfflinePublishQueueing(-1) myMQTTClinet.configureConnectDisconnectTimeout(10) myMQTTClinet.configureDrainingFrequency(1) myMQTTClinet.configureMQTTOperationTimeout(5) myMQTTClinet.onOnline = _onOnline myMQTTClinet.onOffline = _onOffline #-------------------- Other setup ------------------- #logging.getLogger("AWSIoTPythonSDK.core").setLevel("DEBUG") #logging.getLogger("AWSIoTPythonSDK.core").addHandler(logging.StreamHandler()) totalMsgToSend = 20 #-------------------- Main code ---------------------- message = 'message number (from 100): {}' #for have a message number different from the id generated when publish if mqttConnect(): for i in range(100, (100 + totalMsgToSend)): sendMsg(message.format(i)) time.sleep(20)
myMQTTClient.configureCredentials( "/home/pi/Projects/DAB/root.CA", "/home/pi/Projects/DAB/27bf00e25e-private.pem.key", "/home/pi/Projects/DAB/27bf00e25e-certificate.pem.crt") myMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) myMQTTClient.configureOfflinePublishQueueing( -1) # Infinite offline Publish queueing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec myMQTTClient.configureConnectDisconnectTimeout(10) myMQTTClient.configureMQTTOperationTimeout(10) #myMQTTClient.mqttCommandTimeout_ms = 10000; #myMQTTClient.tlsHandshakeTimeout_ms = 10000; print('Connect') myMQTTClient.onOnline = isOnline myMQTTClient.connect(keepAliveIntervalSecond=60) print('Publish') myMQTTClient.publish("thing/FlightInfoBerry", "myPayload", 0) print('Subscribe') myMQTTClient.subscribe("thing/FlightInfoBerry", 1, customCallback) time.sleep(4) myMQTTClient.unsubscribe("thing/FlightInfoBerry") print('Disconnect') myMQTTClient.disconnect()