A demonstração se baseia na análise dos dados lidos por um sensor de umidade (DHT11), conectado a um Raspberry PI. As medições são enviadas/recebidas por MQTT e o serviço em nuvem AWS IoT armazena os dados (em um banco) além de alertar o usuário apenas quando as medições atingirem níveis críticos.

topologia aws iot

Inicialmente é feito o onboard do sensor em um processo que gera um SDK (neste caso, Linux/Python) a ser instalado onde o sensor estiver acoplado (Raspberry). Este SDK possibilita o vínculo entre dispositivo, certificado digital e políticas, através da execução de scripts.
O certificado digital é o responsável pela autenticação do dispositivo com o serviço de nuvem AWS IoT.
As políticas permitem a autorização às operações IoT como, por exemplo, HTTP e MQTT.

De forma um pouco mais detalhada o que o script faz é:  executar o programa basicPubSub.py, o qual irá publicar mensagens pelo protocolo MQTT na url definida pelo AWS, utilizando certificado e chaves obtidos no onboard.
É neste programa que definimos o tópico MQTT, os dados e a frequência, para publicação. Nele também foi ajustado o payload para JSON, para melhor leitura e classificação das mensagens recebidas.

A demo também permite a escrita de cada mensagem MQTT publicada, em um banco de dados NoSQL (DynamoDB), sendo necessária uma consulta SQL prévia no payload to tópico MQTT, a partir de uma regra. Para armazenar apenas as medições “críticas”, deve-se criar, dentro dessa regra, uma condição a ser atendida (por exemplo, umidade > 80%).

Por fim, de forma similar à escrita no DynamoDB, o serviço AWS SNS permite a configuração de uma regra para o envio de e-mail e/ou SMS de medições “críticas” quando estas ocorrerem.

Em uma possível aplicação prática o experimento utiliza o sensor DHT11 com o objetivo de identificar quanto um ambiente começa a sofrer com umidade elevada, o que poderia provocar mofo. Para isso, considero a partir de 70% de umidade como algo crítico e que deva ser alertado ao usuário (via e-mail). Para simular o efeito do aumento de umidade, o sensor foi colocado dentro de um copo com água.
obs. O uso do DHT11 em Python requer a biblioteca Adafruit_Python_DHT e o código do programa basicPubSub.py teve de ser configurado para a leitura desse sensor.