Skip to content

Repository files navigation

mastr-tool

Werkzeuge für den automatischen Download, den Datenbankimport und die Konvertierung des Marktstammdatenregisters der Bundesnetzagentur. Diese Werkzeuge sind die Datengrundlage und damit notwendig für den Betrieb der mastr-app.

Die mastr-app kann unter https://mastr.nachtsieb.de ausprobiert werden.

Verwendung mit docker-compose

Funktionsweise von mastr-tool

mastr-tool lädt die Marktstammdatenregister-Daten der Bundesnetzagentur herunter, importiert sie in eine PostgreSQL-Datenbank, reichert sie an und konvertiert sie in handhabbare Formate. Die Architektur ist in zwei Bereiche geteilt:

  • mastr-tool – das Backend. Führt den Scheduler aus, der die Pipeline betreibt: Dump-Download, DB-Import, Anreicherung und CSV-/Parquet-/Excel-Export. Die Ergebnisse stellt es über den Service mastr-static via http bereit.
  • mastr-app – das Frontend. Eine WebUI, die die exportierten Daten visualisiert. Sie greift auf mastr-static zu, um die konvertierten Dateien zu laden.

Die Pipeline im Detail

  1. Dump-Download: Der Scheduler prüft alle 30 Minuten, ob ein aktualisierter MaStR-Dump bei der Bundesnetzagentur vorliegt. Nur dann wird neu heruntergeladen und die Konvertierung durchgeführt.
  2. DB-Import: Die riesigen XML-Dateien des Dumps werden in PostgreSQL importiert.
  3. Enrichment: Für alle Einheiten mit Koordinaten werden UTM-Koordinaten berechnet und in der Datenbank ergänzt (Zone, Ostwert, Nordwert). Bereits berechnete Koordinaten werden zwischengespeichert, um Rechenzeit bei zukünftigen Konvertierungen zu sparen.
  4. Export: Die angereicherten Daten werden konvertiert in:
    • CSV
    • Parquet
    • Excel (.xlsx, nicht für Solar, da zu groß)

Voraussetzungen

  • Docker mit Compose-Plugin
  • Mindestens 70 GiB freier Speicher – der größte Anteil entfällt auf den unkomprimierten MaStR-Dump (aktuell ca. 60 GiB, wächst über die Zeit).

Konfiguration (.env)

Man legt eine .env neben der docker-compose.yaml an:

# Cache-Verzeichnis (Dump, entpackte XML-Dateien, Enricher-Cache)
MASTR_CACHE_DIR=/pfad/zum/cache

# Export-Verzeichnis (CSV-, Parquet- und Excel-Exporte)
MASTR_OUTPUT_DIR=/pfad/zum/export

Zwei Compose-Dateien

Es gibt zwei Compose-Dateien für unterschiedliche Anwendungsfälle:

Datei Services Anwendung
docker-compose.yaml mastr-tool, db, mastr-static, mastr-app Vollbetrieb inkl. WebUI
docker-compose.convert.yaml mastr-tool, db Nur (regelmäßige) Konvertierung ohne web-app und http-Zugriff auf exportierte Daten

Vollbetrieb inkl. WebUI

docker compose -f docker-compose.yaml up -d --build

Startet alle Services. Die WebUI ist unter 127.0.0.1:8081 erreichbar, die exportierten Dateien unter 127.0.0.1:8080.

Nur Daten konvertieren

docker compose -f docker-compose.convert.yaml up -d --build

Startet nur mastr-tool und db. Die Exporte landen im konfigurierten MASTR_OUTPUT_DIR. Ohne mastr-static und mastr-app gibt es keinen Webserver-Zugriff auf die Dateien – sie liegen direkt im gemounteten Verzeichnis. Auch hier wird alle 30 Minuten geprüft, ob ein neuer Dump bei der Bundesnetzagentur vorliegt.

Logs

docker compose -f docker-compose.convert.yaml logs -f mastr-tool

Deployment auf Kubernetes

mastr-tool wird über das Helm-Chart in charts/mastr-tool deployt. Es bringt den Backend-Scheduler (mastr-tool), den http-Server für die Exporte (mastr-static) und eine eigenständige PostgreSQL-Datenbank mit. Nicht enthalten ist mastr-app – die WebUI besitzt ein eigenes Helm-Chart im mastr-app-Repository und wird separat installiert.

Voraussetzungen

  • Kubernetes-Cluster mit einem Ingress-Controller
  • helm >= 3
  • Eine StorageClass, die ReadWriteMany unterstützt (für das output-PVC, damit mastr-static die von mastr-tool geschriebenen Exporte lesen kann). Alternativ beide Pods über Affinity auf denselben Knoten legen und ReadWriteOnce verwenden.

Installation

# Chart-Abhängigkeiten (falls vorhanden) aktualisieren
helm dependency build charts/mastr-tool

# Eigene Werte anpassen (siehe Minimal-Beispiel unten) und installieren
helm install mastr charts/mastr-tool -n mastr --create-namespace -f my-values.yaml

Upgrade

helm upgrade mastr charts/mastr-tool -n mastr -f my-values.yaml

Minimale my-values.yaml

mastrTool:
  image:
    repository: nachtsieb/mastr-tool
    tag: latest
  forceUsingExistingDump: false
  resources: {}

mastrStatic:
  enabled: true
  image:
    repository: nachtsieb/mastr-static
    tag: latest
  service:
    type: ClusterIP
    port: 8080
  ingress:
    enabled: true
    className: ""                 # leer = Cluster-Default-Ingress-Class
    annotations: {}
    hosts:
      - host: mastr-static.example.com
        paths:
          - path: /
            pathType: Prefix

database:
  mode: standalone
  port: 5432
  standalone:
    image:
      repository: postgres
      tag: "18"
    user: mastr
    password: "change-me-please"
    name: mastr
    storage: 50Gi
    storageClassName: ""
    resources: {}

persistence:
  cache:
    size: 80Gi
    storageClassName: ""
    accessModes: [ReadWriteOnce]
  output:
    size: 20Gi
    storageClassName: ""          # musst be RWX StorageClass
    accessModes: [ReadWriteMany]

Used by

Contributors

Languages