O blogue da AWS

Começando com o AWS IoT Parte 1

Por Bruno Emer e David Reis, AWS Solutions Architect

Introdução

Nos dias de hoje, tem-se tornado cada vez mais comum ouvirmos termos como a Internet das Coisas e Dispositivos Conectados. O termo “Internet das coisas” (ou em inglês “Internet of Things”) foi cunhado por um britânico chamado Kevin Ashton, que criou um um conjunto de sensores conectados à internet. Atualmente temos uma quantidade cada vez maior de dispositivos enviando dados e/ou executando tarefas através de comandos recebidos via internet.

No entanto, para que dispositivos como sensores de temperatura enviem dados para uma plataforma de análise ou uma cafeteira comece a preparar o seu café através de um clique de seu mouse, é necessária a existência de uma estrutura que permita que a troca dessas informações aconteça de forma segura e confiável – e é aí que entra o serviço de IoT da AWS.

O serviço de IoT da AWS permite que dispositivos possam interagir com aplicativos na nuvem e até mesmo com outros dispositivos, oferecendo todos os benefícios de escalabilidade, podendo suportar bilhões de dispositivos e trilhões de mensagens, tudo isto de forma segura e simples.

Começando com AWS IoT

Este tutorial é o primeiro de uma série, e tem como objetivo demonstrar a utilização do serviço AWS IoT sem que seja necessária a utilização de um dispositivo físico. Para isto, utilizaremos um programa em Python baseado no SDK fornecido pela AWS para se conectar ao serviço e enviar informações atualizadas em tempo real.

Ao final deste tutorial, você terá aprendido como utilizar os recursos básicos da plataforma AWS IoT, como coisas, certificados e políticas.

Pré-Requisitos

Para a execução deste tutorial, será necessário:

  • Uma conta da AWS
  • Uma instância Amazon EC2 t2.micro com Amazon Linux (Você também pode usar um computador com linux e Python 2.7 instalado)

Conceitos Básicos

O serviço de IoT da AWS é composto por diversos componentes e tem por objetivo entregar maior agilidade para a criação de soluções de IoT. Neste tutorial, utilizaremos os seguintes componentes:

  • SDK – o serviço de IoT da AWS é baseado em padrões de mercado e oferece SDKs para algumas linguagens de programação, como Python ou NodeJS, a fim de facilitar a integração entre os dispositivos e o serviço de IoT;
  • Device Gateway – este é o componente responsável por receber e manter as conexões com os dispositivos;
  • Device Registry – permite catalogar suas coisas e adicionar informações extras para gerenciá-las de maneira simplificada;

Para maiores detalhes sobre todos os componentes do serviço de IoT da AWS, você pode assistir ao Webinar Introdução à Internet das Coisas na AWS.

Arquitetura de Referência deste Tutorial

Neste tutorial, explicaremos como realizar uma conexão simples entre um dispositivo físico e o serviço de IoT da AWS, permitindo que as informações sejam postadas em um tópico.

O IoT contém o Device Gateway que funciona no modelo publish/subscribe. Basicamente, este modelo permite que dispositivos realizem a publicação de mensagens em tópicos (publish) e que outros dispositivos ou aplicações recebam as mensagens publicadas em tópicos específicos (subscribe).

Iremos simular um dispositivo físico através de um programa escrito em Python, que envia a cada período de tempo informações sobre a temperatura do ambiente.

Picture1

Figura 1 – Arquitetura de referência

Nos próximos tutoriais desta série, adicionaremos mais elementos nesta arquitetura a fim de demonstrar outros benefícios e funcionalidades do serviço de IoT da AWS.

Acessar a Console do AWS IoT

O serviço AWS IoT está disponível em várias regiões, mas para este tutorial iremos usar a região da Virgínia do Norte (us-east-1). Para iniciarmos as configurações, vamos acessar verificar a região e acessar a console do serviço AWS IoT usando os seguintes passos:

  • Acesse a console da AWS;
  • Verifique se está usando a região N. Virginia apresentada na parte superior direita da console;
  • Clique em “Services” e em seguida selecione “AWS IoT”:

Picture2

Figura 2 – Console da AWS

A console do serviço de IoT será exibida.

Picture3

Figura 3 – Console do AWS IoT

Criar uma Coisa

IoT é uma sigla para “Internet of Things”, ou em português, “Internet das Coisas”. Sendo assim, temos que “coisa” é a representação de um dispositivo conectado à plataforma. Você pode utilizar “coisas” para armazenar atributos, como por exemplo número de série, data de instalação, local onde a coisa se encontra e gerenciar uma frota de dispositivos.

Neste tutorial, iremos criar uma coisa chamada “MeuPrimeiroDispositivo”.  Para criar uma coisa na plataforma de IoT, execute os seguintes passos na console do IoT:

  • Clique em “Registry” no lado esquerdo da tela;
  • Clique em “Things”;
  • Clique em “Register a thing”, no centro da tela, para criar sua primeira coisa. Caso já tenha criado uma coisa anteriormente, clique em “Create” na parte superior a direita da console;

Picture4

Figura 3.1 – Criar uma Coisa

  • Preencha o campo “Name” com “MeuPrimeiroDispositivo” e clique em “Create thing” para criar a coisa:

Picture5

Figura 3.2 – Criar uma coisa

Note que cliando em “Show options” nesta página, você também poderá adicionar atributos como por exemplo Número de Série do dispositivo, usando a opção de atributos. Para a execução deste tutorial não será necessária a criação de nenhum atributo extra, porém em um ambiente produtivo, a adição de atributos auxilia e simplifica o processo de gerenciamento dos dispositivos.

Após realizar a criação de uma coisa, será exibida a página com propriedades dela conforme a tela abaixo.

Picture6

Figura 3.3 – Propriedades da coisa

Criar um Certificado

A identificação das coisas no AWS IoT pode ser realizada de diferentes maneiras. Neste tutorial, utilizaremos um certificado digital, que é uma das formas mais comuns e seguras para a identificação de dispositivos.

  • Retorne ao menu inicial clicando na seta na parte superior a esquerda;
  • No menu a esquerda, clique em “Security” e em seguida em “Certificates”;

Picture7

Figura 4.1 – Criar um certificad

  • Clique em “Create a Certificate” no centro da tela. Se já tiver criado um certificado anterioremente, clique no botão “Create” na parte superior a direita da console;

Picture8

Figura 4.2 – Criar um certificado

  • Na tela exibida, clique em “Create certificate”, utilizando o recurso de criação de certificados com um clique;

Picture9

Figura 4.3 – Criar um certificado

  • A AWS irá gerar o certificado, a chave privada e a chave pública e irá lhe informar os links para downloads deles;
  • Realize o download dos três arquivos e armazene-os para os próximos passos;

Picture10

Figura 4.4 – Download dos certificados

  • Em seguida, clique em “Activate” para ativar o seu certificado;

Picture11

Figura 4.5 – Criar um certificado

  • Clique em “Done” no canto inferior direito quando finalizar este passo.

Criar uma Política

Após a criação da coisa e do certificado, devemos realizar a criação de uma política. Políticas são responsáveis por determinar quais ações uma determinada coisa pode realizar no serviço de IoT, como por exemplo se conectar a plataforma e receber mensagens postadas em um tópico específico ou até mesmo postar mensagens em um tópico.

  • No menu lateral esquerdo, ainda em “Security”, clique em “Policies”;

Picture12

Figura 5.1 – Criar uma política

  • No centro da tela, clique em “Create a Policy”. Será exibida a tela para a criação de políticas. Se já tiver criado uma política anterioremente, clique no botão “Create” na parte superior a direita da console;
  • Preencha o campo Name. Neste exemplo, usaremos “MinhaPrimeiraPolitica”. Note que o nome não poderá conter espaços;
  • Preencha o campo Action com “iot:*”;
  • No campo “Resource ARN”, substitua a informação “topic/replaceWithATopic” por um asterisco (*);

ATENÇÃO: Esta política não irá permitir a execução de todas as atividades possíveis no serviço de IoT e é aplicada neste tutorial apenas com a finalidade de simplificar a execução. Em um ambiente de produção, as permissões devem ser sempre definidas utilizando premissas de menor privilégio;

  • Selecione a opção “Allow” e em seguida clique em “Create”, no canto inferior direito da tela;

Picture13

Figura 5.2 – Criar uma política

Vincular o Dispositivo, Política e Certificado

Até agora, já temos todos os elementos fundamentais para a utilização do serviço de IoT: Coisa, Certificado e Política, porém ainda precisamos que a nossa coisa seja identificada de alguma forma. Para isto, devemos vincular a coisa ao certificado que acabamos de criar. Execute os seguintes passos:

  • Na console do IoT, clique em “Security” e em seguida em “Certificates” para listar os certificados disponíveis;
  • Localize o certificado gerado anteriormente. Você pode usar o nome do arquivo baixado como referência;
  • Clique nos três pontos existentes na parte superior direita do certificado;

Picture14

Figura 6.1 – Vincular o certificado

  • Selecione “Attach thing”:

Picture15

Figura 6.2 – Vincular o certificado a uma coisa

  • Selecione a coisa “MeuPrimeiroDispositivo” criada anteriormente, e clique em “Attach”;

Picture16

Figura 6.3 – Vincular o certificado a uma coisa

Agora que realizamos o processo para identificar a nossa coisa através de um certificado, é necessário aplicarmos as permissões necessárias para que a coisa possa executar ações no IoT. Para isto, devemos associar o Certificado à Política.

  • Clique novamente nos três pontos localizados sobre o nome do certificado;
  • Clique em “Attach policy”;
  • Selecione a política “MinhaPrimeiraPolitica” e clique em “Attach”;

Picture17

Figura 6.4 – Vincular o certificado a uma política

Preparar o Ambiente para Simular um Dispositivo

Como já descrevemos anteriormente, para a execução deste tutorial não é necessária a presença de um dispositivo físico como um Raspberry PI ou Starter Kits. Para isto, vamos simular a conexão de um dispositivo utilizando um computador/servidor. Este guia utiliza como referência uma instância Amazon EC2 operando com o Amazon Linux, porém, caso queira, você poderá instalar as dependências necessárias em seu próprio computador.

Mais informações sobre a utilização de instâncias EC2 poderão ser encontradas na documentação oficial da AWS.

  • Execute os passos descritos em nosso Getting Start Guide do EC2 para realizar a criação de uma instância t2.micro. Em seguida acesse a sua instância utilizando o seguinte comando;
    ssh –i <chave-de-acesso> ec2-user@<hostname-do-servidor>

    Caso esta seja a primeira vez que você acessa essa instância, lhe será apresentada uma mensagem perguntando se deseja se conectar a ela. Caso essa mensagem seja exibida, digite “yes” e pressione Enter.

  • Instale o SDK do AWS IoT para Python no servidor:
    sudo pip install AWSIoTPythonSDK
  • Crie um diretório para guardar os arquivos e acesse o mesmo utilziando o comando;
    mkdir -p ~/tutorial/iot_parte_1 && cd ~/tutorial/iot_parte_1
  •  Crie um novo arquivo chamado “coisa.py”;

   touch coisa.py

Utilizando o editor de texto de sua preferência, insira o código fonte abaixo conteúdo ao arquivo “coisa.py”. Este programa em Python irá se conectar ao serviço de IoT da AWS simulando um dispositivo físico e reportar uma temperatura aleatória a cada 10 segundos.

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import sys
import logging
import time
import getopt
import datetime
import random
import json

# Read in command-line parameters
useWebsocket = False
host = ""
rootCAPath = ""
certificatePath = ""
privateKeyPath = ""
try:
    opts, args = getopt.getopt(sys.argv[1:], "hwe:k:c:r:", ["help", "endpoint=", "key=","cert=","rootCA=", "websocket"])
    if len(opts) == 0:
        raise getopt.GetoptError("No input parameters!")
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print(helpInfo)
            exit(0)
        if opt in ("-e", "--endpoint"):
            host = arg
        if opt in ("-r", "--rootCA"):
            rootCAPath = arg
        if opt in ("-c", "--cert"):
            certificatePath = arg
        if opt in ("-k", "--key"):
            privateKeyPath = arg
        if opt in ("-w", "--websocket"):
            useWebsocket = True
except getopt.GetoptError:
    print("Missing parameters")
    exit(1)

# Configure logging
logger = None
if sys.version_info[0] == 3:
    logger = logging.getLogger("core")  # Python 3
else:
    logger = logging.getLogger("AWSIoTPythonSDK.core")  # Python 2

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 AWSIoTMQTTClient
myAWSIoTMQTTClient = None

myAWSIoTMQTTClient = AWSIoTMQTTClient("basicPubSub")
myAWSIoTMQTTClient.configureEndpoint(host, 8883)
myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)

# Connect and subscribe to AWS IoT
myAWSIoTMQTTClient.connect()

thing = "MeuPrimeiroDispositivo"
topic = "dispositivos/MeuPrimeiroDispositivo/reportar"

# Publish to the same topic in a loop forever
while True:
    print(thing)
    temp = random.randint(10, 35)
    data = { "thing": thing, 
        "thing-type": "thermometer",
        "temperature": temp
    }
    myAWSIoTMQTTClient.publish(topic, json.dumps(data), 1)
    print("O dispositivo {} reportou a temperatura {} pelo topico {}.".format(thing, temp, topic))
    time.sleep(10)

Para executarmos nosso programa em Python na instância Amazon EC2 e simularmos uma coisa, precisamos disponibilizar os certificados gerados pelo IoT dentro do servidor. Para isto, copie os arquivos <id-do-certificado>-certificate.pem.crt e <id-do-certificado>-private.pem.key para o diretório “/home/ec2-user/tutorial/iot_parte_1”.

Além da chave privada e do certificado do seu dispositivo, você precisará também do certificado da Autoridade Certificadora (AC) para que o programa possa estabelecer conexão com a AWS. Para isto execute o comando abaixo:

wget https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -O /home/ec2-user/tutorial/iot_parte_1/rootCA.pem

Para obter mais informações sobre os recursos de segurança do IoT, acesse acesse a página Segurança e Identidade.

Obtendo o seu Endpoint para Conexão com o AWS IoT

Todas as conexões realizadas entre uma coisa e o serviço de IoT são realizados através de um endpoint. Um endpoint é basicamente uma URL única fornecida a você automaticamente pela AWS. Para obter o seu endpoint, siga os passos a seguir.

  • Clique em “Settings” no canto inferior esquerdo da tela;
  • Localize a caixa “Endpoint” que contém o seu endpoint;
  • Guarde esta informação, pois será usada pelo programa para acessar o AWS IoT;

Picture18
Figura 7 – Obtendo seu endpoint IoT

Executando o Programa

Agora, vamos executar nosso programa que irá simular uma coisa. Para isto, acesse o diretório iot_parte_1 e execute o seguinte comando:

python coisa.py --endpoint <endpoint> -r rootCA.pem  \ 
-c <id-do-certificado>-certificate.pem.crt \ 
-k <id-do-certificado>-private.pem.key

Caso o comando seja executado corretamente, será apresentado um log de execução na tela semelhante ao seguinte. A linha em destaque indicada que o dispositivo virtual conseguiu conectar na plataforma.

2016-11-10 19:52:11,229 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Paho MQTT Client init.
...
2016-11-10 19:52:11,230 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Load Key from: id-private.pem.key
2016-11-10 19:52:11,230 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Load Cert from: id-certificate.pem.crt
... 
2016-11-10 19:52:11,349 - AWSIoTPythonSDK.core.protocol.mqttCore - INFO - Connected to AWS IoT.
2016-11-10 19:52:11,349 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Connect time consumption: 60.0ms.

Validando o funcionamento

Ao executarmos o nosso programa, informações sobre temperatura começarão a ser postadas no tópico “dispositivos/MeuPrimeiroDispositivo/reportar”. Para termos certeza de que a temperatura de nossa coisa está sendo devidamente reportada, utilizaremos o recurso de “Test” presente na interface do IoT. Para acessar esta interface, siga os passos a abaixo.

  • Clique em “Test” na parte esquerda da tela;

Picture19

Figura 8.1 – Validando o Funcionamento

Será a exibida a interface para que você se inscreva em um tópco (“Subscribe to topic”), isto é, receber as mensagens postadas nele.

  • Preencha o campo “Subscription topic” com “dispositivos/MeuPrimeiroDispositivo/reportar”

ATENÇÃO: As aspas duplas não devem ser incluídas.

  • Clique em “Subscribe to topic”

Picture20

Figura 8.2 – Validando o funcionamento

  • Verifique se o processo foi concluído corretamente olhando se o nome do tópico é exibido na lateral esquerda da tela, conforme a imagem abaixo;

Picture21

Figura 8.3 – Validando o funcionamento

  • Clique no nome do tópico para que as mensagens postadas pela coisa sejam exibidas

Picture22

Figura 8.4 – Validando o funcionamento

Adicionalmente, informações sobre as conexões e mensagens postadas serão atualizadas no Dashboard do serviço do IoT.

  • Clique em Dashboard na parte esquerda da tela para que sejam exibidas informações como quantidade de conxões, protocolo utilizado para a postagem de mensagens, direção das mensagens, entre outros itens

Adicionalmente, informações sobre as conexões e mensagens postadas serão atualizadas no Dashboard do serviço do IoT.

  • Clique em Dashboard na parte esquerda da tela para que sejam exibidas informações como quantidade de conxões, protocolo utilizado para a postagem de mensagens, direção das mensagens, entre outros itens:

Note que enquanto o programa “coisa.py” estiver em execução, mensagens serão continuamente postadas no tópico em questão. Para finalizar a execução do programa Python, pressione CTRL + C no terminal da instância EC2. Se não for continuar a segunda parte deste tutorial, você pode desligar a instância Amazon EC2 para evitar custos desnecessários.

Com isso, completamos a primeira parte do tutorial que mostra como ligar um dispositivo virtual ao AWS IoT. Este programa também pode ser adaptado de maneira simples para um dispositivo físico como Raspberry Pi e, por exemplo, ativar um LED.

Na próxima parte, iremos explorar como enviar dados do dispositivo para o AWS IoT e usar o motor de regra para trabalhar em tempo real com estas informações.