Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3276ec8d86 | |||
| 07d7a1191b | |||
| 0748b63a58 |
@@ -0,0 +1,120 @@
|
||||
# Auslegung Wärmerückgewinnung Milchkühlung
|
||||
|
||||
Kommandozeilen-Werkzeug zur Auslegung einer Wärmerückgewinnung aus der Milchkühlung: Aus der täglich zu kühlenden **Milchmenge** werden Wärmepumpe, PV-Anlage, Batterie und Natriumacetat-Latentspeicher dimensioniert – inklusive Abhollogistik, versorgbarer Haushalte und Brennstoffkosten-Vergleich.
|
||||
|
||||
Alle Annahmen liegen in einer `config.json`, sodass sich Varianten ohne Codeänderung nachrechnen lassen.
|
||||
|
||||
## Konzept
|
||||
|
||||
```
|
||||
Milchabwärme (37→4 °C) ──► Wärmepumpe (Strom aus PV) ──► Latentspeicher (Natriumacetat, 58 °C) ──► Abholung per LKW
|
||||
```
|
||||
|
||||
Da Natriumacetat-Trihydrat erst bei 58 °C schmilzt, die Milchabwärme aber nur bei ~37 °C anfällt, hebt eine Wärmepumpe das Temperaturniveau an. Der Speicher kann unterkühlt und damit isolierungsfrei transportiert werden.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Python 3.8+
|
||||
- Keine externen Abhängigkeiten (nur Standardbibliothek)
|
||||
|
||||
## Dateien
|
||||
|
||||
| Datei | Zweck |
|
||||
|---|---|
|
||||
| `auslegung.py` | Berechnungsprogramm |
|
||||
| `config.json` | Sämtliche Annahmen (kopieren für Varianten) |
|
||||
|
||||
## Verwendung
|
||||
|
||||
```bash
|
||||
# Detailreport für 1000 L Milch/Tag
|
||||
python auslegung.py 1000
|
||||
|
||||
# Kompakte Empfehlung (gerundete Größen + vorgeschlagener Abholzyklus)
|
||||
python auslegung.py 1000 --suggest-size
|
||||
|
||||
# Variante mit eigener Config und Ergebnis-Export als JSON
|
||||
python auslegung.py 1500 --config meine_variante.json --json ergebnis.json
|
||||
```
|
||||
|
||||
| Argument | Beschreibung |
|
||||
|---|---|
|
||||
| `milch_l_tag` | (Pflicht) Milchmenge pro Tag in Litern |
|
||||
| `--config PFAD` | Pfad zur JSON-Konfiguration (Standard: `config.json`) |
|
||||
| `--json PFAD` | Ergebnis zusätzlich als JSON schreiben |
|
||||
| `--suggest-size` | Kompakte Empfehlung statt Detailreport |
|
||||
|
||||
## Was berechnet wird
|
||||
|
||||
- **Milchkühllast** (kWh/Tag) aus Menge und Temperaturhub
|
||||
- **Wärmepumpe**: Kälte-, Heiz- und elektrische Leistung, Strombedarf, in den Speicher gelieferte Wärme
|
||||
- **PV-Anlage**: Leistung (kWp) und Dachfläche für die Jahresbilanz des WP-Strombedarfs
|
||||
- **Netzbezug**: jährlicher Zukauf-Anteil durch die Wintermonate (Monatsbilanz)
|
||||
- **Batterie**: nutzbare und Nennkapazität für den Tag-/Nacht-Ausgleich
|
||||
- **Latentspeicher**: Masse, Volumen, LKW-Auslastung, Energieinhalt einer Ladung
|
||||
- **Versorgte Haushalte**: Warmwasser (ganzjährig) und Winterfall (Heizung + WW)
|
||||
- **Brennstoffkosten**: Wert der Wärme als Ersatzkosten für Gas, Heizöl, Pellets
|
||||
|
||||
## Konfiguration (`config.json`)
|
||||
|
||||
| Abschnitt | Wichtigste Parameter |
|
||||
|---|---|
|
||||
| `milch` | Ein-/Austrittstemperatur, Dichte, spez. Wärme |
|
||||
| `waermepumpe` | `cop`, `laufzeit_h_pro_tag` |
|
||||
| `pcm` | `modus` (`latent_only` / `latent_plus_hub`), Latentwärme, Dichte, c-Werte, Lade-/Entladetemperatur |
|
||||
| `abholung` | `zyklus_tage`, LKW-Nutzlast und -Volumen |
|
||||
| `pv` | spez. Jahresertrag, Fläche je kWp, Monatsprofil |
|
||||
| `batterie` | Direkt-PV-Stunden, nutzbarer Anteil, Reservefaktor |
|
||||
| `haushalt` | Personen, Warmwasser je Person, Winter-Heizbedarf |
|
||||
| `brennstoffe` | Preis (ct/kWh) und Wirkungsgrad für Gas/Öl/Pellets |
|
||||
|
||||
### Wichtigste Stellschrauben
|
||||
|
||||
- `pcm.modus` – `latent_only` (nur Phasenwechsel) oder `latent_plus_hub` (mit Überhitzung): bestimmt Energiedichte und Speichergröße.
|
||||
- `abholung.zyklus_tage` – Abholrhythmus, steuert die Speichergröße direkt.
|
||||
- `waermepumpe.cop` – bestimmt Strombedarf und damit PV-Größe.
|
||||
- `haushalt.heizbedarf_winter_kWh_tag` – stark gebäudeabhängig (saniert ~40, Altbau ~100, 0 = nur Warmwasser).
|
||||
- `brennstoffe` – Preise sind Stand Juni 2026 (DE) und jederzeit überschreibbar.
|
||||
|
||||
## Ausgabe
|
||||
|
||||
Der Detailreport schreibt einen formatierten Konsolentext mit allen Blöcken. Mit `--json` wird das vollständige Ergebnis zusätzlich als strukturiertes JSON gespeichert (alle Zwischengrößen, im Suggest-Modus zusätzlich der `vorschlag`-Block).
|
||||
|
||||
### Beispiel (gekürzt, 1000 L)
|
||||
|
||||
```
|
||||
WAERMEPUMPE (COP 2.60, Laufzeit 18 h/Tag)
|
||||
Strombedarf ................. 24.0 kWh/Tag
|
||||
Waerme in den Speicher ...... 62.4 kWh/Tag
|
||||
|
||||
PV-ANLAGE
|
||||
Leistung .................... 8.8 kWp
|
||||
Dachflaeche ................. 44 m2
|
||||
|
||||
NETZBEZUG (durch Wintermonate)
|
||||
Netzbezug ................... 1941 kWh/a = 22 %
|
||||
|
||||
VERSORGTE HAUSHALTE (2 Erw. + 2 Kinder)
|
||||
-> Warmwasser ganzjaehrig ... 11.1 Haushalte
|
||||
-> im Winter ................ 1.0 Haushalte
|
||||
|
||||
LATENTSPEICHER (Natriumacetat-Trihydrat, Modus: latent_plus_hub)
|
||||
Energieinhalt voller LKW .... 2185 kWh
|
||||
|
||||
WERT DER WAERME BEIM KAEUFER
|
||||
Gas | 11.6 ct/kWh | 253 EUR/LKW | 2635 EUR/Jahr
|
||||
Pellets | 8.0 ct/kWh | 174 EUR/LKW | 1810 EUR/Jahr
|
||||
```
|
||||
|
||||
## Modell-Annahmen & Vereinfachungen
|
||||
|
||||
- Milch wird thermisch als Wasser gerechnet.
|
||||
- Der zurückkehrende Speicherbehälter wird als „warm" (nahe Schmelzpunkt) angenommen; sonst müsste die WP ihn zusätzlich aufheizen.
|
||||
- Der Netzbezug ist eine **Monatsbilanz** und setzt einen Tag-/Nacht-Ausgleich per Batterie voraus. Ohne Batterie liegt der reale Zukauf höher (~50–60 %).
|
||||
- `--suggest-size` optimiert den Abholzyklus auf **Transportauslastung**, nicht auf die Verweildauer der Wärme im Speicher.
|
||||
- Die Brennstoffkosten sind der **Brutto-Substitutionswert** der Wärme, kein erzielbarer Verkaufspreis (Transport, Strom, Abschreibung noch nicht abgezogen).
|
||||
|
||||
## Mögliche Erweiterungen
|
||||
|
||||
- Anbieterseite: Transportkosten, WP-Stromkosten und Speicher-Abschreibung → echte Marge bzw. Mindestverkaufspreis je kWh.
|
||||
- Monatlich aufgelöste PV-Deckung als Diagramm.
|
||||
+20
-5
@@ -61,10 +61,25 @@
|
||||
"_kommentar": "Warmwasser je Person/Tag. heizbedarf_winter = max. taeglicher Raumheizbedarf eines Haushalts im tiefsten Winter, stark gebaeudeabhaengig (Neubau/saniert ~40, Altbau ~100). Auf 0 setzen, wenn nur Warmwasser betrachtet werden soll."
|
||||
},
|
||||
|
||||
"brennstoffe": {
|
||||
"gas": {"preis_ct_pro_kWh": 11.0, "wirkungsgrad": 0.95},
|
||||
"oel": {"preis_ct_pro_kWh": 11.5, "wirkungsgrad": 0.90},
|
||||
"pellets": {"preis_ct_pro_kWh": 7.0, "wirkungsgrad": 0.88},
|
||||
"_kommentar": "Vergleichswert: was der Kaeufer fuer dieselbe Nutzwaerme aus fossilen/Holz-Brennstoffen zahlen wuerde. preis_ct_pro_kWh = Brennstoffpreis je kWh Brennstoffenergie (Stand Juni 2026, Deutschland: Gas ~11, Oel ~11.5 (=115 ct/L bei 10 kWh/L), Pellets ~7 (=350 EUR/t bei 5 kWh/kg)). wirkungsgrad = Kesselwirkungsgrad. Nutzwaermekosten = preis/wirkungsgrad."
|
||||
"brennstoffe": [
|
||||
{
|
||||
"name": "Gas",
|
||||
"preis_ct_kWh": 11.0,
|
||||
"wirkungsgrad": 0.95,
|
||||
"_kommentar": "Erdgas Juni 2026, Brennwertkessel."
|
||||
},
|
||||
{
|
||||
"name": "Heizoel",
|
||||
"preis_ct_kWh": 11.5,
|
||||
"wirkungsgrad": 0.90,
|
||||
"_kommentar": "Heizoel EL Juni 2026 (~115 ct/L bei 10 kWh/L), Brennwertkessel."
|
||||
},
|
||||
{
|
||||
"name": "Pellets",
|
||||
"preis_ct_kWh": 7.0,
|
||||
"wirkungsgrad": 0.88,
|
||||
"_kommentar": "Holzpellets Juni 2026 (~350 EUR/t bei 5 kWh/kg), moderner Pelletskessel."
|
||||
}
|
||||
],
|
||||
"_kommentar_brennstoffe": "Vergleichswert: Nutzwaermekosten = preis_ct_kWh / wirkungsgrad. Reihenfolge bestimmt die Anzeigereihenfolge im Report."
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
# 1 – Energiemengen & Thermodynamik
|
||||
|
||||
Grundlagen-Zusammenfassung zur Wärmerückgewinnung aus der Milchkühlung. Referenzfall durchgängig: **1000 L Milch/Tag**.
|
||||
|
||||
---
|
||||
|
||||
## 1.1 Wärmeinhalt der Milchkühlung
|
||||
|
||||
Milch fällt mit Eutertemperatur an und muss zur Haltbarmachung gekühlt werden. Die dabei entzogene Wärme ist die nutzbare Abwärme.
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| Temperaturhub | 37 °C → 4 °C (ΔT = 33 K) |
|
||||
| Stoffannahme | Milch ≈ Wasser (ρ = 1 kg/L, c = 4,186 kJ/kg·K) |
|
||||
| Formel | Q = m · c · ΔT |
|
||||
|
||||
**Ergebnis:** Q = 1000 · 4,186 · 33 = 138.138 kJ ≈ **38,4 kWh/Tag**
|
||||
|
||||
Skalierung: 1500 L → ~57,5 kWh/Tag. Die Abwärme fällt **täglich ganzjährig** an (~14.000 kWh/a).
|
||||
|
||||
---
|
||||
|
||||
## 1.2 Reinigungs-/Desinfektionswasser
|
||||
|
||||
Das Leitungssystem (~100 m, mehrere Pumpvorgänge für ~8 Melkplätze) muss mit heißem Wasser desinfiziert werden.
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| Menge | 200 L |
|
||||
| Temperaturhub | 50 °C → 100 °C (ΔT = 50 K) |
|
||||
| Q | 200 · 4,186 · 50 = 41.860 kJ ≈ **11,6 kWh** |
|
||||
|
||||
Weil der Tank durch die Milchabwärme bereits bei 50 °C startet, halbiert sich der Heizbedarf gegenüber Kaltwasser (10 °C → ~21 kWh). Die Milchabwärme deckt den Desinfektionsbedarf damit vollständig.
|
||||
|
||||
> Noch nicht enthalten: Rohrleitungsverluste (je nach Dämmung +10–30 %). Dafür wären Rohrdurchmesser und Dämmung nötig.
|
||||
|
||||
---
|
||||
|
||||
## 1.3 PV-Panel-Kühlung / PVT-Ertrag
|
||||
|
||||
Mit rückseitigen Wassertaschen (PVT) lässt sich die Abwärme der Module nutzen.
|
||||
|
||||
**Energiebilanz Modul (Sommerspitze, ~1000 W/m² Einstrahlung):**
|
||||
- ~18–20 % Strom (~180–200 W/m²)
|
||||
- ~800 W/m² Wärme, davon über die Frontseite ein großer Teil verloren
|
||||
- Unverglaster PVT, niedrige Vorlauftemperatur: **~400–500 W/m² thermisch nutzbar**
|
||||
|
||||
**Monatlicher Wärmeertrag, 10 m², optimale Südneigung, Raum Augsburg:**
|
||||
|
||||
| Monat | kWh | Monat | kWh |
|
||||
|---|---|---|---|
|
||||
| Jan | 75 | Jul | 825 |
|
||||
| Feb | 145 | Aug | 730 |
|
||||
| Mär | 350 | Sep | 510 |
|
||||
| Apr | 565 | Okt | 270 |
|
||||
| Mai | 745 | Nov | 90 |
|
||||
| Jun | 800 | Dez | 55 |
|
||||
|
||||
**Summe ≈ 5.160 kWh/a thermisch** (~516 kWh/m²·a, oberer realistischer Bereich bei ganzjähriger Abnahme) plus ~1.500–1.800 kWh/a Strom.
|
||||
|
||||
> Vorbehalt: Werte gelten nur bei kaltem Kühlwasser. Steigt die Vorlauftemperatur oder fehlt der Abnehmer, brechen die Sommerwerte ein.
|
||||
|
||||
---
|
||||
|
||||
## 1.4 Natriumacetat als Latentwärmespeicher (PCM)
|
||||
|
||||
### Speichermechanismus
|
||||
|
||||
Im **festen** Zustand liegt Natriumacetat-Trihydrat (CH₃COONa·3H₂O) als geordnetes Kristallgitter mit eingebautem Kristallwasser vor. Beim Erwärmen auf ~58 °C bricht das Gitter auf – das Salz „löst sich in seinem eigenen Kristallwasser". Die Energie geht in das Aufbrechen der Bindungen statt in Temperaturerhöhung → **latente Wärme**.
|
||||
|
||||
Der Schlüssel ist die **Unterkühlbarkeit**: Die Schmelze bleibt bis auf Raumtemperatur metastabil flüssig und hält die Energie nahezu verlustfrei. Erst ein Auslöser (Impfkristall, Erschütterung) startet die Kristallisation und gibt die Wärme schlagartig bei ~58 °C frei. Damit lässt sich der Speicher **isolierungsfrei lagern und transportieren**.
|
||||
|
||||
### Energiedichte
|
||||
|
||||
| Modus | Beitrag | Energiedichte |
|
||||
|---|---|---|
|
||||
| `latent_only` | Phasenwechsel 264 kJ/kg | **0,073 kWh/kg** (~0,095 kWh/L) |
|
||||
| `latent_plus_hub` | + Überhitzung der Schmelze (z. B. auf 80 °C) | **0,091 kWh/kg** (~0,12 kWh/L) |
|
||||
| + Unterkühlung Feststoff | bis ~40 °C nutzen | ~0,10 kWh/kg (~0,13 kWh/L) |
|
||||
|
||||
Stoffwerte: Dichte ~1,3 kg/L, c_flüssig ≈ 2,9 kJ/kg·K, c_fest ≈ 1,9 kJ/kg·K. Zum Vergleich Wasser (50 K Hub): nur ~0,058 kWh/L.
|
||||
|
||||
### Kritischer Punkt: Temperaturniveau
|
||||
|
||||
Natriumacetat schmilzt bei **58 °C**, die Milchabwärme fällt aber nur bei max. **37 °C** an. Eine 37-°C-Quelle kann einen 58-°C-Speicher **nicht direkt laden** → es braucht eine **Wärmepumpe** zur Temperaturanhebung (siehe Dokument 2).
|
||||
@@ -0,0 +1,95 @@
|
||||
# 2 – Systemauslegung
|
||||
|
||||
Dimensionierung der Komponenten für den Referenzfall **1000 L Milch/Tag**. Konzept: Milchabwärme → Wärmepumpe (Strom aus PV) → Natriumacetat-Latentspeicher.
|
||||
|
||||
---
|
||||
|
||||
## 2.1 Wärmepumpe
|
||||
|
||||
Die WP entzieht der Milch die Wärme (Verdampfer ~0 °C) und gibt sie bei >58 °C an den Speicher ab (Kondensator ~63 °C). Die Verdichterarbeit landet **mit** im Speicher:
|
||||
|
||||
```
|
||||
Q_Speicher = Q_Milch + W_elektrisch
|
||||
COP = Q_Speicher / W_elektrisch
|
||||
W_el = Q_Milch / (COP − 1)
|
||||
```
|
||||
|
||||
| COP | Strom/Tag | Wärme in Speicher/Tag |
|
||||
|---|---|---|
|
||||
| 2,5 | 25,6 kWh | 64,0 kWh |
|
||||
| **2,6 (Referenz)** | **24,0 kWh** | **62,4 kWh** |
|
||||
| 3,0 | 19,2 kWh | 57,6 kWh |
|
||||
|
||||
Leistungsauslegung (18 h/Tag Laufzeit): Kälteleistung ~2,1 kW, Heizleistung ~3,5 kW, el. Leistung ~1,3 kW.
|
||||
|
||||
> Wichtig: Durch die WP wird **mehr** gespeichert als die reine Milchabwärme (62,4 statt 38,4 kWh/Tag).
|
||||
|
||||
---
|
||||
|
||||
## 2.2 PV-Anlage
|
||||
|
||||
Auslegung auf **Jahresbilanz** des WP-Strombedarfs (Standort Süddeutschland, ~1.000 kWh/kWp·a, ~5 m²/kWp).
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| Jahresstrombedarf WP | ~8.760 kWh/a |
|
||||
| Leistung | **~8,8 kWp** |
|
||||
| Dachfläche | **~44 m²** |
|
||||
|
||||
Bei einer typischen Stalldachfläche von mehreren hundert m² problemlos verfügbar.
|
||||
|
||||
---
|
||||
|
||||
## 2.3 Netzbezug durch die Wintermonate
|
||||
|
||||
Die WP läuft täglich, die PV liefert saisonal. Monatsbilanz (gerundet):
|
||||
|
||||
| | kWh/a |
|
||||
|---|---|
|
||||
| Jahresbedarf WP | 8.760 |
|
||||
| Netzbezug (Okt–Feb) | ~1.940 |
|
||||
| Sommerüberschuss (Mär–Sep) | ~1.960 |
|
||||
|
||||
**Netzbezug ≈ 22 %** des Jahresbedarfs – fällt komplett in die Monate Oktober bis Februar. Der Sommerüberschuss entspricht fast genau dem Winter-Zukauf (bilanziell ausgeglichen, zeitlich verschoben).
|
||||
|
||||
> Diese 22 % gelten **mit** Batterie (Tag-/Nacht-Ausgleich). **Ohne** Batterie eher 50–60 %, da die WP rund um die Uhr läuft, die PV aber nur tagsüber.
|
||||
|
||||
---
|
||||
|
||||
## 2.4 Batteriespeicher
|
||||
|
||||
Aufgabe: nur **Tag-/Nacht-Versatz** überbrücken (kein saisonaler Ausgleich – das ist mit Batterie unmöglich).
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| WP-Last pro Tag | 24 kWh |
|
||||
| zu überbrückende Nachtlast | ~14–16 kWh |
|
||||
| empfohlen nutzbar | ~15–18 kWh |
|
||||
| Nennkapazität (LFP) | **~20 kWh** |
|
||||
| Autonomie | ~1 Tag |
|
||||
|
||||
Mehr Kapazität senkt den 22-%-Winteranteil **nicht** – der kommt aus dem saisonalen PV-Mangel, nicht aus dem Tag-/Nacht-Versatz.
|
||||
|
||||
---
|
||||
|
||||
## 2.5 Latentwärmespeicher (Natriumacetat)
|
||||
|
||||
Speichergröße = Wärme je Abholzyklus ÷ Energiedichte. Beispiel 14-Tage-Zyklus, Modus `latent_plus_hub`:
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| Energie je Zyklus | 62,4 · 14 ≈ **873 kWh** |
|
||||
| Masse | ~9.600 kg |
|
||||
| Volumen | ~7,4 m³ |
|
||||
|
||||
Skalierung linear mit Zyklusdauer und Milchmenge. Details zu LKW-Auslastung und Abholrhythmus siehe Dokument 3.
|
||||
|
||||
---
|
||||
|
||||
## 2.6 Saisonaler Grundkonflikt
|
||||
|
||||
Wärme**erzeugung** und Wärme**bedarf** laufen gegenläufig:
|
||||
- Sommer: viel PV-Strom, viel Abwärme – aber wenig Heizbedarf.
|
||||
- Winter: hoher Heizbedarf – aber wenig PV (22 % Netzbezug) und gleicher Abwärmeanfall.
|
||||
|
||||
Das ist die zentrale Schwäche des Konzepts und der Grund, warum im Winter nur wenige Haushalte beheizt werden können (Dokument 3).
|
||||
@@ -0,0 +1,88 @@
|
||||
# 3 – Logistik, Haushalte & Wirtschaftlichkeit
|
||||
|
||||
Verwertung der gespeicherten Wärme: Transport, Reichweite bei Haushalten, Marktwert. Referenzfall **1000 L Milch/Tag**.
|
||||
|
||||
---
|
||||
|
||||
## 3.1 Transport im LKW
|
||||
|
||||
Grenze: Standard-Sattelauflieger.
|
||||
|
||||
| Größe | Wert |
|
||||
|---|---|
|
||||
| Nutzlast | ~24 t |
|
||||
| Laderaum | ~90 m³ |
|
||||
|
||||
Natriumacetat (~1,3 kg/L): 24 t ≈ **18,5 m³** → passt locker ins Volumen. **Das Gewicht bindet**, nicht das Volumen (nur ~20 % Laderaum genutzt).
|
||||
|
||||
**Energieinhalt eines vollen LKW:**
|
||||
- `latent_plus_hub`: 24 t · 0,091 ≈ **~2.185 kWh**
|
||||
- `latent_only`: 24 t · 0,073 ≈ **~1.760 kWh**
|
||||
|
||||
**Abholrhythmus:** Aus 62,4 kWh/Tag füllt sich ein voller LKW (Hub-Modus) nach **~35 Tagen**. Optionen:
|
||||
|
||||
| Zyklus | Masse | Volumen | LKW-Auslastung |
|
||||
|---|---|---|---|
|
||||
| 7 Tage | 4,8 t | 3,7 m³ | 20 % |
|
||||
| 14 Tage | 9,6 t | 7,4 m³ | 40 % |
|
||||
| 21 Tage | 14,4 t | 11,1 m³ | 60 % |
|
||||
| 28 Tage | 19,2 t | 14,7 m³ | 80 % |
|
||||
| 35 Tage | 24,0 t | 18,4 m³ | 100 % |
|
||||
|
||||
Empfehlung: an die volle Ladung koppeln (~monatlich) statt halbleere Fahrten, oder kleineren Wechselbehälter für 2-Wochen-Takt.
|
||||
|
||||
---
|
||||
|
||||
## 3.2 Versorgbare Haushalte (Familie 2 Erw. + 2 Kinder)
|
||||
|
||||
**Warmwasserbedarf:** Erwachsener ~1,8 kWh/Tag, Kind ~1,0 kWh/Tag → Haushalt **~5,6 kWh/Tag** (~2.040 kWh/a).
|
||||
|
||||
**Winter-Heizbedarf:** ~60 kWh/Tag/Haushalt (gebäudeabhängig: saniert ~40, Altbau ~100).
|
||||
|
||||
| Anwendung | Bedarf/HH/Tag | Versorgbare Haushalte |
|
||||
|---|---|---|
|
||||
| Warmwasser (ganzjährig) | 5,6 kWh | **~11 Haushalte** |
|
||||
| Winter (Heizung + WW) | ~65,6 kWh | **~1 Haushalt** |
|
||||
|
||||
Kernaussage: Aus 1000 L Milch lassen sich **~11 Familien mit Warmwasser** versorgen – aber sobald die Raumheizung dazukommt, verschlingt schon **ein einziges Haus** fast die komplette Tagesproduktion. Eine LKW-Ladung deckt den Warmwasserbedarf einer Familie für gut ein Jahr.
|
||||
|
||||
Die Speicherwärme wird bei 58 °C abgegeben – passend für Warmwasser (45–60 °C) und Flächenheizung.
|
||||
|
||||
> Die Haushaltszahl hängt an der **Produktionsrate**, nicht am LKW-Modus.
|
||||
|
||||
---
|
||||
|
||||
## 3.3 Wert der Wärme beim Käufer (Ersatzkosten)
|
||||
|
||||
Was der Käufer für dieselbe Nutzwärme aus Brennstoffen zahlen würde (Preise Stand Juni 2026, Deutschland; Nutzwärmekosten = Brennstoffpreis ÷ Kesselwirkungsgrad).
|
||||
|
||||
| Brennstoff | Nutzwärme | EUR/LKW (~2.185 kWh) | EUR/Jahr (~22.800 kWh) |
|
||||
|---|---|---|---|
|
||||
| Gas (11 ct/kWh @ 95 %) | 11,6 ct/kWh | ~253 € | ~2.635 € |
|
||||
| Heizöl (11,5 @ 90 %) | 12,8 ct/kWh | ~279 € | ~2.908 € |
|
||||
| Pellets (7,0 @ 88 %) | 8,0 ct/kWh | ~174 € | ~1.810 € |
|
||||
|
||||
> Das ist der **Brutto-Substitutionswert**, nicht der erzielbare Verkaufspreis. Davon gehen Transport, WP-/PV-Strom (22 % Netzbezug) und Speicherinvestition ab. Pellets (~8 ct/kWh) sind der härteste Konkurrenzmaßstab.
|
||||
|
||||
---
|
||||
|
||||
## 3.4 Python-Werkzeug
|
||||
|
||||
Zur Nachrechnung beliebiger Varianten: `auslegung.py` + `config.json`.
|
||||
|
||||
```
|
||||
python auslegung.py 1000 # Detailreport
|
||||
python auslegung.py 1000 --suggest-size # gerundete Empfehlung + Abholzyklus
|
||||
python auslegung.py 1500 --config variante.json --json ergebnis.json
|
||||
```
|
||||
|
||||
**Berechnet:** Milchkühllast, Wärmepumpe (Kälte-/Heiz-/Stromleistung), PV (kWp + Fläche), Netzbezug, Batterie, Latentspeicher inkl. LKW-Abgleich und Energieinhalt, versorgte Haushalte (WW + Winter), Brennstoffkosten-Vergleich.
|
||||
|
||||
**Alle Annahmen** stehen in `config.json` (Milch, WP-COP, PCM-Modus/Stoffwerte, Abholzyklus, LKW-Grenzen, PV-Profil, Batterie, Haushalt, Brennstoffpreise). Variante = Datei kopieren, Werte ändern.
|
||||
|
||||
**Bewusste Modell-Vereinfachungen:**
|
||||
- Zurückkehrender Behälter wird als „warm" (nahe Schmelzpunkt) angenommen, sonst müsste die WP ihn zusätzlich aufheizen.
|
||||
- Netzbezug ist Monatsbilanz, setzt Tag-/Nacht-Ausgleich per Batterie voraus.
|
||||
- `--suggest-size` optimiert auf Transportauslastung, nicht auf Speicher-Verweildauer.
|
||||
|
||||
**Mögliche nächste Schritte:** Anbieterseite (Transportkosten, WP-Stromkosten, Speicher-Abschreibung) → echte Marge / Mindestverkaufspreis je kWh.
|
||||
+57
-1
@@ -215,6 +215,32 @@ def haushalte(q_speicher_tag: float, cfg: dict) -> dict:
|
||||
}
|
||||
|
||||
|
||||
def brennstoffkosten(e: dict, cfg: dict) -> dict:
|
||||
"""Vergleichswert der Waerme gegenueber fossilen Brennstoffen / Pellets.
|
||||
|
||||
Nutzwaermekosten = Brennstoffpreis / Kesselwirkungsgrad.
|
||||
Bewertet werden der Energieinhalt eines vollen LKW und die Jahresmenge.
|
||||
"""
|
||||
energie_lkw = e["speicher"]["voller_lkw_energie_kWh"]
|
||||
energie_jahr = e["waermepumpe"]["speicher_kWh_tag"] * TAGE_PRO_JAHR
|
||||
vergleich = []
|
||||
for b in cfg.get("brennstoffe", []):
|
||||
nw_ct = b["preis_ct_kWh"] / b["wirkungsgrad"]
|
||||
vergleich.append({
|
||||
"name": b["name"],
|
||||
"preis_ct_kWh": b["preis_ct_kWh"],
|
||||
"wirkungsgrad": b["wirkungsgrad"],
|
||||
"nutzwaerme_ct_kWh": nw_ct,
|
||||
"eur_pro_lkw": energie_lkw * nw_ct / 100.0,
|
||||
"eur_pro_jahr": energie_jahr * nw_ct / 100.0,
|
||||
})
|
||||
return {
|
||||
"energie_lkw_kWh": energie_lkw,
|
||||
"energie_jahr_kWh": energie_jahr,
|
||||
"vergleich": vergleich,
|
||||
}
|
||||
|
||||
|
||||
def rechne(milch_l_tag: float, cfg: dict) -> dict:
|
||||
q_milch = milch_kuehllast(milch_l_tag, cfg)
|
||||
wp = waermepumpe(q_milch, cfg)
|
||||
@@ -223,7 +249,7 @@ def rechne(milch_l_tag: float, cfg: dict) -> dict:
|
||||
netz = netzbezug(wp["strom_kWh_tag"], pv["kWp"], cfg)
|
||||
bat = batterie(wp["strom_kWh_tag"], cfg)
|
||||
hh = haushalte(wp["speicher_kWh_tag"], cfg)
|
||||
return {
|
||||
e = {
|
||||
"eingang": {"milch_l_tag": milch_l_tag},
|
||||
"milch_kuehllast_kWh_tag": q_milch,
|
||||
"waermepumpe": wp,
|
||||
@@ -233,6 +259,9 @@ def rechne(milch_l_tag: float, cfg: dict) -> dict:
|
||||
"batterie": bat,
|
||||
"haushalte": hh,
|
||||
}
|
||||
if "brennstoffe" in cfg:
|
||||
e["brennstoffkosten"] = brennstoffkosten(e, cfg)
|
||||
return e
|
||||
|
||||
|
||||
def runde_auf(wert: float, schritt: float) -> float:
|
||||
@@ -376,6 +405,17 @@ def report(e: dict, cfg: dict) -> str:
|
||||
L.append(f" passt in einen LKW .......... {passt:>8}")
|
||||
L.append(f" voller LKW voll nach ........ {sp['voller_lkw_tausch_tage']:8.1f} Tagen")
|
||||
L.append(f" Energieinhalt voller LKW .... {sp['voller_lkw_energie_kWh']:8.0f} kWh")
|
||||
bk = e.get("brennstoffkosten")
|
||||
if bk and bk["vergleich"]:
|
||||
L.append("")
|
||||
L.append("WERT DER WAERME BEIM KAEUFER (Ersatzkosten fossil/Holz)")
|
||||
L.append(f" {'Brennstoff':<10} | {'ct/kWh':>7} | {'EUR/LKW':>9} | {'EUR/Jahr':>9}")
|
||||
L.append(f" {'-'*10}-+-{'-'*7}-+-{'-'*9}-+-{'-'*9}")
|
||||
for v in bk["vergleich"]:
|
||||
L.append(f" {v['name']:<10} | {v['nutzwaerme_ct_kWh']:>7.1f} | "
|
||||
f"{v['eur_pro_lkw']:>9.0f} | {v['eur_pro_jahr']:>9.0f}")
|
||||
L.append(f" Bewertet: voller LKW ~{bk['energie_lkw_kWh']:.0f} kWh, "
|
||||
f"Jahreserzeugung ~{bk['energie_jahr_kWh']:.0f} kWh")
|
||||
L.append("=" * 62)
|
||||
return "\n".join(L)
|
||||
|
||||
@@ -475,6 +515,22 @@ def report_md(e: dict, cfg: dict, quelldateien: list[str] | None = None) -> str:
|
||||
L.append(f"| voller LKW nach | {sp['voller_lkw_tausch_tage']:.1f} Tagen |")
|
||||
L.append(f"| Energieinhalt voller LKW | {sp['voller_lkw_energie_kWh']:.0f} kWh |")
|
||||
|
||||
bk = e.get("brennstoffkosten")
|
||||
if bk and bk["vergleich"]:
|
||||
L.append("")
|
||||
L.append("## Wert der Waerme beim Kaeufer (Ersatzkosten fossil/Holz)")
|
||||
L.append("")
|
||||
L.append(f"Bewertet: voller LKW ~{bk['energie_lkw_kWh']:.0f} kWh, "
|
||||
f"Jahreserzeugung ~{bk['energie_jahr_kWh']:.0f} kWh")
|
||||
L.append("")
|
||||
L.append("| Brennstoff | ct/kWh (Nutzw.) | EUR/LKW | EUR/Jahr |")
|
||||
L.append("|------------|-----------------|---------|----------|")
|
||||
for v in bk["vergleich"]:
|
||||
L.append(f"| {v['name']} | {v['nutzwaerme_ct_kWh']:.1f} | "
|
||||
f"{v['eur_pro_lkw']:.0f} | {v['eur_pro_jahr']:.0f} |")
|
||||
L.append("")
|
||||
L.append("*ct/kWh = Brennstoffpreis ÷ Kesselwirkungsgrad*")
|
||||
|
||||
return "\n".join(L)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user