API intermediária para captura e disponibilização de dados meteorológicos da estação Ciclus instalada na Universidade Estadual do Maranhão (UEMA).
Esta API foi desenvolvida pela Thera Academic Software House do curso de Engenharia da Computação da UEMA, a pedido da diretoria do curso de Engenharia Agronômica para democratizar o acesso aos dados meteorológicos coletados pela estação Ciclus instalada no campus.
- Laboratório: Thera Academic Software House - Engenharia da Computação
- Curso: Engenharia da Computação - UEMA
- Desenvolvedor Responsável: Sérgio Murilo Castelhano
- Solicitante: Diretoria do curso de Engenharia Agronômica - UEMA
Tornar os dados meteorológicos mais acessíveis e públicos, eliminando a necessidade de login na plataforma proprietária da estação Ciclus. A API recebe dados via webhook e os disponibiliza através de endpoints RESTful simples.
- Instituição: Universidade Estadual do Maranhão (UEMA)
- Desenvolvido por: Thera Academic Software House - Engenharia da Computação
- Solicitado por: Coordenação de Engenharia Agronômica
- Aplicação: Pesquisa agrícola, estudos climáticos, projetos acadêmicos
- Beneficiários: Estudantes, professores, pesquisadores e comunidade
graph LR
A[Estação Ciclus] -->|webhook POST| B[API Vercel]
B -->|salva dados| C[Firebase Firestore]
C -->|consulta dados| D[Aplicações/Pesquisadores]
D -->|GET requests| B
- Coleta: Estação Ciclus coleta dados meteorológicos a cada 10 minutos
- Envio: Dados são enviados via webhook POST para nossa API
- Validação: API valida e padroniza os dados recebidos
- Armazenamento: Dados são salvos no Firebase Firestore
- Disponibilização: Dados ficam disponíveis via endpoints públicos GET
A estação Ciclus coleta os seguintes parâmetros:
- Temperatura Externa (°C)
- Umidade Relativa do Ar (%)
- Pressão Atmosférica (hPa)
- Radiação Solar (W/m²)
- Pluviosidade Horária (mm)
- Pluviosidade Diária Acumulada (mm)
- Velocidade Média (m/s)
- Velocidade Máxima (m/s)
- Direção (graus 0-360)
- Umidade do Solo (%)
- Temperatura do Solo (°C)
- Umidade Foliar (%)
- Temperatura Foliar (°C)
- Material Particulado PM1.0 (μg/m³)
- Material Particulado PM2.5 (μg/m³)
- Material Particulado PM10 (μg/m³)
https://agronomia-api.vercel.app/
GET /api/healthVerifica se a API está funcionando e conectada ao banco de dados.
Resposta:
{
"status": "OK",
"timestamp": "2025-01-25T10:30:00.000Z",
"service": "Ciclus Weather API",
"version": "1.1.0",
"firebase": "connected",
"environment": "production"
}GET /api/weather/latest?limit=20Retorna os dados meteorológicos mais recentes.
Parâmetros:
limit(opcional): Número de registros (1-100, padrão: 20)
Resposta:
{
"success": true,
"count": 20,
"limit": 20,
"data": [
{
"id": "doc123",
"Temperatura": 27.16,
"Umidade": 41.34,
"Pressao": 1036.82,
"PluviometroH": 0,
"PluviometroD": 0,
"VelocidadeMedia": 0,
"VelocidadeMax": 0,
"DirecaoVento": 180,
"UmidadeSolo": 25.4,
"TemperaturaSolo": 22.1,
"Solarizacao": 296,
"IdEstacao": 1738279507,
"ts": "1746466087000",
"receivedAt": "2025-01-25T10:30:00.000Z"
}
]
}GET /api/weather/period?start=1746466087000&end=1746552487000&limit=100Retorna dados meteorológicos de um período específico.
Parâmetros:
start(obrigatório): Timestamp inicial em milissegundosend(obrigatório): Timestamp final em milissegundoslimit(opcional): Número de registros (1-1000, padrão: 100)
Exemplo de uso:
# Dados das últimas 24 horas
curl "https://agronomia-api.vercel.app/api/weather/period?start=1746379687000&end=1746466087000"POST /api/webhook/weather
Headers:
x-api-key: [UUID-SECRETO]
Content-Type: application/jsonEndpoint para recebimento de dados da estação meteorológica (uso interno).
// Buscar dados mais recentes
const response = await fetch(
"https://agronomia-api.vercel.app/api/weather/latest?limit=10"
);
const data = await response.json();
console.log(`Temperatura atual: ${data.data[0].Temperatura}°C`);
console.log(`Umidade: ${data.data[0].Umidade}%`);# Status da API
curl https://agronomia-api.vercel.app/api/health
# Dados mais recentes
curl "https://agronomia-api.vercel.app/api/weather/latest?limit=5"
# Dados do último mês
curl "https://agronomia-api.vercel.app/api/weather/period?start=1743787687000&end=1746466087000&limit=1000"- Backend: Node.js + Express.js
- Banco de Dados: Firebase Firestore
- Deploy: Vercel (Serverless)
- Autenticação: UUID via header x-api-key
- Validação: Sistema customizado tolerante a falhas de sensores
{
"cors": "^2.8.5",
"dotenv": "^17.2.2",
"express": "^5.1.0",
"firebase-admin": "^13.5.0"
}- Node.js 18.x ou superior
- Conta Firebase com projeto configurado
- Vercel CLI (opcional, para deploy)
git clone https://github.com/murillous/agronomia-API
cd agronomia-API
npm installcp .env.example .env
# Edite o .env com suas credenciais# Desenvolvimento
npm run dev
# Produção local
npm start
# Server install
npm i serve (y) -> escolha
npx serve .\frontend
saida:
┌──────────────────────────────────────────┐
│ │
│ Serving! │
│ │
│ - Local: http://localhost:PORT │
│ - Network: http://SEU_IP:PORT │
│ │
│ Copied local address to clipboard! │
│ │
└──────────────────────────────────────────┘
curl http://localhost:3000/api/health{
"id": "documento-id-auto-gerado",
"Temperatura": 27.16,
"Umidade": 41.34,
"PluviometroH": 0,
"PluviometroD": 0,
"Pressao": 1036.82,
"VelocidadeMedia": 0,
"VelocidadeMax": 0,
"DirecaoVento": 180,
"UmidadeSolo": 25.4,
"TemperaturaSolo": 22.1,
"UmidadeSolo_2": 28.3,
"TemperaturaSolo_2": 21.7,
"UmidadeSolo_3": 30.1,
"TemperaturaSolo_3": 23.0,
"UmidadeFolear": 45.8,
"TemperaturaFolear": 24.2,
"Solarizacao": 296,
"pmc10": 12.5,
"pmc25": 8.9,
"pmc100": 4.3,
"RSSI": 0,
"Bateria": 50,
"Boot": 221,
"VersaoSw": "3.1.0",
"VersaoPcb": "REV9",
"MacId": 3.6,
"TemperaturaInterna": 36.4,
"IdEstacao": 1738279507,
"ts": "1746466087000",
"receivedAt": "2025-01-25T10:30:00.000Z",
"processedAt": "Firebase Server Timestamp",
"apiVersion": "1.2.0"
}A API implementa validação tolerante a falhas, onde:
- ✅ Campos críticos são obrigatórios (
IdEstacao,ts) - ✅ Pelo menos um sensor deve estar funcionando
⚠️ Sensores individuais podem falhar sem rejeitar os dados- 🧹 Limpeza automática padroniza tipos e formatos
- Webhook protegido por UUID via header
x-api-key - Endpoints de consulta são públicos (somente leitura)
- Logs de tentativas de acesso não autorizado
- Endpoint
/api/healthpara monitoramento - Verifica conectividade com Firebase
- Informações de versão e ambiente
- Logs estruturados de todas as operações
- Registro de dados recebidos e processados
- Alertas de sensores com problemas
Este projeto foi desenvolvido para apoiar:
- 📚 Pesquisas acadêmicas em climatologia agrícola
- 🌱 Projetos de extensão relacionados ao clima
- 📊 Análises estatísticas de dados meteorológicos
- 🎓 Trabalhos de conclusão em Engenharia Agronômica
- 📧 Email institucional da coordenação do curso
- 🏛️ Coordenação de Engenharia Agronômica - UEMA
- 🐛 Issues: GitHub Issues
- 🚀 Features: Pull requests são bem-vindos
- 🔬 Thera Academic Software House - Laboratório de Desenvolvimento de Sistemas
- 👨💻 Responsável: Sérgio Murilo Castelhano
- 🏛️ Curso: Engenharia da Computação - UEMA