Scripts Python e feeds JSON

Serviços de relay em FastAPI, cache com Redis e ferramentas em Python que ficam entre as sondas e o dashboard.

Close de cabos Ethernet Cat-5e brancos com conectores RJ45
O JSON das sondas normalmente sai da rede local por Ethernet ou por um relay próximo, não direto pela internet pública. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

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.

Visualizador de JSON do navegador mostrando as chaves de sonda temp 0, 1 e avg com Fahrenheit, Celsius e umidade
Exemplo do formato de payload do relay que o site espera depois de armazenar em cache o JSON do Arduino.
# 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