Loading repository data…
Loading repository data…
Albertinesilva / repository
🌾 Aplicação backend desenvolvida no IFBA para simulação de monitoramento de sensores agrícolas, utilizando Spring Boot, comunicação assíncrona com MQTT e mensageria com RabbitMQ (AMQP), demonstrando integração entre sistemas e conceitos de IoT.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Este projeto é uma aplicação backend robusta desenvolvida em Java com Spring Boot para o monitoramento de dados de sensores em ambientes agrícolas. A aplicação coleta, armazena e publica informações de sensores como temperatura, umidade e luminosidade, simulando a comunicação via protocolos AMQP (RabbitMQ) e MQTT.
Além de uma simulação com os protocolos AMQP (RabbitMQ) e MQTT, o projeto também possui uma implementação funcional com integração real a brokers de mensagens. Essa nova arquitetura utiliza clientes e serviços reais para garantir que o fluxo de dados entre os dispositivos IoT simulados e o backend seja efetivo e confiável.
A interação com os dados da API é feita por um frontend construído em JavaScript que utiliza requisições fetch para consumir e exibir as informações em tempo real.
Trata-se de uma simulação educacional e funcional de um sistema IoT (Internet das Coisas), que representa o envio e recebimento de dados de sensores em uma fazenda inteligente. Os protocolos AMQP e MQTT são amplamente utilizados em aplicações reais para comunicação entre dispositivos IoT e servidores, e aqui são simulados com o objetivo de facilitar o aprendizado e a demonstração do funcionamento desses sistemas sem a necessidade de infraestrutura real.
📄 Para ver os resultados e registros do sistema em execução, clique aqui para ver os logs detalhados do projeto.
🖼️ Para visualizar as telas e a interface do sistema, clique aqui para ver as capturas de tela do frontend.
🔍 Para visualizar a análise crítica do sistema, clique aqui para ver a análise completa.
📚 Para acessar a documentação técnica completa do backend gerada com JavaDocs, basta rodar o comando:
mvn javadoc:javadoc
Os arquivos serão gerados em:
/target/site/apidocs/index.html
Demonstrar, de forma prática e simplificada, o funcionamento de um sistema backend de IoT para monitoramento de sensores em uma fazenda. O projeto abrange tanto o aspecto educacional e de simulação quanto uma implementação robusta para cenários de integração real.
📡 Fluxo de Dados: Simulação e Integração Real
A arquitetura do projeto foi desenvolvida para ser flexível e didática, permitindo a execução em dois modos principais: simulação e integração real. Essa abordagem facilita o aprendizado e a demonstração, ao mesmo tempo que garante a capacidade de se conectar a sistemas externos de mensageria.
🧪 Modo de Simulação
Neste modo, o sistema mantém uma simulação completa das camadas de processamento Edge, Fog e Cloud, com a divisão de responsabilidades. Isso inclui:
Geração de Dados: Simulação da leitura de dados de sensores de temperatura, umidade e luminosidade.
Comunicação: Simulação do envio de mensagens via RabbitMQ (AMQP) e MQTT, permitindo que o projeto funcione de forma independente.
Processamento de Dados: Simulação da aplicação de lógica de negócio e da geração de alertas automatizados com base nas leituras dos sensores.
↔️ Modo de Integração Real e Orquestração
Além da simulação, o projeto foi evoluído para uma implementação funcional com integração real a brokers de mensagens. Essa nova arquitetura utiliza clientes e serviços reais para garantir que o fluxo de dados seja efetivo e confiável. Os principais pontos são:
Integração de Mensageria: Implementação de clientes reais, como o Spring Integration para MQTT e o Spring AMQP para RabbitMQ, para a conexão direta com brokers externos.
Orquestração de Dados: Criação de uma ponte entre os brokers, demonstrando como as mensagens de um dispositivo (MQTT) podem ser roteadas, processadas por um serviço central e reencaminhadas (AMQP).
Configuração de Ambiente: Utilização de variáveis de ambiente para gerenciar credenciais e endpoints dos brokers, garantindo maior segurança e portabilidade ao projeto.
🌡️ Leitura e registro de sensores:
Simulação da leitura: Uma rotina agendada (Scheduler) simula a coleta de dados de sensores de temperatura, umidade e luminosidade a cada 10 segundos, injetando leituras realistas no sistema.
Registro das leituras: Registro das leituras com a possibilidade de geração de alertas automatizados.
Coleta e armazenamento: Coleta e armazenamento dos dados em memória para simulação, utilizando o banco de dados H2.
🌐 Exposição de APIs REST:
Endpoints de autenticação: Endpoints para autenticação (login e registro de usuário) usando Bearer Token (JWT).
Endpoints de dados de sensores: Endpoints para registrar novas leituras e para a consulta de todas as leituras registradas via MQTT e AMQP.
Endpoints de controle de sensores: Endpoint para ativar e desativar a simulação de sensores em tempo real.
Endpoints de mensageria: Endpoints separados para envio manual de mensagens via RabbitMQ e MQTT.
Endpoints de integração: Endpoint para integração com uma API externa para buscar dados de cidades por nome e ID.
🔐 Segurança e autenticação:
Spring Security com autenticação via Bearer Token (JWT) para proteger rotas sensíveis e garantir a integridade do sistema.Visão Geral das Funcionalidades:
Este projeto implementa uma solução de monitoramento de sensores IoT para a agricultura, oferecendo as seguintes funcionalidades principais:
Simulação e Coleta de Dados de Sensores (Camada Edge): Uma rotina agendada (Scheduler) simula a coleta de dados de sensores de temperatura, umidade e luminosidade a cada 10 segundos, injetando leituras realistas no sistema. Este módulo pode operar tanto em modo de simulação, quanto recebendo dados de brokers de mensagens reais.
Processamento e Publicação de Dados (Camada Fog): Cada leitura de sensor é processada e publicada em tempo real. O sistema agora suporta tanto a simulação da mensageria quanto a integração real utilizando os protocolos AMQP (RabbitMQ) e MQTT. Isso garante uma comunicação eficiente com outros sistemas e reflete um cenário de produção.
Detecção de Alertas em Tempo Real: O sistema detecta automaticamente anomalias nos dados dos sensores, como temperaturas elevadas, umidade fora da faixa ideal ou baixa luminosidade. Quando uma anomalia é identificada, um alerta é gerado e, opcionalmente, salvo no banco de dados.
Controle Global de Alertas: Os alertas gerados são salvos no banco de dados. Um endpoint RESTful (PUT /api/sensores/alertas/status/{status}) permite que a funcionalidade de salvamento seja ativada ou desativada globalmente, dando ao usuário o controle total sobre a persistência dos alertas.
Justificativa da escolha dos protocolos de comunicação: foram selecionados três protocolos, cada um com um propósito específico:
HTTP REST: Usado para a comunicação cliente-servidor, ideal para interações diretas e pontuais, como a consulta de dados e a alteração de configurações.
MQTT (Message Queuing Telemetry Transport): Escolhido para a comunicação com os dispositivos IoT simulados. Sua leveza e baixa latência o tornam perfeito para o envio de dados em tempo real em redes com largura de banda limitada.
AMQP (Advanced Message Queuing Protocol): Utilizado para a comunicação interna entre os serviços da aplicação, garantindo uma alta confiabilidade na entrega de mensagens críticas, como os alertas gerados pelo sistema.
Este projeto oferece um Modo de Simulação que replica o comportamento dos protocolos RabbitMQ e MQTT em memória. Essa funcionalidade é ideal para fins de aprendizado, permitindo que estudantes e entusiastas compreendam a arquitetura IoT sem a necessidade de infraestrutura adicional.
Além disso, o projeto conta com um Modo de Integração Real, que se conecta a brokers de mensageria externos, demonstrando um cenário de produção completo.
Arquitetura de Processamento Distribuído (Edge, Fog e Cloud)
A arquitetura do projeto simula a distribuição do processamento, uma característica fundamental em sistemas de IoT:
Camada Edge (Borda): A classe SensorScheduler simula um dispositivo na borda da rede (como um microcontrolador ou um sensor inteligente) que coleta dados brutos em tempo real e os envia para a camada de processamento local.
Camada Fog (Névoa): A classe SensorDataService atua como um hub intermediário. Nela, ocorre o processamento inicial dos dados recebidos da camada Edge, como a verificação de alertas e a decisão de quais dados devem ser publicados e salvos.
Camada Cloud (Nuvem): A persistência dos dados no banco de dados H2 (simulando um banco de dados em nuvem) representa a camada Cloud. É aqui que os dados são armazenados de forma centralizada para análise de longo prazo, visualização e tomada de decisões estratégicas.
├── main
│ ├── java
│ │ └── com
│ │ └── tfba
│ │ └── web
│ │ └── iot
│ │ └── api
│ │ └── spring
│ │ ├── config // Classes de configuração para a aplicação, como JWT, MQTT e RabbitMQ
│ │ │ ├── MqttAmqpConfig.java // Configuração para integrações MQTT e AMQP
│ │ │ ├── RabbitMqConfig.java // Configuração específica para o RabbitMQ
| | | ├── CorsConfig.java // Configuração de Cors
│ │ ├── controller // Camada de controladores REST para gerenciar as requisições HTTP
│ │ │ ├── dto // Objetos de Transferência de Dados (Data Transfer Objects) para as requisições
│ │ │ ├── form // Objetos de formulário para dados de entrada (input)
│ │ │ ├── update // Objetos de formulário para dados de update (input)
│ │ │ ├── view // Objetos de visualização (views) para dados de saída (output)
│ │ │ ├── AuthController.java // Controlador para autenticação de usuários
│ │ │ ├── RabbitSimulationController.java // Controlador para simulação de eventos RabbitMQ
│ │ │ ├── SensorDataController.java // Controlador para dados de sensores
│ │ │ ├── UserController.java // Controlador para operações relacionadas a usuários
│ │ │ └── WeatherController.java // Controlador para dados meteorológicos
│ │ ├── jwt // Classes relacionadas à geração e validação de tokens JWT
│ │ │ ├── JwtAuthenticationFilter.java // Filtro para autenticação via JWT
│ │ │ └── JwtUtil.java // Utilitário para manipulação de tokens JWT
│ │ ├── model // Entidades de domínio que representam a estrutura de dados (banco de dados)
│ │ │ ├── Alert.java // Entidade que representa um alerta
│ │ │ ├─