View on GitHub

iotreta

Dirty IoT tricks!

IoTreta

Dirty IoT tricks! Cleuton Sampaio

Caraca! Direto para a Amazon: AWS IoT!

Fala muuuiiito sério! Isso é que é IoT! Estou usando o serviço AWS IoT para conectar meu dispositivo Arduíno, que mede a temperatura e envia para o MQTT Broker dele!

(Olha só, Fera: O serviço AWS IoT tem custo, ok? Existem outros MQTTs públicos gratuitos, como o Test MosquiTTO)

MQTT

É um protocolo que utiliza a metáfora Publisher/Subscriber para troca de mensagens entre dispositivos automatos (Arduínos e outros micro controladores). O Serviço AWS IoT oferece não só o serviço Broker de mensagens, como também vários outros agregados.

É possível criar funções AWS Lambda para processar as mensagens, armazenando-as em um Banco de dados DynamoDB ou então gerando ações.

Um exemplo simples

Para simplificar as coisas, vamos começar com um exemplo bem simples: O Medidor de temperatura enviando mensagens para o AWS IoT. Esqueceu qual é? É aquele que mostrei no tutorial passado!!!!!

Calma! O processo é meio burocrático, mas é simples e eu vou te guiar passo a passo.

Crie uma conta

Crie uma conta na Amazon e se cadastre para o AWS IoT.

Você deverá se logar ma Console IoT para começar a trabalhar. É só procurar o serviço IoT.

Crie uma “coisa”

A Amazon chama os dispositivos de “Things” (coisas).

Abra “manage / things” e selecione “Register a Thing”, depois “Create a single IoT thing”.

Dê um nome à sua “thing” e clique next.

É preciso criar um certificado. Clique em “Create certificate” (one-click certificate creation).

Baixe os 3 arquivos, clicando nos links de download e, por último, baixe o certificado da CA, salvando como root-ca.crt e clique no botão “Activate” para ativar o certificado, e depois clique em DONE.

Precisamos criar uma “Policy” para que nossa “Coisa” (Thing) possa publicar mensagens em um tópico do MQTT. Um tópico é um “assunto”. Para isto, é preciso obter o account id: Dentro da console, abra uma aba e vá para sua conta:. Anote o ID da sua conta e volte à console do serviço IoT, selecione o menu “Secure / Policies” e clique em Create.

Você precisa cadastrar cada Action possível, cicando em “Add Statement” para adicionar cada uma delas. Quais ações precisamos criar?

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:us-east-1:xxxxxxx:topic/temp"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:xxxxxxx:topic/temp"
    }
  ]
}

Precisamos de uma Action para permitir a conexão (iot:Connect), outra para publicar mensagens no tópico “temp” (iot:Publish) e finalmente uma para subscrever e obter mensagens do tópico “temp” (iot:Subscribe). É só incluir a primeira Action, clicar em “Add Statement” e incluir as outras.

O identificador de recurso (resource arn) é composto por:

arn?aws?iot?us-east-1:[seu account ID]:

Para cada recurso temos uma abreviação, no caso de “tópico” é “topic”. No exemplo, estou dando permissões para o recurso “temp”, que é um tópico.

Instalando os nodes AWS

O node-red é uma plataforma estensível, e existe um módulo muito legal que possui Nodes para falar com o AWS: node-red-contrib-aws-iot-hub. Vamos instalá-lo na pasta do NodeRed: ~/.node-red:

npm install node-red-contrib-aws-iot-hub

Agora, temos Nodes para ler do AWS IoT e publicar no AWS IoT.

Modificando o fluxo

O novo fluxo está no arquivo arduino_aws.node. Eu obfusquei o endpoint, mas você pode obter o seu entrando no menu “Settings” da AWS IoT Console.

Para configurar o Node AWS IoT, você precisa adicionar um novo dispositivo AWS IoT, clicando no botão do lápis.

Quando você baixou os arquivos do certificado, deve ter pelo menos 3 deles:

Esse nome de arquivo tem que ser muito bem pensado… O primeiro nome “medidorTemperatura” será o seu “client ID”, que você informará ao configurar o node AWS IoT. O nome dos arquivos tem que ser exatamente assim:

E você tem que guardar o caminho da pasta onde os gravou!

Agora, vamos configurar o Dispositivo AWS IoT:

O campo EndPoint você obtém do AWS IoT console. O campo AWS Certs é o caminho do diretório onde você gravou os certificados.

Testando

Agora, é só fazer Deploy do fluxo e rodar, lembrando-se de conectar seu Arduino!

O meu node Function está formadando a mensagem a ser enviada assim:

T0 = 25 + 273.15;  
RT0 = 1000;
B = 3977;
VCC = 5;
R = 1000;
VRT = msg.payload;
VRT = (5.00 / 1023.00) * VRT;      
VR = VCC - VRT;
RT = VRT / (VR / R);               

ln = Math.log(RT / RT0);
TX = (1 / ((ln / B) + (1 / T0))); 

TX = TX - 273.15;
d = new Date();
msg.topic = "temp"
msg.payload = {"temperatura":TX}
return msg;

É muito importante criar o campo “msg.topic” na mensagem, com o mesmo nome do tópico para o qual você autorizou seu Arduíno a publicar (lembra-se da “Policy”?).

Mas chegou na Amazon?

Ah, grande pergunta! Podemos usar o cliente MQTT de teste, da console AWS, para subscrevermos no tópico “temp” e vermos o que está sendo enviado para ele. Abra o menu “Test”. Isto iniciará um cliente Web MQTT. Escolha “Subscribe to topic” e digite “temp”.