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.
Service-Verbund
Gateway
gateway.terra-bytes.org
Zentraler X1-Eingang für standardisierte Weiterleitung an Weather und weitere Dienste.
License
license.terra-bytes.org
Lizenz- und Lease-Service für kompatible Gira-Clients und serverseitige Prüfungen.
Weather
weather.terra-bytes.org
Öffentliche Produktadresse dieser Anwendung mit Landingpage, Health, API und Swagger.
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 • SnapshotDies 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": "..." }
}