Integrating Multiple Grove Sensors with an IoT Service

@stevealbright Check this! I combined the payload with the Tempratur, Humidity Sensor value and UV sensor value!

payload = {“state”:{“reported”{“UVIntensity”:int(UVLevel),“humidity”:int(humi),“temperature”:int(temp)}}}

from __future__ import print_function

import time, sys, signal, atexit, json, seeed_dht, json

from upm import pyupm_veml6070 as veml6070

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient

# thingName = 'new thing name'

# clientId = 'new clinet id'

# endpoint = 'aws iot endpoint'

# rootCA = 'rootCA location'

# cert = 'cert location'

# key = 'key location'

# port = 8883

def main():

    # Instantiate a Vishay UV Sensor on the I2C bus 0

    veml6070_sensor = veml6070.VEML6070(0)

     # for DHT11/DHT22

    sensor = seeed_dht.DHT("22", 12)

    # for DHT10

    # sensor = seeed_dht.DHT("10")

   ## Exit handlers ##

   # This function stops python from printing a stacktrace when you hit control-C

   def SIGINTHandler(signum, frame):

        raise SystemExit

    # This function lets you run code on exit, including functions from abpdrrt005pg2a5

    def exitHandler():

        print("Exiting")

        sys.exit(0)

    # Register exit handlers

    atexit.register(exitHandler)

    signal.signal(signal.SIGINT, SIGINTHandler)

    # Read the value every second and detect the pressure

    while(1):

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

   

        deviceShadowHandler.shadowUpdate(json.dumps(payload), customShadowCallback_Update, 5)

        time.sleep(10)

        UVLevel = veml6070_sensor.getUVIntensity()

        #print("UVLevel: " + str(UVLevel))

        print("UV* Value: {0}".format(veml6070_sensor.getUVIntensity()))

        # Create message payload with dht and uv

        payload = {"state":{"reported":{"UVIntensity":int(UVLevel),"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("UV Level: " + str(payloadDict["state"]["reported"]["UVIntensity"]))

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