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