Arquitetura de Software
Esta seção apresenta a arquitetura de software para o sistema de estação meteorológica inteligente. O sistema realiza a coleta de dados meteorológicos e os transmite via protocolo MQTT para o backend, onde os dados são processados e armazenados. Além disso, o sistema permite o controle remoto do recipiente de armazenamento de água da chuva, permitindo ao usuário abrir ou fechar o recipiente via software.
1. Componentes
A arquitetura de software inclui os seguintes componentes:
- Servidor MQTT: Gerencia a comunicação bidirecional dos dados, tanto para recepção dos dados dos sensores quanto para envio de comandos de controle remoto.
- Backend (API REST em Python): Processa os dados recebidos via MQTT, realiza a lógica de negócios, armazena os dados e envia comandos de controle remoto.
- Banco de Dados (PostgreSQL): Armazena os dados meteorológicos históricos para análise e consulta.
- Frontend Web (JavaScript): Interface para visualização dos dados e envio de comandos para controle remoto do recipiente de água.
- Aplicativo Mobile (Flutter): Permite o usuário receber notificações, visualizar um resumo dos dados e controlar o recipiente de água remotamente.
- Serviço de Notificação: Envia notificações push para o aplicativo mobile em eventos críticos, como detecção de chuva.
2. Metas e Restrições Arquiteturais
Metas
- Monitorar e armazenar em tempo real os dados.
- Enviar notificações sobre eventos importantes para o usuário via aplicativo mobile.
- Permitir o controle remoto do recipiente de armazenamento de água via site web e aplicativo mobile.
- Utilizar protocolo MQTT para comunicação eficiente e bidirecional.
- Garantir funcionamento correto dos serviços em execução, com alta confiabilidade.
Restrições
- Utilizar tecnologias leves e de fácil manutenção para o backend e interfaces frontend.
- Garantir o funcionamento correto das aplicações.
- O controle remoto do recipiente deve ser seguro e responsivo, minimizando atrasos.
3. Diagrama de Arquitetura de Software
flowchart TD
Mosquitto["<img src='https://raw.githubusercontent.com/docker-library/docs/757578e3a44e5460a8a11d32a81776f8b74231a9/eclipse-mosquitto/logo.png' > Mosquitto Server"]
Backend["<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Python-logo-notext.svg/2048px-Python-logo-notext.svg.png' > Backend (Python)"]
Frontend["<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/512px-React-icon.svg.png' > Web (React)"]
Mobile["<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Google-flutter-logo.png/768px-Google-flutter-logo.png' > Mobile (Flutter)"]
Database["<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1024px-Postgresql_elephant.svg.png' > Database (PostgreSQL)"]
Firebase["<img src='https://firebase.google.com/static/images/brand-guidelines/logo-vertical.png?hl=pt-br'> Firebase"]
Mosquitto --> Backend
Backend --> Frontend
Backend --> Mobile
Backend --> Database
Backend --> Firebase
Firebase --> Mobile
Fonte: Diagrama de Arquitetura de Software.
4. Diagrama de Componentes
Os componentes do sistema e suas interações incluem:
- Servidor MQTT: Recebe dados dos sensores e permite o envio de comandos de controle para o recipiente de água.
- API REST em Python: Processa os dados meteorológicos e interage com o banco de dados. Também gerencia os comandos de controle enviados pelo frontend.
- Banco de Dados (PostgreSQL): Armazena os dados de temperatura, umidade e precipitação.
- Frontend Web (JavaScript): Permite visualização dos dados e envio de comandos para controle do recipiente de água.
- Aplicativo Mobile (Flutter): Exibe notificações e permite o controle remoto do recipiente.
- Serviço de Notificação: Utiliza Firebase Cloud Messaging para enviar notificações.
flowchart TD
MQTT[MQTT]
API[API]
POSTGRES[PostgreSQL]
MOBILE[Mobile]
WEB[Web]
FCM[FCM]
MQTT <--> API
API <--> POSTGRES
API <--> WEB
API <--> MOBILE
API --> FCM
FCM --> MOBILE
5. Diagrama de Sequência
Cenário 1: Recepção de Dados
- Os sensores enviam dados via MQTT para o Servidor MQTT.
- O Servidor MQTT repassa os dados para a API REST em Python.
- A API REST processa os dados e armazena no Banco de Dados PostgreSQL.
- A interface web e o aplicativo mobile acessam os dados processados para visualização.
Os dados são enviados para o Mobile e Web por HTTP. Utilizaremos também SSE, que permite visualização instantânea dos dados sem utilizar polling.
flowchart LR
SENSORES[Sensores]
MQTT[MQTT]
POSTGRES[PostgreSQL]
API[API]
WEB[Web]
MOBILE[Mobile]
SENSORES --> MQTT
MQTT --> API
API --> POSTGRES
API-->|SSE/HTTP|WEB
API-->|SSE/HTTP|MOBILE
Cenário 2: Controle Remoto do Recipiente de Água
- O usuário envia um comando de controle (abrir/fechar recipiente) via aplicativo mobile.
- O comando é transmitido para a API REST em Python, que repassa o comando para o Servidor MQTT.
- O Servidor MQTT envia o comando para o microcontrolador responsável pelo recipiente.
- O microcontrolador executa o comando e envia uma confirmação de volta via MQTT.
- A confirmação é processada pela API REST e exibida para o usuário.
flowchart LR
USUARIO[Usuário]
MOBILE[Mobile]
API[API]
MQTT[MQTT]
MICROCONTROLADOR[Microcontrolador]
USUARIO --> MOBILE
MOBILE --> API
API --> MQTT
MQTT --> MICROCONTROLADOR
6. Tecnologias
- Protocolo de Comunicação: MQTT para transmissão eficiente e bidirecional dos dados.
- Backend: Python com FastAPI para API REST.
- Banco de Dados: PostgreSQL para armazenamento persistente dos dados.
- Frontend Web: JavaScript com React.js para visualização e controle remoto.
- Aplicativo Mobile: Flutter para desenvolvimento multiplataforma.
- Serviço de Notificação: Firebase Cloud Messaging (FCM) para envio de notificações.
- Docker/Podman: Utilizado para executar os serviços.
7. Visão de Caso de Uso
Principais casos de uso do sistema:
- Monitoramento em tempo real dos dados.
- Notificação ao usuário em eventos de confirmação, informação, aviso e alerta.
- Controle remoto do recipiente de armazenamento de água via aplicativo mobile.
- Consulta a dados históricos através da interface web.
8. Visão Lógica
A visão lógica descreve a organização dos componentes e sua comunicação. O sistema utiliza um servidor MQTT para comunicação bidirecional, permitindo tanto a recepção dos dados dos sensores quanto o envio de comandos de controle.
9. Referências
- Documentação do protocolo MQTT.
- FastAPI para desenvolvimento da API em Python.
- PostgreSQL para armazenamento de dados.
- React.js para frontend web.
- Flutter para desenvolvimento mobile.
- Firebase Cloud Messaging para notificações.
Tabela de versionamento
Versão | Data | Descrição | Responsável |
---|---|---|---|
1.0 | 14/11/2024 | Criação da estrutura do documento | João Henrique |
2.0 | 15/11/2025 | Diagramas | Guilherme Puida Moreira |
3.0 | 22/11/2025 | Documenta Prometheus e Grafana | Guilherme Puida Moreira |
4.0 | 25/11/2025 | Revisão final dos Artefatos | Arthur José, Marcos Deus, Gabriel Moretti |
5.9 | 13/01/2024 | Retira prometheus e grafana da documentação, substitui flask por FastAPI | Guilherme Puida Moreira |