Python-Skripte und JSON-Feeds

FastAPI-Relay-Dienste, Redis-Caching und Python-Werkzeuge zwischen den Fühlern und dem Dashboard.

Nahaufnahme weißer Cat-5e-Ethernet-Kabel mit RJ45-Steckern
Das Fühler-JSON verlässt das LAN meist über Ethernet oder ein nahes Relay, nicht direkt übers öffentliche Internet. Foto: DiscDepotDundee.co.uk. CC BY-SA 4.0

Mikrocontroller sind stark im Auslesen von Fühlern, Python im Caching, in der Authentifizierung und im Bereitstellen stabiler HTTPS-Endpunkte. Das Projekt fast-api-relay sitzt zwischen dem Arduino-JSON und der Astro-Website, vereinheitlicht die Antworten und entlastet empfindliche Embedded-Stacks.

Warum eine Relay-Schicht hilft

Direkte Browser-Abrufe an eine IP-Adresse im lokalen Netz scheitern, sobald sich das DNS ändert, Zertifikate ablaufen oder der Internetanschluss zu Hause ausfällt. Ein Relay auf einem VPS oder Cloud-Worker bietet eine gleichbleibende URL, ergänzt Redis-Caching, damit Dashboards den Fühler nicht ständig abfragen, und kann mehrere Standorte bündeln, wenn du über ein einzelnes Objekt hinauswächst.

Aufgaben von FastAPI

  • Nach Zeitplan Daten vom Arduino oder vom Agenten im lokalen Netz entgegennehmen.
  • Die neueste Payload mit kurzer TTL in Redis speichern.
  • GET /...-Antworten für die Website sofort aus dem Cache ausliefern.
  • Veraltete Daten protokollieren, wenn die Quelle nicht mehr aktualisiert: nützlich für Warnungen.

Beispiel für einen Abruf

Die Abrufschicht der Astro-Website fragt deine konfigurierte HTTPS-URL ab, liest das Objekt temp aus (oder erkennt automatisch SenML- / Home-Assistant-REST-JSON, wenn diese Wurzel fehlt) und ordnet die Schlüssel den Fühlern im Dashboard zu. Dieselbe URL kann Node-Skripte, Grafana-JSON-Plugins oder REST-Sensoren in Home Assistant versorgen.

JSON-Ansicht im Browser mit den Fühlerschlüsseln temp 0, 1 und avg samt Fahrenheit, Celsius und Luftfeuchtigkeit
Beispiel für die Payload-Struktur des Relays, die die Website nach dem Cachen des Arduino-JSON erwartet.
# 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)

Betriebsskripte

Neben der API prüfen kleine Python-Werkzeuge das JSON-Schema, füllen CSV-Archive nach oder vergleichen Fühler-Mittelwerte mit OpenWeather-Vorhersagen. Weil die Fühler einfaches JSON liefern, kannst du Auswertungen erst in einem Notebook ausprobieren und die Logik dann in produktive Dienste übernehmen.

Repository

Implementierungsdetails, Redis-Konfiguration und Hinweise zum Deployment des Relays findest du in fast-api-relay. Trage die öffentliche Relay-URL nach der Anmeldung in deinen Einstellungen für Temperatur-Feeds ein.

Uno Ethernet: HTTP→HTTPS für Push-Ingest

Ein W5100-Shield kann keinen POST an https://probeharbor.dev senden. Das Relay sketches/relay/push_https_forward.py (nur Standardbibliothek) nimmt HTTP vom Arduino entgegen und leitet denselben Pfad und Body per HTTPS weiter. Kombiniere es mit ethernet_dht22_ingest (DHT22 an A4/A5, klassisches temp-JSON).

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