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()