Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2,...

147

Click here to load reader

Transcript of Plataformas para a Internet das Coisas Paulo F. Pires 1, Flavia C. Delicato 1, Thais Batista 2,...

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