Layer 1 DETImótica logo DETImótica

A aplicação móvel associada ao projecto tem por objectivo principal fornecer aos utilizadores comuns acesso aos dados dos sensores instalados, de forma conveniente e rápida. Devido à sua capacidade de criação de aplicações de forma rápida e de fácil compreensão, foi utilizada a framework Flutter, recorrendo, também a vários plugins da mesma.

As principais funcionalidades implementadas foram:

Deste modo, o desenvolvimento da aplicação móvel pode ser dividido em três componentes fundamentais:

Componentes da Aplicação

Autenticação

Ao entrar na aplicação, o utilizador é redireccionado para uma página de login. Foi utilizado um plugin externo para poder ser mostrado na aplicação a página do idp da universidade de aveiro, através da qual o utilizador efectua o login. O url passado a este plugin é o endpoint de autenticação da API, que quando chamado, redirecciona o utilizador para o idp. Uma vez introduzidas as credenciais, estas são validadas conforme explicado na secção referente à API. Uma vez efectuado o login, a aplicação recebe um id de sessão que é usado para todos os pedidos subsequentes feitos à API. Em qualquer altura, após estar autenticado, o utilizador pode fazer o logout na aplicação

Plugins utilizados Utilização
http Efectuar pedidos HTTP à API
webview_flutter Apresentar a página do idp da universidade para login

Resumo dos Plugin utilizados na aplicação móvel para autenticação

Aquisição e Apresentação de Informação Sensorial

O aspecto mais importante da aplicação móvel é a possibilidade de visualizar os dados sensoriais de forma rápida e conveniente. Isto é possível a qualquer utilizador autenticado no sistema, que terá acesso aos dados dos sensores que lhe sejam permitidos. Uma vez efectuado o login, o utilizador é levado para a página de listagem de salas. Ao iniciar, a aplicação efectua uma sequência de pedidos à API (ilustrada no Diagrama a seguir), com o objectivo de recolher informação sobre todas as salas registadas, os seus detalhes e informação sobre os sensores instalados nas mesmas.

Sequência de aquisição dos dados das salas Sequência de aquisição dos dados das salas

Nesta altura, é possível, também procurar uma sala específica por nome. Por cada uma das salas listadas, o utilizador pode expandir para ter mais informações, provenientes da API, tais como uma descrição da sala e todos os sensores nela instalados. Ao seleccionar uma sala, o utilizador é levado para a página de detalhes dos sensores, onde são listadas as informações sensoriais para cada sensor instalado. Para cada sensor, é efectuado um pedido à API, sendo recolhidos os dados do último minuto. Posteriormente, estes dados são apresentados num gráfico. É, ainda calculado o ganho em valor absoluto e percentagem. Finalmente, para cada métrica adequada, é avaliado o valor medido actualmente, num de cinco níveis, para indicar se o valor se encontra demasiado alto ou demasiado baixo. A figura seguinte ilustra esta interface.

Página de detalhes sensoriais Página de detalhes sensoriais

Usando o sistema de alertas, é, também possível activar ou desactivar (encontrando-se desactivado por defeito) notificações para cada sensor.

Endpoints relevantes Utilização
/rooms Usado para preencher a lista de salas monitorizadas a que o utilizador tem acesso
/room/ Obter os detalhes de uma sala identificada por
/room/{id}/sensors Obter a lista de ids de sensores para uma sala identificada por
/sensor/ Obter os detalhes de um sensor identificado por
/sensor/{id}/measure/interval Obtenção dos valores registados pelo sensor identificado por ao longo do último minuto

Endpoints relevantes utilizados pela aplicação móvel


Plugins utilizados Utilização
http Efectuar pedidos HTTP à API
typicons_flutter Utilização de diversos ícones relevantes
flutter_sparkline Apresentação de informação sensorial em gráficos

Resumo dos plugins utilizados na aplicação móvel para apresentação dos dados

Sistema de Alertas

A aplicação móvel também pode receber alertas provenientes do sistema. Estes alertas são de dois tipos: alertas de controlo ou de sensor. Qualquer utilizador da aplicação recebe os alertas de controlo que são enviados, por exemplo, por um administrador. No entanto, o utilizador pode escolher sobre quais sensores pretende receber notificações. Para poder receber os alertas de sensores, a aplicação liga-se ao projecto Firebase criado para o propósito. Quando o sistema envia os alertas, estes são, também, para o projecto Firebase referido, que, por sua vez envia no tópico do respectivo sensor que é identificado pelo seu ID. Se o utilizador pretender receber notificações de um dado sensor, deve-se subscrever ao tópico do sensor que pretende. Como foi dito, todos os utilizadores estão, sempre, subscritos ao tópico de controlo. Na página de sensores de uma sala, ao lado de cada sensor, o utilizador pode activar ou desactivar os alertas do sensor em questão. Devido à simplicidade da informação, optámos por guardar a lista de sensores subscritos na memória interna do telemóvel, num ficheiro, contendo os ids dos mesmos. Para os dois tipos de alertas, uma vez recebidos pelo Firebase, são reenviados para a aplicação, que apresenta uma notificação Android no telemóvel. Na figura seguinte apresenta-se um exemplo de uma notificação de sensor e uma de controlo.

Página de detalhes sensoriais Exemplos de notificações

Plugins utilizados Utilização
firebase_messaging Interacção com o projecto Firebase
flutter_local_notifications Apresentação dos alertas numa notificação android
path_provider Identificar caminhos no sistema de ficheiros

Resumo dos plugins utilizados na aplicação móvel para as notificações