diff --git a/README.md b/README.md new file mode 100644 index 0000000..186ecae --- /dev/null +++ b/README.md @@ -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.