Scripts de Python y feeds JSON

Servicios relay con FastAPI, caché en Redis y herramientas de Python que se sitúan entre las sondas y el panel.

Primer plano de cables Ethernet Cat-5e blancos con conectores RJ45
El JSON de las sondas suele salir de la LAN por Ethernet o por un relay cercano, no directamente a internet. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

Los microcontroladores son excelentes leyendo sondas; Python destaca en caché, autenticación y en servir endpoints HTTPS estables. El proyecto fast-api-relay se sitúa entre el JSON del Arduino y el sitio Astro, normaliza las respuestas y reduce la carga sobre pilas embebidas frágiles.

Por qué ayuda una capa de relay

Las peticiones directas del navegador a una IP de la red local fallan cuando cambia el DNS, caducan los certificados o se cae la conexión de casa. Un relay en un VPS o en un worker en la nube ofrece una única URL estable, añade caché con Redis para que los dashboards no saturen la sonda y puede agrupar varios sitios si te amplías más allá de una sola propiedad.

Responsabilidades de FastAPI

  • Recibir de forma programada los datos del Arduino o del agente de la red local.
  • Guardar la carga más reciente en Redis con un TTL corto.
  • Servir al instante desde la caché las respuestas GET /... para el sitio web.
  • Registrar los datos obsoletos cuando el origen deja de actualizarse: útil para las alertas.

Ejemplo de consulta de un consumidor

La capa de consultas del sitio Astro solicita la URL HTTPS que hayas configurado, analiza el objeto temp (o detecta automáticamente JSON de SenML / Home Assistant REST si falta esa raíz) y asigna las claves a las sondas del dashboard. La misma URL puede alimentar scripts de Node, plugins JSON de Grafana o sensores REST de Home Assistant.

Visor JSON del navegador con las claves de sonda temp 0, 1 y avg, con Fahrenheit, Celsius y humedad
Ejemplo de la estructura de carga del relay que espera el sitio web tras almacenar en caché el JSON del 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 operativos

Más allá de la API, pequeñas utilidades en Python validan el esquema JSON, rellenan archivos CSV históricos o comparan los promedios de las sondas con las previsiones de OpenWeather. Como las sondas exponen JSON plano, puedes prototipar análisis en un notebook antes de llevar la lógica a servicios en producción.

Referencia del repositorio

Los detalles de implementación, la configuración de Redis y las notas de despliegue del relay se mantienen en fast-api-relay. Configura la URL pública del relay en los ajustes del feed de temperatura después de iniciar sesión.

Uno Ethernet: HTTP→HTTPS para la ingesta push

Un shield W5100 no puede hacer POST a https://probeharbor.dev. El relay con la biblioteca estándar sketches/relay/push_https_forward.py escucha HTTP desde el Arduino y reenvía la misma ruta y el mismo cuerpo por HTTPS. Combínalo con ethernet_dht22_ingest (DHT22 en A4/A5, JSON temp clásico).

python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
  --upstream https://probeharbor.dev