
BSH Tides for Germany – Update meiner Home Assistant Integration
Vor kurzem habe ich die BSH Tides for Germany Integration
für Home Assistant entwickelt. Die Integration unterstützt Gezeitenvorhersage, Wasserstände und Hochwasserschutz direkt im Home Assistant – mit Live-Daten des Bundesamts für Seeschifffahrt und Hydrographie (BSH). Man kann die Integration über HACS installieren (Github, Artikel) und ich habe sie in mehreren Artikeln beschrieben.
Heute beschreibe ich ein größeres Update, dass ich gerade für die Integration gebaut habe, nämlich einen Fallback Mechanismus für Messstationen des BSH, die nicht alle benötigten Daten zur Verfügung stellen.
Problembeschreibung
Auf dieser Karte vom BSH werden die Messstationen angezeigt, für die das BSH Wasserstandsvorhersagen veröffentlicht. Die große Masse, dieser Stationen enthält dafür eine konkrete Scheitelwertvorhersage, welche die genaue Uhrzeit nebst vorhergesagter Wasserstandsdifferenz vom mittleren Hoch-/Niedrigwasser beinhaltet.
In der Übersicht, sieht das ganze bspw. für St. Pauli so aus:

Über den API Endpunkt für St. Pauli, bekommt man da einen als hwnw_forecast
bezeichneten Datenpunkt im JSON in dieser Form:
"hwnw_forecast": {
"data": [
{
"timestamp": "2025-07-13 19:13:00+02:00",
"value": 721,
"event": "HW",
"deviation": 10.0,
"forecast": "+0,1 m",
"warning": "Wasserstandsvorhersage",
"transit_nr": "26653,1"
},
{
"timestamp": "2025-07-14 02:42:00+02:00",
"value": 309,
"event": "NW",
"deviation": 10.0,
"forecast": "-0,2 m",
"warning": "Wasserstandsvorhersage",
"transit_nr": "26653,2"
},
{
"timestamp": "2025-07-14 07:43:00+02:00",
"value": 691,
"event": "HW",
"deviation": 10.0,
"forecast": "-0,2 m",
"warning": "Wasserstandsvorhersage",
"transit_nr": "26653,3"
},
{
"timestamp": "2025-07-14 14:44:00+02:00",
"value": 319,
"event": "NW",
"deviation": 10.0,
"forecast": "-0,1 m",
"warning": "Wasserstandsvorhersage",
"transit_nr": "26653,4"
}
]
}
Diese Daten hat meine HA Integration vor v0.0.2 auch verwendet. Das Problem ist leider, dass die Daten offenbar nicht für jede Messstation verfügbar sind. Bspw. für die Messstation Zollenspieker in der Elbe oder die Wilhelm-Kaisen-Brücke in der Weser fehlt dieser Datenpunkt in der JSON Antwort der API und auf der BSH Seite dieser Stationen sieht man das dadurch, dass die Tabelle einfach fehlt.
Alternative Daten
Die Daten, die für alle Messstationen zur Verfügung zu stehen scheinen, sind allerdings die astronomische Gezeitenvorrausberechnung und auch die Kurvenvorhersage des Wasserstandes. Die Werte werden verwendet um die Graphen auf der BSH Seite zu erstellen.

Diese Daten sind als curve_forecast
in der JSON Antwort der API vorhanden:
{
"station_name": "Hamburg, Zollenspieker, Elbe",
"station_url": "https://www.pegelonline.wsv.de/gast/stammdaten?pegelnr=5930090",
"area": "Elbe",
"area_add": "",
"bshnr": "731P",
"latitude": 53.398611,
"longitude": 10.185278,
"MHW": 744,
"MNW": 430,
"measuring_site": "5930090",
"PNP (unter NHN)": -504,
"SKN (ueber PNP)": 381,
"gauge_group": 3,
"creation_forecast": "2025-07-13 13:02:56+02:00",
"creation_chart": "2025-07-13 17:38:49+02:00",
"seo_id": "hamburg_zollenspieker",
"warning": "Wasserstandsvorhersage",
"status": 1,
"copyright_note": "©Bundesamt für Seeschifffahrt und Hydrographie (BSH). Das BSH übernimmt für die angegebenen Informationen keine Gewähr. Beobachtungen:©Generaldirektion Wasserstraßen und Schifffahrt",
"curve_forecast": {
"data": [
{
"timestamp": "2025-07-13 04:00:00+02:00",
"astro": 502,
"curveforecast": null,
"measurement": 460
},
{
"timestamp": "2025-07-13 04:10:00+02:00",
"astro": 517,
"curveforecast": null,
"measurement": 472
},
{
"timestamp": "2025-07-13 04:20:00+02:00",
"astro": 530,
"curveforecast": null,
"measurement": 483
},
{
"timestamp": "2025-07-13 04:30:00+02:00",
"astro": 542,
"curveforecast": null,
"measurement": 495
}, ...
Die Lösung
Diese curve_forecast
Daten sind Vorhersagewerte in 10-Minuten Intervallen. Sie beinhalten für die kommenden Tage die folgenden Werte:
astro
– das ist der astronomisch vorberechnete Pegelstand (astronomisch heißt ohne Berücksichtigung von Wetter und Wind)measurement
– Für Werte in der Vergangenheit ist das jeweils der Wert der zu diesem Zeitpunkt gemessen wurdecurveforecast
– Dies ist ein Vorhersagewert der (für mich) so aussieht, als wäre es der tatsächliche Wert, den das BSH für den entsprechenden Zeitpunkt als Pegelstand annimmt. Der Wert stimmt mit der Ansicht im Graphen auf der BSH Seite überein.
Nun habe ich Code geschrieben, der über diese Intervallmessdaten drüberiteriert und versucht den Zeitpunkt zu erkennen, wenn die Kurve von sinkendem zu steigendem Pegelstand umschlägt. Das ist dann jeweils der Zeitpunkt zu dem der Scheitelwert des Niedrig-/Hochwassers erreicht ist. Es war noch nötig ein bisschen mehr Logik hinzuzufügen, da die Daten nicht ganz sauber sind und es durchaus regelmäßig vorkommt, dass gerade im Umfeld der Scheitelwerte der Wasserstand ein wenig hin und herschwankt. Das kann den angenommenen Zeitpunkt dann schnell mal +- 20 Minuten verschieben.
Ein bisschen schöner
Es hat mir nicht so gefallen, dass ich hier mehrere Annahmen treffen musste, um die Daten zu extrahieren. Es fühlt sich für mich ungenauer an, wenn ich selbst sage „jetzt ist der richtige Zeitpunkt“ basierend auf nicht kontinuierlichen leicht fluktuierenden Daten im Vergleich dazu, dass das BSH mir einfach sagt: Heute um 18:24 ist Flut. Daher habe ich in Home Assistant noch einen Diagnostic Sensor eingebaut, der jeweils sagt, ob die Vorhersage auf der BSH Scheitelwertvorhersage beruht oder auf der Interval-basierten Kurvenvorhersage. Das Ganze sieht dann in HA so aus für St. Pauli (Pegelwert, links) und Zollenspieker (Intervalkurve, rechts). (Der Forecast Type Sensor ist neu.)


Fazit
Die Neue Version v0.0.3 ist seit heute live und kann über die normale HA Update Funktion heruntergeladen werden. Sagt bitte Bescheid (hier per Kommentar oder als Github Isssue), solltet ihr andere Probleme mit der Integration haben.
Ich habe als ich weiter am Code rumgespielt habe noch überlegt, ob ich noch den aktuellen Pegelstand über meine Integration verfügbar machen möchte. Die Daten gibt es über Pegelonline. Allerdings gibt es dafür schon eine Integration in HA, daher bin ich mir nicht sicher, ob das hier der richtige Ort wäre…
Habt Spaß mit BSH Tides for Germany
🙂
