Treibhausgas GFM
Das Treibhausgas Gap Filling Module berechnet Treibhausgasemissionen aus beheiztem Gewächshausanbau von Gemüse. Gewächshausproduktion kann die Klimaauswirkung im Vergleich zu Freilandanbau um das bis zu 10-fache erhöhen, weshalb dieses Modul für genaue Umweltbewertungen von Frischprodukten entscheidend ist.
Kurzreferenz
| Eigenschaft | Beschreibung |
|---|---|
| Läuft auf | ModeledActivityNode mit FoodProductFlowNode-Elternknoten, der gematchte Gemüsebegriffe enthält |
| Abhängigkeiten | OriginGapFillingWorker, AttachFoodTagsGapFillingWorker, ConservationGapFillingWorker |
| Schlüsseleingabe | Produktionsdatum, Herkunftsland, gematchter Gemüsetyp |
| Ausgabe | Heizungsemissionen, Infrastrukturemissionen, Stroemissionen |
| Auslöser | Produkt gematcht mit einem der 7 Gewächshausgemüse |
Wann es läuft
Das Modul wird ausgelöst, wenn:
- Ein Produkt einem abgedeckten Gemüsebegriff zugeordnet ist
- Das Produkt ein gültiges Herkunftsland mit Meteonorm-Klimadaten hat
- Das Produkt KEIN Ausschluss-Tag hat (gefroren, konserviert, getrocknet)
- Heizung erforderlich ist (basierend auf Klimaberechnungen)
Schlüsselausgabe
Das Modul fügt drei Arten von Emissionen zum Berechnungsgraphen hinzu:
- Heizung: Basierend auf Landesklima, Gemüseanforderungen und Produktionsdatum
- Infrastruktur: Glas- und Kunststoff-Gewächshausmaterialien
- Strom: Gemüsespezifischer Energieverbrauch
Wissenschaftliche Methodik
Das Gewächshausmodell berechnet Emissionen mit der Formel:
Gesamtemissionen = Heizung + Infrastruktur + Strom
Jede Komponente wird pro Kilogramm produziertem Gemüse berechnet.
Heizbedarfsmodell
Das Heizbedarfsmodell basiert auf Stössel et al. (2012) und verwendet einen Wärmebilanzansatz:
Q_heating = (Q_trans + Q_air) * (T_in - T_out) - Q_solar * G
Wobei:
- Q_trans: Wärmeübertragung durch Gewächshaushülle
- Q_air: Wärmeverlust durch Luftaustausch
- T_in: Erforderliche Innentemperatur für das Gemüse (Kelvin)
- T_out: Monatliche Durchschnitts-Außentemperatur (von Meteonorm)
- Q_solar: Solare Wärmezugewinn-Faktor
- G: Monatliche durchschnittliche Sonneneinstrahlung (von Meteonorm)
Wärmeübertragungsfaktor (Q_trans)
U_VALUE = 3.4 # W/m2/K - Wärmedämmwert
CLADDING_AREA = 54_978.2 # m2 - Gewächshaushüllenfläche
Q_TRANS_FACTOR = U_VALUE * CLADDING_AREA # = 186,925.88 W/K
Der U-Wert von 3,4 W/m2/K repräsentiert einen gewichteten Durchschnitt für konventionelle Gewächshäuser gemäß Scharfy et al. (2017).
Luftaustauschfaktor (Q_air)
AIR_EXCHANGE_NUMBER = 0.24 # Luftwechsel pro Stunde
BUILDING_VOLUME = 259_506.0 # m3
SPEC_VOLUMETRIC_ENERGY_CONSTANT_FOR_AIR = 0.32 # Wh/m3/K
Q_AIR_FACTOR = AIR_EXCHANGE_NUMBER * BUILDING_VOLUME * SPEC_VOLUMETRIC_ENERGY_CONSTANT_FOR_AIR
# = 19,924.46 W/K
Solarer Wärmezugewinn-Faktor (Q_solar)
Q_SOLAR_FACTOR = 0.609 * 46_800.0 * 0.99 * 0.9 * 0.7
# = 17,849.82 W/(W/m2)
Komponenten:
- 0,609: Solartransmissionsgrad der Gewächshausabdeckung
- 46.800 m2: Der Sonne ausgesetzte Bodenfläche
- 0,99: Anteil der Sonnenstrahlung, der die Pflanzen erreicht
- 0,9: Nutzungsfaktor
- 0,7: Umwandlungseffizienz
Heizungsemissionsberechnung
Heizung [kg CO2eq/kg] = Heizbedarf [MJ/kg] * Heizmix [kg CO2eq/MJ]
Der Heizmix hängt vom Land ab und repräsentiert den durchschnittlichen Mix aus Erdgas, Heizöl und erneuerbaren Energien, der für Gewächshausheizung verwendet wird.
Infrastrukturberechnung
Infrastrukturemissionen berücksichtigen die Gewächshaus-Baumaterialien über ihre 30-jährige Lebensdauer:
FRACTION_OF_GLASS_IN_BUILDING_MATERIAL = 0.604 # 60,4%
FRACTION_OF_PLASTIC_IN_BUILDING_MATERIAL = 0.396 # 39,6%
AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN = 46_800 # m2
Der Infrastrukturmix (60,4% Glas, 39,6% Folientunnel) basiert auf Schweizer Gewächshausstatistiken von Scharfy et al. (2017).
Berechnung:
# m2*Jahr Gewächshaus benötigt pro kg Gemüse
building_material_per_kg = greenhouse_area / total_yield_per_year * production_amount
# Aufteilung zwischen Glas und Kunststoff
glass_material = building_material_per_kg * 0.604
plastic_material = building_material_per_kg * 0.396
Stromberechnung
Der Stromverbrauch ist gemüsespezifisch und wird mit dem Strommix des Landes multipliziert:
Strom [kg CO2eq/kg] = Energieeinsatz [kWh/kg] * Strommix [kg CO2eq/kWh]
Der Strommix verwendet Ecoinvents "market for electricity, low voltage" für jedes Land.
Implementierungsdetails
Abgedeckte Produkte
Das Modul läuft, wenn ein Produkt einem dieser FoodEx2-Begriffe zugeordnet ist:
| FoodEx2-Code | Gemüse | Modelltyp | Beschreibung |
|---|---|---|---|
B1458 | Aubergine | eggplant | Aubergine |
A00JD | Aubergine | eggplant | Auberginen |
A00JM | Gurke | cucumber | Gurken |
A00JR | Gurke | cucumber | Zucchini |
A00KY | Salat | lettuce | Kopfsalat |
A00MJ | Salat | lettuce | Spinat |
B4946 | Salat | lettuce | Batavia-Salat |
A00KX | Salat | lettuce | Salate generisch |
A1563 | Salat | lettuce | Eisbergsalat |
A0DLB | Salat | lettuce | Salate und ähnliche |
A1612 | Salat | lettuce | Eichblattsalat |
A00LB | Salat | lettuce | Lollo Rosso |
A00JA | Paprika | bell pepper | Gemüsepaprika |
A00QV | Radieschen | radish | Radieschen |
A00LM | Radieschen | radish | Rauke und ähnliche |
B2474 | Radieschen | radish | Rucola |
A0DMX | Tomate | tomato | Tomaten |
A00HY | Rispentomate | vine tomato | Cherrytomaten |
Gemüseparameter
Jeder Gemüsetyp hat spezifische Anbauparameter:
| Gemüse | Wachstumstage | Innentemp. (K) | Ertrag (kg/m2/Monat) | Strom (kWh/kg) |
|---|---|---|---|---|
| Aubergine | 50 | 291,15 (18°C) | 3,15 | 0,5492 |
| Gurke | 32 | 291,15 (18°C) | 4,36 | 0,1982 |
| Salat | 60 | 281,15 (8°C) | 1,74 | 0,4636 |
| Paprika | 41 | 293,15 (20°C) | 1,97 | 0,5746 |
| Radieschen | 51 | 279,15 (6°C) | 1,36 | 0,33798 |
| Tomate | 127 | 291,15 (18°C) | 4,66 | 0,2207 |
| Rispentomate | 127 | 291,15 (18°C) | 4,72 | 0,2099 |
Datenquellen: ProfiCost-Tool (Chollet et al., 2012), technisches Handbuch des Schweizer Gemüseproduzentenverbands.
Abgedeckte Länder
Das Modul hat Meteonorm-Klimadaten für 28 europäische Länder:
| Code | Land | Code | Land |
|---|---|---|---|
| AT | Österreich | IT | Italien |
| BE | Belgien | LT | Litauen |
| BG | Bulgarien | LU | Luxemburg |
| CH | Schweiz | LV | Lettland |
| CZ | Tschechien | NL | Niederlande |
| DE | Deutschland | PL | Polen |
| DK | Dänemark | PT | Portugal |
| EE | Estland | RO | Rumänien |
| ES | Spanien | SE | Schweden |
| FI | Finnland | SI | Slowenien |
| FR | Frankreich | SK | Slowakei |
| GB | Großbritannien | TR | Türkei |
| GR | Griechenland | HR | Kroatien |
| HU | Ungarn | IE | Irland |
Fehlende EU-Länder: Zypern, Malta
Ausschlussregeln
Das Gewächshausmodell läuft NICHT, wenn das Produkt eines dieser Konservierungs-Tags hat:
| Term XID | Beschreibung |
|---|---|
J0001 | Generisch konserviert |
J0136 | Gefroren |
J0111 | Konserviert (Dose) |
J0116 | Getrocknet |
Diese Produkte werden ausgeschlossen, weil konservierte Produkte zum Zeitpunkt des Verbrauchs keine Gewächshausproduktion erfordern - sie wurden wahrscheinlich während der regulären Wachstumssaison produziert.
Hinweis: J0003 (Nicht konserviert) und J0131 (Gekühlt) schließen Produkte NICHT vom Gewächshausmodell aus.
Behandlung des Produktionsdatums
Das Produktionsdatum bestimmt, welche Monatsklimdaten für Heizungsberechnungen verwendet werden:
- Wenn
activity_dateauf dem Produkt oder einem Elternknoten angegeben ist, wird es verwendet - Das Erntedatum wird als
Produktionsdatum - 3 Tageberechnet - Wachstumstage werden vom Erntedatum basierend auf dem Gemüsetyp zurückgerechnet
- Monatliche Heizungsanforderungen werden für jeden Monat in der Wachstumsperiode berechnet
Beispiel: Tomaten mit Produktionsdatum 15. März:
- Erntedatum: 12. März
- Wachstumsperiode: 127 Tage (6. Oktober bis 12. März)
- Monate mit Wachstumstagen: Oktober (teilweise), November, Dezember, Januar, Februar, März (teilweise)
Vollständige Codereferenz
Heizungsberechnung
Die Methode compute_required_heating berechnet den Heizbedarf in MJ pro kg Gemüse:
def compute_required_heating(
self,
flow_country_code: str,
flow_processing_date: datetime,
vegetable_name: str,
) -> float:
"""Notwendige Heizmenge berechnen."""
days_between_harvest_and_production_date = 3
harvest_date = flow_processing_date - timedelta(days=days_between_harvest_and_production_date)
# Wachstumstage pro Monat basierend auf Erntedatum und Gemüse-Wachstumsdauer ermitteln
monthly_growing_days = np.array(days_in_each_month(NUMBER_OF_GROWING_DAYS[vegetable_name], harvest_date))
# Länderspezifische Klimadaten laden
monthly_avg_outside_temp = np.array(
self.gfm_factory.aggregated_meteonorm_data[flow_country_code]["average_temperature"]
)
monthly_avg_solar_radiation = np.array(
self.gfm_factory.aggregated_meteonorm_data[flow_country_code]["average_solar_radiation"]
)
# Wärmebilanz berechnen
monthly_temp_difference = REQUIRED_INSIDE_TEMPERATURE[vegetable_name] - monthly_avg_outside_temp
monthly_required_heating_power_watts = (
Q_TRANS_FACTOR + Q_AIR_FACTOR
) * monthly_temp_difference - Q_SOLAR_FACTOR * monthly_avg_solar_radiation
# Keine negative Heizung (keine Kühlung modelliert)
monthly_required_heating_power_watts = np.array(
[val if val >= 0.0 else 0.0 for val in monthly_required_heating_power_watts]
)
# Leistung in Energie umrechnen
monthly_required_heating_energy_wh = monthly_required_heating_power_watts * monthly_growing_days * 24
monthly_required_heating_energy_kwh = monthly_required_heating_energy_wh / 1000
# Ertrag während der Wachstumsperiode berechnen
average_yield_kg_per_day = (
AVG_YIELD_PER_M2_PER_MONTH[vegetable_name] * AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN * 12 / 365
)
yield_in_growing_days_kg = average_yield_kg_per_day * sum(monthly_growing_days)
# In MJ pro kg umrechnen
mj_in_kwh = 3.6
monthly_required_heating_energy_mj = monthly_required_heating_energy_kwh * mj_in_kwh
required_heating_energy_mj_for_kg_of_vegetable = (
np.sum(monthly_required_heating_energy_mj) / yield_in_growing_days_kg
)
return required_heating_energy_mj_for_kg_of_vegetable
Infrastruktur-Bilanzierung
async def account_for_infrastructure(
self, calc_graph: CalcGraph, greenhouse_activity: FoodProcessingActivityNode, vegetable_name: str
) -> None:
"""Infrastruktur des Gewächshauses bilanzieren."""
size_of_greenhouse_in_m2 = AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN
average_yield_in_kg_per_m2_and_month = AVG_YIELD_PER_M2_PER_MONTH[vegetable_name]
total_yield_per_year = average_yield_in_kg_per_m2_and_month * 12 * size_of_greenhouse_in_m2
# m2*Jahr Baumaterial pro kg Ernte berechnen
area_and_time_of_greenhouse_building_material = (
size_of_greenhouse_in_m2 / total_yield_per_year * self.node.production_amount.value
)
# Aufteilen zwischen Glas (60,4%) und Kunststoff (39,6%)
glass_building_material = (
area_and_time_of_greenhouse_building_material * FRACTION_OF_GLASS_IN_BUILDING_MATERIAL
)
plastic_building_material = (
area_and_time_of_greenhouse_building_material * FRACTION_OF_PLASTIC_IN_BUILDING_MATERIAL
)
# Glas- und Kunststoff-Flussknoten zum Graphen hinzufügen
# Verbunden mit Ecoinvent-Prozessen für Gewächshaus-Infrastruktur
Strom-Bilanzierung
async def account_for_electrical_energy(
self,
calc_graph: CalcGraph,
greenhouse_activity: FoodProcessingActivityNode,
country_code: str,
vegetable_name: str,
) -> None:
"""Stromverbrauch des Gewächshauses bilanzieren."""
energy_needed_per_kg = REQUIRED_ELECTRICITY_KWH_PER_KG[vegetable_name]
# Stromverbrauchs-Fluss erstellen
electricity_consumption_flow = FlowNode(
uid=UuidStr(uuid4()),
amount=QuantityProp(
value=energy_needed_per_kg * self.node.production_amount.value,
unit_term_uid=self.gfm_factory.kWh_term.uid,
),
)
# Mit länderspezifischem Strommarkt aus Cache verbinden
electrical_energy_node = self.gfm_factory.electricity_markets_cache.get(country_code)
Datenquellen
Meteonorm-Klimadaten
Klimadaten stammen aus der Meteonorm-Software (Daten von 2016):
- Temperatur: Monatliche Durchschnitts-Außentemperatur in Kelvin
- Sonneneinstrahlung: Monatliche durchschnittliche globale Sonneneinstrahlung in W/m2
Die Daten werden im GFM-Cache gespeichert und beim Servicestart geladen:
meteonorm_average_temperature_{country_code}: Array von 12 Monatswertenmeteonorm_average_solar_radiation_{country_code}: Array von 12 Monatswerten
Heizmixe
Länderspezifische Heizmixe für Gewächshausheizung:
| Land | Brightway XID | Zusammensetzung |
|---|---|---|
| CH (Schweiz) | EDB_4220cbaabca343c09b19415d5ab4079f_copy1 | 41,3% Erdgas, 35,2% Heizöl, 23,5% Erneuerbare |
| DE (Deutschland) | EDB_4220cbaabca343c09b19415d5ab4079f_copy2 | 28% Kohle, 21% Erdgas, 15% Heizöl, 20% Erneuerbare, 16% Sonstige |
| NL (Niederlande) | EDB_4220cbaabca343c09b19415d5ab4079f | 86,2% Erdgas, 0,1% Heizöl, 13,7% Erneuerbare |
| EU sonstige | EDB_4220cbaabca343c09b19415d5ab4079f_copy3 | 54% Erdgas, 46% Heizöl |
Infrastrukturmaterialien
Ecoinvent-Prozesse für Gewächshaus-Baumaterialien:
| Material | Ecoinvent ID | Einheit |
|---|---|---|
| Glasgewächshaus | ecoinvent 3.6 cutoff_0ce659c3cfd443a38761058ee62e3f10 | m2*Jahr |
| Folientunnel | ecoinvent 3.6 cutoff_fddfe51c6959f41ac044089c3a892af7 | m2*Jahr |
Berechnungsbeispiel
Szenario: 1 kg Tomaten, produziert in Schweden am 15. März
Schritt 1: Wachstumsperiode bestimmen
- Produktionsdatum: 15. März
- Erntedatum: 12. März (3 Tage vor Produktion)
- Wachstumsdauer: 127 Tage
- Startdatum: 5. November (Vorjahr)
Schritt 2: Monatliche Wachstumstage berechnen
| Monat | Tage |
|---|---|
| November | 25 |
| Dezember | 31 |
| Januar | 31 |
| Februar | 28 |
| März | 12 |
| Gesamt | 127 |
Schritt 3: Heizbedarf berechnen
Mit schwedischen Klimadaten und Tomatenanforderungen (18°C Innentemperatur):
- Monatliche Temperaturdifferenzen berechnet
- Sonneneinstrahlungs-Offset angewendet
- Negative Werte auf null begrenzt
Ergebnis: ~32,3 MJ/kg Heizbedarf
Schritt 4: Infrastruktur berechnen
Gesamtertrag/Jahr = 4,66 kg/m2/Monat * 12 * 46.800 m2 = 2.616.576 kg/Jahr
Baumaterial pro kg = 46.800 / 2.616.576 = 0,0179 m2*Jahr/kg
Glas: 0,0179 * 0,604 = 0,0108 m2*Jahr
Kunststoff: 0,0179 * 0,396 = 0,0071 m2*Jahr
Schritt 5: Strom berechnen
Strom = 0,2207 kWh/kg * Schwedischer Strommix-Emissionen
Endausgabe
Das Modul fügt drei Flussknoten zum Berechnungsgraphen hinzu:
- Heizungsfluss (32,3 MJ) verbunden mit schwedischem Heizmix-Prozess
- Glas-Infrastrukturfluss (0,0108 m2*Jahr) verbunden mit Ecoinvent-Glasprozess
- Kunststoff-Infrastrukturfluss (0,0071 m2*Jahr) verbunden mit Ecoinvent-Kunststoffprozess
- Stromfluss (0,2207 kWh) verbunden mit schwedischem Strommarkt
Bekannte Einschränkungen
Geografische Abdeckung
- Nur 28 europäische Länder haben Meteonorm-Daten
- Keine Abdeckung für USA, Kanada oder andere große Erzeugerregionen
- Keine subnationale regionale Differenzierung (wichtig für große Länder)
Pflanzenabdeckung
- Nur 7 Gemüsetypen sind modelliert (Tomate, Gurke, Salat, Paprika, Aubergine, Radieschen, Rispentomate)
- Kräuter, Chilis, Erdbeeren und andere Gewächshauskulturen sind nicht abgedeckt
- Einige Kulturen wie Feldsalat haben verfügbare Daten, sind aber nicht implementiert
Modellannahmen
- Keine Heizung erforderlich = kein Gewächshaus angenommen (kann Emissionen für unbeheizte Gewächshäuser unterschätzen)
- Gleicher Infrastrukturmix für alle Länder verwendet (basierend auf Schweizer Daten)
- Bio-Produktion nicht differenziert (minimaler Auswirkungsunterschied festgestellt)
- Keine länderspezifischen Gewächshaus-Anbausaisons durchgesetzt
Datenalter
- Meteonorm-Klimadaten sind von 2016
- Heizmixe spiegeln möglicherweise nicht die aktuelle Energiewende wider
Referenzen
-
Stössel, F., Juraske, R., Pfister, S., & Hellweg, S. (2012). Life cycle inventory and carbon and water footprint of fruits and vegetables: application to a Swiss retailer. The International Journal of Life Cycle Assessment, 17(9), 1191-1202.
-
Eymann, L., et al. (2014). Gewächshausmodell v1.0. ZHAW-Bericht für Eaternity.
-
Scharfy, D., et al. (2017). OFP Report - New Data ZHAW v1.3. Organic Food Print Projektbericht.
-
Chollet, D., et al. (2012). ProfiCost-Tool. Schweizer Gemüseproduzentenverband.
-
Meteonorm Software. https://meteonorm.com/