Cidade Inteligente - Estação De Monitoramento De Clima E Chuva

by Matheus Santana in Circuits > Microsoft

405 Views, 1 Favorites, 0 Comments

Cidade Inteligente - Estação De Monitoramento De Clima E Chuva

azure_iot.drawio.png

Neste projeto será desenvolvido um sistema de monitoramento de clima e chuva para cidades por meio de um dispositivo IoT. Iremos utilizar soluções da cloud Azure, sendo o Azure IoT Central para gerenciar os dispositivos IoT, o Hub de Eventos com o Stream Analytics para processamento dos dados e por fim, o Power BI para uma visualização e monitoramento mais sofisticada das informações dos dispositivos.

Os dispositivos IoT's remoto são estações de clima e de monitoramento de chuva para detectarão de níveis de alagamentos, com principal objetivo de informar, em tempo real, pontos de alagamentos que possam impacta as cidades.

Os dispositivos IoT's nesse projeto serão simulado por um código em JavaScript na plataforma NodeJS que irá conectar com a Azure IoT Central.

O passo a passo na criação dos recursos e configurações dos recursos no Azure nesse projeto são baseados na interface web do Azure na data de 09/2021. É possível sempre buscar os procedimentos mais atuais no site da Microsoft (https://docs.microsoft.com/pt-br/azure/).

Supplies

Para o projeto, será necessário criar uma conta na Azure, bem como uma assinatura para criação dos recursos. Os recursos necessários no Azure são:

- Azure IoT Central (https://azureiotcentral.com/);

- Event Hub (https://portal.azure.com);

- Stream Analytics (https://portal.azure.com);

- Power BI (https://app.powerbi.com/);

Os softwares necessários para simular o dispositivo IoT remoto são:

- Instalação do NodeJS v14;

- Instalação do Git. (Opcional);

- Código no repositório https://github.com/mborcari/weatherstationIoT

Criando Um Aplicativo No Azure IoT Central

azurecentraliot.JPG

O primeiro passo é criar um aplicativo no Azure IoT Central. Neste projeto, foi criado um chamado Smart City Demo, um nome relacionado ao conceito de cidade inteligente. O Azure IoT Central nos permitirá criar modelos de dispositivos, que são templates para serem usados ao se criar um dispositivo IoT real. Um template contém atributos como telemetria, propriedades e comandos.

Para criar um aplicativo, acesse o site azureiotcentral.com e execute os seguintes passos:

1 - Clique no botão criar uma solução.

2 - Clique em Build no menu à esquerda e, em seguida, selecione Aplicativos personalizados.

3 - Defina um nome para seu aplicativo. O Nome do aplicativo pode ser qualquer nome amigável, como "SmartCity"

4 - Deixe o Modelo de aplicativo como Aplicativo personalizado.

5 - Selecione Gratuito para o Plano de preços.

Criando Um Modelo De Dispositivo

modelodispositivo.JPG

Depois de criar o aplicativo, será necessário criar um modelo de dispositivo. A estrutura dos dados enviados entre um dispositivo remoto e o Azure IoT Central são definidos em um modelo de dispositivo. O modelo de dispositivo encapsula todos os detalhes sobre as telemetrias e propriedades. Em nosso exemplo, colocamos o nome do modelo de Weather Station.

Uma vez criado o modelo, o próximo passo agora é criar os atributos desse modelo, como telemetrias, propriedades e possíveis comandos remotos que poderá ser executado. Para esse projeto, deixamos disponibilizado um arquivo JSON do modelo para ser importado dentro do aplicativo Azure IoT Central. O arquivo "Weather Station.json" encontra-se no repositório https://github.com/mborcari/weatherstationIoT.

Para carregar o modelo, execute os seguintes passos:

1 - Dentro do Azure IoT Central, clique em dispositivo;

2 - Cliquem em Novo;

3 - Selecione o tipo Dispositivo IoT.

4 - Clique em avançar;

5 - Defina um nome para o seu modelo e clique em próximo;

6 - Clique em criar.

7 - Selecione a opção importar modelo e informe o arquivo "Weather Station.json".

O modelo contém as seguintes telemetrias:

- Estado (Ligado, Desligado, Com falha);

- Temperatura (Celsius);

- Umidade;

- Nível de água (Para detectar alagamentos);

- Eventos (Para informações)

Contém também as propriedades:

- Nome;

- Localidade

O modelo terá também dois comandos que poderá ser executados remotamente, um para ligar e outro para desligar o dispositivo. O propósito é ter a opção de interromper o envio dos dados de telemetria do dispositivo para nuvem. Por exemplo, poderá ser interessante que o dispositivo remoto envie dados somente quando há uma previsão de chuva, deixando o projeto mais econômico.

Criando Novo Dispositivo

novodispositivo.JPG

Uma vez com modelo criado, agora pode-se criar um dispositivo real baseado no modelo. O dispositivo real na nuvem é a representação do dispositivo IoT remoto (dispositivo físico).

Depois de criar o dispositivo IoT, clique na opção conectar e copie as informações "Escopo da ID", "ID do dispositivo" e "Chave primária". Este serão usado para provisionar o dispositivo remoto.

O processo de conectar o dispositivo remoto com sua representação na nuvem é chamado de provisionamento, onde o dispositivo remoto é registrado e autenticado na nuvem.

Código Do Dispositivo Remoto

codesample.JPG

Agora que foi criado um dispositivo na nuvem, será simulado o dispositivo remoto utilizando um código na plataforma NodeJS. Trata-se de um código em Javascript que pode servir como base para desenvolvimento em um Raspberry PI.

O código que simula o dispositivo remoto neste projeto encontra-se no repositório https://github.com/mborcari/weatherstationIoT.

Para utilização do código, é necessário ter o NodeJS v14 (https://nodejs.org/en/download/) instalado em sua máquina. Com o NodeJS instalado e com código copiado, execute o seguinte comando no prompt de seu computador para a instalação das dependências do projeto:

npm install


Antes de executar o código, uma breve explicação sobre ele. O código irá realizar primeiramente o provisionamento do dispositivo, que é o ato de registrar e autenticar no dispositivo correspondente na nuvem, em seguida, será feito o envio das propriedades como nome e localização do dispositivo remoto. Por fim, é executado uma função em loop que simula o clima e possível alagamento pela chuva, gerando valores aleatório da temperatura, umidade, do nível da água e enviado para a nuvem.

No código, o seguinte trecho é necessário informar o ID escopo, o ID do dispositivo na nuvem e sua Chave privada:

// Enter your Azure IoT keys
var idScope = '';

var registrationId = '';

var symmetricKey = ' ';


As seguintes variáveis no código definem os valores inicias de propriedades como nome e local:

var sensorNameDevice = "Nome do dispositivo"

var baseLat = -19.970256578641237; // Base position latitude.

var baseLon = -44.01700026331516; // Base position longitude.


Por fim, a variável timeInterval define a periocidade do loop que envia as dados da telemetria para nuvem.

Após o código parametrizado, basta executá-lo com o seguinte comando:

node .\sensorExample.js


O código também prevê dois comandos remoto, o turnOnDevice e turnOffDevice. Tais comando servem para "ligar" e "desligar" o envio de telemetria do dispositivo remoto para a nuvem. Este s comando podem ser acessado dentro do Azure IoT Central.

Criando Hub De Eventos

hubeventos.JPG

Já configurado o dispositivo na nuvem e executado o código que simula o dispositivo IoT remoto, será feita a configuração de dois recursos na nuvem da Azure, o Hub de Eventos e o Stream Analytcs.

Os Hubs de Eventos podem lidar com milhões de dados por segundo. Os processos de back-end deste serviço podem lidar com análises em tempo real, armazenamento, detecção de anomalias, pipelines de análise, painéis dinâmicos, processamento de transações e muitos outros processos. Um hub de eventos nesse projeto irá receber os dados de forma contínua do Azure Central IoT.

Para criar um recurso do tipo Hub de Eventos, execute os seguintes passos:

1 - No portal do Azure, procure pelos Hubs de Eventos e o selecione;

2 - Clique em criar. Primeiro será criado um namespace;

2 - Selecione uma assinatura e um grupo de recurso já criado previamente para o projeto;

3 - Na caixa Nome, insira um nome para namespace, como por exemplo iotcontinuousnamespace;

4 - Selecione o Tipo de preço;

5 - Defina o valor de Unidades de Produtividade como 1;

6 - Selecione Criar e aguarde até que o recurso seja implantado;

Esse processo pode levar alguns minutos. Salve a cadeia de conexão do namespace criado. No painel esquerdo, selecione Políticas de acesso compartilhado, abra RootManagedSharedAccessKey e copie o valor da Cadeia de conexão – Chave primária para o arquivo de texto. Essa chave é a cadeia de conexão do namespace do hub de eventos.

Agora, crie uma instância de hub de eventos no namespace.

1 - Vá até a página Visão geral do recurso de namespace do hub de eventos criado;
2 - Selecione o namespace criado e escolha Hub de Eventos. Você precisa criar uma instância desse namespace;

3 - Na página de criação, na caixa Nome, insira o nome para a instância, como por exemplo iotcontinuouseventhub;

3 - Mantenha as configurações padrão para os outros campos e selecione Criar.

Configurando Hub De Eventos No IoT Central

hub.JPG

Será feito agora a configuração do Hub de Eventos criado no passo anterior como opção de exportação de dados no aplicativo dentro do Azure IoT Central.

1 - Localize o aplicativo no IoT Central criado no passo 2 desse projeto.

2 - No painel esquerdo, selecione Exportação de dados.

3 - Selecione Destino e clique em Novo Destino.

4 - Na caixa Nome, defina um nome que identifique o destino para o Hub de Eventos.

5 - Na página de criar destino, na caixa Tipo de Destino deixe como Hubs de Eventos Azure.

6 - Na caixa Cadeia de Conexão, insira a cadeia de conexão que você salvou na seção anterior

7 - Na caixa Hub de Eventos, insira nome do namespace criado no passo anterior.

8 - Clique em salvar.

Agora, crie uma nova exportação:

1 - Clique em Nova exportação.

2 - Selecione tipo de dados Telemetria.

3 - No destino, adicione o hub criado no passo acima.

4 - Clique em salvar.

5 - Aguarde até que o status da exportação de dados mude para Integro..

Criando Stream Analytics

stream.JPG

O Azure Stream Analytics é um serviço de processamento de eventos desenvolvido para analisar e processar simultaneamente altos volumes de dados de streaming a partir de várias fontes. No nosso caso, a fonte será o Hub de Evento criado e configurado no passo anterior, e o destino será um relatório no Power BI.

Para criar um novo recurso de trabalho de Stream Analytics, realize os seguintes passos no Azure:

1 - Vá até a home page de seus recursos;

2 - Selecione Criar um recurso;

3 - Pesquise e selecione o trabalho do Stream Analytics e selecione Criar;

4 - Na caixa Nome, insira um nome para o stream, como por exemplo iotcontinuousjob;

5 - Na lista suspensa Local, selecione o local mais próximo a você;

6 - Reduza o número de Unidades de streaming de 3 para 1. Não há necessidade de ter mais funcionalidades do que o necessário;

7 - Selecione Criar;

Aguarde a mensagem "Implantação bem-sucedida" e, então, abra o novo recurso.

Configurando Stream Analytics

streamsql.JPG

Um trabalho no Stream Analytcs precisa ter uma fonte de entrada e uma saída dados configurada.

A primeira etapa é definir a entrada da fonte:

1 - Na página do recurso de Stream Analytics, selecione Entradas.

2 - Clique em Adicionar entrada de fluxo na lista suspensa e selecione Hub de Eventos.

3 - Na caixa Alias de entrada, digite um nome que irá identificar a entrada, como iotcontinuousInput.

4 - Verifique se a opção 'Selecione o hub de eventos nas suas assinaturas' está selecionada e faça o seguinte:

5 - Para Namespace do Hub de Eventos, selecione o namespace criado nos passos anteriores, como iotcontinuousnamespace.

6 - Para Nome do Hub de Eventos, selecione Usar existente.

7 - Selecione o hub de evento criado anteriormente, como iotcontinuouseventhub.

8 - Verifique se a opção "Usar existente" está selecionado para as duas outras caixas de seleção.

9 - Mantenha os valores padrão nos outros campos.

10 - Selecione Salvar.

Selecione seu trabalho do Stream Analytics novamente.

Faça isso facilmente usando as trilhas de navegação no canto superior esquerdo. Agora, você verá que o trabalho tem uma entrada. Próximo etapa agora é definir uma saída.

1 - Clique em Saída e selecione adicionar e, na lista suspensa, selecione Power BI

2 - No prompt, autorize a conexão.

3 - Em Alias de saída, digite um nome como iotcontinuousBI.

3 - Na lista suspensa Workspace de grupo, selecione Meu workspace. Se essa opção não estiver disponível, selecione um dos workspaces listados e registre o nome dele em seu arquivo de texto.

4 - Em Nome do conjunto de dados, insira iotcontinuousDataset.

5 - Em Nome da tabela, insira iotcontinuousTable.

6 - Altere o valor do Modo de autenticação para Token de usuário.

7 - Mantenha os valores padrão para os outros campos e selecione Salvar.

8 - Use as trilhas de navegação para selecionar seu trabalho. Selecione Editar consulta e altere a consulta para:

SELECT deviceid,

messageType,

messageSource,

EventProcessedUtcTime,

GetArrayElement(properties, 0).value.lon as location_lon,

GetArrayElement(properties, 0).value.lat as location_lat,

GetArrayElement(properties, 1).value as sensorname,

telemetry.state, telemetry.event, telemetry.humidity, telemetry.waterlevel, telemetry.temperature

INTO

iotcontinuousBI

FROM

iotcontinuousInput

Utilizando O Power BI

powerbi.JPG

Por fim, será visualizado os dados que saem do Azure IoT Central, exportado para o Hub de Eventos e tratado pelo Stream Analytcs no Power BI. Para isso iremos criar um relatório.

1 - Abra o aplicativo web do Power BI.

2 - Abra o workspace no qual você criou o conjunto de dados. Ele pode ser Meu workspace ou um workspace que você selecionou anteriormente e armazenou em seu arquivo de texto. Em Conjuntos de dados, verifique se o dataset criado irá aparecer, como o iotcontinuousDataset. Se não for exibido, talvez seja necessário aguardar um pouco até que a lista de conjuntos de dados seja preenchida.

3 - No canto superior direito, na lista suspensa escolha a opção Criar, selecione Dashboard. Dê um nome amigável ao dashboard (por exemplo, Dashboard IoT).

4 - No painel a seguir, selecione Adicionar bloco. Selecione Dados de Streaming Personalizados > Avançar e, na lista de conjuntos de dados, selecione iotcontinuousDataset.

No Power BI, será possível montar dashboard para cada dispositivo ou um para todos os dispositivos, como um painel de alerta para sensores que detectam níveis de alagamentos.