Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação)....

63
Universidade Federal de Ouro Preto - UFOP Escola de Minas Colegiado do curso de Engenharia de Controle e Automação - CECAU Camilo Esteves Mendes de Avelar Domótica aplicada no monitoramento de água utilizando comunicação MQTT e arquitetura de microsserviços: uma solução IoT. Monografia de Graduação em Engenharia de Controle e Automação Ouro Preto, agosto de 2019

Transcript of Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação)....

Page 1: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Universidade Federal de Ouro Preto - UFOPEscola de Minas

Colegiado do curso de Engenharia de Controle eAutomaccedilatildeo - CECAU

Camilo Esteves Mendes de Avelar

Domoacutetica aplicada no monitoramento de aacutegua utilizandocomunicaccedilatildeo MQTT e arquitetura de microsserviccedilos uma soluccedilatildeo

IoT

Monografia de Graduaccedilatildeo em Engenharia de Controle e Automaccedilatildeo

Ouro Preto agosto de 2019

Camilo Esteves Mendes de Avelar

Domoacutetica aplicada no monitoramento de aacutegua utilizandocomunicaccedilatildeo MQTT e arquitetura de microsserviccedilos uma soluccedilatildeo

IoT

Monografia apresentada ao Curso de Enge-nharia de Controle e Automaccedilatildeo da Universi-dade Federal de Ouro Preto como parte dosrequisitos para a obtenccedilatildeo do Grau de Enge-nheiro de Controle e Automaccedilatildeo

Orientador Filipe Augusto Santos Rocha

Ouro Preto agosto de 2019

Catalogaccedilatildeo fichasisbinufopedubr

A948d Avelar Camilo E Mendes Domoacutetica aplicada no monitoramento de aacutegua utilizando comunicaccedilatildeo MQTTe arquitetura de microsserviccedilos [manuscrito] uma soluccedilatildeo IoT Camilo EMendes Avelar - 2019

62f il color tabs

Orientador Prof MSc Filipe A S Rocha Coorientador Prof Dr Agnaldo Joseacute da R Reis

Monografia (Graduaccedilatildeo) Universidade Federal de Ouro Preto Escola deMinas Departamento de Engenharia de Controle e Automaccedilatildeo e TeacutecnicasFundamentais

1 Internet das coisas (IOC) 2 Message Queuing Telemetry Transport(MQQT) 3 Arquitetura de software - Microsserviccedilos I Rocha Filipe A S IIReis Agnaldo Joseacute da R III Universidade Federal de Ouro Preto IV Titulo

CDU 6585

Resumo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Com istoexiste uma crescente demanda para aumentar a economia de aacutegua em todo o mundoCom o avanccedilo da tecnologia e seu faacutecil acesso tornou-se mais simples desenvolversistemas visando uma melhora nesta economia Este trabalho tem o propoacutesito decriar um sistema de Domoacutetica para controle de aacutegua simulando dados de um sensorde fluxo de aacutegua uma vaacutelvula solenoide como atuador e utilizando um RaspberryPiO sistema seraacute capaz de monitorar o uso de aacutegua mostrando os dados em graacuteficoe salvando-os em um banco de dados Seraacute construiacutedo um sistema de controle deusuaacuterios que seraacute capaz de criar editar e salvar dados de clientes para integrar nosistema A comunicaccedilatildeo entre o sensor e o Raspberry Pi seraacute feita via MQTT Ossistemas de comunicaccedilatildeo e usuaacuterios seratildeo construiacutedos de acordo com a arquiteturade microsserviccedilos sendo dois sistemas diferentes que se completam para realizar asoperaccedilotildees necessaacuterias Os sistemas de usuaacuterio e comunicaccedilatildeo juntamente com ossoftwares utilizados para monitoramento seratildeo configurados testados e os resultadosseratildeo apresentados no decorrer no trabalho A validaccedilatildeo do projeto seraacute feita atraveacutesde dados emulados a partir de um sistema criado para simular as informaccedilotildees dossensores

Palavras-chaves iot monitoramento microsserviccedilos mqtt node domoacuteticaraspberry pi economia de aacutegua

Abstract

Water saving is a recurring issue that has long ceased to be restricted to arid anddesert regions with low per capita water availability Hence there is a growing demandto increase water savings worldwide Since the tecnology has been modernised ithas become simpler to develop systems aimed at improving water savings Thispaper has the porpouse of create a Domotic system for water control simulatingdata from a water flux sensor solenoid valve as actuator and using a Raspberry PiThe system will be able to monitorize the use of the water showing the data andsaving it in a database A user control system will also be created that will be ableto create edit and save data about the system users to integrate with the wholesystem All the comunications between the sensor and the Raspberry Pi will be donevia MQTT and the comunication system and the users system will be built usingthe microservices architeture being two different systems that comunicate with eachother to do the necessary operations The users and comunication services togetherwith the softwares used for the monitoring will be set up tested and the results willbe shown in this paper

Key-words iot monitoring microservices mqtt node domotic raspberry pi watersaving

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 2: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Camilo Esteves Mendes de Avelar

Domoacutetica aplicada no monitoramento de aacutegua utilizandocomunicaccedilatildeo MQTT e arquitetura de microsserviccedilos uma soluccedilatildeo

IoT

Monografia apresentada ao Curso de Enge-nharia de Controle e Automaccedilatildeo da Universi-dade Federal de Ouro Preto como parte dosrequisitos para a obtenccedilatildeo do Grau de Enge-nheiro de Controle e Automaccedilatildeo

Orientador Filipe Augusto Santos Rocha

Ouro Preto agosto de 2019

Catalogaccedilatildeo fichasisbinufopedubr

A948d Avelar Camilo E Mendes Domoacutetica aplicada no monitoramento de aacutegua utilizando comunicaccedilatildeo MQTTe arquitetura de microsserviccedilos [manuscrito] uma soluccedilatildeo IoT Camilo EMendes Avelar - 2019

62f il color tabs

Orientador Prof MSc Filipe A S Rocha Coorientador Prof Dr Agnaldo Joseacute da R Reis

Monografia (Graduaccedilatildeo) Universidade Federal de Ouro Preto Escola deMinas Departamento de Engenharia de Controle e Automaccedilatildeo e TeacutecnicasFundamentais

1 Internet das coisas (IOC) 2 Message Queuing Telemetry Transport(MQQT) 3 Arquitetura de software - Microsserviccedilos I Rocha Filipe A S IIReis Agnaldo Joseacute da R III Universidade Federal de Ouro Preto IV Titulo

CDU 6585

Resumo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Com istoexiste uma crescente demanda para aumentar a economia de aacutegua em todo o mundoCom o avanccedilo da tecnologia e seu faacutecil acesso tornou-se mais simples desenvolversistemas visando uma melhora nesta economia Este trabalho tem o propoacutesito decriar um sistema de Domoacutetica para controle de aacutegua simulando dados de um sensorde fluxo de aacutegua uma vaacutelvula solenoide como atuador e utilizando um RaspberryPiO sistema seraacute capaz de monitorar o uso de aacutegua mostrando os dados em graacuteficoe salvando-os em um banco de dados Seraacute construiacutedo um sistema de controle deusuaacuterios que seraacute capaz de criar editar e salvar dados de clientes para integrar nosistema A comunicaccedilatildeo entre o sensor e o Raspberry Pi seraacute feita via MQTT Ossistemas de comunicaccedilatildeo e usuaacuterios seratildeo construiacutedos de acordo com a arquiteturade microsserviccedilos sendo dois sistemas diferentes que se completam para realizar asoperaccedilotildees necessaacuterias Os sistemas de usuaacuterio e comunicaccedilatildeo juntamente com ossoftwares utilizados para monitoramento seratildeo configurados testados e os resultadosseratildeo apresentados no decorrer no trabalho A validaccedilatildeo do projeto seraacute feita atraveacutesde dados emulados a partir de um sistema criado para simular as informaccedilotildees dossensores

Palavras-chaves iot monitoramento microsserviccedilos mqtt node domoacuteticaraspberry pi economia de aacutegua

Abstract

Water saving is a recurring issue that has long ceased to be restricted to arid anddesert regions with low per capita water availability Hence there is a growing demandto increase water savings worldwide Since the tecnology has been modernised ithas become simpler to develop systems aimed at improving water savings Thispaper has the porpouse of create a Domotic system for water control simulatingdata from a water flux sensor solenoid valve as actuator and using a Raspberry PiThe system will be able to monitorize the use of the water showing the data andsaving it in a database A user control system will also be created that will be ableto create edit and save data about the system users to integrate with the wholesystem All the comunications between the sensor and the Raspberry Pi will be donevia MQTT and the comunication system and the users system will be built usingthe microservices architeture being two different systems that comunicate with eachother to do the necessary operations The users and comunication services togetherwith the softwares used for the monitoring will be set up tested and the results willbe shown in this paper

Key-words iot monitoring microservices mqtt node domotic raspberry pi watersaving

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 3: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Catalogaccedilatildeo fichasisbinufopedubr

A948d Avelar Camilo E Mendes Domoacutetica aplicada no monitoramento de aacutegua utilizando comunicaccedilatildeo MQTTe arquitetura de microsserviccedilos [manuscrito] uma soluccedilatildeo IoT Camilo EMendes Avelar - 2019

62f il color tabs

Orientador Prof MSc Filipe A S Rocha Coorientador Prof Dr Agnaldo Joseacute da R Reis

Monografia (Graduaccedilatildeo) Universidade Federal de Ouro Preto Escola deMinas Departamento de Engenharia de Controle e Automaccedilatildeo e TeacutecnicasFundamentais

1 Internet das coisas (IOC) 2 Message Queuing Telemetry Transport(MQQT) 3 Arquitetura de software - Microsserviccedilos I Rocha Filipe A S IIReis Agnaldo Joseacute da R III Universidade Federal de Ouro Preto IV Titulo

CDU 6585

Resumo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Com istoexiste uma crescente demanda para aumentar a economia de aacutegua em todo o mundoCom o avanccedilo da tecnologia e seu faacutecil acesso tornou-se mais simples desenvolversistemas visando uma melhora nesta economia Este trabalho tem o propoacutesito decriar um sistema de Domoacutetica para controle de aacutegua simulando dados de um sensorde fluxo de aacutegua uma vaacutelvula solenoide como atuador e utilizando um RaspberryPiO sistema seraacute capaz de monitorar o uso de aacutegua mostrando os dados em graacuteficoe salvando-os em um banco de dados Seraacute construiacutedo um sistema de controle deusuaacuterios que seraacute capaz de criar editar e salvar dados de clientes para integrar nosistema A comunicaccedilatildeo entre o sensor e o Raspberry Pi seraacute feita via MQTT Ossistemas de comunicaccedilatildeo e usuaacuterios seratildeo construiacutedos de acordo com a arquiteturade microsserviccedilos sendo dois sistemas diferentes que se completam para realizar asoperaccedilotildees necessaacuterias Os sistemas de usuaacuterio e comunicaccedilatildeo juntamente com ossoftwares utilizados para monitoramento seratildeo configurados testados e os resultadosseratildeo apresentados no decorrer no trabalho A validaccedilatildeo do projeto seraacute feita atraveacutesde dados emulados a partir de um sistema criado para simular as informaccedilotildees dossensores

Palavras-chaves iot monitoramento microsserviccedilos mqtt node domoacuteticaraspberry pi economia de aacutegua

Abstract

Water saving is a recurring issue that has long ceased to be restricted to arid anddesert regions with low per capita water availability Hence there is a growing demandto increase water savings worldwide Since the tecnology has been modernised ithas become simpler to develop systems aimed at improving water savings Thispaper has the porpouse of create a Domotic system for water control simulatingdata from a water flux sensor solenoid valve as actuator and using a Raspberry PiThe system will be able to monitorize the use of the water showing the data andsaving it in a database A user control system will also be created that will be ableto create edit and save data about the system users to integrate with the wholesystem All the comunications between the sensor and the Raspberry Pi will be donevia MQTT and the comunication system and the users system will be built usingthe microservices architeture being two different systems that comunicate with eachother to do the necessary operations The users and comunication services togetherwith the softwares used for the monitoring will be set up tested and the results willbe shown in this paper

Key-words iot monitoring microservices mqtt node domotic raspberry pi watersaving

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 4: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Resumo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Com istoexiste uma crescente demanda para aumentar a economia de aacutegua em todo o mundoCom o avanccedilo da tecnologia e seu faacutecil acesso tornou-se mais simples desenvolversistemas visando uma melhora nesta economia Este trabalho tem o propoacutesito decriar um sistema de Domoacutetica para controle de aacutegua simulando dados de um sensorde fluxo de aacutegua uma vaacutelvula solenoide como atuador e utilizando um RaspberryPiO sistema seraacute capaz de monitorar o uso de aacutegua mostrando os dados em graacuteficoe salvando-os em um banco de dados Seraacute construiacutedo um sistema de controle deusuaacuterios que seraacute capaz de criar editar e salvar dados de clientes para integrar nosistema A comunicaccedilatildeo entre o sensor e o Raspberry Pi seraacute feita via MQTT Ossistemas de comunicaccedilatildeo e usuaacuterios seratildeo construiacutedos de acordo com a arquiteturade microsserviccedilos sendo dois sistemas diferentes que se completam para realizar asoperaccedilotildees necessaacuterias Os sistemas de usuaacuterio e comunicaccedilatildeo juntamente com ossoftwares utilizados para monitoramento seratildeo configurados testados e os resultadosseratildeo apresentados no decorrer no trabalho A validaccedilatildeo do projeto seraacute feita atraveacutesde dados emulados a partir de um sistema criado para simular as informaccedilotildees dossensores

Palavras-chaves iot monitoramento microsserviccedilos mqtt node domoacuteticaraspberry pi economia de aacutegua

Abstract

Water saving is a recurring issue that has long ceased to be restricted to arid anddesert regions with low per capita water availability Hence there is a growing demandto increase water savings worldwide Since the tecnology has been modernised ithas become simpler to develop systems aimed at improving water savings Thispaper has the porpouse of create a Domotic system for water control simulatingdata from a water flux sensor solenoid valve as actuator and using a Raspberry PiThe system will be able to monitorize the use of the water showing the data andsaving it in a database A user control system will also be created that will be ableto create edit and save data about the system users to integrate with the wholesystem All the comunications between the sensor and the Raspberry Pi will be donevia MQTT and the comunication system and the users system will be built usingthe microservices architeture being two different systems that comunicate with eachother to do the necessary operations The users and comunication services togetherwith the softwares used for the monitoring will be set up tested and the results willbe shown in this paper

Key-words iot monitoring microservices mqtt node domotic raspberry pi watersaving

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 5: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Abstract

Water saving is a recurring issue that has long ceased to be restricted to arid anddesert regions with low per capita water availability Hence there is a growing demandto increase water savings worldwide Since the tecnology has been modernised ithas become simpler to develop systems aimed at improving water savings Thispaper has the porpouse of create a Domotic system for water control simulatingdata from a water flux sensor solenoid valve as actuator and using a Raspberry PiThe system will be able to monitorize the use of the water showing the data andsaving it in a database A user control system will also be created that will be ableto create edit and save data about the system users to integrate with the wholesystem All the comunications between the sensor and the Raspberry Pi will be donevia MQTT and the comunication system and the users system will be built usingthe microservices architeture being two different systems that comunicate with eachother to do the necessary operations The users and comunication services togetherwith the softwares used for the monitoring will be set up tested and the results willbe shown in this paper

Key-words iot monitoring microservices mqtt node domotic raspberry pi watersaving

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 6: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Lista de ilustraccedilotildees

Figura 1 Arquitetura baacutesica de microprocessadores e microcontroladores 15Figura 2 Raspberry Pi 16Figura 3 Sensor de fluxo de aacutegua YF-S201 17Figura 4 Teclado Matricial de Membrana 17Figura 5 Circuito do teclado 18Figura 6 Pinagem do teclado 18Figura 7 Vaacutelvula Solenoide 19Figura 8 Dashboard geneacuterico do HomeAssistant 20Figura 9 Exemplo arquitetura de microsserviccedilos 23Figura 10 Exemplo da arquitetura do MQTT 24

Figura 11 Arquitetura geral do projeto 26Figura 12 Modelo Entidade Relacionamento do PostgreSQL 29Figura 13 Modelo das tabelas criadas no banco de dados 31Figura 14 Divisatildeo dos arquivos do Sistema de Usuaacuterios 33Figura 15 Exemplo do sistema de simulaccedilatildeo 35Figura 16 Paacutegina inicial do HomeAssistant acessado por um cliente conectado na

mesma rede local do servidor Hassbian 36Figura 17 Paacutegina inicial do Grafana 37Figura 18 Configuraccedilatildeo do graacutefico no Grafana 38

Figura 19 Cadastro de usuaacuterios 39Figura 20 Ediccedilatildeo de tempo permitido do usuaacuterio 40Figura 21 Ediccedilatildeo de senha do usuaacuterio 40Figura 22 Adicionando banhos ao usuaacuterio 41Figura 23 Recuperar dados do usuaacuterio 41Figura 24 Recuperar dados de banhos do usuaacuterio 42Figura 25 Exemplo de usuaacuterio natildeo autorizado 42Figura 26 Exemplo de usuaacuterio autorizado 43Figura 27 Exemplo do graacutefico no Grafana para usuaacuterios diferentes 44Figura 28 Exemplo do sensor no HomeAssistant quando ligado 44Figura 29 Exemplo do sensor no HomeAssistant quando desligado 44Figura 30 Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado 45

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 7: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Lista de tabelas

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacuterico 19

Tabela 2 Colunas da tabela users 30Tabela 3 Colunas da tabela user_settings 30Tabela 4 Colunas da tabela user_baths 30Tabela 5 Endpoints do sistema de usuaacuterios 34Tabela 6 Toacutepicos do broker MQTT 34

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 8: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Lista de coacutedigos

31 Exemplo de configuraccedilatildeo headless 2832 Exemplo de configuraccedilatildeo do IP estaacutetico 2933 Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB 32A1 Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio 51A2 Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios 52A3 Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios 53A4 Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios 54A5 Exemplo do coacutedigo do interactor de cadastro de banhos 55A6 Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios 56B1 Exemplo do coacutedigo de comunicaccedilatildeo MQTT 57B2 Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho 58B3 Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB 60B4 Coacutedigo principal do sistema 61

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 9: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Lista de abreviaturas e siglas

IP Internet Protocol

TSDB Banco de Dados de Seacuteries Temporais

MQTT Message Queueing Telemetry Transport

IoT Internet of Things

TCP Transmission Control Protocol

SSH Secure Shell

RAM Random Access Memory

IO Input Output

MHz mega hertz

WiFi Wireless Fidelity

PWM Pulse with modulation

HTTP Hypertext Transfer Protocol

RESTful Representational State Transfer

API Application Programming Interface

BLE Bluetooth Low Energy

SD Secure Digital

JSON Javascript Object Notation

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 10: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Sumaacuterio

Lista de coacutedigos 8

1 Introduccedilatildeo 1211 Objetivos 13

111 Objetivos especiacuteficos 1312 Organizaccedilatildeo do trabalho 14

2 Materiais e Softwares 1521 Microcontroladores e Microprocessadores 15

211 Raspberry Pi 1622 Sensores e atuadores 16

221 Sensor de fluxo YF-S201 16222 Teclado matricial de membrana 17223 Vaacutelvula solenoide 19

23 Softwares 20231 HomeAssistant 20232 Banco de dados de seacuteries temporais 21

2321 InfluxDB 212322 Grafana 22

233 Banco de dados relacional 222331 PostgreSQL 22

234 NodeJS 22235 Arquitetura de microsserviccedilos 23236 Protocolo de comunicaccedilatildeo MQTT 23

2361 MQTT Mosquitto 25

3 Metodologia 2631 Funcionamento do sistema 26

311 Paracircmetros de operaccedilatildeo 27312 Dados gerados 27313 Ligardesligar atuador 27

32 Configuraccedilatildeo do Raspberry Pi 2833 Criaccedilatildeo das tabelas no PostgreSQL 2934 Configuraccedilatildeo do InfluxDB 3135 Microsserviccedilos 32

351 Clean Architecture 32

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 11: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

352 Sistema de usuaacuterios 33353 Sistema de comunicaccedilatildeo MQTT 34354 Sistema de simulaccedilatildeo de dados 35

36 Configuraccedilatildeo do HomeAssistant 36361 Sensores 36

37 Configuraccedilatildeo do Grafana 37

4 Experimentos e Resultados 3941 Manipulaccedilatildeo de usuaacuterios 3942 Visualizaccedilatildeo via Grafana 4343 Estado do atuador via HomeAssistant 43

5 Consideraccedilotildees Finais 46

Referecircncias 47

Apecircndices 50

APEcircNDICE A Coacutedigo sistema de usuaacuterios 51

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 57

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 12: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

12

1 Introduccedilatildeo

Cerca de 70 da superfiacutecie do planeta eacute coberta por aacutegua quase toda salgadae portanto improacutepria para o consumo humano Apenas 25 desse total eacute potaacutevel e amaior parte das reservas (cerca de 80) estaacute concentrada em geleiras nas calotas polaresEssa quantidade reduzida de recursos hiacutedricos aliada ao contiacutenuo e intenso crescimentodemograacutefico ao longo dos anos o desenvolvimento industrial e por consequecircncia o aumentodo consumo de aacutegua nas grandes cidades tem sido um dos principais temas de discussotildeese palestras de conscientizaccedilatildeo ambiental por todo o mundo (FERREIRA et al 2007)

Pesquisas em 2007 indicaram que em poucas deacutecadas as reservas de aacutegua docedo planeta natildeo seratildeo suficientes para suprir as necessidades humanas caso os niacuteveis deconsumo natildeo sejam controlados desde jaacute (DIAacuteRIAS et al 2007) A escassez deste recursoessencial agrave vida acarretaraacute em problemas de ordem poliacutetica econocircmica e sanitaacuteria podendoateacute originar conflitos similares aos causados pelo domiacutenio do petroacuteleo

A economia de aacutegua eacute um assunto recorrente que haacute muito deixou de ser restrito agravesregiotildees aacuteridas e deseacuterticas com baixa disponibilidade de aacutegua per capita Isto faz com quegovernos e organizaccedilotildees de todo o mundo estejam com atenccedilotildees voltadas para a criaccedilatildeode poliacuteticas de consumo sustentaacutevel programas de educaccedilatildeo ambiental alternativas esoluccedilotildees para a reduccedilatildeo e controle do uso da aacutegua (FERREIRA HEROSO ZALESKI2014)

A fim de evitar consequecircncias como a escassez da aacutegua o consumo responsaacutevelencabeccedila a lista de medidas a serem tomadas por se tratar de uma atitude factiacutevel a todasas pessoas (DIAacuteRIAS et al 2007) Recentemente avanccedilos em recursos computacionais etecnologias de eletrocircnicos permitiram a criaccedilatildeo do IoT (Internet of Things ou Internetdas Coisas) evidenciado no paraacutegrafo a seguir PERUMAL SULAIMAN LEONG (2016)descrevem a Internet das Coisas como sendo um meacutetodo para conectar coisas como sensorese interruptores em torno do ambiente e realizar um certo tipo de troca de mensagem entreeles integrando-os

O IoT representa uma rede mundial de dispositivos interconectados e unicamenteendereccedilados Esta conectividade entre sensores e atuadores permite o compartilhamentode informaccedilotildees entre plataformas atraveacutes de um framework unificado desenvolvendo umacomum capacidade de criar aplicaccedilotildees inovadoras (Risteska Stojkoska TRIVODALIEV2017) Uma das grandes influecircncias do IoT eacute no monitoramento do ambiente em quevivemos sistemas de alarmes e anaacutelise de dados ambientais (PERUMAL SULAIMAN

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 13: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 1 Introduccedilatildeo 13

LEONG 2016)

O desenvolvimento de tecnologias de infraestrutura no iniacutecio do seacuteculo XX comoas redes de aacutegua e esgoto gaacutes encanado e eletricidade fizeram com que a residecircncias seconectassem com o meio externo tornando-se um noacute de uma grande rede (FORTY 2007)Com o advento da Internet essa ligaccedilatildeo se acentuou permitindo ainda mais conectividadecomo os celulares se conectando agrave dispositivos como eletrodomeacutesticos (Varela De Souza etal 2016)

Segundo Varela De Souza et al (2016) a palavra ldquoDomoacuteticardquo resulta da junccedilatildeoda palavra latina ldquoDomusrdquo que significa casa com ldquoRoboacuteticardquo que pode ser entendidocomo controle automatizado de algum processo ou equipamento Seu uso pode trazersignificativas vantagens a seus usuaacuterios como a otimizaccedilatildeo e gestatildeo de recursos praticidadeseguranccedila controle e monitoramento remoto dos dispositivos automatizados

11 ObjetivosO objetivo deste trabalho eacute desenvolver um sistema modular de baixo custo

baseado em microsserviccedilos e em IoT para monitoramento e controle de consumo de aacuteguaem chuveiros eleacutetricos residenciais atraveacutes da integraccedilatildeo entre dispositivos e camadas desoftwares

O sistema seraacute capaz de armazenar e exibir dados vindos dos sensores de fluxo deaacutegua em chuveiros conectados atraveacutes da rede Wi-Fi aleacutem de comandar um atuador parainterromper o fornecimento da aacutegua sob certas circunstacircncias

Seraacute criado tambeacutem um sistema que emularaacute os dados provindos do sensor atuadore teclado utilizados

111 Objetivos especiacuteficos

bull Armazenar dados para levantamentos estatiacutesticos

bull Implementar o sistema de identificaccedilatildeo e controle de usuaacuterios

bull Implementar o sistema de interface

bull Implementar o sistema de atuaccedilatildeo

bull Implementar o sistema de emulaccedilatildeo de dados

bull Integrar todos os sistemas a fim de garantir as funcionalidades do projeto

bull Monitorar em ambiente online os paracircmetros do sistema

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 14: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 1 Introduccedilatildeo 14

12 Organizaccedilatildeo do trabalhoO presente trabalho estaacute organizado em 5 capiacutetulos No Capiacutetulo 1 encontra-se

a apresentaccedilatildeo do problema e suas possiacuteveis soluccedilotildees aleacutem de apresentar os objetivospropostos

O Capiacutetulo 2 consiste na revisatildeo sobre os hardwares e softwares utilizados noprojeto encontram-se as definiccedilotildees e explicaccedilotildees dos mesmos

No Capiacutetulo 3 eacute apresentado a estrutura geral do sistema a metodologia em quefoi construiacutedo Explica-se tambeacutem as etapas do desenvolvimento e coacutedigos implementados

O Capiacutetulo 4 trata dos experimentos realizados no sistema e seus resultados

No Capiacutetulo 5 satildeo abordadas as consideraccedilotildees finais do trabalho e os possiacuteveistrabalhos futuros

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 15: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

15

2 Materiais e Softwares

Nas seccedilotildees a seguir satildeo apresentados os hardwares e softwares utilizados na cons-truccedilatildeo do sistema proposto

21 Microcontroladores e MicroprocessadoresBuscando aumentar a eficiecircncia no processamento de dados na deacutecada de 70

comeccedilaram a ser utilizados microprocessadores em computadores (MARTINS 2005)Os microprocessadores satildeo componentes dedicados ao processamento de informaccedilotildeescom capacidade de caacutelculos matemaacuteticos e endereccedilamento de memoacuteria externa (CHASEALMEIDA 2007)

Por sua vez os microcontroladores satildeo pequenos sistemas computacionais poderososque englobam em um uacutenico chip interfaces de entradasaiacuteda digitais e analoacutegicas memoacuteriaRAM memoacuteria FLASH interfaces de comunicaccedilatildeo serial conversores analoacutegicosdigitaistemporizadorescontadores e um microprocessador (CHASE ALMEIDA 2007)

Na Figura 1 pode-se observar algumas das diferenccedilas entre Microprocessadores eMicrocontroladores O microcontrolador embarca todos os componentes necessaacuterios ao seufuncionamento enquanto o microprocessador precisa de comunicar externamente com osperifeacutericos similares

Figura 1 ndash Arquitetura baacutesica de microprocessadores e microcontroladores

Fonte CHASE ALMEIDA (2007)

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 16: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 16

211 Raspberry Pi

O Raspberry Pi (Figura 2) eacute um minicomputador criado pela Raspberry Pi Founda-tion Seu objetivo eacute estimular o ensino da ciecircncia da computaccedilatildeo nas escolas e universidadesApesar do Raspberry Pi possuir o hardware em uma uacutenica placa eletrocircnica de tamanhoreduzido seu potencial de processamento eacute significativo (CROTTI et al 2013) O Rasp-berry Pi pode ser usado em diversos projetos tecnoloacutegicos como experimentos remotosnos quais sua funccedilatildeo eacute ser um micro servidor web (CROTTI et al 2013)

Figura 2 ndash Raspberry Pi

22 Sensores e atuadoresNesta seccedilatildeo seratildeo apresentados os sensores e atuadores a terem seus sinais utilizados

no projeto

221 Sensor de fluxo YF-S201

O sensor YF-S201 (Figura 3) eacute um sensor do tipo turbina que mede a quantidadede liacutequido que passa pela tubulaccedilatildeo girando aletas que geram pulsos de onda quadradaatraveacutes de um sensor de efeito Hall (ROQUE SABINO 2018) O sensor usa esse efeitopara enviar um sinal PWM (Pulse Width Modulation) e atraveacutes da contagem deste sinaleacute possiacutevel mensurar a quantidade de aacutegua que passa pela turbina no interior do sensor(JUacuteNIOR AREcircAS SENA 2017)

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 17: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 17

Figura 3 ndash Sensor de fluxo de aacutegua YF-S201

222 Teclado matricial de membrana

Teclados permitem que usuaacuterios insiram informaccedilotildees em diversos tipos de sistemascomo computadores calculadoras controles remotos entre outros (OLIVEIRA 2018)O Teclado Matricial de Membrana 4X4 (Figura 4) foi desenvolvido com a finalidade defacilitar a entrada de dados em projetos com plataformas microcontrolada (PICORETI2017) Este teclado possui 16 teclas sendo 10 teclas satildeo numeacutericas 4 literais e 2 caracteresespeciais

Figura 4 ndash Teclado Matricial de Membrana

Fonte OLIVEIRA (2018)

As teclas estatildeo dispostas em 4 linhas por 4 colunas e o teclado possui um conectorde 8 pinos para ligaccedilatildeo Quando um botatildeo do teclado eacute pressionado ele conecta a linhacom a coluna na qual estaacute ligado gerando um sinal nos pinos referente agravequela linhacolunaEste sinal permite a identificaccedilatildeo da tecla apertada pelo sistema O circuito do tecladoestaacute exemplificado na Figura 5

A Tabela 1 possui as informaccedilotildees da distribuiccedilatildeo dos pinos em tabelas e colunasexemplificada na Figura 6

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 18: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 18

Figura 5 ndash Circuito do teclado

Fonte PICORETI (2017)

Figura 6 ndash Pinagem do teclado

Fonte PICORETI (2017)

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 19: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 19

Tabela 1 Tabela de disposiccedilatildeo dos pinos do teclado numeacutericoPino Localizaccedilatildeo1 Linha 12 Linha 23 Linha 34 Linha 45 Coluna 16 Coluna 27 Coluna 38 Coluna 4

223 Vaacutelvula solenoide

Solenoacuteides satildeo dispositivos eletromecacircnicos baseados no deslocamento causado pelaaccedilatildeo de um campo magneacutetico gerado por uma bobina e satildeo muito utilizados na construccedilatildeode outros dispositivos como eacute o caso das vaacutelvulas para controle de fluidos Em particularas vaacutelvulas para baixas vazotildees (da ordem de mililitros por minuto) e baixas pressotildeestecircm sido amplamente aplicadas em equipamentos e montagens para uso em laboratoacuterioscliacutenicos e quiacutemicos (SILVA LAGO 2002) Elas satildeo de pequenas dimensotildees e requerembaixa tensatildeo e corrente de acionamento

A vaacutelvula solenoide pode ser vista na Figura 7

Figura 7 ndash Vaacutelvula Solenoide

Segundo SILVA LAGO (2002) a estrateacutegia para fechamento e abertura dos canaisfluiacutedicos depende do fabricante mas o princiacutepio de acionamento eleacutetrico eacute comumente omesmo Uma tensatildeo eacute aplicada sobre um solenoide criando um campo magneacutetico quedesloca um nuacutecleo ferromagneacutetico moacutevel causando a alteraccedilatildeo do estado da vaacutelvula Onuacutecleo ferromagneacutetico comprime uma mola que eacute a responsaacutevel por retornar o nuacutecleo asua posiccedilatildeo original quando a corrente eleacutetrica eacute interrompida

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 20: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 20

23 SoftwaresOs softwares que foram utilizados para a implementaccedilatildeo do sistema estatildeo presentes

nesta seccedilatildeo

231 HomeAssistant

O HomeAssistant eacute um plataforma de automaccedilatildeo escrita em Python Inclui compo-nentes contribuiacutedos por usuaacuterios que permite a interface com Web Services e dispositivoscomo sensores microcontroladores e assistentes virtuais (LUNDRIGAN et al 2017) Emseu nuacutecleo o HomeAssistant eacute um protocolo de troca de mensagens que facilita a comuni-caccedilatildeo entre dispositivos e componentes funcionais na rede Provendo simples abstraccedilotildeesde componentes de automaccedilatildeo residencial como sensores cacircmeras players de muacutesica etc

A Figura 8 apresenta um exemplo de tela inicial do HomeAssistant Com vaacuteriossensores configurados na parte superior na parte esquerda encontra-se o menu do Home-Assistant e na parte central inferior pode-se observar informaccedilotildees sobre o clima e switchespara acionamento de interruptores e iluminaccedilatildeo

Figura 8 ndash Dashboard geneacuterico do HomeAssistant

Fonte Adaptado de Almeida Costa (2018)

O HomeAssistant tem suporte para diversos tipos de protocolos wireless como BLEZigBee Z-Wave e Wi-Fi Conta tambeacutem com um RESTful API e suporta HTTP MQTTTCP sockets e componentes customizados Estes componentes customizados permitem aos

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 21: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 21

usuaacuterios adicionar funccedilotildees proacuteprias no HomeAssistant sem a necessidade de mudar o seucoacutedigo fonte Isto torna a integraccedilatildeo de novos dispositivos e sensores muito mais faacutecil como HomeAssistant (GOMES SOUSA VALE 2018)

Tendo em vista a gama de protocolos sem fio disponiacuteveis no HomeAssistantescolhemos o padratildeo Wi-Fi pois segundo LUNDRIGAN et al (2017)

bull O custo dos equipamentos com padratildeo Wi-Fi eacute reduzido

bull Wi-Fi eacute o mais difuso dos protocolos wireless

bull Sensores Wi-Fi tem integraccedilatildeo facilitada com demais equipamentos residenciais

O HomeAssistant pode ser instalado em qualquer sistema operacional devido aofato de ser muito pequeno e leve O que o faz ser compatiacutevel para o uso no Rasberry Picomo um hub de automaccedilatildeo pequeno e barato Eacute importante lembrar que o HomeAssistantage apenas como uma central de controle que pode informar outros serviccedilos como o PhilipsHue ou o Nest que satildeo produtos para automaccedilatildeo residencial para realizar alguma funccedilatildeo(Almeida Costa 2018) O Home Assistant eacute gratuito e de faacutecil configuraccedilatildeo

232 Banco de dados de seacuteries temporais

Um Banco de Dados de Seacuteries Temporais do inglecircs Temporal Series Database(TSDB) eacute um tipo de banco otimizado para dados coletados no tempo Eacute implementadoespecificamente para lidar com meacutetricas eventos ou medidas que variam no tempo UmTSDB permite o usuaacuterio criar enumerar alterar destruir e organizar vaacuterias seacuteries temporaisde meacutetodos mais eficientes Atualmente a maioria das empresas estatildeo gerando um grandevolume de dados sobre meacutetricas e eventos que satildeo mapeados no tempo aumentando arelevacircncia de tal arquitetura (NOOR et al 2017)

Ainda segundo NOOR et al (2017) aplicaccedilotildees comuns para os TSDBs satildeo IoTDevOps e Analise de Dados Alguns casos de uso incluem monitoramento de sistemas desoftware como maacutequinas virtuais monitoramento de sistemas fiacutesicos como dispositivosambiente sistemas de automaccedilatildeo residencial dentre outros

2321 InfluxDB

O InfluxDB eacute o Banco de Dados de Seacuteries Temporais usado neste projeto sendo omais apto a guardar os dados de fluxo no tempo (LUNDRIGAN et al 2017)

Eacute um projeto open-source com o opcional de armazenamento pago em nuvemdesenvolvido pela empresa InfluxData Eacute escrito na linguagem de programaccedilatildeo Go ebaseado em uma linguagem de consulta parecida com o SQL (NOOR et al 2017)

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 22: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 22

2322 Grafana

Grafana eacute um projeto open-source para anaacutelise de dados de seacuteries temporais (NOORet al 2017) que realiza consultas destas seacuteries temporais a partir do InfluxDB exibindo osdados de maneira graacutefica (CHANG et al 2017)

233 Banco de dados relacional

Um Banco de Dados Relacional eacute capaz de salvar e referenciar dados para umaconsulta posterior Possui uma coleccedilatildeo de tabelas todas com identificadores uacutenicos quecompotildeem a base de dados Conceitos como integridade referencial de dados ndash que garantesincronia de dados entre tabelas ndash e chaves primaacuterias estatildeo presentes garantindo que umconjunto de informaccedilotildees possa ser representado de maneira consistente independente daforma de acesso (BOSCARIOLI et al 2006)

2331 PostgreSQL

O PostgreSQL eacute uma implementaccedilatildeo de um banco de dados relacional de coacutedigoaberto e de custo gratuito (STONES MATTHEW 2006) O PostgreSQL pode ser usadocom diversas linguagens de programaccedilatildeo como por exemplo Python Javascript Java eC++

O PostgreSQL ganhou diversos precircmios incluindo o Linux Journal Editorrsquos ChoiceAward for Best Database trecircs vezes e o 2004 Linux New Media Award for Best DatabaseSystem

234 NodeJS

O NodeJS tambeacutem chamado de Node eacute um ambiente de servidor que utiliza alinguagem de programaccedilatildeo JavaScript Eacute baseado no runtime do Google chamado demotor V8 O V8 e o Node satildeo implementados em C e C++ focados no desempenho ebaixo consumo de memoacuteria Embora o V8 suporte principalmente o uso de JavaScript nonavegador o Node foca no suporte de processos de servidores (TILKOV VINOSKI 2010)

O NodeJS utiliza um paradigma baseado em eventos e natildeo-bloqueador de IO oque o torna leve e eficiente Eacute perfeito para aplicaccedilotildees de tempo real que lidam com dadosintensos em dispositivos de baixo poder de processamento (SAPES SOLSONA 2016)

O Node eacute um dos ambientes e frameworks mais famosos que suportam o desenvol-vimento de servidores utilizando o JavaScript A comunidade criou um grande ecossistemade bibliotecas e vasta documentaccedilatildeo de suporte ao Node (TILKOV VINOSKI 2010)

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 23: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 23

235 Arquitetura de microsserviccedilos

Seguindo a definiccedilatildeo de NAMIOT SNEPS-SNEPPE (2014) a arquitetura demicrosserviccedilos trata do desenvolvimento de uma aplicaccedilatildeo que baseia na existecircncia dediversos pequenos serviccedilos independentes Cada um dos serviccedilos deve rodar em seu proacuteprioprocesso independente Estes serviccedilos podem comunicar entre si utilizando mecanismos levesde comunicaccedilatildeo (geralmente em torno no HTTP) Os serviccedilos devem ser absolutamenteindependentes

Um exemplo da arquitetura de microsserviccedilos estaacute na Figura 9

Figura 9 ndash Exemplo arquitetura de microsserviccedilos

Microsserviccedilos satildeo os resultados da decomposiccedilatildeo funcional de uma aplicaccedilatildeo Satildeocaracterizados pela definiccedilatildeo de sua interface e funccedilatildeo no sistema Como cada serviccedilo deveser independente uma alteraccedilatildeo na sua implementaccedilatildeo natildeo deve afetar o funcionamentodos demais (PAHL JAMSHIDI 2016)

236 Protocolo de comunicaccedilatildeo MQTT

MQTT significa Message Queuing Telemetry Transport traduzido para o portuguecircscomo Transporte de Telemetria de Enfileiramento de Mensagens Eacute um protocolo detransporte leve que otimiza o uso da a largura de banda de rede1 O MQTT trabalha sobre1 httppublicdheibmcomsoftwaredwwebservicesws-mqttmqtt-v3r1html

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 24: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 24

o protocolo TCP e garante a entrega de mensagens de um noacute para um servidor Sendoum protocolo orientado por troca de mensagens MQTT eacute ideal para aplicaccedilotildees IoT quecomumente tem recursos e capacidades limitados

Eacute um protocolo inicialmente desenvolvido pela IBM2 em 1999 sendo recentementereconhecido como padratildeo pela OASIS (Organizarion for the Advancement of StructuredInformation Standards)3

KODALI SORATKAL (2017) definiu o MQTT como um protocolo baseado empublishersubscriber Qualquer conexatildeo MQTT envolve dois tipos de agentes os clientes eum broker ou servidor Qualquer dispositivo ou programa que eacute conectado pela rede etroca mensagens atraveacutes do MQTT eacute chamado de cliente Um cliente pode ser tanto umpublisher eou um subscriber Um publisher publica mensagens e um subscriber requisita orecebimento de mensagens Um MQTT server eacute um programa que interconecta os clientesEle aceita e transmite as mensagens atraveacutes de muacuteltiplos clientes conectados agrave ele

Figura 10 ndash Exemplo da arquitetura do MQTT

Fonte LABORATORY (2018)

2 httpwwwhivemqcomblogmqtt-essentials-part-1-introducing-mqtt3 httpswwwoasis-openorgnewsannouncementsmqtt-version-3-1-1-becomes-an-oasis-standard

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 25: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 2 Materiais e Softwares 25

Dispositivos como sensores e celulares podem ser vistos como clientes do ponto devista da arquitetura MQTT Quando um cliente tem alguma informaccedilatildeo para transmitirele publica o dado para o broker

A Figura 10 apresenta um exemplo de arquitetura MQTT comum O broker MQTTou servidor MQTT eacute responsaacutevel por coletar e organizar os dados As mensagens publicadaspor clientes MQTT satildeo transmitidas para outros clientes MQTT que se inscreverem aotoacutepico O MQTT eacute desenhado para simplificar a implementaccedilatildeo no cliente por concentrartodas as complexidades no broker Os publishers e subscribers satildeo isolados o que significaque eles natildeo precisam conhecer a existecircncia do outro

2361 MQTT Mosquitto

O Mosquitto eacute um broker MQTT de coacutedigo aberto (KODALI SORATKAL 2017)que entrega uma implementaccedilatildeo de servidor e cliente MQTT Utiliza o modelo publisher-subscriber tem uma baixa utilizaccedilatildeo de rede e pode ser implementado em dispositivos debaixo custo como microcontroladores (LIGHT 2017)

Segundo LIGHT (2017) Mosquitto eacute recomendado para o uso sempre em que senecessita de mensagens leves particularmente em dispositivos com recursos limitados

O Projeto Mosquitto eacute um membro da Eclipse Foundation Existem trecircs partes noprojeto

bull O servidor principal Mosquitto

bull Os clientes mosquitto pub e mosquitto sub que conteacutem ferramentas para se comunicarcom o servidor MQTT

bull Uma biblioteca cliente MQTT escrita em C

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 26: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

26

3 Metodologia

Este Capiacutetulo apresenta a estrutura geral do sistema a configuraccedilatildeo inicial doRaspberry Pi a construccedilatildeo dos microsserviccedilos assim como as etapas de realizaccedilatildeo doprojeto A primeira etapa consiste no desenvolvimento do microsserviccedilo de cadastro econtrole de usuaacuterios Em seguida foi desenvolvido o sistema que recebe os dados via MQTTguardando-os no InfluxDB Com os dados sendo recebidos e devidamente guardados foramconfigurados o HomeAssistant e Grafana

A validaccedilatildeo do projeto seraacute feita atraveacutes de um sistema criado para emular os dadosvindos dos sensores atuadores e teclado

31 Funcionamento do sistemaNesta seccedilatildeo estatildeo descritos os paracircmetros utilizados pelo sistema os dados que

satildeo gerados assim como as respostas esperadas A arquitetura geral do sistema pode servisualizada na Figura 11 mostrando os sistemas desenvolvidos os toacutepicos do servidorMQTT e os sistemas que implementam os bancos de dados

Figura 11 ndash Arquitetura geral do projeto

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 27: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 27

311 Paracircmetros de operaccedilatildeo

Os paracircmetros de operaccedilatildeo satildeo utilizados pelo sistema para garantir o funcionamentoesperado Estes paracircmetros satildeo

bull Tempo de banho permitido eacute o tempo maacuteximo de banho permitido para cadausuaacuterio

bull Estado do chuveiro ligado ou desligado

bull Estado do usuaacuterio autorizado ou natildeo autorizado

Ao se criar um usuaacuterio eacute necessaacuterio informar trecircs dados nome do usuaacuterio senha etempo de banho permitido A senha eacute utilizada para autorizar o usuaacuterio a tomar o banhopara iniciar o banho o usuaacuterio deve digitar sua senha no teclado numeacuterico O tempo debanho permitido eacute o tempo maacuteximo em que o chuveiro pode ficar ligado ao exceder estelimite o atuador iraacute interromper o fluxo de aacutegua

O estado do chuveiro poderaacute ser observado no HomeAssistant que diraacute se ousuaacuterio estaacute com o chuveiro ligado ou desligado O HomeAssistant proveraacute informaccedilotildeespersonalizadas de acordo com o usuaacuterio

312 Dados gerados

O usuaacuterio ao digitar a sua senha correta no teclado numeacuterico liberaraacute o atuador eo fluxo de aacutegua comeccedilaraacute a passar pelo sensor de fluxo Este sensor iraacute gerar dados quedizem informaccedilotildees a respeito do fluxo volumeacutetrico de aacutegua passado por ele

Os dados do sensor satildeo gravados no InfluxDB e poderatildeo ser vistos no Grafana emforma de graacutefico sendo possiacutevel distinguir os usuaacuterios O sistema ao perceber uma paradano fluxo ou se o tempo de banho ultrapassar o limite de banho do usuaacuterio fecha o atuadore contabiliza o tempo total do banho tomado salvando-o no Banco de Dados PostgreSQL

313 Ligardesligar atuador

Para ligar o atuador o sistema necessita identificar o usuaacuterio e autenticaacute-lo Estaidentificaccedilatildeo e autenticaccedilatildeo eacute realizada via teclado numeacuterico O usuaacuterio eacute identificadopelo seu id que eacute fornecido no momento do seu cadastro Para realizar a identificaccedilatildeo ousuaacuterio deve pressionar a tecla seguido pelo seu id e Ao realizar a consulta o sistemaretorna o nome do usuaacuterio e requisita a senha

Apoacutes digitar a senha a tecla deve ser pressionada e o sistema iraacute comparar asenha digitada com a cadastrada no banco de dados Caso as senhas forem iguais o atuador

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 28: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 28

eacute ligado caso forem diferentes o sistema retorna que o usuaacuterio natildeo estaacute autenticado e natildeoliga o atuador

A Figura 15 mostra este fluxo de digitaccedilatildeo assim como a identificaccedilatildeo do usuaacuteriopelo id

32 Configuraccedilatildeo do Raspberry PiPara a configuraccedilatildeo inicial do Raspberry Pi eacute preciso fazer o download de um

sistema operacional compatiacutevel com o microcontrolador Para o sistema deste projetoutilizamos o Hassbian1 que foi instalado no cartatildeo SD a ser inserido no Raspberry Pi

Os sistemas deste projeto foram desenvolvidos diretamente no Raspberry Pi e parapossibilitar este desenvolvimento eacute necessaacuterio primeiramente configurar o ambiente doRaspberry Pi

O Raspberry Pi foi configurado para ser headless2 o que faz com que ele natildeonecessite de teclado mouse ou monitor para poder ser acessado Para conseguir acessar oRaspberry Pi nesta configuraccedilatildeo eacute necessaacuteria a utilizaccedilatildeo do SSH ou Secure Shell que eacuteum protocolo de rede criptograacutefico para operaccedilatildeo de serviccedilos de rede de forma segura3O SSH permite o login remoto no sistema operacional do Raspberry possibilitando ocompleto controle do sistema operacional de forma remota

A configuraccedilatildeo de rede do Raspberry Pi foi realizada para conter um IP estaacutetico(192168260 ) que facilita o acesso SSH ao sistema

O Coacutedigo 31 mostra um exemplo do arquivo wpa_supplicantconf que faz parteda configuraccedilatildeo headless servindo para conectar agrave rede automaticamente ao iniciar osRaspberry Pi Jaacute no Coacutedigo 32 podemos observar a configuraccedilatildeo do ip estaacutetico

1 update_config =12 ctrl_interface = varrun wpa_supplicant34 network =5 ssid=ltNome da sua rede Wi -Fi gt6 psk=ltSenha da sua rede Wi -Fi gt7

Coacutedigo 31 ndash Exemplo de configuraccedilatildeo headless

1 httpswwwhome-assistantiodocsinstallationhassbianinstallation2 httpswwwraspberrypiorgdocumentationconfigurationwirelessheadlessmd3 httpswwwsshcomssh

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 29: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 29

1 update_config =12 interface ltSua interface de rede gt3 static ip_adress =1921682604 static routers =192168215 static domain_name_servers =19216821

Coacutedigo 32 ndash Exemplo de configuraccedilatildeo do IP estaacutetico

33 Criaccedilatildeo das tabelas no PostgreSQLTodos os dados de um banco de dados relacional satildeo armazenados em tabelas Uma

tabela eacute uma simples estrutura de linhas e colunas Em um banco de dados podem existiruma ou centenas de tabelas sendo que o limite pode ser imposto tanto pela ferramenta desoftware utilizada quanto pelos recursos de hardware disponiacuteveis no equipamento

As tabelas associam-se entre si por meio de regras de relacionamentos que consistemem associar um ou vaacuterios atributos de uma tabela com um ou vaacuterios atributos de outratabela

A Figura 12 mostra o diagrama Entidade Relacionamento do banco de dados userscriado para a aplicaccedilatildeo Um diagrama Entidade Relacionamento eacute capaz de descrever ummodelo de tabelas (entidades) que satildeo ligadas umas as outras por relacionamentos queexpressam as dependecircncias e exigecircncias entre si No caso do sistema planejado existemtrecircs entidades Usuaacuterio Configuraccedilatildeo e Banho O usuaacuterio se relaciona com as outras duasentidades ele possui uma configuraccedilatildeo e pode tomar um banho

Figura 12 ndash Modelo Entidade Relacionamento do PostgreSQL

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 30: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 30

Tabela 2 Colunas da tabela usersColuna Funccedilatildeo

id identificador uacutenico que se auto incrementaname nome do usuaacuterio cadastradopassword senha criptografada do usuaacuterio cadastradocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 3 Colunas da tabela user_settingsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuterioallowed_bath_time tempo maacuteximo de banho permitidocreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Tabela 4 Colunas da tabela user_bathsColuna Funccedilatildeo

id identificador uacutenico que se auto incrementauser_id referecircncia ao id do usuaacuteriotime tempo total do banho em milissegundoscreated_at data e hora da criaccedilatildeo do usuaacuterioupdated_at data e hora da uacuteltima atualizaccedilatildeo no usuaacuterio

Para o sistema desenvolvido foi criado um banco de dados com o nome users comtrecircs tabelas user_baths user_settings e users

A tabela users conteacutem 5 colunas que guardam informaccedilotildees dos usuaacuterios cadastradosque satildeo mostradas na Tabela 2

A Tabela 3 eacute a implementaccedilatildeo da user_settings que guarda informaccedilotildees de confi-guraccedilatildeo dos usuaacuterios e tambeacutem conteacutem 5 colunas

A tabela user_baths guarda informaccedilotildees de tempo de todos os banhos tomadospossuindo 5 colunas mostradas na Tabela 4

A Figura 13 ilustra o banco de dados criado juntamente com as tabelas contidasnele

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 31: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 31

Figura 13 ndash Modelo das tabelas criadas no banco de dados

34 Configuraccedilatildeo do InfluxDBNa configuraccedilatildeo do InfluxDB foi utilizada a biblioteca influx4 Esta biblioteca

permite a criaccedilatildeo do banco de dados diretamente do coacutedigo fonte do sistema assim comoas tabelas para guardar os dados temporais

Foi criado o banco de dados water_flow_data que guarda os dados temporais dosbanhos dos usuaacuterios Neste banco os dados satildeo guardados com a tag referente ao id dousuaacuterio cadastrado no banco relacional PostgreSQL Nos fields satildeo guardados os dadosque chegam diretamente do sensor ou seja o fluxo de aacutegua naquele determinado instante

O InfluxDB salva automaticamente os timestamps5 de cada dado incluido nele oque facilita a manipulaccedilatildeo dos dados pois natildeo eacute necessaacuterio informar a data e a hora todavez que for incluir algum dado no banco

No Coacutedigo 33 estaacute um exemplo de configuraccedilatildeo e implementaccedilatildeo das funccedilotildees doInfluxDB no sistema

4 httpswwwnpmjscompackageinflux5 Timestamps satildeo marcas temporais informa a data e a hora que um certo evento ocorreu

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 32: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 32

1 const Influx = require (rsquoinflux rsquo)23 class InfluxHandler 4 constructor () 5 this influx 6 thishost = rsquoinfluxdb rsquo7 this database = rsquowater_flow_data rsquo8 9

10 connect () 11 this influx = new Influx InfluxDB (12 host thishost 13 database thisdatabase 14 schema [15 measurement rsquoflow_data rsquo16 fields flow Influx FieldType INTEGER 17 tags [rsquouser_id rsquo]18 ]19 )2021 this influx getDatabaseNames ()22 then(names =gt 23 if ( names includes (this database )) 24 return this influx createDatabase (this database )25 26 )27 then (() =gt 28 console log(rsquoInfluxDB connected rsquo)29 )30 31

Coacutedigo 33 ndash Exemplo do coacutedigo de configuraccedilatildeo do InfluxDB

35 MicrosserviccedilosNesta seccedilatildeo satildeo apresentadas as etapas de desenvolvimento dos microsserviccedilos

utilizados no sistema elaborado assim como o serviccedilo de simulaccedilatildeo para viabilizar ostestes e validaccedilatildeo do sistema

351 Clean Architecture

Os microsserviccedilos desenvolvidos foram projetados para seguir a Clean ArchitectureEsta arquitetura consiste em dividir as responsabilidades dentro de uma aplicaccedilatildeo encap-

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 33: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 33

sulando e abstraindo o coacutedigo para facilitar a leitura e entendimento das devidas funccedilotildeesde cada arquivo (MARTIN 2000)

Eacute possiacutevel ver a divisatildeo dos arquivos utilizando a Clean Architecture do Sistemade Usuaacuterios na Figura 14 Explicando esta divisatildeo na pasta routes encontram-se asconfiguraccedilatildeo das rotas que satildeo utilizadas no sistema nos controllers satildeo feitas o tratamentodos inputs e respostas das rotas redirecionando para os interactors que eacute onde estaacute aloacutegica principal da aplicaccedilatildeo Nos repositories eacute onde acontece a interaccedilatildeo com o banco dedados neste caso com o PostgreSQL

Figura 14 ndash Divisatildeo dos arquivos do Sistema de Usuaacuterios

352 Sistema de usuaacuterios

O propoacutesito desta aplicaccedilatildeo estaacute em ter o controle e informaccedilotildees sobre o consumode aacutegua em residecircncias para isso eacute necessaacuterio ter um meio para conseguir as informaccedilotildeessobre os usuaacuterios do sistema

O microsserviccedilo de usuaacuterios eacute responsaacutevel por cadastrar e editar usuaacuterios cadastrarinformaccedilotildees sobre o tempo de banho do usuaacuterio e autorizar o usuaacuterio a tomar o banho

As operaccedilotildees satildeo realizadas atraveacutes dos endpoints (Tabela 5) que eacute uma forma decomunicaccedilatildeo entre os sistemas O sistema os disponibiliza como endereccedilos para acesso

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 34: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 34

Tabela 5 Endpoints do sistema de usuaacuteriosEndpoint Caracteriacutestica

cadastrar possibilita cadastrar o usuaacuterio com as informaccedilotildees do nome senha etempo de banho permitido

autorizar recebe o id do usuaacuterio e a senha compara a senha enviada com a senhacadastrada e retorna se o usuaacuterio estaacute ou natildeo autorizado

editar-tempo possibilita editar o tempo de banho permitido do usuaacuterioeditar-senha possibilita editar a senha do usuaacuterio

banho salva no banco de dados informaccedilotildees do banho o tempo e o usuaacuterio quetomou o banho

banhoid retorna informaccedilotildees sobre todos os banhos do usuaacuterio

Tabela 6 Toacutepicos do broker MQTTToacutepico Funccedilatildeokeys conteacutem a tecla digitada no teclado numeacutericoactuator envia informaccedilotildees do atuador para liga-lo ou desliga-louser envia informaccedilotildees sobre o usuaacuterio como o nome e se ele estaacute autorizado ou natildeosensor envia informaccedilotildees do sensor de fluxo

que podem receber e enviar informaccedilotildees dependendo do que foi programado

Este microsserviccedilo salva todos os dados recebidos nas tabelas do PostgreSQL

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice A

353 Sistema de comunicaccedilatildeo MQTT

Este microsserviccedilo eacute responsaacutevel pelo recebimento e manipulaccedilatildeo dos dados recebidosdos sensores e do teclado numeacuterico via MQTT Tambeacutem eacute responsaacutevel por comunicar como sistema de usuaacuterios para a autorizaccedilatildeo do usuaacuterio ligar ou desligar o atuador aleacutem desalvar os dados no InfluxDB

O sistema de comunicaccedilatildeo recebe informaccedilotildees sobre as teclas digitadas e comunicacom o sistema de usuaacuterios para autorizar ou natildeo o ligamento do atuador que significa oiniacutecio do banho

O sistema se subscreve nos toacutepicos do broker MQTT descritos na Tabela 6 parareceber e enviar as informaccedilotildees

Os coacutedigos de implementaccedilatildeo deste sistema podem ser observados no Apecircndice B

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 35: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 35

354 Sistema de simulaccedilatildeo de dados

O sistema de simulaccedilatildeo de dados emula todos os dados que podem ser capturadose enviados ao sistema fiacutesico que satildeo

bull Dados do fluxo de aacutegua informaccedilatildeo recebida pelo sensor YF-S201 (Seccedilatildeo 221)

bull Dados do teclado numeacuterico informaccedilatildeo de qual tecla foi pressionada (Seccedilatildeo 222)

bull Informaccedilotildees para o atuador informaccedilatildeo para ligardesligar o atuador (Seccedilatildeo 223)

Este sistema se inscreve nos toacutepicos do servidor MQTT e envia os dados simuladoscomo se fosse o proacuteprio sistema fiacutesico Ao se iniciar o sistema ele fica em estado de esperaateacute alguma tecla for pressionada Ao se pressionar uma tecla ele a envia para o toacutepicokeys O Sistema de Comunicaccedilatildeo que se inscreve nesse toacutepico reconhece a tecla e toma asdevidas accedilotildees como requisitar a senha ou ligardesligar o atuador

Os dados do fluxo de aacutegua satildeo nuacutemero inteiros que satildeo passados para o toacutepicosensor do servidor MQTT para simular estes dados envia-se um valor inteiro ao toacutepicoem um intervalo pre-determinado de tempo (50 ms)

A Figura 15 mostra o sistema de simulaccedilatildeo funcionando com o usuaacuterio com o id 3sendo autorizado e o sinal de ligardesligar o atuador enviado

Figura 15 ndash Exemplo do sistema de simulaccedilatildeo

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 36: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 36

36 Configuraccedilatildeo do HomeAssistantO HomeAssistant pode ser instalado a partir de diversos meacutetodos6 neste sistema

a instalaccedilatildeo foi feita utilizando o Hassbian que eacute um sistema operacional linux para oRaspberry Pi com o HomeAssistant preacute-instalado

Para configurar o HomeAssistant no Raspberry Pi eacute necessaacuterio realizar o downloadda imagem do Hassbian Com o download concluiacutedo deve-se copiar a imagem para ocartatildeo SD a ser inserido no Raspberry Pi Para isto utilizamos o balenaEtcher

Com a imagem devidamente escrita no cartatildeo SD basta inseri-lo no Raspberry Piconfigurar a rede como descrito na Seccedilatildeo 32 e ao iniciar o sistema o HomeAssistant seraacutecarregado automaticamente

O HomeAssistant utiliza a porta 8123 e para conseguir visualizar sua interface oIP do servidor deve ser acessado por esta porta No caso deste sistema o IP do RaspberryPi foi colocado como estaacutetico 192168260 Entatildeo para acessar a interface deve-se estarconectado na mesma rede do Raspberry Pi e acessar o link http1921682608123 comopodemos ver na Figura 16

Figura 16 ndash Paacutegina inicial do HomeAssistant acessado por um cliente conectado na mesma rede local doservidor Hassbian

361 Sensores

A interface do HomeAssistant permite diversas configuraccedilotildees e inclusatildeo de diferentessensores como mostra a Figura 8 No sistema desenvolvido neste trabalho foi utilizado osensor binaacuterio que mostra o estado do chuveiro como ligado ou desligado Cada usuaacuterioteraacute um sensor proacuteprio e seu estado seraacute mostrado na interface6 httpswwwhome-assistantiodocsinstallation

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 37: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 37

37 Configuraccedilatildeo do GrafanaA instalaccedilatildeo do Grafana foi realizada atraveacutes do download7 e extraccedilatildeo do pacote

para o sistema operacional Debian

Com o pacote devidamente instalado no sistema o Grafana utiliza a porta 3003como interface Para acessaacute-la deve-se conectar agrave porta 3003 do Raspberry Pi ou sejaacessar o link http1921682603003 como na Figura 17

Figura 17 ndash Paacutegina inicial do Grafana

7 httpsgrafanacomget

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 38: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 3 Metodologia 38

Ao acessar a interface do Grafana eacute necessaacuterio criar um dashboard8 para a visuali-zaccedilatildeo dos dados do InfluxDB Neste sistema criamos o dashboard AllBaths que se conectano ip e porta do InfluxDB e realiza as consultas no banco water_flow_data criado paraguardar os dados temporais do fluxo de aacutegua

A configuraccedilatildeo do graacutefico no Grafana pode ser observada na Figura 18

Figura 18 ndash Configuraccedilatildeo do graacutefico no Grafana

Apoacutes a configuraccedilatildeo do dashboard um atalho seraacute criado na paacutegina inicial doGrafana e para visualizar os dados basta clicar neste atalho e seraacute aberto um graacutefico comos fluxos medidos no sensor

8 Dashboards satildeo paineacuteis que mostram meacutetricas e indicadores importantes para alcanccedilar objetivos emetas traccediladas de forma visual facilitando a compreensatildeo das informaccedilotildees geradas

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 39: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

39

4 Experimentos e Resultados

Neste Capiacutetulo encontram-se os experimentos realizados com os sistemas devida-mente implementados e configurados Discutiremos os resultados obtidos testando ossistemas com todas as suas funcionalidades

41 Manipulaccedilatildeo de usuaacuteriosO microsserviccedilo de usuaacuterios utiliza a porta 3001 Para utiliza-lo e testaacute-lo devemos

utilizar esta porta juntamente com os endpoints disponiacuteveis (Seccedilatildeo 352) Aqui realizaremosas consultas em todos estes endpoints e discutiremos os resultados obtidos

Para criar um usuaacuterio devemos consumir1 o endpoint httplocalhost3001usuariocadastrarpassando os paracircmetros via POST no formato JSON 2 como na Figura 19

A resposta deste endpoint pode ser conferida na Figura 19 e para garantir que ousuaacuterio foi incluiacutedo no banco de dados podemos observar a Figura 19

Figura 19 ndash Cadastro de usuaacuterios

1 O termo consumir um endpoint significa enviar informaccedilotildees para o endpoint esperando algumretorno de sucesso ou falha

2 Javascript Object Notation (JSON) eacute um formato compacto de troca de dados simples e raacutepida entresistema

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 40: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 40

O endpoint httplocalhost3001usuarioeditar-tempo deve ser consumido paraeditar o tempo maacuteximo de banho de um usuaacuterio (Figura 20) Para editar a senha dousuaacuterio deve-se consumir o endpoint httplocalhost3001usuarioeditar-senha (Figura21)

Figura 20 ndash Ediccedilatildeo de tempo permitido do usuaacuterio

Figura 21 ndash Ediccedilatildeo de senha do usuaacuterio

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 41: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 41

Conseguimos cadastrar um banho ao consumir o endpoint httplocalhost3001banhovia POST com os paracircmetros e resposta mostrados na Figura 22

Figura 22 ndash Adicionando banhos ao usuaacuterio

Para recuperar as informaccedilotildees de um usuaacuterio basta consumir o endpointhttplocalhost3001usuarioidDoUsuario com o meacutetodo GET obtendo o resultado daFigura 23

Figura 23 ndash Recuperar dados do usuaacuterio

Conseguimos as informaccedilotildees de todos os banhos dos usuaacuterios consumindo o endpointhttplocalhost3001banhoidDoUsuario via GET e conseguiremos o resultado exibidona Figura 24

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 42: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 42

Figura 24 ndash Recuperar dados de banhos do usuaacuterio

Finalmente podemos autenticar os usuaacuterios enviando via POST os paracircmetrospara o endpoint httplocalhost3001usuarioautorizar obtendo como resposta a Figura26 para usuaacuterio autenticado e Figura 25 para usuaacuterio natildeo autenticado caso a senhaesteja errada

Figura 25 ndash Exemplo de usuaacuterio natildeo autorizado

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 43: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 43

Figura 26 ndash Exemplo de usuaacuterio autorizado

42 Visualizaccedilatildeo via GrafanaOs dados para a visualizaccedilatildeo no Grafana foram gerados pelo Sistema de simulaccedilatildeo

de dados (Seccedilatildeo 354)

Ao autenticar um usuaacuterio um sinal eacute enviado ao toacutepico do atuador (Seccedilatildeo 223)e o sinal emulado do sensor YF-S201 (Seccedilatildeo 221) inicia a simulaccedilatildeo do fluxo que eacuteautomaticamente enviado para o InfluxDB via Sistema de comunicaccedilatildeo MQTT (Seccedilatildeo353) podendo ser visualizado no Grafana Os graacuteficos do grafana podem ser acessadosvia httplocalhost3003 como na Figura 17

Pode ser observado na Figura 27 um graacutefico do fluxo simulado pelo sensor nohoraacuterio de 16h40m ateacute 17h00m Existem dois graacuteficos com cores diferentes cada cor eacutereferente a um usuaacuterio

43 Estado do atuador via HomeAssistantO HomeAssistant eacute acessado via httplocalhost8123 Ao acessar o link observamos

os estado dos sensores dos usuaacuterios cadastrado na Figura 29 que encontram-se em estadodesligado Ao digitar corretamente a senha o estado do sensor muda para ligado comoobservado na Figura 28

Ao cadastrar um usuaacuterio o seu sensor eacute inserido no HomeAssistant automaticamente(Figura 30)

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 44: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 44

Figura 27 ndash Exemplo do graacutefico no Grafana para usuaacuterios diferentes

Figura 28 ndash Exemplo do sensor no HomeAssistant quando ligado

Figura 29 ndash Exemplo do sensor no HomeAssistant quando desligado

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 45: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Capiacutetulo 4 Experimentos e Resultados 45

Figura 30 ndash Exemplo de um novo sensor quando um novo usuaacuterio eacute cadastrado

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 46: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

46

5 Consideraccedilotildees Finais

Este trabalho propotildee um sistema capaz de monitorar remotamente a utilizaccedilatildeo daaacutegua em uma residecircncia Os sistemas de monitoramento propostos foram implementadosComo mostrado a implementaccedilatildeo eacute capaz de cadastrar editar e autorizar usuaacuteriosMonitorar o fluxo de aacutegua e o tempo de banhos com graacuteficos e estados de sensores emtempo real remotamente comportando-se como deveria

Ao final do desenvolvimento do projeto e dos resultados apresentados pode-seconcluir que o sistema eacute eficaz no monitoramento remoto auxiliando o usuaacuterio na gestatildeo dautilizaccedilatildeo de aacutegua em chuveiros Podendo ser um grande aliado na reduccedilatildeo do consumo deaacutegua em toda a residecircncia se implementado em outros setores como torneiras ou tanques

Para trabalhos futuros pode-se realizar a implementaccedilatildeo fiacutesica em chuveiros comsensores e proteccedilatildeo mais robustos que sejam resistentes ao vapor de aacutegua presente ao setomar banho

Seria interessante a implementaccedilatildeo de mais sistemas de monitoramento utilizandooutros sensores realizando a integraccedilatildeo com HomeAssistant implementando apenas pe-quenas modificaccedilotildees e configuraccedilotildees extras O sistema foi arquitetado e construiacutedo com ointuito de facilitar esta inclusatildeo de sensores e reutilizaccedilatildeo

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 47: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

47

Referecircncias

Almeida Costa R Instituto Politeacutecnico de Viseu [Sl] 2018 Citado 2 vezes nas paacuteginas20 e 21

BOSCARIOLI C et al Uma reflexatildeo sobre Banco de Dados Orientados a Objetos [Sl]2006 Citado na paacutegina 22

CHANG C-C et al A kubernetes-based monitoring platform for dynamic cloudresource provisioning In IEEE GLOBECOM 2017-2017 IEEE Global CommunicationsConference [Sl] 2017 p 1ndash6 Citado na paacutegina 22

CHASE O ALMEIDA F Sistemas embarcados Miacutedia Eletrocircnica Paacutegina na internetltwww sbajovem orgchasegt capturado em 2007 v 10 n 11 p 13 2007 Citado napaacutegina 15

CROTTI Y et al Raspberrypi e experimentaccedilatildeo remota In ICBL2013 InternationalConference on Interactive Computer aided Blended Learning [Sl sn] 2013 Citado napaacutegina 16

DIAacuteRIAS A et al ANAacuteLISE DE CONSUMO E DESPERDIacuteCIO DE AacuteGUA EM 2007v 3 p 0ndash5 2007 Citado na paacutegina 12

FERREIRA A N et al Aacutegua subterracircneas - um recurso a ser conhecido e protegido2007 2007 Citado na paacutegina 12

FERREIRA H S HEROSO L F ZALESKI R H Sistema de monitoramento deconsumo de aacutegua domeacutestico com a utilizaccedilatildeo de um hidrocircmetro digital 2014 2014Citado na paacutegina 12

FORTY A Objetos de desejo [Sl] Editora Cosac Naify 2007 Citado na paacutegina 13

GOMES L SOUSA F VALE Z An agent-based IoT system for intelligent energymonitoring in buildings IEEE Vehicular Technology Conference 2018 IEEE v 2018-Junep 1ndash5 2018 ISSN 15502252 Citado na paacutegina 21

JUacuteNIOR J M M L AREcircAS R C SENA A J C Automaccedilatildeo residencialMonitoramento de consumo de energia eleacutetrica e aacutegua INOVA TEC 2017 v 1 2017Citado na paacutegina 16

KODALI R K SORATKAL S R MQTT based home automation system usingESP8266 IEEE Region 10 Humanitarian Technology Conference 2016 R10-HTC 2016 -Proceedings 2017 IEEE p 1ndash5 2017 Citado 2 vezes nas paacuteginas 24 e 25

LABORATORY E Getting Started with MQTT using Mosquitto 2018 httpembeddedlaboratoryblogspotcom201801getting-started-with-mqtt-usinghtml Citado na paacutegina 24

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 48: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Referecircncias 48

LIGHT R A Mosquitto server and client implementation of the MQTT protocol 20172017 Disponiacutevel em lthttpswwwtheojorgjoss-papersjoss002651021105joss00265-pdfgt Citado na paacutegina 25

LUNDRIGAN P et al EpiFi An In-Home Sensor Network Architecture forEpidemiological Studies [Sl] 2017 Disponiacutevel em lthttpsarxivorgpdf170902233-pdfgt Citado 2 vezes nas paacuteginas 20 e 21

MARTIN R Clean Architecture A Craftsmanrsquos Guide to Software Structure andDesignRobert Martin [Sl] New York Prentice Hall 2000 Citado na paacutegina 33

MARTINS N A Sistemas microcontrolados Uma abordagem com o MicrocontroladorPIC 16F84 Editora Novatec Ltda 1a ediccedilatildeo 2005 2005 Citado na paacutegina 15

NAMIOT D SNEPS-SNEPPE M On micro-services architecture International Journalof Open Information Technologies 2014 v 2 n 9 p 24ndash27 2014 Citado na paacutegina 23

NOOR S et al Time Series Databases and InfluxDB [Sl] 2017 Citado 2 vezes naspaacuteginas 21 e 22

OLIVEIRA E Blog Masterwalker 2018 httpblogmasterwalkershopcombrarduinocomo-usar-com-arduino-teclado-matricial-de-membrana-4x4 Accessed2019-06-02 Citado na paacutegina 17

PAHL C JAMSHIDI P Microservices A Systematic Mapping Study [Sl sn] 2016ISBN 9789897581823 Citado na paacutegina 23

PERUMAL T SULAIMAN M N LEONG C Y Internet of Things (IoT) enabledwater monitoring system 2015 IEEE 4th Global Conference on Consumer ElectronicsGCCE 2015 2016 IEEE p 86ndash87 2016 Citado 2 vezes nas paacuteginas 12 e 13

PICORETI R Portal Vida de Siliacutecio 2017 httpsportalvidadesiliciocombrteclado-matricial-e-multiplexacao Accessed 2019-06-02 Citado 2 vezes naspaacuteginas 17 e 18

Risteska Stojkoska B L TRIVODALIEV K V A review of Internet of Things forsmart home Challenges and solutions 2017 2017 Disponiacutevel em lthttpdxdoiorg10-1016jjclepro201610006gt Citado na paacutegina 12

ROQUE I R SABINO J H M Sistema de diluiccedilatildeo de liacutequidos concentrados e envazeautomaacutetico 2018 2018 Citado na paacutegina 16

SAPES J SOLSONA F Fingerscanner Embedding a fingerprint scanner in a raspberrypi Sensors (Switzerland) 2016 v 16 n 2 p 1ndash18 2016 ISSN 14248220 Citado napaacutegina 22

SILVA J A F da LAGO C L do Moacutedulo eletrocircnico de controle para vaacutelvulassolenoacuteides Quiacutemica Nova 2002 SciELO Brasil v 25 n 5 p 842ndash843 2002 Citado napaacutegina 19

STONES R MATTHEW N Beginning databases with PostgreSQL from novice toprofessional [Sl] Apress 2006 Citado na paacutegina 22

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 49: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Referecircncias 49

TILKOV S VINOSKI S Nodejs Using JavaScript to build high-performance networkprograms IEEE Internet Computing 2010 v 14 n 6 p 80ndash83 2010 ISSN 10897801Citado na paacutegina 22

Varela De Souza M et al UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTEINSTITUTO METROacutePOLE DIGITAL POacuteS-GRADUACcedilAtildeO EM ENGENHARIA DESOFTWARE Domoacutetica de baixo custo usando princiacutepios de IoT [Sl] 2016 Citado napaacutegina 13

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 50: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

Apecircndices

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 51: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

51

APEcircNDICE A ndash Coacutedigo sistema de usuaacuterios

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema deUsuaacuterios O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelaruser-service

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class CreateUserBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( name password allowedBathTime ) 1213 if ( allowedBathTime ) 14 allowedBathTime = 1015 1617 const hash = await bcrypt hash( password toString () config bcrypt

saltRounds )1819 const user = await usersRep createUser ( name password hash

allowedBathTime )2021 if ( user) 22 throw rsquoNao foi possivel criar o usuario rsquo23 2425 const response = 26 id useruser_id 27 name userusername 28 allowed_bath_time user allowed_bath_time 29 3031 return response 32

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 52: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE A Coacutedigo sistema de usuaacuterios 52

33 3435 export default CreateUserBs

Coacutedigo A1 ndash Exemplo do coacutedigo do interactor de criaccedilatildeo do usuaacuterio

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo4 import config from rsquo config config rsquo56 class EditPasswordBs extends Interactor 7 constructor ()8 super ()9

1011 async execute ( id new_password ) 1213 const hash = await bcrypt hash( new_password toString () config

bcrypt saltRounds )1415 const editedUser = await usersRep editPassword ( id password hash

)1617 const response = editedUser [0] === 1 18 status 20019 message rsquoUsuario editado com sucesso rsquo20 21 22 status 50023 message rsquoErro ao editar usuario rsquo24 2526 return response 27 28

Coacutedigo A2 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de senha de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 53: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE A Coacutedigo sistema de usuaacuterios 53

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class EditUserTimeBs extends Interactor 5 constructor () 6 super ()7 89 async execute ( id new_time )

1011 const editedUser = await usersRep editUserTime ( id new_time )1213 const response = editedUser [0] === 1 14 status 20015 message rsquoUsuario editado com sucesso rsquo16 17 18 status 50019 message rsquoErro ao editar usuario rsquo20 2122 return response 2324 25

Coacutedigo A3 ndash Exemplo do coacutedigo do interactor de ediccedilatildeo de tempo de banho dos usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 54: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE A Coacutedigo sistema de usuaacuterios 54

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo3 import bcrypt from rsquobcrypt rsquo45 class AuthorizeUserBs extends Interactor 6 constructor ()7 super ()8 9

10 async execute ( id pass ) 11 const user = await usersRep getUser ( id )1213 if ( user) 14 throw error rsquoUsuario nao encontrado rsquo15 1617 const match = await bcrypt compare (pass toString () user password )1819 return 20 allowed match21 22 23

Coacutedigo A4 ndash Exemplo do coacutedigo do interactor de autorizaccedilatildeo de usuaacuterios

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 55: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE A Coacutedigo sistema de usuaacuterios 55

1 import Interactor from rsquo interactor rsquo2 import bathsRep from rsquo repositories bathsrep rsquo34 class BathsBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( user_id bath_time )

1011 const bath = await bathsRep createBath (12 user_id 13 bath_time14 )1516 if ( bath) 17 throw rsquoNao foi possivel cadastrar o banho rsquo18 1920 return bath21 2223 async getBaths ( user_id ) 2425 const baths = await bathsRep getBaths (26 user_id 27 )2829 return baths30 31 3233 export default BathsBs

Coacutedigo A5 ndash Exemplo do coacutedigo do interactor de cadastro de banhos

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 56: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE A Coacutedigo sistema de usuaacuterios 56

1 import Interactor from rsquo interactor rsquo2 import usersRep from rsquo repositories usersrep rsquo34 class GetUserBs extends Interactor 5 constructor ()6 super ()7 89 async execute ( id )

10 const user = await usersRep getUser ( id )1112 if ( user) 13 throw error rsquoNao foi possivel localizar o usuario rsquo14 1516 const response = 17 id userid 18 name username 19 allowedBathTime user user_setting allowed_bath_time20 2122 return response 23 24

Coacutedigo A6 ndash Exemplo do coacutedigo do interactor para recuperar informaccedilotildees dos usuaacuterios

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 57: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

57

APEcircNDICE B ndash Coacutedigo sistema de comunica-ccedilatildeo MQTT

Neste apecircndice encontram-se algumas partes importantes do coacutedigo do Sistema de co-municaccedilatildeo O coacutedigo inteiro pode ser baixado no link httpsgithubcomCamiloAvelarmqtt-logger-service

1 const mqtt = require (rsquomqtt rsquo)2 const EventEmitter = require (rsquoevents rsquo)345 class MqttHandler extends EventEmitter 6 constructor () 7 super ()8 this mqttClient = null9 thishost = rsquomqtt mosquitto rsquo

10 this username = rsquomqtt_user rsquo mqtt credentials if these are neededto connect

11 this password = rsquo100200300 rsquo12 131415 connect () 16 const self = this17 this mqttClient = mqtt connect (thishost username thisusername

password this password )1819 this mqttClient on(rsquoerror rsquo (err) =gt 20 console log(err)21 this mqttClient end ()22 )2324 this mqttClient on(rsquoconnect rsquo () =gt 25 console log(lsquomqtt client connected to $thishost lsquo)26 )2728 this mqttClient on(rsquoclose rsquo () =gt 29 console log(lsquomqtt client disconnected lsquo)30 )3132 this mqttClient on(rsquomessage rsquo (topic message ) =gt

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 58: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 58

33 const builtMessage = 34 topic 35 message message toString ()36 3738 selfemit(rsquomessageReceived rsquo builtMessage )39 )40 4142 subscribe (topic) 43 this mqttClient subscribe (topic qos 0)44 4546 sendMessage (message topic ) 47 this mqttClient publish (topic message )48 49 5051 module exports = MqttHandler

Coacutedigo B1 ndash Exemplo do coacutedigo de comunicaccedilatildeo MQTT

1 const requestService = require (rsquo requestService rsquo)23 class timeHandler 4 constructor ( mqttClient ) 5 this mqttClient = mqttClient 6 this allowedTime 7 this interval 8 this nowDate 9 this endDate

10 this userId 11 1213 countTime ( allowedTime id) 14 this userId = id15 this allowedTime = allowedTime 16 this nowDate = new Date ()1718 this interval = setInterval (() =gt 19 this mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)20 this clearBathInterval ()21 this allowedTime )22 2324 async endTime () 25 this clearBathInterval ()26 this endDate = new Date ()

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 59: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 59

2728 const bathTime = this endDate - this nowDate 2930 console log(rsquoBATHTIME gtgtgtrsquo bathTime )31 await this _requestUserService ( bathTime )32 3334 clearBathInterval ()35 clearInterval (this interval )36 3738 async _requestUserService (time) 39 const requestOptions = 40 type rsquoPOST rsquo41 endpoint rsquobanho rsquo42 body 43 user_id thisuserId 44 bath_time time45 46 4748 return await requestService userRequest ( requestOptions )49 50 5152 module exports = timeHandler

Coacutedigo B2 ndash Exemplo do coacutedigo responsaacutevel por lidar com informaccedilotildees do tempo de banho

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 60: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 60

1 const requestService = require (rsquo requestService rsquo)23 class KeysHandler 4 constructor ( mqttClient ) 5 this keyBuffer = rsquorsquo6 this working = false 7 this gettingPassword = false 8 this userId 9 this mqttClient = mqttClient

10 1112 async handle ( message ) 13 if( message === rsquorsquo) 14 this working = this working 15 this gettingPassword = false 16 return 17 1819 if (( this working || this gettingPassword ) ampamp message == rsquorsquo) 20 this keyBuffer += message 21 2223 if( message === rsquorsquo) 24 this working = false 25 try 26 const response = await this _requestUserService ()27 console log( response )28 this gettingPassword ( response allowed this mqttClient

sendMessage (rsquostart rsquo rsquoactuator rsquo) console log(rsquoNAOAUTORIZADO rsquo))

29 this mqttClient sendMessage (JSON stringify ( response ) rsquouser rsquo)30 this gettingPassword = this gettingPassword 31 catch (err) 32 console log(err message )33 finally 34 this keyBuffer = rsquorsquo35 36 37 3839 async _requestUserService () 40 const requestOptions = this gettingPassword 41 type rsquoPOST rsquo42 endpoint lsquousuario autorizar lsquo43 body 44 id thisuserId 45 password this keyBuffer

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 61: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 61

46 47 48 type rsquoGET rsquo49 endpoint lsquousuario $this keyBuffer lsquo50 body null 51 5253 return requestService userRequest ( requestOptions )54 then (( response ) =gt 55 this userId = this gettingPassword this userId response id56 return response57 )catch (err =gt throw err )58 59 6061 module exports = KeysHandler

Coacutedigo B3 ndash Exemplo do coacutedigo que lida com a comunicaccedilatildeo com o InfluxDB

1 const mqttHandler = require (rsquo mqtt_handler rsquo)2 const KeysTopicHandler = require (rsquo keysTopicHandler rsquo)3 const TimeHandler = require (rsquo timeHandler rsquo)4 const SUBSCRIBE_TOPICS = [rsquokeys rsquo rsquoactuator rsquo rsquouser rsquo rsquosensor rsquo]5 const influx = require (rsquo influxHandler rsquo)6 const mqttClient = new mqttHandler ()7 const keysHandler = new KeysTopicHandler ( mqttClient )8 const timeHandler = new TimeHandler ( mqttClient )9 const influxDB = new influx ()

10 influxDB connect ()11 mqttClient connect ()12 SUBSCRIBE_TOPICS forEach (( topic) =gt 13 mqttClient subscribe (topic)14 )1516 let usuario 17 let sensorCount = 018 let actuatorOn 19 mqttClient on(rsquomessageReceived rsquo ( received ) =gt 20 switch ( received topic) 21 case rsquokeys rsquo22 if ( actuatorOn ) 23 keysHandler handle ( received message )24 25 break 26 case rsquoactuator rsquo27 if( received message === rsquostart rsquo) 28 timeHandler countTime ( usuario allowedBathTime 60000 usuario

id) usuario allowedBathTime 60000

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT
Page 62: Domótica aplicada no monitoramento de água utilizando ... · Monografia (Graduação). Universidade Federal de Ouro Preto. Escola de Minas. Departamento de Engenharia de Controle

APEcircNDICE B Coacutedigo sistema de comunicaccedilatildeo MQTT 62

29 mqttClient sendMessage (rsquoONrsquo lsquohomeassistant binary_sensor $usuario name state lsquo)

30 actuatorOn = true31 3233 if( received message === rsquostop rsquo) 34 timeHandler endTime ()35 if( usuario ) 36 influxDB getPoints ( usuario id)37 then( console log )38 39 sensorCount = 040 actuatorOn = false 41 mqttClient sendMessage (rsquoOFF rsquo lsquohomeassistant binary_sensor $

usuario name state lsquo)42 43 break 44 case rsquosensor rsquo45 if( usuario ) 46 if( received message lt 10) sensorCount ++4748 if( sensorCount gt 10) 49 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)50 sensorCount = 051 5253 influxDB writePoints ( usuario id received message )54 then( console log)55 catch ( console log)56 else 57 console log(rsquoNO USER DETECTED STOPPING ACTUATOR rsquo)58 mqttClient sendMessage (rsquostop rsquo rsquoactuator rsquo)59 60 break 61 case rsquouser rsquo62 const message = JSONparse( received message )63 mqttClient sendMessage (lsquoname $ message name device_class

moisture state_topic homeassistant binary_sensor $message name statelsquo lsquohomeassistant binary_sensor $ message name config lsquo)

64 usuario = message 65 break 66 67 )

Coacutedigo B4 ndash Coacutedigo principal do sistema

  • Folha de rosto
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de tabelas
  • Lista de coacutedigos
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • Introduccedilatildeo
    • Objetivos
      • Objetivos especiacuteficos
        • Organizaccedilatildeo do trabalho
          • Materiais e Softwares
            • Microcontroladores e Microprocessadores
              • Raspberry Pi
                • Sensores e atuadores
                  • Sensor de fluxo YF-S201
                  • Teclado matricial de membrana
                  • Vaacutelvula solenoide
                    • Softwares
                      • HomeAssistant
                      • Banco de dados de seacuteries temporais
                        • InfluxDB
                        • Grafana
                          • Banco de dados relacional
                            • PostgreSQL
                              • NodeJS
                              • Arquitetura de microsserviccedilos
                              • Protocolo de comunicaccedilatildeo MQTT
                                • MQTT Mosquitto
                                  • Metodologia
                                    • Funcionamento do sistema
                                      • Paracircmetros de operaccedilatildeo
                                      • Dados gerados
                                      • Ligardesligar atuador
                                        • Configuraccedilatildeo do Raspberry Pi
                                        • Criaccedilatildeo das tabelas no PostgreSQL
                                        • Configuraccedilatildeo do InfluxDB
                                        • Microsserviccedilos
                                          • Clean Architecture
                                          • Sistema de usuaacuterios
                                          • Sistema de comunicaccedilatildeo MQTT
                                          • Sistema de simulaccedilatildeo de dados
                                            • Configuraccedilatildeo do HomeAssistant
                                              • Sensores
                                                • Configuraccedilatildeo do Grafana
                                                  • Experimentos e Resultados
                                                    • Manipulaccedilatildeo de usuaacuterios
                                                    • Visualizaccedilatildeo via Grafana
                                                    • Estado do atuador via HomeAssistant
                                                      • Consideraccedilotildees Finais
                                                      • Referecircncias
                                                      • Apecircndices
                                                        • Coacutedigo sistema de usuaacuterios
                                                        • Coacutedigo sistema de comunicaccedilatildeo MQTT