147

Click here to load reader

Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

Embed Size (px)

Citation preview

Page 1: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

Plataformas para aInternet das Coisas

Paulo F. Pires1, Flavia C. Delicato1, Thais Batista2, Thomaz Barros1, Everton Cavalcante1,3, Marcelo Pitanga1

1DCC/PPGI, Universidade Federal do Rio de Janeiro, Rio de Janeiro, Brasil2DIMAp, Universidade Federal do Rio Grande do Norte, Natal, Brasil

3IRISA-UMR CNRS/Université de Bretagne-Sud, Vannes, França

Page 2: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

Plataformas de middleware para IoT

Page 3: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

3

Carriots• Plataforma que utiliza serviços de nuvem para gerenciar dados providos

por dispositivos

• Platform as a Service (Paas) desenvolvida para conexão de dispositivos (M2M) no contexto de IoT

• Coleta e armazena qualquer tipo de dado de quaisquer dispositivo

• Permite a construção de aplicações

• Capacidade de suportar milhares de dispositivos conectados à uma mesma aplicação

Sistemas

Dispositivos

Pessoas

Produtos conectados

Page 4: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

4

Carriots: Construindo um Projeto de IoT

Front end Sistemas de TI Personalizados

Plataforma

Hardware

Internet

Internet

Apresentação

Aplicação(BD, middleware e

motor de regras)

Sensores e Atuadores“Coisas”

Page 5: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

5

Carriots: Construindo um Projeto de IoT

Serviços Personalizados

HTTPREST

Serviços WebHTTPS

Interface Web

HTTP3G/4G/Ethernet

GatewayZigbee/Rádio

OutrasAPIs

HTTPAPI

Gateway

Page 6: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

8

Carriots: Dispositivos

• Sensores― Coletam os dados brutos lidos por um dispositivo

― Por exemplo: temperatura, presença, vento, campos magnéticos, etc.

• Atuadores― Interagem com o mundo físico agindo sobre ele

― Por exemplo: abrir/fechar portas, exibir mensagens, acender/apagar luzes, enviar sinais, etc.

Page 7: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

9

Carriots: Dispositivos• No contexto de um projeto de IoT, os

objetos devem ser capazes de se comunicar e interagir pela Internet

― Autossuficientes

o Modem GPRS/3G/4G embutido

― Sensor + Gateway

o Serial (e.g., RS 485) ou rádio (e.g., 868MHz) + gateway de comunicação

― Rede de sensores + Gateway

• Protocolos de Comunicação

― HTTP

― JSON ou XML

― API REST

Gateways

HTTP3G/4G/Ethernet

RS 485 Zigbee

Page 8: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

10

Carriots: Dispositivos

• Exemplo: enviando dados de um sensor de presença de veículo estacionado

Page 9: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

11

Carriots: Plataforma

• API REST ― Seguindo padrões da Internet, a plataforma implementa uma API

REST sobre HTTPS

― Recebe grande quantidade de dados dos dispositivos

― Plena capacidade de interação entre a plataforma e os painéis de controle personalizados, dashboards, etc.

― Exemplo: Sensores de estacionamento enviando status (ocupada ou livre) de uma vaga. Painel de controle personalizado é utilizado para gerenciamento

Page 10: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

12

Carriots: Plataforma

• BD Big Data― Grandes quantidades de dados são armazenadas

em uma arquitetura de big data schemaless― Provê flexibilidade para o gerenciamento de dados

dos mais diversos dispositivos

― Exemplo: temperatura, posicionamento geográfico, etc.

Page 11: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

13

Carriots: Plataforma

• Gerenciamento de Projetos e Dispositivos― Projetos podem ser organizados para atender quaisquer

requisitos

― Flexibilidade para atender dos projetos mais simples aos mais complexos

― Capacidade de gerenciamento remoto dos dispositivos

― Exemplo: Ajuste da taxa de amostragem de um sensor de estacionamento

Page 12: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

14

Carriots: Plataforma

• Regras de Negócio e Processamento de Eventos

― Plataforma capaz de armazenar e executar toda a lógica de negócio necessária

― Lógica de negócio escrita em Groovy

― Scripts Groovy são executados no motor e isolados através de uma abordagem if-then-else

Page 13: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

15

Carriots: Plataforma• Exemplo de uma lógica de negócio em Groovy., que reage quando uma

informação de estacionamento é recebida

Page 14: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

16

Carriots: Plataforma

• Segurança― APIkeys para a definição de privilégios e visibilidades

― HTTPS para a criptografia das requisições e respostas à API REST

― Hash HMAC e senha pré-compartilhada para autenticação e verificação de conteúdo

― Permite a utilização de criptografica personalizada e adição de soluções de segurança adicionais

Page 15: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

17

Carriots: Plataforma

• Logs & Debug: Mensagens log, acessíveis a partir do painel de controle, e o console de debug são ferramentas para facilitar o desenvolvimento dos projetos hospedados na plataforma

• Painel de Controle :O painel de controle fornece a capacidade de gerenciamento dos projetos a partir de uma interface Web

• Módulo de Comunicação Externa: Envio de e-mails, SMSs, interação com sistemas externos, etc.

Page 16: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

19

Carriots: Front End

• Painel de Controle― Primeira ferramenta utilizada para a construção

de um projeto

― Fornece funcionalidades para a configuração do projeto, definição de privilégios de acesso, gerenciamento dos dados, etc.

HTTPSInterface Web

Page 17: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

20

Carriots: Front End

• Dashboard & Painel de Controle― Dashboards e paineis de controle construídos sobre a interface

REST são o que os usuários finais realmente vêem

― Exemplos: mapas customizados das vagas de estacionamento disponíveis

• Monitoramento― Pooling da API REST

― Download de dados

― Gráficos personalizados

― Push de dados baseado em eventos

HTTPSInterface Web

HTTPSInterface Web

Page 18: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

21

• Sistemas de TI Externos― A Plataforma pode se integrar

com outros sistemas

― Push/Pull de CRMs, ERPs...

― Exemplo: Zoho CRM, ArcGIS ...

• Integrações já fornecidas― Dropbox

― Twitter

― E-mails em massa

― SMSs

― Sockets

HTTPREST

Serviços Web

Carriots: Integração ExternaServiços

Personalizados

OutrasAPIs

HTTPAPI

Page 19: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

22

Carriots: Aplicação no Contexto de Cidades Inteligentes

• Recolhimento de lixo inteligente na cidade de Santander, ES

• Sensores sem fio instalados nas lixeiras• Recuperam informações sobre o volume de lixo

nas lixeiras• Enviam esses dados para a Carriots

Page 20: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

23

Carriots: Aplicação no Contexto de Cidades Inteligentes• API REST permite receber os dados brutos• Interface Web personalizada permite analisar:

― Volume de lixo

― Estado das baterias dos sensores

― Qualidade do sinal para a transmissão de dados (GPRS)

Page 21: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

25

Xively

• Utiliza serviços de nuvem para gerenciar os dados providos pelos dispositivos

• Fornece uma API RESTful para envio dos dados

• Permite a visualização de dados históricos• Provê mecanismos para disparo de eventos

com base nos dados gerados pelos sensores (triggers)

Page 22: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

26

Xively: Arquitetura

Page 23: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

27

Xively

• Os dados são organizados em:― Feeds

― Datapoints

― Datastreams

• Formas de recuperação de dados:― JSON, EEML (Extended Environments Markup Language) ou CSV

através da API REST

― Através de sockets― Protocolo MQTT

• EEML permite a descrição semântica do dado coletado• Segurança

― Utilização de HTTPS

― Chave para utilização da API

Page 24: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

28

EcoDiF• Desenvolvido no contexto do GT-EcoDiF da RNP

• Integra dispositivos heterogêneos e fornece funcionalidades de controle, visualização, processamento e armazenamento de dados em tempo real.

Page 25: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

29

EcoDiF: Arquitetura

• Conexão de Dispositivos: facilita a conexão de dispositivos físicos à plataforma e, consequentemente, à Internet

• Fabricantes desenvolvem drivers compatíveis com a API da EcoDiF

• Usuários conectam seus dispositivos, que utilizam os drivers previamente desenvolvidos pelos fabricantes, à plataforma para permitir a comunicação e o envio de dados

Colaboração

Conexão de Dispositivos

Visualização e Gerenciamento

Armazenamento

Aplicações

Manipulação de Dados

Serviços Comuns

(segurança,

transações, etc.)

Page 26: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

30

EcoDiF: Arquitetura

• Manipulação de Dados: manipula dos dados coletados dos dispositivos em tempo real

• Permite a criação do conceito de feed― Confere um contexto semântico aos metadados e

aos fluxos de dados

Colaboração

Conexão de Dispositivos

Visualização e Gerenciamento

Armazenamento

Aplicações

Manipulação de Dados

Serviços Comuns

(segurança,

transações, etc.)

Page 27: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

31

EcoDiF: Arquitetura

• Visualização e Gerenciamento: Fornece uma interface Web para:

― Gerenciamento dos dispositivos conectados

― Monitoramento das condições e da localização dos dispositivos

― Criação de alertas e notificações (chamados de triggers) relacionados aos ambientes sensoriados

― Visualização de dados históricos

Colaboração

Devices Connection

Visualização e Gerenciamento

Storage

Applications

Data Manipulation

Security, Life Cycle, transactio

ns,etc

Page 28: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

32

EcoDiF: Arquitetura

• Colaboração: Facilita a colaboração entre usuários da plataforma

• Busca por dispositivos e feeds a partir de metadados (tipo, usuário, localização...)

• Busca por aplicações (mashup) disponíveis

Colaboração

Conexão de Dispositivos

Visualização e Gerenciamento

Armazenamento

Aplicações

Manipulação de Dados

Serviços Comuns

(segurança,

transações, etc.)

Page 29: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

33

EcoDiF: Arquitetura

• Armazenamento: consiste de dois repositórios― SGBD para armazenamento de dados

― Armazenamento dos scripts de construção de aplicações em sistema de arquivos

Colaboração

Conexão de Dispositivos

Visualização e Gerenciamento

Armazenamento

Aplicações

Manipulação de Dados

Serviços Comuns

(segurança,

transações, etc.)

Page 30: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

34

EcoDiF: Arquitetura

• Aplicações: provê um modelo e um ambiente de programação e execução para o desenvolvimento de mashups

• Modelo de programação baseado na linguagem EMML (Enterprise Mashup Markup Language)

Colaboração

Conexão de Dispositivos

Visualização e Gerenciamento

Armazenamento

Aplicações

Manipulação de Dados

Serviços Comuns

(segurança,

transações, etc.)

Page 31: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

35

EcoDiF: Arquitetura 1 <mashup name="app" 2 xmlns="http://www.openemml.org/2009-04-15/EMMLSchema" 3 xsi:schemaLocation="http://www.openemml.org/2009-04-15/EMMLSchema… " 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:macro="http://www.openemml.org/2009-04-15/EMMLMacro"> 6 7 <output name="result" type="document"/> 8 <variables> 9 <variable name="feed20" type="document" /> 10 <variable name="feed19" type="document" /> 11 </variables> 12 13 <directinvoke endpoint="http://localhost:8080/EcodifAPI/api/feeds/20/datastreams/20"

method="GET" outputvariable="$feed20" /> 14 <directinvoke endpoint="http://localhost:8080/EcodifAPI/api/feeds/19/datastreams/19" method="GET" outputvariable="$feed19" /> 15 16 <merge inputvariables="$feed20, $feed19" outputvariable="$result" /> 17 18 </mashup>

Page 32: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

36

EcoDiF: Arquitetura

DriverAndroid

Conexão de Dispositivos

Armazenamento

Visualização e Gerenciamento

Colaboração

Segurança

Software livre

EEML / REST / HTTP

feeds/aplicações

DriverArduino

JAAS

Outros serviços

JTA JMS …

Manipulação de Dados Aplicações

OMA EMMLEngine

Hibernate

Servidor de Aplicações

Banco de dadosrelacional

Sistema de arquivos

RESTEasy

EEML

EEML/REST

consumidoresde feeds

HTTP

aplicações/consumidoresde feeds

JSF

Page 33: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

38

Middleware WSO2

• Plataforma modular, corporativa, free e open-source

• Fornece todas as capacidades do lado servidor (server-side)

• Desenvolvido sobre a tecnologia WSO2-Carbon baseada na OSGi (Open Service Gateway Initiative)*

― Módulos compartilham o mesmo kernel

• Módulos trabalham com protocolos de interoperabilidade padrão

― HTTP, MQTT, AMQP**

*OSGi Alliance: http://www.osgi.org/**Protocolo de messageria para pub/sub. http://amqp.org

Thomaz Avila Barros
Acredito que as referências devam ser excluídas nesse caso
Flávia Delicato
nao, devemos deixar as REFS
Page 34: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

39

Middleware WSO2

http://wso2.com/products/

Page 35: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

40

Mapeamento do Middleware WSO2 para instanciar uma arquitetura IoT

Como podemos nos beneficiar do middleware WSO2 em IoT?

Page 36: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

41

Middleware WSO2Mapeamento para IoT

Page 37: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

Estudo de Caso: Monitoramento Inteligente de uma Sala de Reuniões

Page 38: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

50

Agenda

• Descrição do Cenário• Visão geral

• Arquitetura

• Ambiente de Hardware e Software utilizados• Configuração do ambiente• Implementação• Cenário em execução

Page 39: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

51

Descrição do CenárioControle de salas de reuniões• Integração com a agenda corporativa de reuniões• Monitorar salas de reuniões de uma empresa ou

instituição com o objetivo de deixá-las preparadas para o início de uma reunião

• Monitorar temperatura, iluminação• Acionar o sistema de refrigeração X minutos antes

do inicio caso a temperatura do ambiente não esteja satisfatório como também ligar a iluminação

• Notificar participantes do inicio de uma reunião através de SMS

Page 40: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

52

Visão geral da aplicação

Page 41: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

53

http / json

Rede 802.15.4

C

Sensor LM335temperatura

E

from SensorInputEventStream[type == 'LM335' and data >= 30.0]#window.time(10 min)select correlation_sensorId as sensorId, type as type, environment as environment, "on" as action insert into SensorOutputEventStream;

Notificação

eventos

Eventos

eventos

Evento atuaçãoEvento atuação

NotificaçãoLembrete da reunião

on / off

E

Sala reunião

E

http / json

Rede 802.15.4

Serviço Integração

evento

Agenda

Page 42: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

54

Arquitetura de implementação

Page 43: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

55

Mapeamento para aplicação IoT

RESTful

Schema

Page 44: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

56

Arquitetura de implementação

Page 45: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

57

Modelo de dados dos dispositivos

Page 46: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

58

Ambiente de Hardware e

Software utilizados

Page 47: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

59

Ambiente de Hardware

Page 48: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

60

Ambiente - Hardware

• Dispositivos arduinos• 2 Uno R3

• 2 Mega 2560

• Placa Ethernet Shield• Acesso a internet via

cabo

Page 49: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

61

Ambiente - Hardware

• Módulos XBee S1― Estabelecer uma rede sem fio

entre os dispositivos

• Placa XBee explorer usb

• Placa XBee pro

Page 50: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

62

Ambiente - Hardware

• Cabos USB para arduino

• Cabo USB mini

• Fontes de alimentação ou baterias para os arduinos

• Roteador

Page 51: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

63

Ambiente – Componentes Circuito

• Temperatura• Sensor LM335

• Resistor 2.2k Ohm

• Potenciômetro para calibração

• Atuação• Relé para acionamento de

ar condicionado, iluminação, etc.

Page 52: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

64

Ambiente de Software

Page 53: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

65

Ambiente - Software

• Arduino IDE• Programação dos arduinos

• XCTU IDE• Configuração dos módulos XBee

• Ambiente Java• Java SDK

Page 54: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

66

Ambiente - Software

• Eclipse Java EE IDE for Web Developers

• Plataforma WSO2• CEP – Complex Event Processor• MB – Message Broker

• SGBD MYSQL

Page 55: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

67

Configuração do ambiente

Circuito, Rede XBee, WSO2

Page 56: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

68

Configuração do ambiente

Circuito

Page 57: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

69

Montagem do circuito de temperatura

Page 58: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

70

Configuração do ambiente

Rede XBee

Page 59: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

71

Dispositivo final

Dispositivo final

Dispositivo final

Controlador da rede

Rede XBee

Rede 802.15.4

Page 60: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

72

Configuração do Módulo XBee

• CH : Canal• PAN-ID : ID da rede (Personal Area Network)• DH e DL : Endereço do dispositivo destino• MY : Endereço de 16 bits do dispositivo• CE : Habilitar coordenador ou disp. final• NI : Identificação do Nó• AP : Habilitar uso da API

Page 61: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

73

Configuração do Controlador

• CH : 0C• PAN-ID : 3332• DH e DL : 0• MY : 1001 • CE : Coordinator [1]• NI : coord_xbee• AP : API enabled w/PPP [2]

Page 62: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

74

Configuração do Dispositivo final

• CH : 0C• PAN-ID : 3332• DH e DL : 0• MY : 1002 • CE : End device [2]• NI : end_device_1002• AP : API enabled w/PPP [2]

Page 63: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

75

Configuração do Módulo XBee

• Conectar o Módulo XBee no explorer

• Abrir o programa XTCU

• Clicar na opção Discover devices

Page 64: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

76

Configuração do Módulo XBee

Page 65: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

77

Configuração do Módulo XBee• Janela apresenta uma

lista com os dispositivos encontrados

• Selecionamos os dispositivos e clicamos no botão Add selected devices

Page 66: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

78

Configuração do Módulo XBee• Configuração dos

parâmetros do módulo

Page 67: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

79

Configuração do Módulo XBee

• Configuração dos parametros do módulo

• Após configurar os parametros, salvar as configurações no módulo usando o menu ao lado

Page 68: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

80

WSO2-CEP

Page 69: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

81

WSO2 – CEP – O que processar?

• Processar eventos de temperatura de um determinado ambiente coletados através de um sensor do tipo LM335 e transmitidos ao CEP por um determinado dispositivo.

• Os eventos com temperatura serão acumulados a cada 5 minutos para processamento em modo batch e um dispositivo de atuação será selecionado para envio do comando de atuação.

Page 70: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

82

WSO2 – CEP – O que processar?

• Caso o total dos eventos de temperaturas acima ou igual a 25 graus seja maior ou igual a 30, uma mensagem de atuação com o comando “ON” será enviado.

• Caso o total dos eventos de temperaturas abaixo de 25 graus seja maior ou igual a 30, uma mensagem de atuação com o comando “OFF” será enviado.

• Notificar participantes sobre o início da reunião

Page 71: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

83

WSO2 Criar fluxo de eventos

e plano de execução para o evento de temperatura

Page 72: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

84

WSO2 – CEP - Eventos

• Os passos para criar um fluxo de eventos são:1. Receber (I) e transmitir (O) eventos via HTTP

2. Eventos (I-O) estão em formato JSON

3. Transformar eventos

1. JSON -> WSO2Event -> JSON

4. Criar plano de execução

• Os passos de 1 a 3 são genéricos porque a aplicação envia mensagens padronizadas de sensoriamento independente do tipo de sensor utilizado. O passo 4 é dependente da condição de atuação desejada.

Page 73: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

85

WSO2 - CEP

• Iniciar o servidor

• Abrir o navegador e entrar no gerenciador

• URL: https://localhost:9443/carbon

• Login/Senha: admin/admin

Page 74: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

86

WSO2 - CEP

• Criar os Input/Output adaptors

• Utilizados para receber eventos de uma fonte e publicar eventos para um coletor

• Clicar na pasta Configure e ir na opção Event Processor Configs

Page 75: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

87

WSO2 – CEP – Input adaptor

• Criar um Input adaptor

• Clicar na opção Input Event Adaptors

• Clicar na opção Add Input Event Adaptor

Page 76: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

88

WSO2 – CEP – Input adaptor

• Fazer a configuração adequada para o tipo de fonte dos eventos.

Page 77: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

89

WSO2 – CEP – Output adaptor

• Criar um Output adaptor

• Clicar na opção Output Event Adaptors

• Clicar na opção Add Output Event Adaptor

Page 78: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

90

WSO2 – CEP – Output adaptor• Fazer a configuração adequada para o tipo de coletor dos eventos.

Page 79: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

91

WSO2 – CEP – Event Streams• 1-Clicar na aba Main• 2-Selecionar Event Streams• 3-Clicar em Add Event Stream

1

2

3

Page 80: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

92

WSO2 – CEP – Novo Event Stream

• Etapa 1 de 2 – Dados básicos

• * campos obrigatórios

Page 81: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

93

WSO2 – CEP – Novo Event Stream

• Etapa 2 de 2

• Definir a estrutura do evento, configurando o nome dos atributos e seu tipo

• No final clicar em Add Event Stream e será exibido uma janela solicitando a definição de um EventBuilder

Page 82: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

94

WSO2 – CEP – Novo Event Stream

• Janela solicitando a definição de um EventBuilder

• Clicar no botão Create Later

• Repetir os passos 1 e 2 para criar todos os Event Stream

Page 83: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

95

WSO2 – CEP – definir Event Builder e Formatters

• Definição de um Event Builder para receber eventos externos via http

• Mapeamento do evento de entrada para o formato interno do CEP

• Clicar na opção In-Flows para definir

Page 84: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

96

WSO2 – CEP – definir Event Builder

• Definição de um In-Flow

• Clicar em (+) Receive from...

Page 85: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

97

WSO2 – CEP – definir Event Builder

• Definição em 2 passos

• Passo 1 de 2 – Definir Event Builder Name, Input, Topic e Mapping type

1

2

3

4

Page 86: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

98

WSO2 – CEP – definir Event Builder

• Passo 2 de 2 –clicar no (+) Advanced para configurar o path de mapeamento de cada campo e no final clicar em Add Event Builder.

Page 87: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

99

WSO2 – CEP – definir Event Builder

• Após realizar a configuração o CEP exporta uma URL para envio de eventos

• Método: POST

• http://localhost:9763/endpoints/httpInputSensor/SensorBuilder

Page 88: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

100

WSO2 – CEP – definir Formatters• Event Formatters é responsável pelo mapeamento de saída

• Converter um evento (WSO2Event) em diferentes formatos (XML, MAP, JSON e Text)

• Clicar na opção Out-Flows para definir

Page 89: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

101

WSO2 – CEP – definir Formatters

• Definição de um Out-Flow

• Clicar em (+) Publish to External...

Page 90: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

102

WSO2 – CEP – definir Formatters

• Definição em 2 passos

• Passo 1 de 2 – Definir o Formatter Name e Output Adaptor

Page 91: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

103

WSO2 – CEP – definir Formatters• Passo 1 de 2 – configuração da URL que receberá o evento

de saída

Page 92: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

104

WSO2 – CEP – definir Formatters• Passo 2 de 2 – configuração do evento de saída

• Indicar o tipo de evento, o conteúdo do evento e no final clicar em Add...

Page 93: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

105

WSO2 – CEP – definir Data source

• 1 – clicar na aba Configure

• 2 – clicar na opção Data Sources

• 3 – clicar em (+) Add Data Source

• Acesso ao modelo de dados do Gerenciador de Dispositivo para selecionar o dispositivo “atuador”.

1 2

3

Page 94: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

106

WSO2 – CEP – definir Data source

• Configurar os campos com *

Page 95: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

107

Plano de Execução

Page 96: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

108

WSO2 – CEP – Plano de Execução

• Processa os eventos de entrada e gerar eventos de saída

• Programado através de uma linguagem baseada em SQL

• 1 - Clicar na aba Main

• 2 - Selecionar Execution Plans

• 3 - Selecionar (+) Add Execution Plan

1

2

3

Page 97: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

109

WSO2 – CEP – Plano de Execução

• Definição em 3 passos

• Passo 1 – Definir o Execution Plan Name

Page 98: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

110

WSO2 – CEP – Plano de Execução• Passo 2 – Definir os Streams de Input e Output do SQL

• Definição do Import Stream• 1 - Selecionar o Input Stream definido e indicas um alias (AS)

• 2 - Clicar em Import

1

2

Page 99: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

111

WSO2 – CEP – Plano de Execução

• Definição do Export Stream• 1 - Indicar um Value Of

• 2 - Selecionar o Output Stream definido

• 3 - Clicar em Add

1 2 3

Page 100: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

112

WSO2 – CEP – Plano de Execução• Passo 3 – Definição do SQL

Page 101: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

113

WSO2 – CEP – Plano de Execução• SQL

define table actuator (id int, macAddress string, env string, sensorType string)

from ('datasource.name'='SensorDS', 'table.name'='actuator');

from SensorInputEventStream [si.type == 'LM335' and si.data >= 25.0]#window.timeBatch(5 min) as sijoin actuator as a on (si.type == a.sensorType) and (a.env == si.environment)select a.macAddress as sensorId, si.type as type, si.environment as environment, "on" as action, count(*) as qtdgroup by si.correlation_sensorId, a.macAddresshaving qtd>=30insert into SensorOutputEventStream2;

Page 102: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

114

WSO2 – CEP – Fluxo de eventos• Visualização do fluxo do evento

• 1 – Clicar na Aba Monitor

• 2 – Clicar na opção Event Flow

1

2

Page 103: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

115

WSO2 – CEP – Fluxo de eventos

• Integração com a Agenda Corporativa• Mesmos passos indicados anteriormente• Pontos de atenção

• O Input adapter será do tipo JMS

• Na criação do EventBuilder (In-Flow) deve-se configurar o topic/queue que a aplicação da agenda esta publicando as mensagens

• O Output adaptor será do tipo SMS

Page 104: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

116

WSO2 – CEP• Input Adapter usando JMS

Page 105: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

117

WSO2 – CEP• Event Builder

Page 106: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

118

ImplementaçãoArduinos e API Rest

Page 107: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

119

Arduinos

Page 108: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

120

Arduinos

• Linguagem de programação baseada em C

• Dividida em 4 módulos:• Coletor de dados dos sensores

• Coordenador de Recebimento de eventos e envio ao CEP

• Coordenador de atuação• Recebimento de evento do CEP e envio para atuação

• Atuador

Page 109: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

121

Arduinos

• Bibliotecas• Arduino JSON• XBee• Ethernet

Page 110: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

122

Coletor de dados de sensor

Page 111: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

123

Arduinos – Coletor de dados de sensor

• Dispositivo resposável por• Requisitar informações sobre ambiente a

sensoriar

• coletar dados dos sensores

• formatar a mensagem (JSON)

• enviar ao Coordenador

Page 112: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

124

Arduinos – Coletor de dados de sensor

void setup() { pinMode(LEDVerde, OUTPUT); pinMode(LEDVermelho, OUTPUT); pinMode(LEDAmarelo, OUTPUT); pinMode(13, OUTPUT);

Serial.begin(9600); xbee.setSerial(Serial); initVars(); tentativas = 0;}

• setup do dispositivo

Page 113: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

125

Arduinos – Coletor de dados de sensor

• setup do dispositivo void initVars() { macAddr = getMAC(); type = "LM335"; env = "SL102"; measure = "C"; pin = 0; tpin = "A";}

String getMAC() { uint8_t shCmd[] = {'S', 'H'}; uint8_t slCmd[] = {'S', 'L'}; String mac = getResultRequest(shCmd); delay(50); mac.concat(getResultRequest(slCmd)); mac.toUpperCase(); return mac;}

Page 114: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

126

Arduinos – Coletor de dados de sensor

• loop de execução

void loop() { if (tentativas > -1) { initMessage(); // gera msg de config ao coordenador if (tentativas > 10) { tentativas = -1; } return; }[...]}

Page 115: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

127

Arduinos – Coletor de dados de sensor

• Solicita configuração

• Mensagem: {“start”: ”0013A2004076DAF9”}

void initMessage() { String cmd = "{\"start\":\""; cmd.concat(macAddr + "\"}"); [...] uint8_t * payload = (uint8_t *) msg; Tx64Request tx = Tx64Request(addr64, payload, msgsize);[....]

// enviar a mensagem p/ coordenador xbee.send(tx);[...]}

Page 116: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

128

Arduinos – Coletor de dados de sensor

• Recebe e processa a configuração

void initMessage() {[...] xbee.readPacket(5000); if (xbee.getResponse().isAvailable()) { [...] if (xbee.getResponse().getApiId() == RX_16_RESPONSE) { xbee.getResponse().getRx16Response(rx16); rxData = rx16.getData(); offset = rx16.getDataOffset(); lenData = rx16.getDataLength(); } else { [...]} // se chegou a resposta da mensagem de inicialização interrompe processConfigMessage(); tentativas = -1;} [...]

Page 117: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

129

Arduinos – Coletor de dados de sensor

• Processa a mensagem de configuração recebida

• {"id":"0013A2004076DAF9","type":"LM335","env":"SL102","pin":0,"tpin":"A","measure":"C"}

void processConfigMessage() { String json = dataToString(rxData, 0, lenData); int jsonLen = json.length() + 1; char * msg = (char *) malloc( sizeof( int ) * jsonLen); json.toCharArray(msg, jsonLen); DynamicJsonBuffer jsonBuffer; JsonObject& root = jsonBuffer.parseObject(msg); type = root["type"]; env = root["env"]; measure = root["measure"]; pin = root["pin"]; tpin = root["tpin"];

free(msg);}

Page 118: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

130

Arduinos – Coletor de dados de sensor

• Coleta dados do sensor e formata mensagem para envio

• Exemplo: {"id":"0013A2004076DAF9","type":"LM335","env":"SL102","data":0.0,"measure":"C"}

// envia a mensagem formatadavoid sendMessage() { float data = getTemperature(); char * json = getJson(macAddr, type, env, data, measure); int jsonsize = strlen(json); uint8_t * payload = (uint8_t *) json;

Tx64Request tx = Tx64Request(addr64, payload, jsonsize); // envia a mensagem para o coordenador xbee.send(tx);}

Page 119: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

131

Arduinos – Coletor de dados de sensor

• Coleta dados do sensor

float getTemperature() { float setting = 2.5;

float sensorValue = 0; if (tpin == "A") { sensorValue = analogRead(pin); } else { [...] } float kelvin = (((sensorValue / 1023) * 5) * 100); float celsius = kelvin - 273.15 - setting; return celsius; // Retorna A temperatura}

Page 120: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

132

Coordenador de recebimento de eventos

Page 121: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

133

Arduinos – Coordenador de recebimento de eventos

• Dispositivo resposável por• Receber a mensagem de config do dispositivo,

interagir com o sistema de gerenciamento de dispositivos, via API REST, e devolver configuração

• Receber os eventos coletados dos sensores

• Formatar uma nova mensagem (JSON) no modelo do CEP

• Enviar mensagem ao CEP

Page 122: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

134

Arduinos – Coordenador de recebimento de eventos

• Código de setupvoid setup() {[...] Serial.begin(9600); xbee.setSerial(Serial);

digitalWrite(statusLed, HIGH); Serial.println("Obtendo IP via DHCP..."); if (Ethernet.begin(mac) != 1) { flashLed(errorLed, 2, 100); Ethernet.begin(mac, ip); } digitalWrite(statusLed, LOW); Serial.print("IP Client : "); Serial.println(Ethernet.localIP()); IPok = 1; flashLed(greenLed, 3, 100);}

Page 123: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

135

Arduinos – Coordenador de recebimento de eventos

• Código de processamento

void loop() { if (IPok == 1) { if (readSensorPacket() == 1) { verifyMessageAndSendMessage(); } delay(50); }}

Page 124: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

136

Arduinos – Coordenador de recebimento de eventos• Código de tratamento de mensagens recebidas

void verifyMessageAndSendMessage() { String msg = dataToString(rxData, 0, lenData); Serial.println("Mensagem ->"+msg); String mac = getMacAddressFromStartMessage(msg); // verifica se é mensagem de inicialização do device if (mac.length() > 0) { Serial.println("Recebida mensagem de Config."); sendMessageConfig(mac); } else { Serial.println("Recebida mensagem de sensor."); sendDataCEP(msg); } free(jsonArray);}

Page 125: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

137

Arduinos – Coordenador de recebimento de eventos• Código de envio de mensagens de config ao dispositivo

void sendMessageConfig(String mac) { String jsonConfig = getDeviceConfig(mac);if (jsonConfig.length() > 0) { sendMessageDevice(jsonConfig); }}

String getDeviceConfig(String mac) { String body = ""; httpRequest("192.168.1.112", 8080, "/devicemanager/device/sensoring/" + mac); [...] body = parseBody(body); } else { Serial.println("Sem retorno"); } body.trim(); return body;}

Page 126: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

138

Arduinos – Coordenador de recebimento de eventos• Buscar config no Gerenciador de Dispositivos

void httpRequest(const char * server, unsigned long port, String url) {if (client.connect(server, port)) { client.println("GET " + url + " HTTP/1.1"); client.println("Host: " + String(server) + ":" + String(port)); client.println("User-Agent: arduino-ethernet"); client.println("Content-Type: application/json"); client.println("Cache-Control: no-cache"); client.println("Connection: close"); client.println(); delay(50); } else { Serial.println("connection failed"); }}

Page 127: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

139

Arduinos – Coordenador de recebimento de eventos• Enviar configuração ao dispositivo

void sendMessageDevice(String msg) {// Parse da mensagem JSON recebida do DM [...] msg.toCharArray(msgArray, msgsize); DynamicJsonBuffer jsonBuffer; JsonObject& root = jsonBuffer.parseObject(msgArray); [...] const char* env = root["sala"]; const char* sensortype = root["sensortype"]; const int pin = root["pin"]; [...] //formata a msg de resposta a solicitação do device char * json = getJSONConfig(macaddress, sensortype, env, measure, pin, tpin);

uint8_t * payload = (uint8_t *) json; Tx64Request tx = Tx64Request(addr64, payload, strlen(json)); xbee.send(tx); [...]}

Page 128: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

140

Arduinos – Coordenador de recebimento de eventos• Código de envio de mensagens para o WSO2-CEP

void sendDataCEP(String msg) { httpRequest("192.168.1.112", 9763, "/endpoints/httpInputSensor/SensorBuilder", getDataToCEP(msg) );}

Page 129: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

141

Arduinos – Coordenador de recebimento de eventos

• Código de envio de mensagens para o WSO2-CEP• Formato mapeado no Event Builder:

{"id":"0013A2004076DAF9","type":"LM335","env":"SL102","data":28.00,"measure":"C"}

char * getDataToCEP(String json) {[...] int jsonLen = json.length() + 1; // parser do evento recebido do dispositivo [...] JsonObject& root = jsonBuffer.parseObject(jsonArray); [...] const char* sensorId = root["id"]; const char* type = root["type"]; [...] return getJSON(sensorId, type, date, time, env, data, measurement);}

Page 130: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

142

Arduinos – Coordenador de recebimento de eventos• Código de envio de mensagens para o CEP

void httpRequest(const char * server, unsigned long port, char * url, char * data) {[...]if (client.connect(server, port)) { String host = String (server); String sensorData = String (data); // Make a HTTP request: client.println("POST " + (String)url + " HTTP/1.1"); client.println("Host: " + host); client.println("User-Agent: arduino-ethernet"); client.println("Content-type: application/json"); client.println("Connection: close"); client.println("Content-length: " + (String)strlen(data) + "\n"); client.println(sensorData); client.println(); delay(50);} [...]

Page 131: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

143

Coordenador de atuação

Page 132: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

144

Arduinos – Coordenador de atuação

• Dispositivo resposável por• É iniciado como um servidor WEB e

disponibiliza uma API• Recebe a mensagem de atuação via

HTTP• do servidor CEP ou de qualquer aplicativo

• Identifica o dispositivo de atuação• Envia mensagem de atuação

Page 133: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

145

Arduinos – Coordenador de atuação

• Código de setupvoid setup() {[...]

Serial.begin(9600); // iniciar uma conexão Ethernet digitalWrite(statusLed, HIGH); Ethernet.begin(mac, ip); server.begin(); digitalWrite(statusLed, LOW);

Serial.print("Server ON no IP : "); Serial.println(Ethernet.localIP());}

[…]// MAC addressbyte mac[] = { 0x90, 0xA2, 0xDA, 0x03, 0x00, 0xA2};IPAddress ip(192, 168, 1, 163);

// Inicializa o Ethernet server libraryEthernetServer server(80);

[…]

Page 134: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

146

Arduinos – Coordenador de atuação• Processamento de mensagens recebidas

void loop() {// escutar as mensagens HTTP vindas dos clientes EthernetClient client = server.available(); String body = ""; if (client) { while (client.connected()) { if (client.available()) { // mensagem HTTP disponível char c = client.read(); body.concat(c); } else { break; } }}...

Page 135: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

147

Arduinos – Coordenador de atuação• Processamento de mensagens recebidas

...

digitalWrite(statusLed, HIGH);

// envia mensagem de Ok para o cliente sendAnswer(client); delay(10); digitalWrite(statusLed, LOW);

client.stop();

// envia a mensagem de atuação sendMessage ( parseBody(body) );}

Page 136: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

148

Arduinos – Coordenador de atuação• Envia uma resposta ao cliente de mensagem recebida

void sendAnswer(EthernetClient client) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println("Connection: close"); client.println(); client.println("{\"status\":\"OK\"}");}

Page 137: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

149

Arduinos – Coordenador de atuação• Forma a mensagem e envia ao dispositivo de atuação

void sendMessage(String msg) {[...] int msgsize = msg.length()+1; char * msgArray = (char *) malloc( sizeof( int ) * msgsize); msg.toCharArray(msgArray, msgsize); DynamicJsonBuffer jsonBuffer; JsonObject& root = jsonBuffer.parseObject(msgArray); const char* sensorId = root["sensorId"]; const char* type = root["type"]; const char* environment = root["environment"]; const char* action = root["action"];....

Page 138: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

150

Arduinos – Coordenador de atuação• continuação

... char macHigh[9], macLow[9]; strncpy(macHigh, sensorId, 8);macHigh[8]='\0'; strncpy(macLow, sensorId+8, 8);macLow[8]='\0';// uint32_t msb = strtoul(macHigh, 0, 16); uint32_t lsb = strtoul(macLow, 0, 16);//Seta o mac address do dispositivo de atuação addr64.setMsb (msb); addr64.setLsb (lsb);

uint8_t * payload = (uint8_t *) action; Tx64Request tx = Tx64Request(addr64, payload, strlen(action)); xbee.send(tx);

[...] }

Page 139: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

151

Atuador

Page 140: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

152

Arduinos – Atuador

• Dispositivo resposável por• Receber a mensagem de atuação do

coordenador e ativar o dispositivo associado por exemplo: um ar-condicionado, um luminária, um eletrodomêstico, etc...

Page 141: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

153

Arduinos – Atuador

• Código de setup

void setup() { pinMode(statusLed, OUTPUT); pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT);

pinMode(dispositivo, OUTPUT);

// start serial Serial.begin(9600); xbee.setSerial(Serial);

flashLed(statusLed, 3, 50);}

Page 142: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

154

Arduinos – Atuador• Código de recebimento de comando de atuação

void loop() { xbee.readPacket(5000); if (xbee.getResponse().isAvailable()) {[...] if (xbee.getResponse().getApiId() == RX_16_RESPONSE) { xbee.getResponse().getRx16Response(rx16); rxData = rx16.getData(); offset = rx16.getDataOffset(); lenData = rx16.getDataLength(); } else {[...] } doActuation();[...]}

Page 143: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

155

Arduinos – Atuador• Código de atuação

void doActuation() { String msg = dataToString(rxData, 0, lenData); msg.toUpperCase();

if (msg == "ON") { digitalWrite(dispositivo, HIGH); } else { digitalWrite(dispositivo, LOW); }}

Page 144: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

156

API REST Gerenciar dispositivos

Page 145: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

157

API REST - Gerenciar dispositivos

@RequestMapping(method = RequestMethod.GET, value = "/device/sensoring/{macAddress}")@ResponseBodypublic Object getDeviceMonitor(@PathVariable String macAddress)

throws Exception {try {

return dmService.getDeviceMonitor(macAddress);} catch (Exception e) {

throw new Exception("Ocorreu um erro ao processar dados! Erro="+e.getMessage());

}}

Page 146: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

158

Aplicação na prática

Page 147: Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2, Thomaz Barros 1, Everton Cavalcante 1,3, Marcelo Pitanga

Plataformas para aInternet das Coisas

Paulo F. Pires1, Flavia C. Delicato1, Thais Batista2, Thomaz Barros1, Everton Cavalcante1,3, Marcelo Pitanga1

1DCC/PPGI, Universidade Federal do Rio de Janeiro, Rio de Janeiro, Brasil2DIMAp, Universidade Federal do Rio Grande do Norte, Natal, Brasil

3IRISA-UMR CNRS/Université de Bretagne-Sud, Vannes, França