API Django REST para análise de dados de consumo de água utilizando Machine Learning e análise estatística.
Esta API fornece serviços de análise e predição de consumo de água através de endpoints REST. Ela é consumida por uma API backend principal que exibe os resultados no frontend.
- Predição de Consumo: Predição diária e mensal usando Regressão Linear
- Análise Estatística: Classificação de consumo usando Bandas de Bollinger
- Dados Estatísticos: Fornece dados completos das bandas para visualização
┌─────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Frontend │ ───> │ API Backend │ ───> │ SmartMonitor │
│ │ │ (Principal) │ │ API │
└─────────────┘ └──────────────────┘ └──────────────┘
│
▼
ML Pipeline
(Análise + Predição)
- Python 3.11
- Django 5.1.4
- Django REST Framework 3.15.2
- drf-yasg (Swagger/OpenAPI)
- JWT Authentication
- Pandas & NumPy (Processamento de dados)
- Scikit-learn (Machine Learning)
- Docker & Docker Compose
- Gunicorn (WSGI Server)
- Python 3.11+
- Docker e Docker Compose (opcional)
- Clone o repositório
git clone https://github.com/douglasnobree/SmartMonitorAPI.git
cd SmartMonitorAPI- Crie um ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows- Configure as variáveis de ambiente
# Copie o arquivo de exemplo
cp .env.example .env # Linux/Mac
copy .env.example .env # Windows
# Edite o .env e configure sua SECRET_KEY
# Gere uma nova chave com:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"- Instale as dependências
pip install -r requirements.txt- Execute as migrações
python manage.py migrate- Crie um superusuário
python manage.py createsuperuser- Inicie o servidor
python manage.py runserver- Build e execute os containers
docker-compose up --build- Acesse a aplicação
- API: http://localhost:8000
- Documentação: http://localhost:8000/ (Swagger)
A documentação interativa está disponível via Swagger UI:
URL: http://localhost:8000/
Todos os endpoints (exceto /token) requerem autenticação JWT.
POST /token
Content-Type: application/json
{
"username": "seu_usuario",
"password": "sua_senha"
}Authorization: seu_token_jwtPOST /prediction/daily- Predição de consumo diárioPOST /prediction/monthly- Predição de consumo mensal
Formato de entrada:
{
"01/06/2025": 120.5,
"02/06/2025": 115.2,
"03/06/2025": 130.0
}POST /statistic/diaria- Classificação de consumo diárioPOST /statistic/mensal- Classificação de consumo mensalPOST /statistic/data- Dados completos das bandas de Bollinger
Formato de entrada:
{
"01/06/2025": 120.5,
"02/06/2025": 115.2,
"03/06/2025": 130.0
}- API recebe dados históricos de consumo
- Modelo de Regressão Linear é treinado com os dados
- Predição é realizada
- Resultado é retornado na mesma requisição
Nota: O modelo atual não é persistido. Cada requisição treina um novo modelo.
- Calcula média móvel (janela de 30 dias)
- Calcula desvio padrão
- Define bandas superior e inferior
- Classifica o consumo em 5 categorias:
- Faixa inferior 2 (muito abaixo)
- Faixa inferior 1 (abaixo)
- Faixa ideal (normal)
- Faixa superior 1 (acima)
- Faixa superior 2 (muito acima)
SmartMonitorAPI/
├── appSM/ # App Django principal
│ ├── views.py # Views da API
│ ├── serializers.py # Serializers DRF
│ └── ...
├── projectSM/ # Configurações Django
│ ├── settings.py # Configurações
│ ├── urls.py # Rotas
│ └── authentication.py # JWT customizado
├── ml_pipeline/ # Pipeline de Machine Learning
│ ├── Tratamento.py # Interface abstrata
│ └── senseFlow_A/ # Análise de consumo de água
│ ├── classificacao/ # Serviços de classificação
│ ├── modelos/ # Modelos ML
│ └── predicao/ # Serviços de predição
├── static/ # Arquivos estáticos
├── staticfiles/ # Arquivos coletados
├── requirements.txt # Dependências Python
├── Dockerfile # Imagem Docker
├── docker-compose.yml # Orquestração Docker
└── manage.py # CLI Django
- Serviço de Retreino: Sistema automatizado de retreinamento de modelos
- Repositório de Modelos: Armazenamento de modelos na nuvem (Drive inicial)
- Multi-tenant: Suporte a múltiplos clientes com modelos específicos
- SenseFlow-Q: Análise de qualidade de água
- Versionamento de Modelos: Controle de versões dos modelos ML
- Testes Automatizados: Cobertura completa de testes
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto está sob a licença BSD.
- Contato: RESOURCIFYLTDA@GMAIL.COM
- Site: https://www.smartmonitor.ifce.edu.br/
O projeto usa PM2 para gerenciamento de processos em produção:
pm2 start ecosystem.config.js --env productionpython manage.py collectstatic --no-inputpython manage.py makemigrations
python manage.py migrateDesenvolvido com ❤️ pela equipe SmartMonitor - IFCE