def greengrass_run()

in source/cf/defaults/lambdas/sputnik-simple-greengrass-device-demo-python/lambda_function.py [0:0]


def greengrass_run():

    global groupCA
    global connectivityInfoList
    global connected

    #############################################
    ## DISCOVER
    #############################################
    if connected == True:
        message = {
            'message': "Hello from IoT Device!"
        }
        myAWSIoTMQTTClient.publish("hello/world", json.dumps(message), 0)
        print("Message published")

    else:
        print("Not connected. Lets get the GroupCA")

        try:
            groupCertificateAuthoritiesList = client.list_group_certificate_authorities(GroupId=GATEWAY_GG_GROUP_ID)

            if len(groupCertificateAuthoritiesList['GroupCertificateAuthorities']) >= 1:
                print("Found {} Certificate Authorities".format(len(groupCertificateAuthoritiesList['GroupCertificateAuthorities'])))

                groupCertificateAuthorityId = groupCertificateAuthoritiesList[
                    'GroupCertificateAuthorities'][0]['GroupCertificateAuthorityId']
                print("Found Certificate Authority Id: {}".format(groupCertificateAuthorityId))

                certificateAuthority = client.get_group_certificate_authority(
                    GroupId=GATEWAY_GG_GROUP_ID, CertificateAuthorityId=groupCertificateAuthorityId)
                ca = certificateAuthority['PemEncodedCertificate']
                print("CA: {}".format(ca))

                print("Persist the connectivity/identity information...")
                if not os.path.exists(GROUP_CA_PATH):
                    os.makedirs(GROUP_CA_PATH)
                groupCAFile = open(groupCA, "w")
                groupCAFile.write(ca)
                groupCAFile.close()

                print("GroupCA persisted, lets try to connect")
                connectivityInfoList = client.get_connectivity_info(ThingName=GATEWAY)

                myAWSIoTMQTTClient.configureCredentials(groupCA, PRIVATE_KEY_PATH, CERTIFICATE_PATH)

                for connectivityInfo in connectivityInfoList['ConnectivityInfo']:
                    currentHost = connectivityInfo['HostAddress']
                    currentPort = connectivityInfo['PortNumber']
                    print("Found %s:%d" % (currentHost, currentPort))

                for connectivityInfo in connectivityInfoList['ConnectivityInfo']:  # coreInfo.connectivityInfoList:
                    currentHost = connectivityInfo['HostAddress']
                    currentPort = connectivityInfo['PortNumber']

                    print("Trying to connect to core at %s:%d" % (currentHost, currentPort))
                    myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort)

                    try:
                        myAWSIoTMQTTClient.connect()
                        connected = True
                        print("Successfully connected with %s:%d" % (currentHost, currentPort))
                        break
                    except BaseException as e:
                        print("Error in connect!")
                        print("Type: %s" % str(type(e)))
                        print("Error message: %s" % e.message)

        except BaseException as e:
            print("Error in calling the APIs and getting the data!")
            print("Type: %s" % str(type(e)))
            print("Error message: %s" % e.message)

    # Asynchronously schedule this function to be run again in 5 seconds
    Timer(10, greengrass_run).start()