TERRABYTES STANDARD

TerraBytes Weather.Api

Serverseitig gerenderte Wetterausgabe für API, X1-nahe HTML-Templates und zentrale Snapshot-Speicherung hinter weather.terra-bytes.org.

Serverseitig gerendert

Weather für API, Templates und Gateway

Die Weather.Api speichert eingehende Snapshots, stellt sie als JSON wieder bereit und liefert HTML-Templates für Browser, Mobile und X1-nahe Szenarien aus. Für die Produktion ist sie auf weather.terra-bytes.org vorgesehen und kann intern direkt vom Gateway angesprochen werden.

Ingest: POST /api/v1/{tenantId}/{installId}/ingest Snapshot: GET /api/v1/{tenantId}/{installId}/last Templates: /templates/desktop.html · /templates/mobile.html

Schnellzugriff

API-Funktionen

POST /api/v1/{tenantId}/{installId}/ingest
nimmt den letzten Wetter-Snapshot entgegen, prüft JSON grob vor und speichert ihn in PostgreSQL.
GET /api/v1/{tenantId}/{installId}/last
liefert den zuletzt gespeicherten Snapshot unverändert als JSON zurück.
GET /templates/desktop.html · /templates/mobile.html
stellt browserfreundliche Template-Ausgaben bereit, die tenantId, installId und api per Querystring entgegennehmen.

Hinweise

Für Produktion auf dem Linux-Host liegt der Stack unter /srv/weather und wird per Azure DevOps via SSH gebaut, gepusht und deployed.
Der Container hängt für interne Erreichbarkeit im bestehenden Docker-Netz infra_default.
Für den produktiven Reverse Proxy sollte Nginx Proxy Manager bevorzugt direkt auf weather-api:8080 zeigen, solange der Proxy im gleichen Docker-Netz hängt.

Payload-Schema

JSON • Snapshot

Dies ist die grobe Struktur des Payloads, das per Ingest gespeichert wird. Die Weather.Api speichert den JSON-Snapshot unverändert in PostgreSQL und liefert ihn wieder aus.

{
  "meta": { "updated": "ISO", "timezone": "...", "coords": { "lat": 0, "lon": 0 } },
  "now":  {
    "temperature": 0, "feelsLike": 0, "min": 0, "max": 0,
    "humidity": 0, "pressure": 0, "cloudiness": 0,
    "windMs": 0, "windKmh": 0, "windDir": 0, "windGust": 0,
    "rainMm": 0, "snowMm": 0, "uv": 0, "dewPoint": 0,
    "visibilityM": 0, "sunrise": "hh:mm", "sunset": "hh:mm",
    "moonrise": "hh:mm", "moonset": "hh:mm",
    "weatherCode": 0, "weatherShort": "", "weatherText": "", "pop": 0
  },
  "alarms": { "rainAlarm": 0, "snowAlarm": 0 },
  "forecast": { "hourly": [], "daily": [] },
  "alerts": [{ "sender": "...", "event": "...", "startIso": "ISO", "endIso": "ISO", "description": "..." }],
  "system": { "serial": "...", "firmware": "...", "platform": "...", "licenseStatus": "..." }
}