Skip to content

Instantly share code, notes, and snippets.

@KayLerch
Created March 28, 2016 10:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KayLerch/235c370334ede960ea16 to your computer and use it in GitHub Desktop.
Save KayLerch/235c370334ede960ea16 to your computer and use it in GitHub Desktop.
A Python script to propagate DHT22 sensor data to AWS IoT
import Adafruit_DHT
import ssl
import sys
import paho.mqtt.client as mqtt
import time
sensor = Adafruit_DHT.DHT22
pin = 21 # GPIO 21
delaySecondsBetweenPublish = 1
mqttCert_Protocol = ssl.PROTOCOL_TLSv1_2
mqttTopic_pub = "$aws/things/kayspi-weatherstation/shadow/update"
mqttTopic_sub = "$aws/things/kayspi-weatherstation/shadow/update/rejected"
mqttCert_ca = "./cert/VeriSign-Class-3-Public-Primary-Certification-Authority-G5.pem"
mqttCert = "./cert/kayspi-weatherstation/xxxx-certificate.pem.crt"
mqttCert_priv = "./cert/kayspi-weatherstation/xxxx-private.pem.key"
mqttClientId = "kayspi-weatherstation"
mqttEndpoint = "xxxx.iot.us-east-1.amazonaws.com"
mqttPort = 8883
def on_connect(mqttc, obj, flags, rc):
if rc == 0:
print("Client conntected : " + str(rc) + " | Connection status: successful.")
mqttClient.subscribe(mqttTopic_sub, qos=0)
publish_data()
def publish_data():
time.sleep(delaySecondsBetweenPublish)
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
payload = '{{"state":{{"reported":{{"humidity":{0:0.1f},"temperature":{1:0.1f}}}}}}}' \
.format(humidity,temperature)
print("Publish {0}".format(payload))
mqttClient.publish(mqttTopic_pub, payload, 0, False)
def on_disconnect(client, userdata, rc):
print("Client connection closed.")
def on_log(pahoClient, obj, level, string):
print("---------------")
print(string)
def on_publish(mosq, obj, mid):
print("mid: " + str(mid))
publish_data()
def teardown():
mqttClient.disconnect()
mqttClient.loop_stop()
sys.exit()
mqttClient = mqtt.Client(client_id=mqttClientId)
mqttClient.on_connect = on_connect
mqttClient.on_disconnect = on_disconnect
mqttClient.on_publish = on_publish
mqttClient.on_log = on_log
mqttClient.tls_set(mqttCert_ca, certfile=mqttCert, keyfile=mqttCert_priv, tls_version=mqttCert_Protocol, ciphers=None)
print("Start connecting to " + mqttEndpoint + ":" + str(mqttPort) + " ...")
try:
mqttClient.connect(mqttEndpoint, port=mqttPort)
mqttClient.loop_forever()
except (KeyboardInterrupt, SystemExit):
teardown()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment