Skip to content

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

  1. Os sensores enviam dados via MQTT para o Servidor MQTT.
  2. O Servidor MQTT repassa os dados para a API REST em Python.
  3. A API REST processa os dados e armazena no Banco de Dados PostgreSQL.
  4. 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

  1. O usuário envia um comando de controle (abrir/fechar recipiente) via aplicativo mobile.
  2. O comando é transmitido para a API REST em Python, que repassa o comando para o Servidor MQTT.
  3. O Servidor MQTT envia o comando para o microcontrolador responsável pelo recipiente.
  4. O microcontrolador executa o comando e envia uma confirmação de volta via MQTT.
  5. 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