예제 #1
0
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()
예제 #2
0
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
예제 #3
0
    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
예제 #4
0
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
예제 #5
0
# 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
예제 #6
0
# 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)
예제 #7
0
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
예제 #8
0
        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)
예제 #10
0
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()