• Nenhum resultado encontrado

3.2 DESENVOLVIMENTO E DETALHAMENTO DO SOFTWARE

3.2.3 Gr´afico/Twitter

Nessa subsec¸˜ao realiza-se um detalhamento de parte do software desenvolvido e utilizado no projeto, expondo a l´ogica de programac¸˜ao utilizada para a realizac¸˜ao dos gr´aficos (em linguagem de programac¸˜ao Python) e tamb´em um adicional incrementado pelo grupo, o qual ´e respons´avel por “twittar”, em uma conta espec´ıfica, informac¸˜oes relativas ao consumo de ´agua observado pelo sistema como um todo.

Ainda, visando facilitar o entendimento para o leitor das ideias propostas, explica-se como os dados recebidos pelo sensor s˜ao devidamente tratados e interpretados pelo software desenvolvido no Raspberry Pi e ent˜ao criada uma interface gr´afica de forma a prover o usu´ario com as informac¸˜oes desejadas e pertinentes ao sistema supervis´orio em quest˜ao.

Durante o desenvolvimento do projeto, objetivou-se criar uma interface e apresentac¸˜ao dos dados coletados de todo o processo atrav´es do sensor de vaz˜ao para que a integrac¸˜ao e utilizac¸˜ao do sistema se desse de maneira relativamente intuitiva e sem muitas complicac¸˜oes para o usu´ario, sendo que o microcomputador exerce a func¸˜ao de interpretar e utilizar essas informac¸˜oes do melhor modo poss´ıvel, simplificando o processo para o usu´ario e provendo-o com gr´aficos, os quais fornecem uma melhor an´alise do processo.

Essas informac¸˜oes s˜ao de grande valia, pois dessa forma o usu´ario pode ter ideia de onde est´a gastando mais ´agua, desenvolvendo soluc¸˜oes para sanar isso, obtendo um melhor

controle e evitando desperd´ıcios (pode-se perceber se existem vazamentos em sua residˆencia, por exemplo), sendo que tudo isso pode ser acompanhado em tempo real, situac¸˜ao na qual o “Twitter” auxilia e atualiza o usu´ario.

Para a realizac¸˜ao desses gr´aficos do sistema, ap´os estudos e pesquisas do grupo, optou-se por utilizar uma biblioteca j´a existente e espec´ıfica para a linguagem Python, que ´e a “matplotlib”. A “matplotlib” ´e uma biblioteca do Python para criac¸˜ao de gr´aficos em 2D, bastante utilizada para visualizac¸˜ao de dados e que apresenta uma s´erie de possibilidades gr´aficas, como gr´aficos de barra, linha, pizza, histogramas, entre muitos outros.

Dessa forma, a seguir ´e explicada a programac¸˜ao para a realizac¸˜ao desses gr´aficos, com coment´arios para um melhor entendimento do leitor e objetivando esclarecer poss´ıveis d´uvidas que possam eventualmente surgir.

Primeiramente, ao inicializar o arquivo “grafico”, o mesmo conecta-se com o banco de dados existente (database.db) e lˆe os dados que est˜ao armazenados, conforme mostrado no trecho de c´odigo abaixo:

d e f p r i n t G r a p h ( ) :

c o n n = s q l i t e 3 . c o n n e c t ( ’ d a t a b a s e . db ’ ) c = c o n n . c u r s o r ( )

A seguir, a interface com o usu´ario ´e inicializada, mostrando ao mesmo um menu de opc¸˜oes no qual pode ser selecionado o intervalo de tempo desejado para a consulta do consumo de ´agua total. Optou-se por criar quatro opc¸˜oes de intervalo de consulta: do ´ultimo dia, da ´ultima semana, do ´ultimo mˆes e um personalizado, que permite selecionar um intervalo qualquer, podendo ir de quest˜ao de minutos at´e mesmo anos. No trecho seguinte, mostra-se como isso foi programado: v a r i a v e l = T r u e w h i l e ( v a r i a v e l ) : p r i n t ( ’ S e l e c i o n e o i n t e r v a l o de tempo d e s e j a d o p a r a c o n s u l t a ’ ) p r i n t ( ’ Opcao 1 : U l t i m a s 24 h o r a s ’ ) p r i n t ( ’ Opcao 2 : U l t i m a semana ’ ) p r i n t ( ’ Opcao 3 : U l t i m o mes ’ ) p r i n t ( ’ Opcao 4 : I n t e r v a l o p e r s o n a l i z a d o ’ ) o p c a o = i n p u t ( ’ Opcao : ’ )

Ap´os o usu´ario entrar com a opc¸˜ao desejada, o programa checa se a resposta inserida ´e v´alida, emitindo uma mensagem de erro, se inv´alida, e requerendo novamente ao mesmo inserir uma opc¸˜ao v´alida, conforme explicitado a seguir:

w h i l e ( o p c a o ! = 1 and o p c a o ! = 2 an d o p c a o ! = 3 and o p c a o ! = 4 ) : p r i n t ( ’ Opcao i n v a l i d a ’ )

p r i n t ( ’ S e l e c i o n e uma d a s o p c o e s de 1 a 4 ’ ) o p c a o = i n p u t ( ’ Opcao : ’ )

Quando uma opc¸˜ao v´alida ´e selecionada, o programa executa ac¸˜oes internas, de acordo com o intervalo desejado. A seguir, apresentam-se as partes do c´odigo respons´avel pelas opc¸˜oes “1” e “4”: i f o p c a o == 1 : h o j e = d a t e t i m e . d a t e t i m e . now ( ) DD = d a t e t i m e . t i m e d e l t a ( d a y s = 1 ) i n i c i o = h o j e − DD d a t a i n i c i a l = i n i c i o . s t r f t i m e (”%Y−%m−%d %H:%M” ) d a t a f i n a l = h o j e . s t r f t i m e (”%Y−%m−%d %H:%M” ) e l i f o p c a o == 4 : p r i n t ( ’ Q u a l a d a t a i n i c i a l do i n t e r v a l o que v o c e d e s e j a c o n s u l t a r ? ( E n t r e com o f o r m a t o AAAA−MM−DD HH:MM) ’ ) d a t a i n i c i a l = r a w i n p u t ( ’ D a t a i n i c i a l : ’ ) p r i n t ( ’ Q u a l a d a t a f i n a l do i n t e r v a l o que v o c e d e s e j a c o n s u l t a r ? ( E n t r e com o f o r m a t o AAAA−MM−DD HH:MM) ’ ) d a t a f i n a l = r a w i n p u t ( ’ D a t a F i n a l : ’ )

A func¸˜ao “hoje = datetime.datetime.now()” ´e respons´avel por obter a data no momento em que o usu´ario exerce sua escolha do intervalo de tempo, enquanto a func¸˜ao “DD = datetime.timedelta(days=1)” apenas seleciona a quantidade de dias que ser˜ao analisados (nesse caso um dia). Feito isso, a data inicial mostrada no gr´afico ser´a dada pela diferenc¸a entre esses valores, enquanto a data final ser´a a data obtida na inicializac¸˜ao do programa. Vale ressaltar que para as demais opc¸˜oes apenas altera-se o n´umero de dias analisados (sete para uma semana e trinta para um mˆes). Ainda, na opc¸˜ao do intervalo de tempo personalizado, o usu´ario deve entrar tanto com a data inicial como a final no formato “Ano-mˆes- dia Hora-minuto”, caso contr´ario o programa n˜ao consegue interpretar e emite uma mensagem

de erro, como explicitado no trecho de c´odigo a seguir:

e x c e p t I n d e x E r r o r : # U s e r W a r n i n g :

p r i n t ( ’ F o r m a t o de d a t a i n v a l i d o . ’ )

Ap´os isso, o programa ent˜ao seleciona o volume obtido pelo sensor de vaz˜ao do banco de dados criado anteriormente, considerando as datas inicial e final j´a estabelecidas, conforme mostrado a seguir:

s q l = ”SELECT volume , c r i a d o e m FROM m e d i c o e s WHERE c r i a d o e m BETWEEN d a t e t i m e ( ’ ” + d a t a i n i c i a l + ” ’ ) AND d a t e t i m e ( ’ ” +

d a t a f i n a l + ” ’ ) ”

Finalmente, o programa ent˜ao gera o gr´afico desejado pelo usu´ario, utilizando para isso a func¸˜ao “plt.ion()”, sendo que o mesmo possui suas configurac¸˜oes internas relativas aos eixos, tratamento dos dados, formato de data impresso e seus ajustes no eixo horizontal (para uma melhor visualizac¸˜ao optou-se por imprimi-las na diagonal), conforme pode ser observado no c´odigo-fonte final anexo a esse trabalho.

Conforme dito anteriormente, o programa desenvolvido ainda informa o usu´ario quanto foi consumido de ´agua em sua residˆencia por um simples “tweet”. Para isso, ´e utilizada uma func¸˜ao pr´e-estabelecida em Python denominada “tweet()”, para a qual apenas ´e necess´ario inserir algumas informac¸˜oes relativas `a conta com a qual se deseja sincronizar, informando usu´ario e senha, por exemplo. Essas informac¸˜oes s˜ao inseridas na parte do c´odigo mostrada a seguir:

t = T w i t t e r ( a u t h =OAuth (OAUTH TOKEN, OAUTH SECRET , CONSUMER KEY, CONSUMER SECRET ) )

Estabelecendo-se isso, de acordo com a opc¸˜ao selecionada pelo usu´ario o programa ir´a enviar a informac¸˜ao do consumo total de ´agua para a conta desejada, com o texto j´a definido no c´odigo-fonte. A seguir, mostra-se a parte do c´odigo relativa `a opc¸˜ao “2”, a qual mostra o consumo total da ´ultima semana:

e l i f o p c a o = = 2 :

t w e e t = ” Eu g a s t e i ” + s t r ( v a l u e [ l e n ( v a l u e ) −1] − v a l u e [ 0 ] ) + ” l i t r o s de a g u a na u l t i m a semana ! ”

t w e e t C o n s u m o ( t w e e t )

Conforme pode-se perceber, a parte do c´odigo relativo ao envio da informac¸˜ao ao “Twitter” ´e bem simples, n˜ao demandando muitas linhas de programac¸˜ao e muito conhecimento, pois se utiliza uma func¸˜ao j´a pr´e-estabelecida.

Documentos relacionados