Modul zur Ökobilanzierung (LCA) im Nachhaltigkeitsmonitoring der Stadt Zürich (NHMzh).
- Architektur und Kontext
- Funktionsumfang
- Datenbank-Schema
- Kommunikation
- Installation
- Umgebungsvariablen
- Lizenz
Dieses Plugin ist die Weboberfläche für das LCA-Modul und ist Teil des NHMzh-Ökosystems. Die Architektur basiert auf einem dedizierten Backend für die Berechnungen.
- Frontend: Eine in React/TypeScript entwickelte Single-Page-Application, gebündelt über Vite. Sie visualisiert LCA-Daten, ermöglicht Material-Mappings und stösst Bestätigungen an.
- Backend: Ein Express-Server in
backend/(TypeScript), der die Berechnungslogik kapselt. Er greift auf die QTO-Datenbank zu, persistiert Ergebnisse in derlca-MongoDB, publiziert bestätigte Ergebnisse via Kafka und stellt REST-Endpunkte bereit. - Datenfluss:
- Das LCA-Backend fragt die
elements-Sammlung aus der MongoDB-Datenbank des QTO-Plugins ab, um Material- und Mengendaten zu erhalten. - Es berechnet die Umweltauswirkungen (GWP, UBP, PENR) basierend auf Materialvolumen und KBOB-Ökokennwerten.
- Die Ergebnisse werden in der eigenen
lca-MongoDB-Datenbank gespeichert. - Das LCA-Frontend ruft die berechneten Daten über eine REST-API vom LCA-Backend ab und stellt sie dar.
- Das LCA-Backend fragt die
Die Kommunikation zwischen Frontend und Backend erfolgt zustandslos über HTTP-Anfragen.
- Material-Mapping: Zuordnung von IFC-Materialien zu KBOB-Materialdaten.
- LCA-Berechnungen: Automatische Berechnung von GWP, UBP und PENR.
- Amortisationslogik: EBKP-basierte Zuweisung von Amortisationsdauern für Bauteile.
- KBOB-Integration: Anbindung an die KBOB-Datenbank zur Nutzung von Ökokennwerten.
- Interaktive Visualisierung: Grafische Aufbereitung der LCA-Ergebnisse.
- Projektverwaltung: Auswahl und Bearbeitung von verschiedenen Projekten.
Das LCA-Plugin speichert seine Ergebnisse in einer lca-MongoDB-Datenbank. Die zentrale Sammlung ist materialInstances.
lca.materialInstances
{
"_id": "ObjectId",
"element_id": "ObjectId", // Referenz zu qto.elements
"material_name": "Beton C30/37",
"volume": 45.2,
"density": 2400,
"mass": 108480,
"environmental_impact": {
"GWP_absolute": 32544.0,
"UBP_absolute": 1084800,
"PENR_absolute": 54240.0,
"GWP_relative": 10.85,
"UBP_relative": 361.6,
"PENR_relative": 18.08
},
"amortization_period": 60,
"ebkp_code": "C2.01",
"project_id": "project_001",
"calculated_at": "ISODate"
}GWP_relative: kg CO₂-eq/(m²·a)UBP_relative: UBP/(m²·a)PENR_relative: kWh/(m²·a)
Die Kommunikation zwischen dem React-Frontend und dem Node.js-Backend erfolgt über eine REST-API. Das Frontend sendet HTTP-Anfragen an das Backend, um Projektdaten abzurufen oder Materialzuordnungen zu speichern.
Das Backend kann zusammengefasste Endergebnisse an Kafka publizieren. Dies dient der Anbindung von externen Systemen wie Dashboards. Die direkte Kommunikation zwischen den Modulen (QTO, Cost, LCA) findet über die gemeinsame MongoDB-Instanz statt, nicht über Kafka.
Server für die Entwicklungsumgebung starten:
# Frontend (Vite + React/TypeScript)
cd plugin-lca
npm install
npm run dev
# Backend (Express + TypeScript)
cd backend
npm install
npm run devDas Frontend läuft standardmässig unter http://localhost:5173, das Backend unter dem Port aus backend/config.ts (Standard: 8002).
Dieses Projekt wurde durch die Stadt Zürich finanziert. Der gesamte in diesem Repository enthaltene Quellcode stammt von Louis Trümpler (LTplus AG).
Für die Konfiguration des Frontends wird eine .env-Datei im Stammverzeichnis verwendet:
# URL des LCA-Backends
VITE_API_URL=http://localhost:8002
Das Backend verwendet ebenfalls Umgebungsvariablen zur Konfiguration der Datenbankverbindung und anderer Dienste.
Dieses Projekt ist unter der GNU Affero General Public License v3.0 (AGPL-3.0) lizenziert. Details finden Sie in der Lizenzdatei.