• Nenhum resultado encontrado

5.11 Suposições e dependências

6.1.3 Raspberry Pi 3

Este dispositivo é usado como um controlador local ou estação local que serve principal- mente para recolher os dados adquiridos pelos sensores conectados ao NodeMCU e Waspmote, reencaminhar estes dados para a estação remota respetiva e para comparar estes valores com valores limites predefinidos para verificar se é necessário atuar de forma a melhorar as condições do tanque a seu cargo.

O protocolo IoT escolhido e utilizado para a comunicação entre o Raspberry Pi e a estação remota respetiva foi o MQTT. O editor de fluxo IoT Node-RED foi utilizado para lidar com a complexidade desta comunicação. Esta ferramenta é um wrapper da complexidade à volta da conexão MQTT entre estas duas entidades uma vez que, com esta ferramenta, é apenas necessário colocar o endereço IP, a porta e o tópico para permitir a comunicação entre dispositivos. Como o Node-RED, para além da comunicação entre dispositivos, tem nós que permitem a programação de vários scripts que podem correr ao mesmo tempo, no Raspberry

Pi, utilizou-se também esta ferramenta para a programação desses scripts.

Como o Node-RED permite a criação de projetos que compreendem todos os fluxos/scripts, foi criado um projeto para conter todos os fluxos necessários ao correto funcionamento deste microcontrolador, que mais tarde pode ser adicionado por uma outra instância de Node-RED. Devido ao facto de o Raspberry Pi ser um minicomputador, é necessário um sistema operativo. Optou-se pelo Raspbian Stetch com Desktop e software recomendando. Para o correto funcionamento dos scripts desenvolvidos, é necessário a instalação dos seguintes produtos/ferramentas:

• Node.js, linguagem necessária para executar o Node-RED;

• NPM, gestor de pacotes necessário para a gestão dos nós/pacotes instalados no Node-

RED;

• Node-RED, ferramenta utilizada para a comunicação entre dispositivos e para a execução dos vários scripts desenvolvidos;

• Mosquitto, broker MQTT para a comunicação entre dispositivos.

Os scripts/fluxos criados para o correto funcionamento do microcontrolador Raspberry Pi são:

1. Fluxo para configurar o controlador local ou estação local, localmente; 2. Fluxo para configurar o controlador local ou estação local, remotamente; 3. Fluxo para criar uma socket TCP;

4. Fluxo para visualizar os dados dos sensores; 5. Fluxo para visualizar as notificações/alertas;

6. Fluxo para reencaminhar os dados dos sensores para a estação remota; 7. Fluxo para configurar o perfil ambiental;

8. Fluxo para executar o perfil de depuração;

9. Fluxo para controlar de forma autónoma os atuadores instalados; 10. Fluxo para controlar remotamente os atuadores instalados;

11. Fluxo para guardar e/ou repor as configurações do controlador local ou estação local. Fluxo para configurar o controlador local ou estação local, localmente

O sistema desenvolvido disponibiliza duas formas de configurar e instalar um novo tanque no sistema: uma localmente utilizando o Node-RED e outra remotamente utilizando a aplicação web desenvolvida. Neste ponto, será explicado apenas a configuração e instalação local, deixando mais para a frente a explicação da configuração e instalação remota.

Quando o Node-RED é executado pela primeira vez, aparece o formulário apresentado na Figura 6.2. Este serve para configurar o novo tanque localmente.

Figura 6.2: Configuração local do novo tanque usando o Node-RED

Para a configuração local, é necessário o ID do novo tanque, e o endereço IP e o ID da estação remota a que se vai associar o novo tanque. O ID do tanque serve para identificar de forma única o novo tanque. O endereço IP da estação remota a associar serve para se conectar ao broker MQTT localizado nessa estação remota para enviar a configuração. Finalmente, o ID da estação remota serve para a construção do tópico para publicar a configuração e subscrever a resposta a essa configuração.

Após o preenchimento do formulário, o mesmo é publicado no broker MQTT localizado na estação remota no tópico <remoteStationID>/configNode4. Depois o Raspberry Pi fica à espera de resposta. No caso de ser negativa, é apresentado um alerta ao utilizador a dizer o

porquê de não ter sido possível a configuração do novo tanque. Existe a possibilidade de o utilizador alterar novamente o formulário. No caso de a configuração ser aceite, o utilizador é notificado do sucedido e pode visualizar os valores dos sensores, controlar os atuadores e configurar o perfil ambiental.

Fluxo para configurar o controlador local ou estação local, remotamente

Como já foi referido, existe a possibilidade de configurar o novo tanque de forma local ou remota. De forma remota, foram criados dois endpoints POST : um serve para validar o endereço IP introduzido pelo utilizador na aplicação web, o outro serve para configurar o novo tanque com o seu novo ID, e com o endereço IP e ID da estação remota associada.

Após a configuração, o utilizador que está a usar a interface gráfica do Node-RED é notificado do sucedido e pode visualizar os valores dos sensores, controlar os atuadores e configurar o perfil ambiental.

Fluxo para criar uma socket TCP

Para o Waspmote comunicar com o Raspberry Pi é preciso a criação de uma socket TCP na porta 5000 para a receção dos frames ASCII que contêm as leituras dos sensores conectados ao Waspmote. Após a receção, é feito um processamento para retirar apenas a informação importante do frame recebido que são: os valores adquiridos pelos sensores e o nível de bateria do mote. Quando esses valores são adquiridos são publicados no broker MQTT do Raspberry Pi. Como não é possível a publicação direta pelo Waspmote no broker, como é, por exemplo, com o NodeMCU, é necessário proceder a este passo.

Após o processamento e comparação dos valores atuais com os valores limites predefinidos, é enviado para o Waspmote, como resposta ao frame recebido, o intervalo de tempo que o mesmo deve estar em repouso (deep sleep) antes de proceder a uma nova leitura. No caso de alguns dos parâmetros não estarem dentro dos valores considerados seguros, e por causa disso desencadeou uma ação, o intervalo de tempo de repouso, independentemente no nível de bateria, será de 5 segundos. Caso contrário, o intervalo de tempo de repouso enviado será o intervalo de tempo entre leituras, definido pelo utilizador na aplicação web.

Fluxo para visualizar os dados dos sensores

Este fluxo serve apenas para visualizar localmente os valores capturados pelos sensores instalados no tanque. Além disso, é possível ver o nível de bateria do Waspmote. O valor atual é representado por um gauge enquanto que o histórico de valores é representado por um gráfico. A Figura 6.3 apresenta a dashboard local do Node-RED.

Fluxo para visualizar as notificações/alertas

Quando os valores atuais, adquiridos pelos sensores instalados no tanque não se encontram dentro dos valores limites considerados seguros, na interface gráfica do Node-RED aparece uma notificação no canto superior direito a expressar isso mesmo (Figura 6.4).

Figura 6.3: Dashboard do Node-RED

Figura 6.4: Exemplo de notificação no Node-RED

Fluxo para reencaminhar os dados dos sensores para a estação remota

À medida que os valores dos sensores chegam ao broker MQTT do Raspberry Pi, são reencaminhados para a estação remota respetiva, ao publicar esses valores no broker MQTT localizado na estação remota.

Fluxo para configurar o perfil ambiental

O perfil ambiental tem como principal objetivo identificar para cada parâmetro monitori- zado o seu valor ótimo e os valores máximos e mínimos permitidos. Para além disso, também serve para identificar quais são os atuadores que deve ser ligados e/ou desligados quando os valores limites considerados seguros não são respeitados.

O perfil ambiental pode ser configurado tanto localmente como remotamente, utilizado a aplicação web e mobile. Remotamente, apenas é necessário subscrever ao tópico <tan- kID>/config/# e guardar o perfil ambiental. Localmente, o utilizador deve preencher o formulário apresentado na Figura 6.5 para cada um dos parâmetros monitorizados.

Fluxo para executar o perfil de depuração

O perfil de depuração serve para eliminar os microrganismos localizados na água que foram, entretanto, libertados pelos moluscos bivalves. É necessário proceder a este processo para que a água fique livre de microrganismos para não recontaminar os moluscos presentes no tanque. Este perfil pode ser definido através da aplicação web e mobile desenvolvida. No entanto, o mesmo é recebido pelo Raspberry Pi ao subscrever o tópico <tankID>/depurationProfile. O

Raspberry Pi ao receber, guarda o mesmo em memória, e começa desde logo a executá-lo.

O perfil de depuração é executado por dois atuadores instalados no tanque, que são a bomba de água e a luz LED UV. Quando chega a hora da execução deste perfil, é publicado no tópico nodeMCU/waterIntensity e nodeMCU/lightIntensity a intensidade do fluxo da água

Figura 6.5: Configuração do perfil ambiental na interface gráfica do Node-RED

e da luz, respetivamente. Estas intensidades são definidas pelo utilizador e vão ser cumpridas pelos respetivos atuadores. A intensidade tanto do fluxo da água como da luz LED UV é atingida através da técnica Pulse Width Modulation (PWM). Esta técnica permite controlar a intensidade ou a velocidade dos atuadores ao ligar e desligar o fornecimento de energia ao atuador a uma velocidade elevada. Quanto mais tempo a alimentação permanecer ligada, em relação ao tempo em que está desligada, maior será a intensidade de trabalho do atuador. No NodeMCU, isto é possível através do uso do método analogWrite(), no qual o primeiro argumento é o pino do atuador a controlar, e o segundo é um valor entre 0 – 1024, que representa a quantidade de tempo em que o atuador fica ligado, ou seja, a trabalhar. Por exemplo, com o valor de 1024 o atuador fica sempre ligado, já com o valor de 512 o atuador fica ligado metade do tempo.

O perfil de depuração pode ser executado entre intervalos de tempo bem definidos ou em horas especificas durante dias. Isto é possível através do nó “Inject” do Node-RED, já que este tem a possibilidade de repetir a injeção durante intervalos de tempo ou a horas especificas. Quando o nó “Inject” é ativado, é publicado nos tópicos referidos acima a intensidade do fluxo da água e da luz. Depois existe um processamento para verificar quando é que o próximo passo do perfil de depuração é executado.

Fluxo para controla de forma autónoma os atuadores instalados

À medida que os valores adquiridos pelos sensores instalados no tanque chegam, estes são comparados com os valores limites predefinidos pelos utilizadores, através do perfil ambiental. No caso de serem respeitados, o que significa que não é preciso atuar, os atuadores continuam com o mesmo estado. Caso contrário, é necessário desencadear ações com a finalidade de melhorar os valores dos parâmetros considerados importantes para a caracterização da qualidade da água. Este fluxo, faz precisamente isso, ou seja, verifica se existe algum parâmetro fora dos seus valores normais ou considerados seguros, e no caso de se encontrar fora verifica qual é a medida a ser tomada e executa-a de forma a retomar os valores desses parâmetros para os seus valores normais.

Tanto os valores limites como as ações a executar (ligar/desligar atuadores) são definidos no perfil ambiental para cada parâmetro monitorizado, e apenas é necessário verificar se tais valores são respeitados. Se não forem, são ligados e/ou desligados os atuadores necessários para melhorar as condições, no caso de os respetivos atuadores não estarem no estado pretendido. O tempo em que os mesmos estão ligados pode ser definido pelo utilizador, ou fica ligado até o valor ótimo ser atingido.

Fluxo para controlar remotamente os atuadores instalados

Para além dos atuadores serem controlados de forma autónoma, quando os valores adqui- ridos pelos sensores não se encontram dentro dos valores considerados seguros, os atuadores também podem ser controlados remotamente, seja pela interface gráfica do Node-RED seja pelas aplicações web e mobile desenvolvidas.

A Figura 6.6 apresenta o controlo remoto dos atuadores instalados no tanque, usando a interface gráfica do Node-RED. Quando o interruptor de um atuador é ligado, é publicado no tópico nodeMCU/<actuatorType> a mensagem “on” no broker MQTT localizado no

Raspberry Pi, em que quando o NodeMCU adquiri esta mensagem, liga o respetivo atuador.

Figura 6.6: Controlar os atuadores remotamente usando a interface gráfica do Node-RED Quando o Raspberry Pi, ao subscrever o tópico <tankID>/controlActuator/#, do broker MQTT localizado da estação remota associada a ele, recebe mensagens para ligar ou desligar um certo atuador, ele reencaminha a mensagem para o tópico nodeMCU/<actuatorType> no broker MQTT localizado no Raspberry Pi para que o NodeMCU atualize o estado desse atuador.

Fluxo para guardar e/ou repor as configurações do controlador local ou estação local

Quando o serviço Node-RED no Raspberry Pi é desligado, seja pelo utilizador seja por falta de energia, ou reiniciado, todas as variáveis globais utilizadas para o correto funcionamento de todos os fluxos criados são perdidas, fazendo com que o Node-RED seja iniciado pela primeira vez e peça novamente as configurações do mesmo. Por causa disso, foi criado um fluxo para que, de 1 em 1 minuto, se verifique se houve alterações nos valores das variáveis globais. No caso de haver, todos os valores dessas variáveis são guardados num ficheiro de formato JSON. Assim, quando o serviço Node-RED é inicializado após ter sido terminado ou reiniciado, é verificado, neste fluxo, se existe o ficheiro JSON com os nomes e os valores das variáveis globais. No caso de haver, o ficheiro é lido e o seu conteúdo processado para guardar as variáveis globais novamente no Node-RED. Caso contrário, assume-se que o Node-RED é inicializado pela primeira vez, sendo necessária a configuração inicial.

Após a instalação do Node-RED e da respetiva configuração para poder adicionar projetos, basta adicionar o projeto ao referir a localização da pasta “.git” e identificar a chave de encriptação da credencial de acesso ao projeto. Após a adição e a instalação das dependências, o projeto encontra-se funcional e pronto a ser executado.

A interface gráfica do Node-RED, após a devida instalação do pacote “node-red-dashboard”, encontra-se acessível na página http://<ipAddress>:1880/ui. De notar, que a instalação deste pacote deve ser feita antes da importação de todos os fluxos implementados e descritos, no caso de não ser usado o projeto e apenas ser importado os fluxos. Senão, a dashboard não estará disponível, visto que irá haver erros na construção da interface gráfica, por não possuir os nós necessários para tal. A interface gráfica criada, apenas está otimizada para a simulação desta dissertação, ou seja, apenas é possível ver os valores dos sensores que medem a temperatura, o fluxo de água, o pH e o oxigénio dissolvido, configurar para estes parâmetros o perfil ambiental, e por fim, controlar remotamente os atuadores, bomba de água, luzes LED UV, aquecedor e refrigerador. Apesar disso, isto só se aplica à componente visual, já que a parte programável (fluxos) foi otimizada para suportar mais sensores/parâmetros e atuadores. O acesso a esta interface está protegido por utilizador e password, ao configurar os mesmos no ficheiro de configuração do Node-RED.

Para esta dissertação, o acesso ao broker MQTT localizado no Raspberry Pi está protegido por utilizador e password, que foram configurados no ficheiro de configuração do Mosquitto.

Todos os tópicos MQTT utilizados, tanto no broker localizado no Raspberry Pi como no broker localizado na estação remota respetiva, encontram-se devidamente identificados e explicados no Apêndice A.

6.2 Estação remota

O módulo estação remota, como foi referido, serve para reencaminhar os dados adquiridos pelos sensores, dos módulos de controlo e recolha de dados, a seu cargo, para o servidor

central, e para reencaminhar informação importante vinda do servidor para os seus módulos de controlo e recolha de dados, para que estes executam a sua função. Este módulo pode ser visto como um intermediário entre o servidor central e as estações locais.

O protocolo IoT escolhido e utilizado para a comunicação entre os módulos de controlo e recolha de dados e a estação remota e entre a estação remota e o servidor central foi o MQTT. O editor de fluxo IoT Node-RED foi utilizado pelas mesmas razões referidas na Subsecção 6.1.3. Para além da comunicação, também se optou pelo editor de fluxo IoT Node-RED para a programação dos vários scripts/fluxos necessários para o correto funcionamento deste módulo. Foi criado um projeto para conter todos os fluxos necessários ao correto funcionamento da estação remota, que mais tarde pode ser adicionado por uma outra instância de Node-RED. Para o correto funcionamento dos scripts/fluxos desenvolvidos, é necessária a instalação dos seguintes produtos/ferramentas no dispositivo que irá atuar como estação remota:

• Node.js, linguagem necessária para executar o Node-RED;

• NPM, gestor de pacotes necessário para a gestão dos nós instalados no Node-RED; • Node-RED, ferramenta utilizada para a comunicação entre dispositivos e para a

execução dos vários scripts desenvolvidos;

• Mosquitto, broker MQTT para a comunicação entre dispositivos.

Os scripts/fluxos criados para o correto funcionamento do dispositivo que representa uma estação remota são:

1. Fluxo para configurar a estação remota, localmente; 2. Fluxo para configurar a estação remota, remotamente; 3. Fluxo para reencaminhar as mensagens recebidas;

4. Fluxo para configurar um novo módulo de controlo e recolha de dados; 5. Fluxo para guardar e/ou repor as configurações da estação remota.

Fluxo para configurar a estação remota, localmente

O sistema desenvolvido disponibiliza duas formas de configurar e instalar uma nova estação remota: uma localmente utilizando o Node-RED e outra remotamente utilizando a aplicação

web. Neste ponto, apenas será explicado a configuração e instalação local.

Quando o Node-RED é executado pela primeira vez aparece o formulário apresentado na Figura 6.7. Este serve para configurar a nova estação remota localmente. Para a configuração local é necessário apenas o ID da nova estação remota, que serve para identificar de forma única a nova estação remota.

Após o preenchimento do formulário, o mesmo é publicado no broker MQTT localizado no servidor central no tópico centralServer/remoteStation5. Depois, o dispositivo que representa a estação remota fica à espera da resposta. No caso de a resposta ser negativa, é apresentado um alerta ao utilizador a dizer o porquê de não ter sido possível a configuração da nova estação remota, e existe a possibilidade de o utilizador alterar novamente o formulário. No caso de a configuração ser aceite, o utilizador é notificado do sucedido e é apresentado ao mesmo a página apresentada na Figura 6.8.

Figura 6.8: Página da interface gráfica do Node-RED quando a estação remota está registada Fluxo para configurar a estação remota, remotamente

Como já foi referido, existe a possibilidade de configurar a nova estação remota de forma local ou remota. De forma remota, foi criado um tópico centralServer/newRemoteStation, em que cada estação remota, que ainda não tenha sido configurada, subscreve a este tópico. Quando recebe uma mensagem, verifica se a mesma contém o seu endereço IP. Se contiver, pu- blica no tópico centralServer/newRemoteStation/validation a dizer que está disponível para a configuração. Depois, subscreve ao tópico <remoteStationID>/configRemoteStationRemotely para receber a sua configuração final.

Após a configuração, o utilizador que está a usar a interface gráfica do Node-RED é notificado do sucedido apresentado ao mesmo a página apresentada na Figura 6.8.

Fluxo para reencaminhar as mensagens recebidas

À medida que recebe informação importante do servidor central, em relação aos módulos de controlo e recolha de dados a seu cargo, a estação remota reencaminha essa informação para o módulo respetivo ao publicá-la no tópico referente a esse módulo, no broker localizado na estação remota.

À medida que recebe os dados adquiridos pelos sensores de cada módulo de controlo e recolha de dados a seu cargo, a estação remota reencaminha esses dados para o servidor central ao publicar essa informação no tópico referente à sua estação remota, no broker localizado no servidor central.

Fluxo para configurar um novo módulo de controlo e recolha de dados

Na Subsecção 6.1.3, referiu-se que um novo módulo de controlo e recolha de dados pode ser configurado de duas maneiras, uma localmente, utilizando a interface gráfica do Node-RED, outra remotamente, utilizando a aplicação web desenvolvida. Tanto para a configuração local como para a configuração remota, a informação da mesma tem de passar sempre pela estação

5Todos os tópicos utilizados podem ser visualizados no Apêndice A

remota escolhida para ser responsável pelo novo módulo ou tanque.

Para a configuração local, a estação remota subscreve o tópico <remoteStatio- nID>/configNode do broker localizado na estação remota, já que é através deste tópico que novas configurações dos módulos de controlo e recolha de dados são recebidas. Após a receção de uma nova configuração, é verificado se o ID escolhido pelo utilizador da interface gráfica