homelab-brain/esp32/STORY-TEIL-2-PLAN.md
root 1047bd0aca fix: config.py Parser für neues CT_VMID_SERVER Format angepasst
- CT/VM Pattern: CT_101_HZ, CT_600_KA3, VM_144_MU3
- HOST_CODE_MAP: HZ, KA1-3, MU1-3, HE
- PROXMOX_HOSTS wird aus SRV_* Einträgen befüllt
- get_container() mit optionalem host-Filter
- get_containers_by_host() Hilfsfunktion
- proxmox_client.py: PROXMOX_HOSTS leer, wird dynamisch befüllt

Made-with: Cursor
2026-03-09 09:33:01 +07:00

433 lines
16 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ESP32 Heizungs-Monitoring — STORY TEIL 2 — Planung
> Schreib-Session: 2026-03-05
---
## 📖 Artikel-Struktur (Überblick)
### **TEIL 1** (Dein Intro) ✅
Wie alles begann — von drei Temperaturanzeigen zum Heizungsmonitoring
- Hauskauf 2005 → Heizungsanlage
- Drei Temperaturanzeigen
- DS18B20 Sensoren
- IP-Symcon Automatisierung
- Raspberry Pi + InfluxDB + Grafana
- ESP8266 Sensorknoten
- Proxmox + ioBroker heute
- Erkenntnis: Daten verstehen = optimieren
- ESP32 = nächster Schritt
---
## 🎯 TEIL 2 (HEUTE) — Geplante Kapitel
### **Kapitel 2.1: Der ESP32 — warum jetzt?**
**Kern:** Persönlich: Warum ich die alte Lösung aufgeben will. Technisch: Was der ESP32 ermöglicht.
**Story-Anfang:**
- Seit ~10 Jahren hängt ein ESP8266 in meiner Küche
- Zeigt mir 3-4 Werte auf einem winzigen Display
- Funktioniert zuverlässig, ich bin zufrieden damit
- **Aber:** Jeden Morgen muss ich warten, bis das Display aktualisiert — manchmal ~3 Sekunden Verzögerung
- Und wenn ich die Sensoren von 3 auf 5 erhöhe → lahmer
- Das nervt nicht wirklich, aber... es nervt
**Persönlicher Wendepunkt:**
- Im Januar 2026 überlege ich: Warum nicht einfach neu?
- Die alte Lösung war damals clever (2014: "ESP8266 mit WLAN!")
- Aber heute? Raspberry Pi ist günstiger. Arduino-Klone auch
- Der ESP32 ist die Brücke: "Altes Konzept, neue Hardware"
- Und: Ein 5-Zoll Display für ~30 EUR (!) — das gab es vor 10 Jahren nicht
**Technisch: Warum ESP32 konkret besser für mein System ist:**
- **Das Problem mit ESP8266:**
- 160 MHz (Einkern) → wenn ich 6+ Sensoren gleichzeitig abfrage, wird es eng
- 160 KB RAM → nicht viel für Pufferdaten
- WiFi nur 802.11b/g → langsam bei Netzwerk-Last
- Kleines Display möglich (max ~2,4 Zoll ohne zu hängen)
- **ESP32: Was sich ändert (für mich, nicht theoretisch):**
- 240 MHz dual-core → 2 CPUs nebeneinander
- Eine CPU: Sensoren auslesen + Berechnung
- Andere CPU: WiFi & Display aktualisieren
- = Keine Verzögerung mehr
- 520 KB RAM → kann jetzt 24h Temperaturverlauf speichern
- WiFi 802.11n → schneller, stabiler, auch mit mehreren Geräten
- **Was das konkret ermöglicht:**
- Echtzeit-Anzeige (keine 3-Sekunden-Verzögerung mehr)
- Historien-Daten (Grafiken, wie hat sich Puffer in letzten 24h verändert)
- 5-Zoll-Display statt 2,4-Zoll (überhaupt lesbar ohne Brille!)
- Farben + Symbole (nicht nur Zahlen)
- Prognose-Daten + aktuelle Daten kombinieren
- **Die Hardware (praktisch):**
- ESP32-8048S050 Board: alles integriert (Display + WiFi + Touch + GPIO)
- Preis: 28-35 EUR auf AliExpress (vs. früher: einzelnes Display 80+ EUR + ESP Board + Kabel = 150+ EUR)
- Direkt ab Werk: Arduino-kompatibel, kann sofort programmieren
- **Persönliche Erwartung:**
- Schnelleres Display = mehr Nutzen
- Größer = sehe es auch aus der Ferne
- Einfach weil es da ist und günstig
- Und weil ich lernen will: "Was kann moderner Hardware noch?"
**Länge:** 600-900 Worte
---
### **Kapitel 2.2: Die Hardware — was ich verwende**
**Kern:** Was habe ich gekauft? Wie passt es zusammen? Wieso gerade diese Teile?
**Story-Start:**
- Im Februar bestelle ich das Board auf AliExpress
- Ich bin nervös — wird es ankommen? Ist es funktionsfähig?
- Erfahrung: 80% der billigen Elektronik funktioniert, 20% ist Schrott
- Diesmal: Glückstreffer. Board kam an, alles lädt direkt
**Die Hardware im Detail:**
**1. Das ESP32-8048S050 Board (der Hauptdarsteller):**
- Was ist das? Ein "All-in-One" Mikrocontroller-Display-Combo
- Technisch:
- Xtensa 32-Bit CPU (240 MHz, dual-core)
- 520 KB RAM (vs. 160 KB beim ESP8266 — großer Unterschied!)
- 4 MB Flash (zum Speichern von Code + Daten)
- WiFi 802.11b/g/n 2,4 GHz
- Bluetooth (optional, ich nutze es nicht)
- Das integrierte Display:
- 5 Zoll (127 mm) diagonal
- Auflösung: 800×480 Pixel (IPS, gute Farben)
- Touchscreen (ich nutze ihn selten — Tasten reichen mir)
- SD-Kartenslot (für Daten-Logging, falls nötig)
- Anschlüsse (wichtig für mich):
- USB-C für Programmierung + Stromversorgung
- GPIO-Pins (für zusätzliche Sensoren, Relais, etc.)
- 3,3V & 5V Power Rail
- Preis: 28-35 EUR auf AliExpress (bestellt, gewartet, bezahlt)
**2. Die DS18B20 Sensoren (die Datensammler):**
- Was ist das? Digitale Temperatur-Sensoren
- Technisch:
- ±0,5°C Genauigkeit (das ist gut genug für Heizung)
- 1-Wire Bus (!) — jeder Sensor braucht nur 1 Kabel + Masse
- Bedeutet: Alle Sensoren an einem GPIO-Pin angeschlossen
- Maximal 127 Sensoren am gleichen Pin (theoretisch)
- Messbereich: -55°C bis +125°C (für Heizung egal, aber nice)
- Kauft man mit:
- Längere Varianten: einfaches Drahtsensor-Design
- Wasserdichte Varianten: IN Edelstahl-Gehäuse (JDS18B20)
- Ich nutze die wasserdichten, weil Heizungsanlage = nass
- Meine Sensoren (wo hängen sie?):**
- **Puffer oben** (warmste Stelle): GPS-Koordinate in Tank
- **Puffer mitte** (sagt mir, ob Puffer stratifiziert ist): Mit M24 Gewinde zum Schrauben
- **Puffer unten** (Vorlauf zurück): Am Boden des Tanks
- **Solar-Kollektor Vorlauf** (warmes Wasser von Dach): 1 Meter Kabel durch Decke
- **Solar-Kollektor Rücklauf** (kaltes Wasser zurück): Direkt daneben
- **Außentemperatur** (an der Nordseite des Hauses): Schattiert
- **Reserve** (2x): Falls ich später was hinzufügen will
- **Verkabelung (praktisch):**
- Alle 8 Sensoren → 1-Wire Bus am GPIO Pin (z.B. GPIO4 on ESP32)
- Masse (GND): zu ESP32
- Stromversorgung: 3,3V (intern am Sensor = parasitäre Stromversorgung)
- Pullup-Widerstand: 4,7 kΩ zwischen Daten + 3,3V (wichtig!)
- Resultat: Ein 3-adriges Kabel durchs ganze Haus
- Rot: 3,3V
- Schwarz: GND
- Gelb: Daten (1-Wire Bus)
**3. Das Netzteil (die Energiequelle):**
- USB-C 5V / 2A Netzteil aus dem Elektronik-Geschäft
- Stromverbrauch ESP32 + Display: ~2-3W dauerhaft
- Display ist der Strombombe (nicht der CPU)
- Läuft 24/7 an der Steckdose in der Küche
**4. Entwicklungs-Werkzeuge (Software):**
- Arduino IDE (kostenlos, jeder kennt es)
- PlatformIO (auch kostenlos, besser für größere Projekte)
- Ich wähle PlatformIO: übersichtlicher, bessere Dependency-Verwaltung
**Wie alles zusammen funktioniert (Datenfluss):**
1. ESP32 startet, verbindet sich per WiFi zu ioBroker (Proxmox CT 999)
2. Fragt per REST-API oder MQTT ab: "Gib mir die aktuellen Daten"
3. ioBroker antwortet (innerhalb 100ms): JSON mit allen Sensoren
```json
{
"puffer_oben": 52.3,
"puffer_mitte": 45.1,
"puffer_unten": 32.0,
"aussenemp": -3.2,
"hv_abgas": 45.0,
"sonne_heute_h": 5
}
```
4. ESP32 verarbeitet die Logik:
- "Sonne > 3h → Öl sperren"
- "Außen > -5°C → WP erlaubt"
- etc.
5. ESP32 zeichnet auf dem 5-Zoll Display:
- Farbige Balken, Icons, Text, Prognose
6. Display aktualisiert sich alle ~2 Sekunden
7. Benutzer (ich) schaut drauf und sieht sofort: "Ok, Solar lädt gerade"
**Persönliches Fazit zu dieser Hardware:**
- Für ~40 EUR Gesamtkosten eine sehr solide Lösung
- Nicht "professionell" im Sinne von Industrie
- Aber: Robust genug für Heimautomation, einfach genug zum Verstehen
- Und: Falls das Board kaputt geht, kostet der Austausch 30 EUR, nicht 300 EUR
**Länge:** 900-1200 Worte
---
### **Kapitel 2.3: Die Logik — die 5 Regeln der Heizung**
**Kern:** Persönlich: Wie bin ich auf diese 5 Regeln gekommen? Technisch: Was sie bedeuten.
**Story-Start:**
- Im Jahr 2020, als ich ioBroker einführe, habe ich angefangen zu experimentieren
- Anfangs: Komplexe Logik mit vielen Bedingungen, Prognosen, Optimierungen
- Ergebnis: Das System machte seltsame Sachen. Manchmal startete Öl unerwartet. Manchmal HV + Öl gleichzeitig.
- Problem: Zu viele Regeln, zu viele Sonderfälle
- Lernmoment: "Je simpler die Logik, desto zuverlässiger das System"
**Wie ich zu den 5 Regeln kam:**
- Ich saß hin und fragte mich: "Wenn ich kein automatisches System hätte — wie würde ICH entscheiden?"
- Antwort war einfach: "Nach 5 Kriterien"
- Resultat: Die 5 Regeln entstanden nicht aus Theorie, sondern aus praktischer Erfahrung
**Die 5 Regeln (mit persönlichem Kontext):**
```
REGEL 1: HV läuft? → Alles andere AUS
REGEL 2: Sonne erwartet? → Morgens Öl SPERREN
REGEL 3: Außen > -5°C? → WP erlaubt
REGEL 4: Außen < -5°C? → Öl statt WP
REGEL 5: Puffer < 35°C? → NOTSTART (egal was)
```
**REGEL 1: HV läuft? → Alles andere AUS**
- Was ist HV? Holzvergaser (Holzheizung)
- Warum die Priorität?
- HV ist der Liebling: Billigster Brennstoff (sammle Holz selbst)
- Gibt die meiste Leistung: ~40 kW wenn richtig aufgeheizt
- Läuft lange: ~6-8 Stunden pro Laden
- Praktisch: Wenn HV läuft, ist der Puffer in 1-2 Stunden voll → Öl + WP brauchen nicht laufen
- Technisch: `if (hv_abgas > 120°C) then { wp.off, oel.off }`
- Persönlich: "Lass den HV in Ruhe, er macht seinen Job"
**REGEL 2: Sonne erwartet? → Morgens Öl SPERREN**
- Kontext: Solar-Thermie-Anlage auf dem Dach
- Kann im Sommer bis 70% der Heizlast abdecken
- Im Winter: 15-25% (wenn nicht bewölkt)
- Die Idee: Wenn Wetterdienst sagt "Morgen 5 Stunden Sonne"
- Dann: Öl nicht starten (auch wenn Puffer 40°C ist)
- Grund: In 2-3 Stunden kommt die Sonne → kostenlos laden
- Ersparniss: ~2€ pro Tag wenn man das richtig macht
- Praktisch: Um 06:00 Uhr morgens liest ioBroker die OpenWeatherMap-API
- Wenn sunshine_hours_today > 3 → `oel.gesperrt = true`
- Wenn sunshine_hours_today < 1 → `oel.gesperrt = false`
- Persönlich: "Der beste Brennstoff ist kostenlos"
**REGEL 3+4: Außentemperatur & Wärmepumpe**
- Warum -5°C als Grenze?
- Moderne WP (Luft-Wasser): Haben einen COP (Coefficient of Performance)
- COP = Wärmeleistung / Stromverbrauch
- Bei +10°C: COP ~4 (für 1 kWh Strom → 4 kWh Wärme)
- Bei 0°C: COP ~2,5 (sinkt)
- Bei -5°C: COP ~1,8 (wird unwirtschaftlich)
- Bei -10°C: COP ~1,5 (teurer als Öl)
- Praktisch:
- REGEL 3: `if (aussen_temp > -5) then wp.erlaubt = true` (kann laufen)
- REGEL 4: `if (aussen_temp < -5) then wp.erlaubt = false` (sperren, lieber Öl)
- Persönlich: "Bei extremer Kälte ist die WP teuer — dann lieber Öl"
- Zusatz: WP regelt sich selbst (Modulation, Taktschutz) → System braucht nur "ja/nein" geben
**REGEL 5: Puffer < 35°C? → NOTSTART**
- Hintergrund: Pufferspeicher ist ein großer Behälter (1.500 Liter)
- Oben: heiß (65-70°C wenn voll)
- Unten: kalt (30-40°C für Frostschutz)
- Wenn unten unter 35°C: Gefahr von Frostschäden (in kalten Gegenden)
- Praktisch: egal ob HV läuft, ob Sonne kommt
- `if (puffer_unten < 35) then { oel.erlaubt = true, wp.erlaubt = true }`
- Sicherheit vor Optimierung!
- Persönlich: "Eine kaputte Heizung ist teurer als die Energieeinsparung"
**Was das System BEWUSST NICHT TUT (und warum das richtig ist):**
```
❌ COP-Berechnung in Echtzeit
→ Warum nicht? Zu komplex, zu viele Unsicherheiten
→ Stattdessen: Feste Grenzen (-5°C) sind zuverlässiger
❌ Speicher-SOC Auswertung
→ Zu kompliziert, braucht man nicht für diese Anlage
❌ Stundenlohn für HV-Betrieb
→ "Holz kostet: Schneiden + Spalten + Lagern = ?€ pro kWh"
→ Ist sehr subjektiv, nicht wert die Logik kompliziert zu machen
❌ Vorhersage-Planung
→ "Wenn morgen sehr kalt wird, jetzt schon volladen"
→ Zu spekulativ. Puffer war ja gerade voll.
❌ PV-Überschuss-Erkennung
→ Haben wir keine PV, also egal
```
- Grund für diese Einfachheit:
- Heizsysteme müssen zuverlässig sein
- Einfache Logik = weniger Bugs
- Weniger Bugs = 20 Jahre Betrieb ohne Probleme
- Komplexe Logik spart vielleicht 50€/Jahr, kostet aber Kopfzerbrechen
**Prioritäten-Reihenfolge (wer gehört wann auf?):**
```
1. ☀️ Solar-Thermie (gratis, kostet nur Installation)
2. 🪵 Holzvergaser (billigst, ~10€/Stunde inklusive Arbeit)
3. 🌡️ Wärmepumpe (mittel, ~20€/Stunde je nach COP)
4. 🛢️ Ölkessel (teuerst, ~40€/Stunde)
```
- Persönlich: "Ich zahle am liebsten mit Muskelkraft (HV) oder nichts (Solar)"
**Technische Umsetzung (ioBroker Javascript):**
- Um 06:00 Uhr läuft ein Script
- Liest 5 Werte: HV-Abgas, Außentemp, Puffer-unten, Sonne-Prognose, aktuelle Uhrzeit
- Berechnet die 5 Regeln hintereinander
- Setzt dann: `heizung.wp.erlaubt`, `heizung.oel.erlaubt`, `heizung.status`
- Die einzelnen Kessel folgen diesen Flags (hardwareseitig: Relais, Ventile)
**Länge:** 1000-1300 Worte
---
### **Kapitel 2.4: Das Display — Was der Benutzer sieht**
**Kern:** 4 Szenarien, wie das Dashboard aussieht.
**Punkte:**
- **Szenario 1: Morgens, Sonne erwartet**
- Top: "☀ PROGNOSE HEUTE 5 Stunden Sonne erwartet"
- Puffer: 52°C, 67% voll (grün)
- Status:
- Solar: wartet auf Sonne
- 🪵 Holz: aus
- 🌡 WP: läuft
- 🛢 Öl: 🚫 gesperrt (Solar erwartet)
- Fußzeile: "💰 Heute gespart: ~4.20€"
- **Szenario 2: Solar aktiv**
- Top: "☀ SOLAR AKTIV Kollektor 68°C"
- Leistung: ~4.2 kW
- Heute: 8.4 kWh = 1.18€ gespart
- Puffer: 62°C, 82% (dunkelgrün/rot-ish)
- Status: Alles aus, nur Solar lädt
- **Szenario 3: Bewölkt, kalt**
- Top: "☁ PROGNOSE HEUTE keine Sonne"
- Puffer: 42°C (orange/gelb)
- Status:
- 🛢 Öl: LÄUFT
- 🌡 WP: 🚫 aus (zu kalt: -8°C)
- Kosten: "Heute: Öl 2.1L = 2.52€"
- **Szenario 4: Holzvergaser aktiv**
- Top: "🪵🔥 HOLZVERGASER AKTIV"
- Abgas: 178°C
- Läuft seit: 2:15h
- Geliefert: ~35 kWh
- Puffer: 68°C, 92% (rot = warnung, ok aber fast voll)
- Alles andere: 🚫 gesperrt
- **Navigation:**
- Swipe links/rechts für mehr Infos
- Graph: Temperaturverlauf (letzte 24h)
- Finanz-Seite: Monatliche Ersparnis
**Länge:** 500-700 Worte
---
### **Kapitel 2.5: Von der Idee zur Realität — Der Entwicklungsprozess**
**Kern:** Wie ist das entstanden? Welche Fehler gab es?
**Punkte:**
- **Die erste Skizze (was brauchst du wirklich?):**
- Notizblock, Kugelschreiber
- "Was will ich jeden Tag sehen?"
- Antwort: Puffer-Temperatur, Status aller 4 Heizer, Prognose, Kosten
- **Die erste Version:**
- Einfach nur Text auf dem Display
- Zahlen, keine Farben
- Probleme:
- Schwer zu erfassen auf einen Blick
- Zu viel Text
- Nicht intuitiv
- **Iteration 2: Farben & Icons**
- Rot/Gelb/Grün (universale Sprache)
- Emoji für Systeme (☀ Solar, 🪵 Holz, etc.)
- Progress-Bar für Puffer
- Deutlich besser lesbar
- **Iteration 3: Prognose einbauen**
- Vorher: nur aktuelle Zustände
- Nachher: "Öl gesperrt wegen Sonne morgen" (Aktion, nicht nur Zustand)
- Macht große Unterschied bei Verständnis
- **Die Fehler unterwegs:**
- Zu viele Seiten Benutzer verliert sich
- Zu viele Zahlen Verwirrend, nicht aussagekräftig
- Wetter-API ausfallen System hängt
- Lösung: Fallback auf "konservativ" (Öl freigeben)
- **Was gelernt:**
- UI braucht Zeit
- Testen mit echten Daten (nicht Mock-Daten)
- Jeden Tag anschauen = schnelle Iteration
**Länge:** 400-600 Worte
---
## 📊 Geschätzte Gesamt-Länge TEIL 2
- 2.1: 700 Worte
- 2.2: 500 Worte
- 2.3: 700 Worte
- 2.4: 600 Worte
- 2.5: 500 Worte
- **Summe: ~3.000 Worte**
---
## 🎬 Schreib-Strategie für heute
1. **Kapitel 2.1 & 2.2** Hardware & Geschichte (45 Min)
2. **Kapitel 2.3** Die 5 Regeln (30 Min)
3. **Kapitel 2.4** Dashboard-Szenarien (45 Min)
4. **Kapitel 2.5** Lessons Learned (30 Min)
5. **Review & Finalize** (30 Min)
**Total: ~3 Stunden**
---
## ✅ Nächste Schritte
- [ ] Mit 2.1 starten (Hardware-Geschichte)
- [ ] Screenshots von Dashboard-Layouts vorbereiten?
- [ ] Code-Snippets sammeln?
- [ ] Finale Versione in WordPress einspielen?