• Nenhum resultado encontrado

O IoTDSM baseou-se na proposta do Modulo Repositório, apresentado inicialmente pela arquitetura ViSIoT mas que se diferencia pela utilização dos conceitos de SOA e DaaS. A Figura

10mostra uma visão geral do IoTDSM:

∙ Data Source Management: refere-se à conexão com diferentes dados de sensores, realiza o tratamento, conversão e inserção dos dados em bancos de dados e oferece um mecanismo flexível, chamado Wrapper, para a manipulação de dados heterogêneos;

∙ Database Management: possibilita a conexão e administração de diferentes tipos de bancos de dados (SQL e NoSQL);

∙ File System: gerencia dados não estruturados (e.g., imagem, áudio e video). Nesse sentido, outros tipos de sistemas de arquivos podem ser utilizados (e.g., Sistemas de Arquivos Distribuídos);

∙ Conversion: habilita a conversão de dados em diferentes formatos, sendo suportados o JSON e o XML. A motivação de sua escolha deve-se ao fato de serem especificações estabelecidas pela World Wide Web Consortium (W3C) e Internet Engineering Task Force (IETF) e;

∙ Communication: permite o recebimento de informações enviadas por um cliente HTTP. Este módulo permite também o acoplamento de outros protocolos de comunicação, por exemplo, MQTT, CoAP, AMQP, WebSockets, entre outros.

60 Capítulo 4. Desenvolvimento do Trabalho

Figura 10 – Diagrama de Arquitetura do IoTDSM.

O diagrama de sequência expresso na Figura11 representa o fluxo de operações do IoTDSM, descrito a seguir:

∙ Data Consumption: requisita dados e comunica com diferentes tipos de clientes por meio de uma interface de comunicação RESTful API;

∙ Processing Engine: processa informações requisitadas pelos clientes e habilita a serializa- ção e deserialização de dados em diferentes formatos;

∙ Data Storage: provê uma camada de persistência de dados que suporta diferentes tipos de bancos de dados (SQL ou NoSQL);

∙ Wrapper: abstração que permite a conexão com diferentes tipos de dados de sensores e; ∙ Data Source: armazena dados de sensores disponíveis em diferentes formatos.

Observamos através do diagrama que o fluxo ocorre da seguinte maneira: (i) o Data Consumptionrealiza uma requisição ao Process Engine; (ii) o Process Engine consulta o Data Storagepara saber quais são os sensores disponíveis; e, (iii) os dados são retornados pelo Process Engine, que serializa e retorna os dados requisitados. Uma vez que os dados estão disponíveis, o processo de recuperação executa o seguintes passos: (i) o Data Consumption solicita ao Process

4.3. Metodologia Adotada para o Desenvolvimento da Pesquisa 61

Figura 11 – Diagrama de Sequência do IoTDSM.

Engineos sensores disponíveis, e (ii) os dados referentes ao sensor requisitado são consultados e serializados no formato desejado, sendo por fim enviados ao Data Consumption. Observa-se que os processos Wrapper e Data Source são executados em loop, o que permite a integração contínua de diferentes tipos de dados de sensores. Além disso, é importante frisar que a definição do Wrapper é de responsabilidade do usuário que detém o domínio sobre os dados. Portanto, a presença de um especialista, que detém o conhecimento sobre os dados processados, é necessário para a construção de um novo Wrapper.

O Código Fonte 1ilustra o funcionamento base de um Wrapper no IoTDSM. Impor- tante destacar que a classe Wrapper baseia-se na implementação de uma interface chamada IDeserializerque obrigada a implementação dos seguintes métodos: readObject(), readArray(), loadContent(String... args) e close(). O fluxo de execução do Wrapper se inicia no método loadContent(String... args)que recebe como parâmetro informações sobre os dados que serão processados pelo Wrapper. Em seguida, tendo as referências necessárias para leitura dos dados os métodos readObject() ou readArray() são utilizados para leitura de uma ou mais linhas do streamde dados. Importante frisar que nestes métodos o usuário detetor do domínio dos dados fica responsável por implementar todas as transformações necessárias para o seu armazenamento

62 Capítulo 4. Desenvolvimento do Trabalho

no modelo de banco de dados utilizado no IoTDSM. Por fim, após finalizar o transformações e armazenamento dos dados, o método close() fica com a responsabilidade de finalizar todas as transações evolvidas durante o processamento de importação dos dados.

Código-fonte 1 – Exemplo Base de uma classe Wrapper. 1 package edu . u s p . i c m c . l a s d p c . d e s e r i a l i z a t i o n ; 2 3 i m p o r t edu . u s p . i c m c . l a s d p c . model . * ; 4 i m p o r t j a v a . u t i l . * ; 5 i m p o r t j a v a . i o . F i l e ; 6 i m p o r t j a v a . i o . F i l e N o t F o u n d E x c e p t i o n ; 7 8 / * * 9 * U n i v e r s i t y o f S ã o P a u l o

10 * I n t e r n e t o f T h i n g s Data a s S e r v i c e Module ( IoTDSM ) 11 * @author V i n i c i u s A i r e s B a r r o s < v i n i c i u s a i r e s @ u s p . br > 12 * / 13 p u b l i c c l a s s WrapperExample i m p l e m e n t s I D e s e r i a l i z e r { 14 15 / / C l a s s e u t i l i z a d a p a r a l e i t u r a do s t r e a m de Dados de E n t r a d a 16 p r i v a t e S c a n n e r f i l e S t r e a m ; 17 18 / / C l a s s e q u e m a p e i a a t a b e l a t b _ s e n s o r _ s o u r c e 19 p r i v a t e S e n s o r S o u r c e s e n s o r S o u r c e ; 20 21 / / C l a s s e q u e m a p e i a a t a b e l a t b _ s e n s o r _ m e a s u r e _ t y p e 22 p r i v a t e S e n s o r M e a s u r e T y p e s e n s o r M e a s u r e T y p e ; 23 24 / / C l a s s e q u e m a p e i a a t a b l e a t b _ s e n s o r 25 p r i v a t e S e n s o r s e n s o r ; 26 27 / / C l a s s e q u e m a p e i a a t a b e l a t b _ s e n s o r _ m e a s u r e 28 L i s t < S e n s o r M e a s u r e > s e n s o r M e a s u r e s = new A r r a y L i s t < > ( ) ; 29 30 /* 31 * Mé t o d o r e s p o n s á v e l p o r l e r e p r o c e s s a r a p e n a s uma l i n h a de um s t r e a m de d a d o s . 32 * / 33 @ O v e r r i d e 34 p u b l i c O b j e c t r e a d O b j e c t ( ) { 35 } 36 37 /* 38 * Mé t o d o r e s p o n s á v e l p o r l e r e p r o c e s s a r mú l t i p l a s l i n h a de um s t r e a m de d a d o s . 39 * / 40 @ O v e r r i d e 41 p u b l i c L i s t < O b j e c t > r e a d A r r a y ( ) { 42 } 43 44 /* 45 * Mé t o d o r e s p o n s á v e l p o r r e c e b e r um a r q u i v o como e n t r a d a e r e t o r n a r o s t r e a m de d a d o s 46 * / 47 @ O v e r r i d e 48 p u b l i c b o o l e a n l o a d C o n t e n t ( S t r i n g . . . a r g s ) { 49 } 50 51 /* 52 * Mé t o d o r e s p o n s á v e l p o r f i n a l i z a r o s t r e a m de d a d o s 53 * /

4.3. Metodologia Adotada para o Desenvolvimento da Pesquisa 63

54 @ O v e r r i d e

55 p u b l i c v o i d c l o s e ( ) {

56 }

57 }

Ainda se tratando do IoTDSM, temos que o Sistema de Gerenciamento de Banco de Dados (SGBD) é escolhido durante a inicialização do sistema no momento em que o arquivo de configuração do sistema é carregado. Este informa os parâmetros de conexão com o banco de dados. A Figura12ilustra o diagrama Entidade e Relacionamento (ER) que permitiu o suporte do IoTDSM à bancos de dados relacionais (SQL). Como é possível observar, cinco tabelas foram definidas para indexar informações relacionadas à localização dos dados, tipos de medidas e medidas de sensores. A escolha dos bancos de dados PostgreSQL e MongoDB deve-se ao fato de estes estarem entre os principais bancos de dados de código aberto disponíveis no mercado1. Além disso, o modelo ER foi também adaptado para suportar o banco de dados orientado a documentos MongoDB (Figura13), uma vez que suas estruturas de armazenamento diferem do modelo relacional. O modelo adaptado é semelhante ao apresentado, exceto pela não definição das chaves estrangeiras.

Deve-se salientar que o sistema de armazenamento de dados desenvolvido é flexível e possibilita a persistência de dados estruturados e não estruturados. Ele também provê uma API que possibilita a manipulação de dados por meio de uma interface Representational State Transfer (REST), que utiliza diretivas do protocolo HTTP para indicar as ações realizadas. Operações GET e POST foram implementadas para possibilitar a execução de operações ao sistema desenvolvido.

Figura 12 – Modelo Entidade Relacionamento.

64 Capítulo 4. Desenvolvimento do Trabalho

_id: ObjectId("59f15d35a7c4611e8cd2f7ce") name: "temperature sensor - Hurzuf" latitude: 44.549999 longitude: 34.283333 sensorSource: Object name: "OpenWeatherMap"    id: 1    create_time: "2017-10-26T01:57:41.748-0200" id: 1 create_time: "2017-10-26T01:57:41.778-0200" sensor _id: ObjectId("59f15d36a7c4611e8cd2f7d1") id: 1 create_time: 2014-03-15 06:00:00.000 value: "290.09" sensor_id: 1 sensor_measure_type_id: 1 sensor_measure _id: ObjectId("59f15d36a7c4611e8cd2f7cf") name: "temperature" unit: "K" id: 1 create_time: "2017-10-26T01:57:42.159-0200" sensor_id: 1 sensor_measure_type 1 1 * * 1 1 * * sensor_source _id: "sensor_source" create_time: "2017-10 26T01:57:41.748-0200" description: "Global Climate Data Source" name: "Open Weather Map"

Figura 13 – Modelo Orientado a Documentos.

A API implementada para a manipulação dos dados segue o padrão REST, no qual os verbos HTTP servem como indicativo de qual ação deve ser realizada pelo servidor. Os métodos implementados nela encontram-se na Tabela5. Considerando os parâmetros de entrada, tem-se que o offset e limit servem para controlar a lista de objetos retornados pela RESTFull API. O primeiro significa o número de objetos ignorados desde o início da lista, enquanto o segundo é utilizado para limitar o número de objetos retornados. Além disso, o parâmetro output_format indica qual o formato da resposta do servidor (XML, JSON ou CSV).

Tabela 5 – Endpoints diponibilizados pela API.

URL da Chamada Método

(verbo HTTP) Parâmetros de entrada Descrição

/sensor GET

offset(opcional), limit(opcional), output_format(opcional)

Retorna uma lista de todos os sensores cadastrados no sistema.

/sensor/{id_do_sensor}/measure GET output_format Retorna uma lista de medidas possíveis do sensor

/sensor/{id_do_sensor} /measure/{id_da_medida} /{data_início}/{data_fim}

GET output_format

Retorna uma lista de valores medidos de uma especificada medida de um sensor em um intervalo

de tempo. Os parâmetros de data devem estar no formato ISO 8601. O parâmetro

{data_fim} na URL é opcional.

/sensor/upload POST -

Recebe um arquivo JSON, XML ou CSV do Open Weather Map para armazenar os dados. Deve ser enviado no corpo da requisição com o nome de "file".

Por fim, a Tabela6descreve a linguagem de programação e frameworks utilizados para construção do IoTDSM.

4.3. Metodologia Adotada para o Desenvolvimento da Pesquisa 65

Tabela 6 – Ferramentas utilizadas para a construção do IoTDSM.

Ferramenta Versão Descrição

Java 1.8 Linguagem de Programação

Spark Java 2.8.0 Micro Web Framework

JPA Hibernate 5.2.12 Framework de Persistência de Dados Objeto/Relacional

GSON 2.7 Parser JSON

Xstream 1.4.10 Parser XML

PostgreSQL JDBC 42.2.1 Conector para Banco de Dados Mongo Java Driver 3.5.0 Conector para Banco de Dados

IoTM

2

B: Internet of Things Multi-Protocol Message Broker

Neste trabalho estendemos O IoTDSM para suportar diferentes protocolos de comunica- ção. Nesse sentido, foi implementada uma estratégia multi-protocolo chamada Internet of Things Multi-Protocol Message Broker(IoTM2B) que possibilitou a integração com os protocolos HTTP, MQTT e CoAP (Figura14). O IoTM2Bpermite a comunicação entre protocolos de comunicação distintos através da extração do corpo da mensagem, para posteriormente ser enviado ao sistema destinatário. Entretanto, ela também permite a integração com diferentes serviços IoT e sistema embarcados, auxiliando na construção de sistemas interoperáveis.

Send Send Send Sensor Sensor Sensor IoTM²B HTTP MQTT CoAP Other HTTP POST HTTP POST

Cloud

Local Cluster HTTP POST

Figura 14 – Diagrama de Arquitetura do IoTM2B.

A Figura15ilustra o fluxo de execução do IoTM2B. Observa-se que o objeto IoT Device or Serviceenvia uma requisição HTTP, MQTT ou CoAP ao serviço e, em sequência, o Protocol Translator extrai o corpo da mensagem e realiza uma nova requisição POST HTTP enviando os dados para um sistema destinatário. Diversos são os desafios relacionados à essa dinâmica, devido à translação de múltiplos protocolos e o baixo desempenho de bibliotecas de protocolos mais recentes, o que dificulta a interoperabilidade de sistemas IoT. Por fim, a Tabela7descreve a linguagem de programação e frameworks utilizados para construção do IoTM2B.

66 Capítulo 4. Desenvolvimento do Trabalho

IoT Device or

Service

Protocol

Translator

Receiver

HTTP, CoAP, MQTT or Other. Request Request HTTP POST Response Response

Figura 15 – Diagrama de Sequência do IoTM2B.

Tabela 7 – Ferramentas utilizadas para a construção do IoTM2B.

Ferramenta Versão Descrição

Java 1.8 Linguagem de Programação Eclipse Vert.x 3.5.0 Web Server HTTP e MQTT Eclipse Californium 1.0.6 Web Server CoAP

Eclipse Paho 1.4 MQTT Client

CoAPthon 4.0 CoAP Client

4.4

Considerações Finais

Neste capítulo foi abordado o desenvolvimento desta dissertação de maneira mais de- talhada. Para isso, foi descrita a arquitetura ViSIoT, utilizada como base para a construção do IoTDSM. Em seguida, apresentou-se a concepção e funcionamento do mecanismo desenvolvido, além de uma extensão de suas funcionalidades, que possibilitou a sua integração com diferentes tipos de fontes/formatos de dados e protocolos de comunicação.

67

CAPÍTULO

5

Documentos relacionados