Integrating Multiple Grove Sensors with an IoT Service

Here is the Temperature & Humidity Sensor Pro integrated with AWS IoT:

indent preformatted text by 4 spaces

import time
import seeed_dht
import json
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient

# thingName = 'TemperatureHumidity'
# clientId = 'TemperatureHumidity'
# endpoint = 'a3pujgfo1m12iq-ats.iot.us-west-2.amazonaws.com'
# rootCA = '/home/pi/Seeed_Python_DHT/examples/certs/AmazonRootCA1.pem'
# cert = '/home/pi/Seeed_Python_DHT/examples/certs/fef6b4edde-certificate.pem.crt'
# key = '/home/pi/Seeed_Python_DHT/examples/certs/fef6b4edde-private.pem.key'
# port = 8883

thingName = 'RaspberryPi001'
clientId = 'RaspberryPi002'
endpoint = 'a3pujgfo1m12iq-ats.iot.us-west-2.amazonaws.com'
rootCA = '/home/pi/Seeed_Python_DHT/examples/certs/AmazonRootCA1.pem'
cert = '/home/pi/Seeed_Python_DHT/examples/certs/96c23c7d37-certificate.pem.crt'
key = '/home/pi/Seeed_Python_DHT/examples/certs/96c23c7d37-private.pem.key'
port = 8883



   def main():

    # for DHT11/DHT22
    sensor = seeed_dht.DHT("22", 12)
    # for DHT10
    # sensor = seeed_dht.DHT("10")

    while True:
        humi, temp = sensor.read()
       if not humi is None:
            print('DHT{0}, humidity {1:.1f}%, temperature {2:.1f}*'.format(sensor.dht_type, humi, temp))
       else:
            print('DHT{0}, humidity & temperature: {1}'.format(sensor.dht_type, temp))

        # Create message payload
        payload = {"state":{"reported":{"humidity":int(humi),"temperature":int(temp)}}}
        # Update shadow
        deviceShadowHandler.shadowUpdate(json.dumps(payload), customShadowCallback_Update, 5)
        time.sleep(10)

# Function called when a shadow is updated
def customShadowCallback_Update(payload, responseStatus, token):

    # Display status and data from update request
   if responseStatus == "timeout":
        print("Update request " + token + " time out!")

    if responseStatus == "accepted":
        payloadDict = json.loads(payload)
        print("~~~~~~~~~~~~~~~~~~~~~~~")
        print("Update request with token: " + token + " accepted!")
        print("moisture: " + str(payloadDict["state"]["reported"]["humidity"]))
        print("temperature: " + str(payloadDict["state"]["reported"]["temperature"]))
        print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")

    if responseStatus == "rejected":
         print("Update request " + token + " rejected!")

# Function called when a shadow is deleted
def customShadowCallback_Delete(payload, responseStatus, token):

     # Display status and data from delete request
    if responseStatus == "timeout":
        print("Delete request " + token + " time out!")

    if responseStatus == "accepted":
        print("~~~~~~~~~~~~~~~~~~~~~~~")
        print("Delete request with token: " + token + " accepted!")
        print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")

    if responseStatus == "rejected":
        print("Delete request " + token + " rejected!")

# Configure logging
# AWSIoTMQTTShadowClient writes data to the log
def configureLogging():

    logger = logging.getLogger("AWSIoTPythonSDK.core")
    logger.setLevel(logging.DEBUG)
    streamHandler = logging.StreamHandler()
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    streamHandler.setFormatter(formatter)
    logger.addHandler(streamHandler)

# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = None
myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient(clientId)
myAWSIoTMQTTShadowClient.configureEndpoint(endpoint, port)
myAWSIoTMQTTShadowClient.configureCredentials(rootCA, key, cert)

# AWSIoTMQTTShadowClient connection configuration
myAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime(1, 32, 20)
myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10) # 10 sec
myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec

# Connect to AWS IoT
myAWSIoTMQTTShadowClient.connect()

# Create a device shadow handler, use this to update and delete shadow document
deviceShadowHandler = 
myAWSIoTMQTTShadowClient.createShadowHandlerWithName(thingName, True)

# Delete current shadow JSON doc
# deviceShadowHandler.shadowDelete(customShadowCallback_Delete, 5)



   if __name__ == '__main__':
        main()