Ein DWD-Produkt hinzufügen
Jedes DWD-Produkt ist eine Coordinator-Unterklasse in products.py. Ein
neues hinzuzufügen berührt eine Handvoll Stellen, in dieser Reihenfolge.
Checkliste
- Leite von einer Basisklasse ab in
products.py:WholeFileProductfür eine Datei pro Veröffentlichung, die ganz dekodiert wird (HymecNG, RADOLAN);RadvorProductfür ein RADVOR-Tar-Archiv (RS, RV);BaseProductUpdateCoordinatorselbst nur, wenn keine der beiden passt.
- Setze die Klassenkonstanten:
PRODUCT_KEY,PRODUCT_LABEL,RELEASE_INTERVAL,RELEASE_DELAY,RELEASE_OFFSETundOVERDUE_GRACE(ausgeschrieben, auch wenn esDEFAULT_OVERDUE_GRACEist; ein Test erzwingt das),COVERAGE_KEYS(die Unterschlüssel, die ohne Daten für die ZelleNonesind; ein Test prüft, dass jedes Produkt sie hat), undMAX_FAST_POLL_INTERVAL, wenn der Standardwert nicht passt. Siehe unten. - Füge das URL-Muster in
radar/urls.pyhinzu;_get_urlleitet die URL ausPRODUCT_KEYab.- Ein
WholeFileProductimplementiert das blockierende_parse(content, ts); die Basis lädt die Datei herunter und führt es im Executor aus. - Ein
RadvorProductimplementiert_fetch_and_parse. - Halte
_fetch_and_parsefrei von Seiteneffekten; alles andere gehört in_async_on_new_release.
- Ein
- Das Gitter kommt aus der Gruppe
/wherejeder Datei (radar/grid.py), sodass ein Produkt auf einem anderen polarstereografischen Gitter nichts weiter braucht; eines in einer anderen Projektion braucht diese Projektion ingrid.py. - Füge Sensorbeschreibungen in
sensor.pyhinzu (ein neues*_SENSORS-Tupel). - Registriere die Klasse im Tupel
PRODUCT_CLASSESvon__init__.py. - Registriere die Sensoren in
async_setup_entryvonsensor.py, und trage den Namen jedestranslation_keyintranslations/en.jsonundtranslations/de.jsonein. Die beiden Dateien müssen identische Schlüssel behalten; ein Test prüft das. - Füge es zu
PRODUCTSinscripts/check_release_delay.pyhinzu, damit seinRELEASE_DELAYmit dem abgeglichen wird, was der DWD tatsächlich tut. - Dokumentiere es: eine Entitätsseite in
website/docs/entities/und ihre deutsche Übersetzung, dazu die Tabellen in der Einführung, der Entitätsübersicht und Veröffentlichungszeitpunkte.
Die Veröffentlichungskonstanten wählen
RELEASE_INTERVALundRELEASE_OFFSETbeschreiben die Termine: Alle 5 Minuten um :00, :05, … ist ein Intervall von 5 Minuten ohne Versatz; stündlich um :50 ist ein Intervall von 1 Stunde mit einem Versatz von 50 Minuten.RELEASE_DELAYgibt an, wie lange nach ihrem Termin eine Datei auf Open Data ist. Miss ihn an denLast-Modified-Headern aktueller Dateien (das tutscripts/check_release_delay.py) und nimm einen Wert auf oder über dem Mittelwert: Ein Abruf, bevor der DWD veröffentlicht, kostet jedes Mal eine fehlgeschlagene Anfrage und einen erneuten Versuch.OVERDUE_GRACEgibt an, wie lange der DWD Zeit bekommt, eine überfällige Veröffentlichung nachzuliefern, bevor die Sensoren veralten. Sie darf kein ganzzahliges Vielfaches vonRELEASE_INTERVALsein, sonst fällt die Frist mit einem Abruf zusammen; ein Test erzwingt das für jedes Produkt.USE_LOCAL_TIMEist für ein Produkt, dessen Termine in Ortszeit liegen, wie das täglichesf_2350.
Die Entitäten benennen
Folge den Benennungsregeln in CLAUDE.md und
ADR 0001: ein
Zeitfenster im Namen nur, wenn es Teil des Werts ist, last / next /
Kalenderzeiträume, Einheiten, die dem Produkt folgen. Gib einer neuen Entität
nie eine ID, die eine veröffentlichte Version einer anderen gegeben hat;
tests/entity_ids.py verzeichnet sie.