This should be work
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
from grove.grove_air_quality_sensor_v1_3 import GroveAirQualitySensor
# 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")
sensor = GroveAirQualitySensor(2) //connected to pin2
## 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()))
AirQ = sensor.value // reading Air Qulaity sensor vallue
# Create message payload with dht and uv
payload = {"state":{"reported":{"UVIntensity":int(UVLevel),"humidity":int(humi),"temperature":int(temp),"airQuality":int(AirQ)}}}
# 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()