====== Schnittstelle 1074: Stundenwetter abrufen und Tageswetter verdichten ====== Du rufst Stundenwetter für die in Filialen hinterlegten Orte ab und verdichtest es zu Tageswerten. Stand: **02.10.2026**, statische Analyse von PEP4 Desktop, Commit ''f1d82a003b62f2658f06eaa943dc685ab219bdf3''. **Statisch dokumentiert; Nutzerprüfung offen**. Kein Schnittstellenlauf, Live-Schema- oder API-Test. Lokale PEP-Änderungen außerhalb dieser Schnittstellen wurden nicht einbezogen. ===== Zweck, Parameter und Eingangsvertrag ===== Trotz Enum-Präfix Imp als **Programm** registriert. DATVON/DATBIS: Datumsmuster via SetDatum, keine Von≤Bis-Prüfung. Kein PFAD, keine Eingangsdatei/Archivierung. Aktiver Shared-Einstieg ruft **GetWeather2**, nicht das noch vorhandene ältere GetWeather. Orte kommen aus TOOLS.My.Resources.Orte (CSV-Ressource: Schlüssel Feld1, Latitude/Lon Feld4/5) oder Filialen.GeoLocation='Lat;Lon'. Konvertiert mit Punkt→Komma, auf2 Stellen gerundet, gleiche Koordinaten gruppiert; kulturabhängig. Je Koordinate/Tag synchroner HTTP-GET mit date yyyy-MM-dd und tz Europe/Berlin; Antwort BrightSkyResponse.Weather, Timestamp als DateTime, optionale Nullable-Zahlen/Stringwerte. Kein festgelegter Einheitenumrechner im Code. API-Vertrag/Einheiten/Stationswahl nicht live geprüft (Q12); keine echte URLabfrage ausgeführt. ===== SQL-Kette, Datenwirkung und Betrieb ===== Filialen.FilialID/GeoLocation SELECT → je gemappter Filiale/Tag **DELETE WetterH vor HTTP** → INSERT aller gelieferten Stunden mit Timestamp.Date=Datum → Calc_WetterDatum(DatVon,DatBis,ZeitVon,ZeitBis). Kein Upsert. HTTP-/Insertfehler im Tagesthread werden im leeren Catch verschluckt; nicht erfolgreiche HTTP-Statusantwort ergibt ebenfalls keinen Fehlerstatus. Gelöschte Tagesstunden können fehlen. SP löscht Wetter **aller Filialen** im Datumintervall und fügt Tagesverdichtung aus WetterH ein: Min/MaxTemperatur gerundet, SonnenDauer/Niederschlag summiert, Wind max, Wolkendichte avg, ts max. DATEPART(hour) zwischen ZeitVon/ZeitBis **inklusiv**. Datum between DatVon/DatBis bezieht sich auf Zeitstempel: Endtag DATBIS als Mitternacht schließt spätere Stunden des letzten Tages aus, obwohl VB sie abgerufen hat. SQL-Commands Default30, SQL_TIMEOUT nicht gelesen. HttpClient.Timeout kommt aus dem bereitgestellten Clientkontext, in dieser Klasse nicht gesetzt. Keine Transaktion, kein Fach-SP-Fehlercatch außen; Ressourcen-/DB-/SP-Ausnahmen können AusführungEnde überspringen. ===== Befunde und Grenzen ===== Shared GetWetter **ohne Return liefert False**, obwohl GetWeather2 Daten schreibt und True zurückgibt. Interner Erfolg ist weder Fehlerfrei() noch HTTP-Erfolgsnachweis. NULL-Wetterwerte werden DBNull, sight wird Real-Parameter→int, Timestamp→smalldatetime im Schema0878. Tagesziel Schema0873/0874/0877 enthält Result, das aktive GetWeather2/Calc_WetterDatum nicht schreibt. Alte JSON-Result-Ausgabe aus GetWeather ist kein aktiver Pfad. Q12 benötigt bestätigten API-/Einheiten-/Zeitvertrag und isolierte Tests zu HTTP-Ausfall, fehlenden Koordinaten, Endtag, Rundung, NULL und DST. Kein direkter Umsätze-UPDATE. ===== Systemeinstellungen und gemeinsame Nebenwirkungen ===== Gemeinsamer Rückmeldepfad: cSchnitt_Basis mit bedingtem Logging, Mail-/Outbox- und Meldungs-API-Aufruf. MANUELL/SILENT und Rückmeldeschalter beeinflussen diesen Pfad; serverseitige API-Wirkungen bleiben offen. ^ Beziehung ^ Schlüssel / Variable ^ Default ^ Einflussweg ^ Wirkung ^ Beleg ^ | 1074-S001 | ''SCHNITT_WETTER_ZEITVON'' / ''SCHNITT_WETTER_ZEITVON'' | 9 | Calc_WetterDatum Stundenfilter | erste eingeschlossene Stunde der Tagesverdichtung | B,SQL,SET | | 1074-S002 | ''SCHNITT_WETTER_ZEITBIS'' / ''SCHNITT_WETTER_ZEITBIS'' | 19 | Calc_WetterDatum Stundenfilter | letzte eingeschlossene Stunde; keine Wirkung auf HTTP-Abrufmenge | B,SQL,SET | Nur belegte Profilzuordnung; Fachdaten und Rückmeldung sind nicht atomar. Defaults sind keine Livewerte. ===== Feldbeziehungen ===== Unqualifizierte Fachobjekte in der Anmeldedatenbank; ''Import.dbo'' ausdrücklich Importdatenbank. Dateifelder stehen separat im Dateivertrag. ^ Beziehung ^ Tabelle.Feld ^ Operation ^ Datenfluss / Verwendung ^ Bedingung ^ Beleg ^ | 1074-D001 | ''Filialen.FilialID'' | SELECT | Filiale zur normalisierten Koordinate | GeoLocation nicht NULL | B | | 1074-D002 | ''Filialen.GeoLocation'' | SELECT | Orte-Ressourcenkey oder Lat;Lon | numerisch, auf2 Dezimalstellen gerundet | B | | 1074-D003 | ''WetterH.— Zeilen'' | DELETE | Alle Stunden der gemappten Filiale am angefragten Tag vor HTTP | HTTP-Ausfall verhindert Wiederbefüllung | B | | 1074-D004 | ''WetterH.Filiale'' | INSERT | Filialen.FilialID | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D005 | ''WetterH.Datum'' | INSERT | weather.timestamp | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D006 | ''WetterH.Niederschlag'' | INSERT | precipitation | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D007 | ''WetterH.Niederschlagswahrscheinlichkeit'' | INSERT | precipitation_probability | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D008 | ''WetterH.Druck'' | INSERT | pressure_msl | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D009 | ''WetterH.SonnenDauer'' | INSERT | sunshine | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D010 | ''WetterH.SonnenIntensität'' | INSERT | solar | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D011 | ''WetterH.Temperatur'' | INSERT | temperature | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D012 | ''WetterH.Wind'' | INSERT | wind_speed | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D013 | ''WetterH.Windrichtung'' | INSERT | wind_direction | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D014 | ''WetterH.Wolkendichte'' | INSERT | cloud_cover | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D015 | ''WetterH.Boeen'' | INSERT | wind_gust_speed | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D016 | ''WetterH.Taupunkt'' | INSERT | dew_point | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D017 | ''WetterH.Sicht'' | INSERT | visibility (VB Real-Parameter, DB int) | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D018 | ''WetterH.Bedingung'' | INSERT | condition, varchar25 | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D019 | ''WetterH.Icon'' | INSERT | icon, varchar25 | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D020 | ''WetterH.ts'' | INSERT | getdate() | HTTP erfolgreich; Timestamp.Date=angefragter Tag; NULL via DBNull | B,DDLH | | 1074-D021 | ''WetterH.Filiale'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D022 | ''WetterH.Datum'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D023 | ''WetterH.Temperatur'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D024 | ''WetterH.SonnenDauer'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D025 | ''WetterH.Niederschlag'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D026 | ''WetterH.Wind'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D027 | ''WetterH.Wolkendichte'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D028 | ''WetterH.ts'' | SELECT | Tagesverdichtung; Stunde inklusiv ZeitVon–ZeitBis | Datum zwischen Von/Bis; Enddatum Mitternacht beachten | SQL | | 1074-D029 | ''Wetter.— Zeilen'' | DELETE | Alle Filialen im Datumintervall | Nicht auf tatsächlich abgerufene Locations begrenzt | SQL | | 1074-D030 | ''Wetter.Filiale'' | INSERT | WetterH.Filiale | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D031 | ''Wetter.Datum'' | INSERT | convert(date,WetterH.Datum) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D032 | ''Wetter.MinTemp'' | INSERT | round(min(Temperatur),2) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D033 | ''Wetter.MaxTemp'' | INSERT | round(max(Temperatur),2) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D034 | ''Wetter.Sonne'' | INSERT | sum(isnull(SonnenDauer,0)) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D035 | ''Wetter.Regen'' | INSERT | sum(isnull(Niederschlag,0)) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D036 | ''Wetter.WindSpeed'' | INSERT | max(Wind) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D037 | ''Wetter.Wolken'' | INSERT | avg(Wolkendichte) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | | 1074-D038 | ''Wetter.ts'' | INSERT | max(ts) | nur Stunden innerhalb des inklusiven Zeitfensters/Datumintervalls | SQL,DDL,DDL2 | ===== Quellen und weitere Schritte ===== Enum, aktive Registrierung, Projekteinschluss und die in der internen Einzelbeschreibung genannten VB-/SQL-Dateien wurden am Quellencommit geprüft. Konkrete fehlende Quellen und fachliche Fragen stehen oben; bei Tests benötigst du eine isolierte Umgebung und synthetische Dateien. [[schnittstellen:schnittstellen|Übersicht der Schnittstellen]]