Scripts Python et flux JSON

Services relais FastAPI, cache Redis et outils Python placés entre les sondes et le tableau de bord.

Gros plan de câbles Ethernet Cat-5e blancs avec connecteurs RJ45
Le JSON des sondes quitte généralement le LAN par Ethernet ou via un relais proche, pas directement par Internet. Photo : DiscDepotDundee.co.uk. CC BY-SA 4.0

Les microcontrôleurs excellent dans la lecture des sondes ; Python excelle dans la mise en cache, l’authentification et la diffusion de points d’accès HTTPS stables. Le projet fast-api-relay se place entre le JSON de l’Arduino et le site Astro : il normalise les réponses et allège la charge des piles embarquées fragiles.

Pourquoi une couche relais aide

Les requêtes directes du navigateur vers une adresse IP du réseau local échouent dès que le DNS change, qu’un certificat expire ou que la connexion de la maison tombe. Un relais sur un VPS ou un worker cloud expose une URL unique et stable, ajoute un cache Redis pour que les tableaux de bord ne sollicitent pas la sonde en permanence, et peut agréger plusieurs sites si vous dépassez un seul logement.

Rôle de FastAPI

  • Recevoir à intervalles réguliers les données de l’Arduino ou de l’agent du réseau local.
  • Stocker la dernière charge utile dans Redis avec un TTL court.
  • Servir instantanément depuis le cache les réponses GET /... pour le site web.
  • Journaliser les données périmées quand la source ne se met plus à jour : utile pour les alertes.

Exemple de requête côté client

La couche de requêtes du site Astro interroge l’URL HTTPS que vous avez configurée, analyse l’objet temp (ou détecte automatiquement du JSON SenML / Home Assistant REST si cette racine est absente) et associe les clés aux sondes du tableau de bord. La même URL peut alimenter des scripts Node, des plugins JSON Grafana ou des capteurs REST Home Assistant.

Visionneuse JSON du navigateur affichant les clés de sonde temp 0, 1 et avg avec Fahrenheit, Celsius et humidité
Exemple de structure de charge utile du relais attendue par le site après la mise en cache du JSON de l’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 d’exploitation

Au-delà de l’API, de petits utilitaires Python valident le schéma JSON, complètent des archives CSV ou comparent les moyennes des sondes aux prévisions OpenWeather. Comme les sondes exposent du JSON brut, vous pouvez prototyper des analyses dans un notebook avant de passer la logique en production.

Référence du dépôt

Les détails d’implémentation, la configuration Redis et les notes de déploiement du relais sont tenus à jour dans fast-api-relay. Renseignez l’URL publique du relais dans les réglages du flux de température une fois connecté.

Uno Ethernet : HTTP→HTTPS pour l’ingestion push

Un shield W5100 ne peut pas faire de POST vers https://probeharbor.dev. Le relais en bibliothèque standard sketches/relay/push_https_forward.py écoute le HTTP de l’Arduino et retransmet le même chemin et le même corps en HTTPS. Associez-le à ethernet_dht22_ingest (DHT22 sur A4/A5, JSON temp classique).

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