Microcontroladores são ótimos para ler sondas; o Python se destaca em cache, autenticação e em servir endpoints HTTPS estáveis. O projeto fast-api-relay fica entre o JSON do Arduino e o site em Astro, padronizando as respostas e reduzindo a carga sobre pilhas embarcadas frágeis.
Por que uma camada de relay ajuda
Requisições diretas do navegador para um IP da rede local falham quando o DNS muda, os certificados expiram ou a internet de casa cai. Um relay em uma VPS ou em um worker na nuvem oferece uma única URL estável, adiciona cache com Redis para que os dashboards não sobrecarreguem a sonda e pode reunir vários locais se você expandir para além de um único imóvel.
Responsabilidades do FastAPI
- Receber, em intervalos programados, os dados do Arduino ou do agente da rede local.
- Guardar o payload mais recente no Redis com um TTL curto.
- Servir na hora, a partir do cache, as respostas
GET /...para o site. - Registrar dados desatualizados quando a origem para de atualizar: útil para alertas.
Exemplo de consulta de um consumidor
A camada de consultas do site em Astro acessa a URL HTTPS que você configurou, lê o objeto temp (ou detecta automaticamente JSON SenML / Home Assistant REST quando essa raiz não existe) e associa as chaves às sondas do dashboard. A mesma URL pode alimentar scripts Node, plugins JSON do Grafana ou sensores REST do Home Assistant.
# Periodic upstream pull (cron or asyncio task)
import httpx
UPSTREAM = "http://192.168.1.50/temp.json"
response = httpx.get(UPSTREAM, timeout=5.0)
response.raise_for_status()
cache.set("garage:latest", response.text) Scripts operacionais
Além da API, pequenos utilitários em Python validam o schema JSON, completam arquivos CSV históricos ou comparam as médias das sondas com as previsões do OpenWeather. Como as sondas expõem JSON simples, você pode prototipar análises em um notebook antes de levar a lógica para serviços em produção.
Referência do repositório
Detalhes de implementação, configuração do Redis e notas de deploy do relay são mantidos em fast-api-relay. Configure a URL pública do relay nas configurações do feed de temperatura depois de entrar.
Uno Ethernet: HTTP→HTTPS para ingestão push
Um shield W5100 não consegue fazer POST para https://probeharbor.dev. O relay feito só com a biblioteca padrão sketches/relay/push_https_forward.py escuta HTTP vindo do Arduino e repassa o mesmo caminho e corpo via HTTPS. Use-o junto com ethernet_dht22_ingest (DHT22 em A4/A5, JSON temp clássico).
python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
--upstream https://probeharbor.dev