# Betriebsanleitung — waterControl

**Modul:** waterControl (Platine **V3.0**)  
**Firmware-Stand:** 4.5.0 (Version in `data/config.json`)  
**pulseUnit:** Hub-App im heimischen Netz  
**Stand:** August 2026

Vollständige Downloads und Sketch: [pulseunit.de/modules/waterControl/](https://pulseunit.de/modules/waterControl/)

---

## 1. Sicherheit & Hinweise

- Versorgung **12 V DC** — Leistung laut Typenschild (ca. 100 mA, mit Relais ca. **150 mA**).
- Platine V3.0: **Schottky D2 (1N5817)** zwischen L7805 und ESP-Pin 14 — **USB + 12 V** gleichzeitig zum Flashen möglich.
- **230 V AC** nur an der **Pumpe über KLP/Relais** — fachgerecht installieren, Schutzleiter beachten.
- Relais **Active-HIGH** (**AZ576-1A-12D**): Pumpenlast bis **20 A / 230 V AC** (Kontaktbelastbarkeit des Relais).
- WLAN-Passwörter nicht in öffentlichen Repositories oder Screenshots teilen.
- Eigenbau und Betrieb auf **eigenes Risiko**.

---

## 2. Lieferumfang & Übersicht

**waterControl** misst Frisch- und Grauwasser (je vier Stufen), schaltet eine Pumpe und stellt eine Web-Oberfläche im Heimnetz bereit.

| Komponente | Funktion |
|------------|----------|
| CaBoTron 5-Stufen-Sonde | Füllstand Frisch-/Grauwasser (KLS1 / KLS3) |
| Platine **V3.0** + ESP32 (M1) | Auswertung, Webserver, Relais |
| pulseUnit (optional) | Dashboard, Modul im WebView |

Weitere Materialien: Schaltplan-PDF, Sonden-Einbauanleitung, Arduino-Sketch — siehe Download-Bereich auf der Modul-Seite.

---

## 3. Hardware — Verdrahtung & Einbau

**3.1 Platine** — Schaltplan-PDF (`modul_waterControl_circuit_diagram.pdf`), Versorgung 12 V, **D2 (Schottky)**, Klemmen KLS1/KLS2/KLS3, **AZ576**-Relais, KLP für Pumpe.

**3.2 Verdrahtung** — [`PINOUT.md`](PINOUT.md): Pinbelegung XIAO ESP32-S3, Sensorklemmen, Relais.

**3.3 Füllstandssonde** — CaBoTron 5-Stufen-Sonde (PDF Art.-Nr. 300-091): senkrecht von oben einbauen, Messstäbe regelmäßig reinigen.

Jede Sonde hat **sechs Kabel**: vier Messfarben (gelb, grün, braun, weiß) und **zwei graue** Referenzleitungen. Die graue Leitungen beider Sonden (Frisch- und Grauwasser) werden **parallel** auf **KLS2** geführt.

### KLS2 — gemeinsame Referenz (beide Sonden)

| Klemme | Kabelfarbe | Funktion |
|:------:|:----------:|:---------|
| **1** | **Grau** | Referenz (2. Grau der Sonde) |
| **2** | **Grau** | Versorgung (1. Grau der Sonde, gepulst) |

### KLS1 — Frischwasser-Sonde

| Klemme | Kabelfarbe | Füllstand |
|:------:|:----------:|:---------:|
| **1** | **Gelb** | 25 % |
| **2** | **Grün** | 50 % |
| **3** | **Braun** | 75 % |
| **4** | **Weiß** | 100 % |

### KLS3 — Abwasser-Sonde

| Klemme | Kabelfarbe | Füllstand |
|:------:|:----------:|:---------:|
| **1** | **Gelb** | 25 % |
| **2** | **Grün** | 50 % |
| **3** | **Braun** | 75 % |
| **4** | **Weiß** | 100 % |

![KLS3 — Abwasser-Sonde auf der Platine (Klemmen 1–4)](kls3-terminals.png)

Reihenfolge der Messfarben: **Gelb → Grün → Braun → Weiß** = **25 → 50 → 75 → 100 %**. Die beiden Grau-Kabel gehören **nur** auf **KLS2**, nicht auf KLS1 oder KLS3.

**3.4 Software aufspielen** — [`FLASHING.md`](FLASHING.md): Sketch + LittleFS (`data/`) flashen, danach Kapitel 5.

---

## 4. Software — Sketch flashen (Kurz)

1. Sketch-ZIP von pulseunit.de laden und entpacken.
2. Arduino IDE: Board **Seeed XIAO ESP32S3**, Bibliothek **ArduinoJson**, LittleFS-Upload.
3. `waterControl.ino` hochladen, danach Ordner **`data/`** als LittleFS.
4. Im ZIP liegt **`data/config.json`** bereits mit leeren WLAN-Feldern — optional `ssid`/`password` eintragen oder WLAN per Setup-AP (Kapitel 5.2 Variante B).

Details: [`FLASHING.md`](FLASHING.md)

---

## 5. Erstinbetriebnahme

### 5.1 Strom an — LED LD1 (Netzwerk)

| LD1 | Bedeutung |
|-----|-----------|
| **Aus** | Modul ist mit dem Heim-WLAN (STA) verbunden |
| **Blinken (~2 Hz)** | Kein WLAN — Boot, Reconnect oder **Setup-AP** aktiv |

Modul mit **12 V** versorgen. Beim ersten Start ohne gültige WLAN-Konfiguration startet das Modul den Access Point **`WLC-Setup`** (SSID entspricht dem Namen in der Oberfläche / `title_wlan`).

### 5.2 WLAN einrichten

**Variante A — vor dem Flashen (LittleFS):**

1. In **`data/config.json`** `ssid` und `password` eintragen (Datei liegt im Release-ZIP bereits vor).
2. Optional: `mdns` (Standard **`mwl_control`**), `lang` (`DE` / `EN`), `pump_timeout` (Minuten, `0` = aus).
3. LittleFS hochladen.

WLAN-Felder **leer lassen** → nach dem Start Variante B (Setup-AP).

**Entwicklung im Monorepo:** Lokale `data/config.json` mit WLAN-Daten ist gitignored. Fehlt sie, `config.defaults.json` nach `config.json` kopieren.

**Variante B — Setup-AP (ohne PC):**

1. Mit Smartphone/Tablet ins WLAN **`WLC-Setup`** verbinden (erscheint, wenn keine STA-Verbindung möglich ist).
2. Browser öffnen — Weiterleitung zur **WLAN-Konfiguration** (`setupWlan.html`).
3. **Scan** → Netzwerk wählen → Passwort eingeben → **mDNS-Name** prüfen (Standard `mwl_control`) → speichern.
4. Modul verbindet sich neu und startet ggf. neu.

> **Hinweis:** Nach erfolgreicher Verbindung ist der Setup-AP nicht mehr nötig. WLAN-Daten liegen in `/config.json` auf dem Modul.

### 5.3 Modul im Browser öffnen

Im Heimnetz (gleiches WLAN wie Smartphone/PC):

- **mDNS:** `http://mwl_control.local` (oder der in den Einstellungen gesetzte Name)
- **Alternative:** angezeigte **IP-Adresse** unter der Versionszeile auf der Startseite (`index.html`)

Browser-Tab offen lassen — die Oberfläche aktualisiert Status und Füllstände automatisch.

### 5.4 Kurztest vor dauerhaftem Betrieb

1. **Füllstand abrufen** einschalten (Schalter „An“) — nach wenigen Sekunden Balken für Frisch- und Grauwasser (25 / 50 / 75 / 100 %).
2. **Pumpe** nur mit sicherer Testlast oder abgeklemmter Leitung kurz **Ein/Aus** prüfen.
3. **Einstellungen** (Zahnrad) öffnen — Version und mDNS prüfen.
4. Bei `-- %` oder „Sensorfehler“: Sonde und Klemmen KLS1/KLS3 prüfen (Kapitel 8).

---

## 6. Bedienung — Modul-Web-UI

Die Oberfläche besteht aus **`index.html`** (Dashboard) und **`setup.html`** (Einstellungen). Sprache umschaltbar (DE/EN), gespeichert in `config.json`.

### 6.1 Dashboard — Bereiche

| Bereich | Inhalt |
|---------|--------|
| **Status** | Textmeldungen (z. B. Tank voll, Sensorfehler), WLAN-Symbol, Link zu Einstellungen |
| **Pumpe** | Schalter Ein/Aus; Anzeige der Abschaltverzögerung, falls aktiv |
| **Füllstände** | Schalter Messung / Auffüllen; Balken Frisch- und Grauwassertank |

Unter der Versionszeile: **aktuelle IP** (Fallback, wenn mDNS nicht auflöst).

### 6.2 Füllstand abrufen

- Schalter **„Füllstand abrufen“** auf **An** → Messung läuft (ca. 6 Sekunden), danach aktualisierte Balken.
- Während der Messung ist **„Wassertank auffüllen“** gesperrt (ausgegraut).
- Während **Auffüllen** ist **„Füllstand abrufen“** gesperrt.

Beim Öffnen der Seite startet eine Messung **nur**, wenn in den Einstellungen **„Messung beim Öffnen starten“** aktiviert ist (Standard: **aus**).

### 6.3 Wassertank auffüllen (Automatik)

- Schalter **„Wassertank auffüllen“** auf **An** → Modul überwacht den Frischwassertank beim Befüllen (auch ohne offenen Browser-Tab auf dem ESP).
- Beendet bei **100 %**, nach **7 Minuten ohne Änderung**, manuell (**Abbrechen**) oder bei **Sensorfehler**.
- **Pumpe** während Auffüllen nicht manuell einplanen — Logik prioritisiert sichere Zustände.

### 6.4 Pumpe

- Schalter **Pumpe** Ein/Aus schaltet das Relais (KLP).
- **Abschaltverzögerung** in Einstellungen (`pump_timeout`, Minuten): Pumpe schaltet nach Ablauf automatisch ab (`0` = deaktiviert).
- Nur im Fehlerfall oder bei Timeout abschalten — Dauerbetrieb nur mit passender Pumpe und Sicherung.

### 6.5 Einstellungen (`setup.html`)

Über das **Zahnrad** auf der Startseite:

| Einstellung | Wirkung |
|-------------|---------|
| **Abschaltverzögerung Pumpe** | Minuten bis Auto-Aus (`0` = aus) |
| **Messung beim Öffnen starten** | Auto-Messung beim Laden des Dashboards (Standard: aus) |
| **Sprache** | DE / EN |
| **Modulname** | Titel in **pulseUnit** (`configMainAppPulseUnit.json` → `title_smal`) |
| **URL (mDNS)** | Hostname ohne `.local` (Standard `mwl_control`) |

Nach **Speichern** startet das Modul neu; ggf. neue URL bookmarken.

**WLAN ändern:** Link zur WLAN-Konfiguration (`setupWlan.html`) in den Einstellungen.

### 6.6 Wartung

- **Sonde:** mindestens jährlich ausbauen und Messstäbe reinigen (CaBoTron-Einbauanleitung).
- **Version:** steht in `config.json` → Feld `version`; nach Update LittleFS/Sketch anpassen.
- **Neustart:** Spannung kurz trennen oder nach Einstellungsänderung automatisch.

---

## 7. Einbindung in pulseUnit

1. **pulseUnit** installieren, gleiches Heim-WLAN wie das Modul.
2. **Einstellungen → Module:** URL eintragen, z. B. `http://mwl_control.local` oder `http://192.168.x.x`.
3. **Home-Dashboard:** Kachel „Wassertank“ (Name aus Modul-Einstellungen) zeigt Snapshot-Werte.
4. **Tap auf Kachel** → Modul-Oberfläche im WebView (wie im Browser).

Technische Details (Endpoints, `stateSnapshot.json`): Modul-API auf [pulseunit.de](https://pulseunit.de/#modul-api).

---

## 8. Fehlerbehebung (Kurz)

| Symptom | Mögliche Ursache | Maßnahme |
|---------|------------------|----------|
| Seite nicht erreichbar | WLAN, falsche URL | Setup-AP, IP statt mDNS testen |
| LD1 blinkt dauernd | Kein WLAN | `setupWlan.html`, Router-Reichweite |
| `-- %` / Sensorfehler | Verschmutzte Sonde, Kabel | Sonde reinigen, KLS1/KLS3 prüfen |
| Pumpe reagiert nicht | Verdrahtung KLP, Relais | Schaltplan, [`PINOUT.md`](PINOUT.md) |
| Falsche Version angezeigt | Alte `config.json` | `version` setzen, LittleFS upload |
| pulseUnit leer / offline | URL, Snapshot | Modul im Browser testen, URL speichern |

---

## 9. Referenzen & Downloads

| Dokument | Inhalt |
|----------|--------|
| Schaltplan-PDF | Platine **V3.0** |
| CaBoTron-PDF | Füllstandssonde einbauen |
| Sketch-ZIP | `waterControl.ino`, `data/`, `FLASHING.md`, `PINOUT.md`, diese Anleitung |
| [`RELEASENOTES.md`](../RELEASENOTES.md) | Änderungen pro Version |

---

## Anhang A — `config.json` (Felder)

| Feld | Bedeutung |
|------|-----------|
| `ssid` / `password` | Heim-WLAN |
| `version` | Angezeigte Firmware-/UI-Version |
| `lang` | `DE` oder `EN` |
| `mdns` | mDNS-Hostname (ohne `.local`) |
| `pump_timeout` | Pumpen-Auto-Aus in Minuten (`0` = aus) |
| `auto_measure_on_load` | Messung beim Öffnen des Dashboards (`true`/`false`, Standard `false`) |

Release-ZIP: `data/config.json` mit leeren `ssid`/`password`. Entwickler: echte WLAN-Daten nur in lokaler `config.json` — **nicht committen**.
