====== Optimierungsanalyse Wetterstation (ESP32-S3) ======
Diese Seite fasst die Analyse der ESPHome-Konfiguration zusammen. Die Maßnahmen sind unterteilt in kritische Korrekturen, Code-Optimierungen und Erweiterungen (Software & Hardware).
===== 1. Kritische Korrekturen & Bereinigungen =====
Die folgenden Punkte sollten priorisiert umgesetzt werden, um Fehler in den Daten zu vermeiden.
* **Batterie-Status (SoC) korrigieren:**
* **Problem:** Der aktuelle Sensor ``${SmartSolar} Batterie Prozent`` nutzt eine Spannungstabelle. Bei LiFePO4-Akkus (JBD BMS) ist die Spannungskurve zu flach für präzise Werte.
* **Lösung:** Den Template-Sensor entfernen. Stattdessen den SoC direkt aus dem BMS auslesen (``bms0_capacity_remaining`` / ``nominal``).
* **Regenmesser Logik:**
* **Beobachtung:** ``pulse_counter`` ist für Wippen-Regenmesser oft ungenau (Prellen, sehr niedrige Frequenz).
* **Empfehlung:** Prüfen, ob bei Nieselregen Pulse verloren gehen. Falls ja, Umbau auf ``binary_sensor`` mit Filter ``delayed_on`` und einem ``counter``.
* **Taupunkt (Dew Point) reaktivieren:**
* **Status:** Der Code ist aktuell auskommentiert.
* **Maßnahme:** Einkommentieren! Der Taupunkt ist essenziell für Nebelvorhersage, Wolkenuntergrenze und Schwüle-Empfinden.
* **Datenflut JBD BMS:**
* **Problem:** Das BMS sendet Dutzende Sensoren (Einzelzell-Spannungen, Bitmasks), die die Home Assistant Datenbank unnötig füllen.
* **Lösung:** Bei reinen Debug-Werten ``internal: true`` setzen oder ``entity_category: diagnostic`` verwenden.
===== 2. Code & Konfigurations-Optimierung =====
Maßnahmen für Stabilität und Energieeffizienz.
* **WiFi Power Save:**
* Aktuell: ``power_save_mode: none``.
* **Empfehlung:** Im Winter (bei geringem Solarertrag) auf ``light`` ändern, um ca. 50-100mA zu sparen.
* **Filter-Nutzung:**
* Die Nutzung von ``delta`` und ``heartbeat`` ist bereits exzellent umgesetzt. Dies bei neuen Sensoren beibehalten.
* **INA3221 Integration:**
* Der Shunt auf Kanal 3 misst den Verbrauch. Diesem Sensor muss eine feste ID gegeben werden (z.B. ``id: verbraucher_power``), um damit die Energiebilanz zu rechnen.
===== 3. Neue Berechnungen (Software-Sensoren) =====
Diese Werte können **ohne neue Hardware** rein rechnerisch ermittelt werden.
==== Meteorologie ====
* **Absolute Luftfeuchtigkeit (g/m³):** Zeigt die tatsächliche Wassermenge in der Luft (wichtig für Lüftungsempfehlungen).
* **Wolkenuntergrenze (Cloud Base):** Berechnet die theoretische Höhe von Cumulus-Wolken (``(Temp - Taupunkt) * 125 + Höhe``).
* **Frostgrenze im Boden:** Interpolation zwischen dem -5cm und -30cm Sensor, um zu errechnen, wie tief der Frost in den Boden eingedrungen ist.
* **Luftdichte (kg/m³):** Berechnet aus Druck, Temperatur und Gaskonstante.
==== Energie & Solar ====
* **Energiebilanz Heute (Wh):** ``Solar Ertrag (Yield) - Verbrauch (Integration)``. Zeigt sofort, ob der Akku geladen oder entladen wird.
* **Sonnenschein-Status:** Ein ``binary_sensor``, der "ON" geht, wenn ``Panel Spannung > Batterie Spannung + 5V`` ist (Workaround für fehlenden Lichtsensor).
* **Autonomiezeit (Tage):** ``Restkapazität (Ah) / Durchschnittsstrom (A) / 24``. Zeigt an, wie lange die Station ohne Sonne überlebt.
* **Kabel-Diagnose:** Differenz zwischen ``Victron Batterie Spannung`` und ``BMS Gesamtspannung``. Hohe Abweichungen deuten auf Korrosion hin.
===== 4. Hardware Fehlteile (Empfehlung zur Nachrüstung) =====
Um aus der Station eine "vollständige" Wetterstation zu machen, fehlen folgende Sensoren:
^ Priorität ^ Sensor-Typ ^ Hardware Empfehlung ^ Nutzen ^
| **Hoch** | Helligkeit / Licht | **BH1750** (Lux) oder **VEML6075** (UV) | Unterscheidung Sonnig/Bewölkt, UV-Warnung, unabhängige Sonnenscheindauer |
| **Mittel** | Bodenfeuchte | Kapazitiver Sensor (v1.2) | Gießempfehlung. Die Bodentempsensoren sind vorhanden, Feuchte fehlt. |
| **Mittel** | Feinstaub | **SDS011** oder **SPS30** | Luftqualität (Winter: Kaminrauch, Frühling: Pollen-Indikator) |
| **Niedrig** | Blitzsensor | **AS3935** | Erkennung von Gewitterfronten (Distanzschätzung) |
| **Wartung** | Gehäuse-Feuchte | SHT3x / BME280 | Überwachung des Elektronik-Gehäuses auf Kondenswasser (Silica-Gel Check) |
===== 5. YAML Code-Schnipsel (Copy & Paste) =====
Hier die wichtigsten Ergänzungen für die ``sensor:`` bzw. ``binary_sensor:`` Sektion.
# --- BERECHNETE WETTERWERTE ---
# Absolute Luftfeuchtigkeit
- platform: template
name: "${WetterCalc} Absolute Luftfeuchtigkeit"
unit_of_measurement: "g/m³"
lambda: |-
float T = id(aht_temp).state;
float rh = id(aht_hum).state;
if (std::isnan(T) || std::isnan(rh)) return NAN;
float e = 6.112 * exp((17.67 * T) / (T + 243.5));
return (e * rh * 2.1674) / (273.15 + T);
# Wolkenuntergrenze (Benötigt Taupunkt ID!)
- platform: template
name: "${WetterCalc} Wolkenuntergrenze (NN)"
unit_of_measurement: "m"
lambda: |-
float T = id(aht_temp).state;
float td = id(taupunkt_sensor).state; // ID vom Taupunkt prüfen!
if (std::isnan(T) || std::isnan(td)) return NAN;
return ((T - td) * 125.0) + ${hoehe_in_m};
# Frostgrenze Tiefe (Interpolation Boden)
- platform: template
name: "${WetterCalc} Frostgrenze Tiefe"
unit_of_measurement: "cm"
lambda: |-
float t5 = id(dallas_temp_addr_2).state; // -5cm
float t30 = id(dallas_temp_addr_3).state; // -30cm
if (t5 > 0) return 0.0;
if (t30 < 0) return 30.0;
return 5.0 + ((0.0 - t5) * (30.0 - 5.0) / (t30 - t5));
# --- BERECHNETE ENERGIEWERTE ---
# Sonnenschein Erkennung (Via Solarpanel)
- platform: template
name: "${WetterCalc} Sonnenschein Status"
id: sun_is_shining
lambda: |-
// Wenn Panelspannung deutlich über Akkuspannung liegt
if (id(pv).state > (id(bv).state + 4.0)) return true;
if (id(panel_power).state > 15.0) return true;
return false;
# Spannungsabfall Kabel (Diagnose)
- platform: template
name: "${WetterCalc} Spannungsverlust Kabel"
unit_of_measurement: "V"
lambda: |-
return abs(id(bv).state - id(bms0_total_voltage).state);
====== Optimierung der ESPHome-Wetterstation ======
Diese Seite fasst alle Verbesserungsvorschläge und Optimierungen zusammen, die in einer ausführlichen Diskussion mit Grok für die ESPHome-Konfiguration der Outdoor-Wetterstation (basierend auf ESP32-S3, Victron MPPT, JBD BMS, diversen Sensoren) erarbeitet wurden.
Ziel ist es, die Konfiguration übersichtlicher, effizienter, stromsparender und informativer zu machen – bei gleichzeitiger Reduktion der Entity-Anzahl in Home Assistant und Erhöhung der meteorologischen Aussagekraft.
===== 1. Allgemeine Struktur und Wartbarkeit =====
* **accuracy_decimals** ohne Anführungszeichen definieren (z. B. ''accuracy: 2'' statt ''"2"'').
* Auskommentierte und ungenutzte Blöcke komplett entfernen:
* ADS1115-Hub (wird nicht mehr benötigt, da interner ADC für Windrichtung verwendet wird)
* SHT3x-Sensor (falls nicht verbaut)
* Alte GPIO-Pins für „normalen“ ESP32
* Auskommentierte Berechnungen (Wind Chill, Heat Index, Dew Point) – stattdessen aktivieren (siehe Abschnitt 3)
* Pin-Definitionen konsolidieren – nur die aktuellen ESP32-S3-Pins behalten.
* INA3221 erweitern, falls weitere Kanäle (1 oder 2) für zusätzliche Strommessungen genutzt werden können.
===== 2. Reduktion der Sensoren (weniger Entities, weniger Load) =====
Die aktuelle Config erzeugt sehr viele Entities – besonders durch JBD BMS und Victron. Viele davon sind redundant oder nur für Debugging relevant.
**JBD BMS (von ~40 auf ~15–20 Sensoren reduzieren):**
Behalte nur das Wesentliche:
* State of Charge (%), Capacity Remaining + Nominal Capacity
* Total Voltage, Average/Min/Max/Delta Cell Voltage + Min/Max Voltage Cell
* Current (inkl. average_current), Power, Charging/Discharging Power
* Temperaturen 1–3
* Binary Sensoren: Balancing, Charging, Discharging
* Switches: Charging/Discharging
* Remaining Charging/Discharging Time (Packages)
* Errors Bitmask + Balancer Status Bitmask (als diagnostic)
**Entfernen:**
* Einzelne Cell Voltage 1–4 (Delta/Min/Max reichen)
* Alle einzelnen Error Counts (Short Circuit, Overcurrent etc.)
* Operation Status Bitmask, Software Version, Battery Strings, Charging Cycles, Battery Cycle Capacity
**Victron MPPT (von ~20 auf ~12 reduzieren):**
Behalte:
* Panel Voltage/Power/Current
* Battery Voltage/Current
* Yield Today/Yesterday/Total
* Max Power Today/Yesterday
* Error Code + Charging Mode (Text)
* FVE Prozent + Tages Medianwert
**Entfernen/Ersetzen:**
* Load Current (redundant)
* Day Number
* Batterie-Prozent aus Voltage (ungenau – besser SOC vom BMS nutzen)
* Tracking Mode
**Weitere Reduktionen:**
* Interne Sensoren (z. B. raw Hz, total_pulses, wind_direction_raw_voltage) auf ''internal: true'' setzen.
* Debug-Sensoren (loop_time etc.) nur bei Bedarf aktivieren.
===== 3. Neue und aktivierte berechnete Sensoren =====
**Pflicht-Aktivierungen (aus auskommentierten Blöcken):**
* Taupunkt (Dew Point) – Magnus-Formel
* Wind Chill (Windkühle)
* Heat Index (gefühlte Temperatur bei Hitze)
**Neue Sensoren hinzufügen:**
* **Absolute Feuchte** (built-in Component – präziser als manuelles Template):
- platform: absolute_humidity
temperature: aht_temp
humidity: aht_hum
name: "${WetterCalc} Absolute Feuchte"
* **Gefühlte Temperatur (kombiniert „Feels Like“)** – schaltet je nach Bedingung zwischen realer Temp, Wind Chill und Heat Index:
* Template-Sensor mit Bedingungen (T < 10°C + Wind → Wind Chill; T > 27°C → Heat Index; sonst reale Temp)
* **Täglicher Niederschlag** (automatischer Reset um Mitternacht):
- platform: integration
source_id: niederschlag_total_mm
name: "${Wetter} Niederschlag heute"
time_unit: day
* **Solar-Effizienz Heute** (aktuelle Power im Verhältnis zur Panel-Nennleistung, z. B. 75 W):
- platform: template
name: "${SmartSolar} Effizienz Heute"
unit_of_measurement: "%"
lambda: |-
return (id(panel_power).state / 75.0) * 100.0;
* Wind Gust standardisieren: Die „+10 km/h“-Bedingung entfernen → reiner 10-Minuten-Maximum-Gust (meteorologisch korrekter).
===== 4. Effizienz und Stromspar-Optimierungen =====
* Update-Intervalle anpassen:
* Windrichtung-ADC von 1s auf 5s (Richtung ändert sich langsam)
* JBD BMS von 2s auf 10s
* Bodentemperaturen auf 600s
* WiFi-Signal auf 1800s
* I²C-Frequenz von 50 kHz auf 100 kHz erhöhen (schneller, immer noch sparsam).
* Victron-Throttle von 10s auf 30s erhöhen.
* Viele Sensoren mit ''exponential_moving_average'' oder anderen Filtern glätten, um Updates zu reduzieren.
===== 5. WiFi Power Save Mode =====
Aktuell: ''power_save_mode: none'' (maximale Stabilität, höherer Verbrauch).
**Empfehlung:**
* Auf ''light'' wechseln (ESP32-Default) oder die Zeile komplett entfernen → moderates Stromsparen bei guter Stabilität.
* Testen: 1–2 Wochen beobachten (Akku-Verlauf, Disconnections).
* Fallback: Bei Problemen zurück zu ''none''.
===== Fazit =====
Durch diese Änderungen wird die Station:
* Übersichtlicher (ca. 50 % weniger Entities)
* Informativer (professionelle meteorologische Werte wie Taupunkt, Absolute Feuchte, Feels Like)
* Stromsparender (besonders wichtig bei Solarbetrieb)
* Wartbarer (sauberer Code)
Die Vorschläge sind schrittweise umsetzbar – am besten mit Versionskontrolle testen und Akku-Verhalten beobachten.