Zum Inhalt springen

← ChangeLog | Inhaltsverzeichnis | Weiter: Hardware-Leitfaden →

1. Anwendungsübersicht



1.1 Zweck

ACRouter ist ein Open-Source-Controller zur automatischen Umleitung überschüssiger Solarenergie auf resistive Lasten (z. B. Warmwasserbereiter), anstatt sie ins Netz einzuspeisen. Außerdem optimiert er den Energieverbrauch während Hoch- und Niedrigtarifzeiten mit Verbrauchsgrenzen.

Hauptziel: Die Netzeinspeisung minimieren, indem die Last-Leistung dynamisch auf Basis der aktuellen Bilanz zwischen Erzeugung und Verbrauch gesteuert wird. Kosten des Stromverbrauchs aus dem Netz senken.


Hauptvorteile:

  • ✅ Automatische Verwaltung überschüssiger Solarenergie
  • ✅ Optimierung von Niedrigtarifen und Verbrauchsgrenzen
  • ✅ Reduzierte Stromkosten (Eigenverbrauch)
  • ✅ Niedrigere Anlagenkosten. Keine Batterien zur Energiespeicherung erforderlich
  • ✅ Einspeiseschutz (ECO-Modus)
  • ✅ Flexible Konfiguration über Weboberfläche
  • ✅ Mehrere Betriebsmodi unterstützt
  • ✅ Steuerung mehrerer Verbrauchsgeräte. Dimmer und Relais.
  • ✅ Offener Quellcode



1.2 Funktionen


Messung und Überwachung

  • Netzspannungsmessung (ZMPT107 AC-Spannungssensor)
  • Strommessung an 3 Punkten (SCT-013/ACS-712 Stromsensoren):
  • Laststrom (Last)
  • Netzstrom (Netz) - Import/Export-Erkennung
  • Solarerzeugungsstrom (Solar)
  • Wirkleistungsberechnung in Echtzeit
  • Aktualisierungsfrequenz: 200 ms (5 Mal pro Sekunde)
  • Messgenauigkeit: 12-Bit ADC mit DMA (bis zu 80 kHz auf 8 Kanälen)


Laststeuerung

  • Phasenanschnitt-Dimmer-Steuerung (TRIAC-Dimmer)
  • Stufenlose Leistungsregelung 0–100 %
  • Synchronisierung mit Nulldurchgangsdetektor
  • Unterstützung für bis zu 2 Dimmer-Kanäle, erweiterbar auf verfügbare GPIO
  • Relaisausgänge (ROADMAP: Entwicklung Phase 2)
  • 2 unabhängige Relais, erweiterbar auf verfügbare GPIO
  • Programmierbare Polarität (Active HIGH/LOW)


Steuerungsalgorithmen

  • Proportionalregler (P-Regler)
  • Ausgleich P_grid → 0
  • Einstellbarer Verstärkungsfaktor (Kp)
  • Betriebsmodi: OFF, AUTO, ECO, OFFGRID, MANUAL, BOOST
  • Flimmerreduzierung - Glättung von Dimmer-Änderungen


Kommunikation

  • WiFi: AP-Modus (192.168.4.1) + STA-Modus (Verbindung zum Router)
  • WebServer: REST API + Material-UI-Oberfläche
  • Serielle Konsole: Kommandozeile für Konfiguration (115200 Baud)
  • OTA-Updates: Firmware-Updates über Funk (Phase 2)


Konfiguration und Speicherung

  • NVS (Non-Volatile Storage):
  • ACRouter-Einstellungen (Modus, Kp, Sollwert)
  • WiFi-Konfiguration (SSID, Passwort)
  • Hardware-Konfiguration (GPIO-Pins, Sensortypen)
  • Weboberfläche:
  • Dashboard mit Echtzeit-Messwerten
  • WiFi-Einstellungsseite
  • Hardware-Konfigurationsseite
  • Betriebsmodus-Auswahl
  • Serielles Terminal (Konsole):
  • Echtzeit-Messwertanzeige
  • Kommandozeile für Hardware- und Geräteparameter-Konfiguration
  • Betriebsmodus-Auswahl



1.3 Funktionsweise


Automatische Steuerung

  1. Leistungsmessung:
  2. Spannung und Ströme werden alle 200 ms gemessen
  3. Effektivwertberechnung (RMS - Root Mean Square)
  4. Wirkleistungsberechnung (P = U × I × cos φ)

  5. Bilanzermittlung:

  6. P_solar = Leistung der Solarpanels
  7. P_load = aktueller Hausverbrauch
  8. P_grid = Import/Export ins Netz
  9. P_dimmer = gesteuerte Last-Leistung

  10. Steuerungsalgorithmus:

  11. Ziel: P_grid → 0 (kein Export/Import)
  12. Proportionalregler: ΔDimmer = Kp × P_grid
  13. Wird auf den Dimmer mit Grenzen 0–100 % angewendet


Überwachung über Weboberfläche

  • Echtzeit-Messwerte:
  • Netzspannung (V)
  • Ströme: Netz, Solar, Last (A)
  • Leistung: Netz, Solar, Last, Dimmer (W)
  • Dimmer-Stufe (%)
  • Aktueller Betriebsmodus

  • Systeminformationen:

  • Firmware-Version
  • Betriebszeit
  • Heap-Speicher (freies RAM)
  • WiFi-RSSI (Signalpegel)


Konfiguration über Weboberfläche

  • Betriebsmodus-Auswahl (6 Schaltflächen)
  • Manuelle Dimmer-Steuerung (Schieberegler 0–100 %)
  • WiFi-Einrichtung (Netzwerk-Scan, Verbindung)
  • GPIO-Pin- und Sensortyp-Konfiguration
  • Sensor-Kalibrierung (Multiplikator, Offset)
  • Geräte-Neustart



1.4 Betriebsmodi


OFF (0) - Deaktiviert

Beschreibung: Dimmer ist vollständig deaktiviert (0 %), System ist inaktiv.

Usage:
- Maintenance
- Load disconnection
- Sensor testing without control

Behavior:
- Dimmer level = 0%
- Measurements continue (200 ms)
- Web interface is available
- Serial commands work



AUTO (1) - Automatisch (Solar-Router)

Beschreibung: Hauptmodus des Solar-Routers. Automatischer Ausgleich von P_grid → 0.

Algorithmus:

cpp
// Every 200 ms
P_error = P_grid;  // Positive = import, negative = export
delta = Kp * P_error;  // Proportional controller
dimmer_level += delta;
dimmer_level = constrain(dimmer_level, 0, 100);

Behavior:
- P_grid > 0 (import from grid) → Increase dimmer (more load)
- P_grid < 0 (export to grid) → Decrease dimmer (less load)
- P_grid ≈ 0 → Dimmer stabilized

Settings:
- Kp (gain) - gain coefficient (default: 0.05)
- Higher Kp = faster response, but possible oscillations
- Lower Kp = smoother, but slower
- setpoint - target P_grid value (usually 0 W)

Beispiel:

python
Initial state:
  P_solar = 2000 W
  P_load = 500 W
  P_grid = -1500 W (export!)
  Dimmer = 0%

After 5 seconds (AUTO mode, Kp=0.05):
  P_solar = 2000 W
  P_load = 500 W
  Dimmer = 75% (~1500 W to water heater)
  P_grid = 0 W ✅ (balance achieved)


ECO (2) - Sparmodus (Anti-Export)

Beschreibung: Verhindert die Einspeisung ins Netz. Import ist erlaubt, Export ist verboten.

Algorithmus:

cpp
if (P_grid < 0) {  // Export to grid
    // Decrease dimmer (reduce load)
    delta = Kp * P_grid;  // Negative delta
    dimmer_level += delta;
} else {
    // Import is allowed, do not increase dimmer
    // Keep current level
}
dimmer_level = constrain(dimmer_level, 0, 100);

Behavior:
- P_grid < 0 (export) → Decrease dimmer (avoid export)
- P_grid > 0 (import) → Do not change dimmer (import is allowed)
- P_grid = 0 → Dimmer is stable

Applications:
- Export tariff is unfavorable or absent
- Need to use only excess energy
- Export protection when there is no grid export contract

Beispiel:

python
Situation 1: Solar excess
  P_solar = 3000 W
  P_load = 1000 W
  P_grid = -500 W (export)
  → ECO mode will increase dimmer by ~500 W → P_grid = 0

Situation 2: Solar shortage
  P_solar = 500 W
  P_load = 1000 W
  P_grid = +500 W (import)
  → ECO mode will NOT change dimmer (import is allowed)


OFFGRID (3) - Netzunabhängig

Beschreibung: Modus für autonome Systeme mit Batterien. Nutzt überschüssige Solarenergie für die Last.

Algorithmus:

cpp
// Balance by solar panel current
P_available = P_solar - P_load;  // Available power
if (P_available > 0) {
    // There is solar excess → increase dimmer
    dimmer_level = map(P_available, 0, P_dimmer_max, 0, 100);
} else {
    // No excess → turn off dimmer (save battery)
    dimmer_level = 0;
}

Behavior:
- Uses only solar energy
- Does not consider P_grid (no grid)
- Priority: main load → batteries → dimmer
- Dimmer works only when there is solar excess

Applications:
- Systems without grid connection
- Solar panels + batteries
- Maximize solar energy usage

Beispiel:

python
Daytime (sunny):
  P_solar = 1500 W
  P_load = 800 W
  P_available = 700 W
  → Dimmer = 50% (~700 W to water heater)
  → Battery is not discharging

Evening (no sun):
  P_solar = 0 W
  P_load = 800 W (from battery)
  → Dimmer = 0% (battery saving)


MANUAL (4) - Manueller Modus

Beschreibung: Dimmer wird auf eine feste Stufe eingestellt (keine Automatisierung).

Behavior:
- Dimmer level is set by user (0-100%)
- No automatic regulation
- Level is maintained until manually changed

Applications:
- Load testing
- Night tariff (set to 100%)
- Temperature control (set to 50%)
- System debugging

Settings:
- manual_level - dimmer level (0-100%)

Beispiel:

bash
# Via Serial commands
set-manual 75        # Set dimmer to 75%
set-mode 4           # Switch to MANUAL mode

# Via web interface
1. Select MANUAL mode
2. Move slider to 75%
3. Click "Apply"


BOOST (5) - Maximale Leistung

Beschreibung: Dimmer auf 100 % (erzwungene Aufheizung).

Behavior:
- Dimmer level = 100% (constant)
- Ignores all sensors
- Maximum power to load

Applications:
- Fast water heater heating
- Using cheap tariff
- Emergency mode

Warnings:
- ⚠️ High grid consumption
- ⚠️ Possible load overheating
- ⚠️ Monitor temperature manually

Beispiel:

python
Night tariff (23:00-07:00):
  1. Switch to BOOST mode
  2. Water heater heats at maximum
  3. In the morning switch back to AUTO

Result:
  Heating from cheap tariff
  Daytime operation in AUTO mode (solar)



1.5 Modusvergleichstabelle

Modus Dimmer-Steuerung P_grid-Ausgleich Import erlaubt Export erlaubt Anwendungsfall
OFF 0 % (fest) ❌ Nein N/A N/A Wartung
AUTO Automatisch ✅ Ja (→ 0) ✅ Ja ✅ Ja Standard Solar-Router
ECO Auto (Anti-Export) ⚠️ Teilweise ✅ Ja ❌ Nein Kein Exportvertrag
OFFGRID Auto (nur Solar) ❌ Nein N/A N/A Netzunabhängige Systeme
MANUAL Fest (Benutzer) ❌ Nein ✅ Ja ✅ Ja Test / Nachttarif
BOOST 100 % (fest) ❌ Nein ✅ Ja ❌ Nein Schnelle Aufheizung



1.6 Anwendungsszenarien


Szenario 1: Standard Solar-Router

Equipment:
- 3 kW solar panels
- Sensors: Solar, Grid, Load, Voltage
- Load: 2 kW water heater

Modus: AUTO

Operation:
1. During the day there is excess solar energy
2. P_grid is negative (export to grid)
3. Controller increases dimmer → water heater heating
4. P_grid balances → 0 (zero export/import)
5. All solar energy is used locally



Szenario 2: Einspeiseschutz (ECO)

Equipment:
- 5 kW solar panels
- No grid export contract
- Sensors: Solar, Grid, Voltage
- Load: Water heater element

Modus: ECO

Operation:
1. During the day solar excess → export to grid begins
2. ECO mode detects P_grid < 0
3. Dimmer increases → water heating
4. Export prevented (P_grid ≥ 0)
5. Evening sun sets → dimmer decreases
6. Import allowed (grid purchase when needed)



Szenario 3: Autonomes System (OFFGRID)

Equipment:
- 2 kW solar panels
- 10 kWh batteries
- No grid connection
- Sensors: Solar, Load, Voltage
- Load: Tank heating element

Modus: OFFGRID

Operation:
1. System is autonomous (no grid)
2. During the day solar excess → water heating
3. At night heating element is off (no sun)
4. Batteries are used for main load
5. Maximize solar energy usage



Szenario 4: Nachttarif + Warmwasserbereiter

Equipment:
- Two-tariff meter (day/night)
- Sensors: Grid, Voltage
- Load: Water heater

Modus: MANUAL (Nacht) / OFF (Tag)

Operation:
1. Night (23:00-07:00): MANUAL 100% (cheap tariff)
2. Day (07:00-23:00): OFF (expensive tariff)
3. Programmable via schedule (Phase 2: SCHEDULE mode)




1.7 Systemarchitektur

python
┌─────────────────────────────────────────────────────────────┐
│                      ESP32 Controller                        │
│                                                               │
│  ┌─────────────┐  ┌──────────────┐  ┌────────────────────┐ │
│  │ PowerMeter  │  │   Router     │  │  DimmerHAL         │ │
│  │   ADC       │→ │  Controller  │→ │  (Zero-cross)      │ │
│  └─────────────┘  └──────────────┘  └────────────────────┘ │
│         ↓                                      ↓             │
│    Measurements                           TRIAC Control      │
│    (200ms cycle)                          (50Hz sync)        │
│                                                               │
│  ┌──────────────────────────────────────────────────────┐   │
│  │              WiFi Manager                            │   │
│  │  ┌──────────────┐  ┌────────────────────────────┐   │   │
│  │  │ AP Mode      │  │ WebServer (Material UI)    │   │   │
│  │  │ 192.168.4.1  │  │ + REST API                 │   │   │
│  │  └──────────────┘  └────────────────────────────┘   │   │
│  └──────────────────────────────────────────────────────┘   │
│                                                               │
│  ┌──────────────────────────────────────────────────────┐   │
│  │         ConfigManager + HardwareConfigManager        │   │
│  │                    (NVS Storage)                      │   │
│  └──────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
        ↑                              ↓
   ┌────────────┐             ┌──────────────────┐
   │  Sensors   │             │  Dimmer Output   │
   ├────────────┤             ├──────────────────┤
   │ ZMPT107    │             │  TRIAC           │
   │ (Voltage)  │             │  (0-100%)        │
   │ SCT-013    │             │                  │
   │ ACS-712    │             │  Load:           │ 
   │ (Current)  │             │  Heater/Boiler   │
   │ x3 sensors │             │  (up to 2kW)     │
   └────────────┘             └──────────────────┘



1.8 Zielgruppe

ACRouter ist konzipiert für:

  1. DIY-Enthusiasten - einen Solar-Router selbst bauen
  2. Hausbesitzer mit Solarpanels - Eigenverbrauch optimieren
  3. Entwickler - Grundlage für eigene Projekte (Open Source)
  4. Ausbildungsprojekte - IoT, Energiemanagement, ESP32 erlernen
  5. Kleinunternehmen - Stromkosten senken



1.9 Einschränkungen und Warnungen

⚠️ WICHTIG:

  1. Elektrische Sicherheit
  2. Arbeiten mit 230V Netzspannung ist gefährlich
  3. Elektrofachkraft-Qualifikation erforderlich
  4. Galvanische Trennung der Sensoren ist zwingend erforderlich
  5. FI-Schutzschalter (RCD) ist zwingend erforderlich

  6. Lastkompatibilität für Dimmer

  7. Geeignet nur für resistive Lasten (Heizelemente, Heizgeräte)
  8. NICHT geeignet für induktive Lasten (Motoren, Transformatoren)
  9. NICHT geeignet für Elektronik (LED-Treiber, Netzteile)

  10. Leistung

  11. Maximum ist begrenzt durch das TRIAC-Modul (üblicherweise 2 kW)
  12. Kühlung ist bei hohen Lasten erforderlich
  13. Überhitzungsschutz wird empfohlen

  14. Messgenauigkeit

  15. Kalibrierung ist für Genauigkeit erforderlich
  16. Abweichung ±5–10 % mit Grundeinstellungen
  17. Temperatur beeinflusst die Sensoren

  18. Netzanforderungen

  19. Stabile Netzfrequenz (50/60 Hz)
  20. Qualitätsspannung ohne starke Schwankungen
  21. Nulldurchgangsdetektor ist kritisch für TRIAC

← ChangeLog | Inhaltsverzeichnis | Weiter: Hardware-Leitfaden →