Hochwasser

Durch das Hochwasser stellt sich mir die Frage, ob es durch die Messstationen möglich ist, eine Vorhersage zu treffen, wann es für mich kritisch wird, bzw. wie lange es noch kritisch bleibt. Dafür kann ich mir die Zu- und Abflüsse der Wabe anschauen, und diese zunächst auf Korrelationen im Pegel untersuchen (Zeitversatz, Pegelerhöhung durch Zufluss von Wabe in Schunter, Rückstau…).

Da das NLWKN jedoch von sich aus keine REST-API zur Verfügung stellt, musste ich zunächst schauen, welche (REST)-API ich bedienen muss, um an die Daten zu gelangen, die von der NLWKN zum Erstellen der Graphen genutzt werden. Anschließend brauchte ich noch die Stationsnummern, um in der REST-API die Daten einer bestimmten Station abrufen zu können.

REST-API

Die Abfrage an die REST-API erfolgt über folgende URL, mit station entsprechend der Stationsnummer sowie days ∈ {0,-1,-2,…}

api_url = "https://bis.azure-api.net/Pegelonline/REST/chart/station/{station}/datenspuren/parameter/1/tage/{days}/forecast/true?subscription-key=19094e54510d4e89b140ff2d3abf715f&_=1703543285723"

Zuordnung von StationsID zu Ort/Fluss

Die StationsID kann mit folgendem Snippet abgefragt werden und man erhält die Zuordnung aller Stationen zu einem Ort/Fluss.

import requests
from bs4 import BeautifulSoup
for id in range(1,999):
    pegelonline_url = f"https://www.pegelonline.nlwkn.niedersachsen.de/Pegel/Binnenpegel/ID/{id}"
    pegelonline_response = requests.get(pegelstand_url)

    if pegelonline_response.status_code == 404:
        continue

    soup = BeautifulSoup(pegelonline_response.text, 'html.parser')
    location = soup.find(id='MainContent_Page_Detail_Content1_fvPegel_PegelName')
    waters = soup.find(id='MainContent_Page_Detail_Content1_fvPegel_Gewaesser')

    print(f"{id:<3}\t{location.text:<40}\t{waters.text}")

JSON Schema

Um einen Überblick über das verwendete JSON-Schema zu bekommen, habe ich jede ID abgefragt und mit genson die JSON-Schemata der einzelnen JSON-Objekte aggregiert. Dabei werden Attribute, die in jedem JSON-Objekt (Schnittmenge) vorkommen als required vermerkt.

import json
import requests
from genson import SchemaBuilder
builder = SchemaBuilder()
days = -2
for id in range(100,999):
    pegelonline_url = f"https://www.pegelonline.nlwkn.niedersachsen.de/Pegel/Binnenpegel/ID/{id}"
    pegelonline_response = requests.get(pegelonline_url)

    if pegelonline_response.status_code == 404:
        continue

    api_url = f"https://bis.azure-api.net/Pegelonline/REST/chart/station/{id}/datenspuren/parameter/1/tage/{days}/forecast/true?subscription-key=19094e54510d4e89b140ff2d3abf715f&_=1703543285723"
    api_response = requests.get(api_url)
    builder.add_object(api_response.json())
    print(id)

result_schema = builder.to_schema()
print(json.dumps(result_schema, indent=4))

Und hier das JSON-Schema der Pegelonline-API.

Flussverlauf und Messstationen

Die für mich relevanten Stationen um für das östliche Stadtgebiet in Braunschweig eine Aussage treffen zu können sind einerseits der Zulauf der Wabe durch den Elm mit einer Messstation in Sickte, sowie andererseits der Ablauf durch die Schunter. An der Schunter gibt es zwei Messstationen: eine in Glentorf bevor die Wabe in die Schunter fließt, sowie eine in Harxbüttel, nachdem die Wabe in die Schunter geflossen ist. Die beiden Flüsse und deren Zusammenfluss, sowie die Orte mit den Messstationen sind auf dem Bild farblich hervorgehoben. Flussverlauf

Tabelle aller Stationen

Fluss Ort Station
Ableiter zur Hase Alfhausen-Rieste 617
Abzucht Oker 794
Aller Ahlden 148
Aller Brenneckenbrück 213
Aller Celle 223
Aller Grafhorst 1 281
Aller Langlingen 392
Aller Marklendorf 431
Aller Rethem 496
Aller Eitze 593
Aschau Beedenbostel 180
Aue Klein Hollenbeck 799
Außenweser Leuchtturm Alte Weser 419
Böhme Brock 214
Delme Holzkamp 344
Dinkel Lage I 388
Düte Wersen 116
Ecker Gitterkopf 277
Ecker Eckertalsperre 353
Elbe Zollenspieker 141
Elbe Bleckede 195
Elbe Boizenburg 200
Elbe Cranz 225
Elbe Cuxhaven Steubenhöft 226
Elbe Damnatz 228
Elbe Dömitz 238
Elbe Geesthacht 275
Elbe Grauerort 286
Elbe Hitzacker 334
Elbe Hohnstorf 337
Elbe Lühort 424
Elbe Neu Darchau 439
Elbe Otterndorf - Hadelner Kanalschleuse 479
Elbe Schnackenburg 518
Elbe Lenzen 597
Elbe Artlenburg 632
Elbe Wehr Geesthacht UP 633
Elbe Altengamme 634
Elbe Over 635
Elbe Bunthaus 636
Emmer Welsede 113
Emmer Bad Pyrmont 170
Ems Dalum 227
Ems Lingen-Darme 413
Ems Rheine Unterschleuse 497
Ems Versen-Wehrdurchstich 574
Ems Gandersum 631
Este Buxtehude 222
Este Emmen 259
Exter Uchtdorf 565
Fintau Lauenbrück F 395
Fladderkanal Addrup 145
Fuhse Wathlingen 106
Fuhse Peine 482
Fulda Bonaforth 202
Gande Gandersheim 272
Gerdau Hansen 304
Grane Granetalsperre 354
Grane Margarethenklippe 427
Große Aa Beesten 182
Große Aue Heide OP 318
Große Aue Steyerberg 537
Große Hase Bunnen 220
Hase Bersenbrück 188
Hase Bokeloh 201
Hase Bramsche 208
Hase Eversburg 264
Hase Haselünne 310
Hase Herzlake 328
Hase Lüstringen 425
Hase Hasehubbrücke 787
Hunte Colnrade 224
Hunte Huntlosen II 361
Hunte Schäferhof 514
Hunte Tungeln 795
Ilme Oldendorf 472
Ilmenau Bienenbüttel 189
Innerste Bredelem 210
Innerste Heinde 320
Innerste Innerstetalsperre 355
Innerste Rote Klippe 507
Ise Neudorf-Platendorf 441
Jade WHV Alter Vorhafen 602
Jeetzel Lüchow Oberwasser 422
Jeetzel Lüchow Unterwasser 594
Lachte Lachendorf 386
Lager Hase Gut Lage 295
Lager Hase Uptloh 567
Lamme Bad Salzdetfurth 171
Leine Göttingen 280
Leine Greene 287
Leine Herrenhausen 325
Leine Koldingen 378
Leine Leineturm 400
Leine Neustadt 446
Leine Poppenburg 486
Leine Reckershausen 492
Leine Schwarmstedt 520
Leine Salzderhelden 639
Lethe Oberlethe 457
Luhe Roydorf 509
Luhe Thansen 555
Lühe Horneburg 606
Lune Deelbrügge 232
Neile Sehlde 524
Nette Groß Rhüden 291
Nordsee Bensersiel 184
Nordsee Borkum Fischerbalje 203
Nordsee Leyhörn 404
Nordsee Norderney-Riffgat 452
Nordsee Vareler Schleuse 569
Oder Erikabrücke 261
Oder Odertalsperre 356
Oker Altenau I 154
Oker Groß Schwülper 292
Oker Okertalsperre 357
Oker Ohrum 466
Oker Schladen 517
Örtze Feuerschützenbostel 268
Oste Hechthausen 315
Oste Rockstedt 502
Oste Bremervörde UW 605
Rhume Berka R 187
Rhume Elvershausen 256
Rhume Northeim 454
Schunter Glentorf 278
Schunter Harxbüttel 306
Schwinge Schwinge 522
Schwinge Schwinge Sperrwerk 523
Seeve Jehrden 367
Sieber Hattorf 313
Sieber Pionierbrücke 484
Soeste Thülsfeld 638
Söse Sösetalsperre 358
Söse Riefensbeek 499
Sperrlutter Odertal II 460
Spiekaer Wasserlöse (Außentief) Spieka-Neufeld 530
Stederau Niendorf II S 449
Vechte Wehr Neuenhaus 111
Vechte Emlichheim 258
Vechte Ohne 465
Wabe Niedersickte 447
Wagenfelder Aue Düste 250
Werra Letzter Heller 403
Weser Wahmbeck 102
Weser Bodenwerder 197
Weser Dörverden 240
Weser Drakenburg 241
Weser Fedderwardersiel 267
Weser Hameln-Wehrbergen 302
Weser Hann.- Münden 303
Weser Höxter 350
Weser Hoya 351
Weser Intschede 365
Weser Karlshafen 370
Weser Liebenau 407
Weser Nienburg 448
Weser Petershagen 483
Weser Porta 487
Weser Rinteln 500
Weser Stolzenau 539
Weser Vegesack 571
Weser Vlotho 577
Weser Robbensüdsteert 599
Weser Elsfleth 600
Weser Oslebshausen 601
Westaue Wunstorf 140
Wiedau Worth 136
Wietze Wieckenberg 126
Wörpe Grasberg 285
Wümme Hellwege 322
Wümme Lauenbrück B75 394