Files

This file contains ambiguous Unicode characters

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 Feuchtesensor mit MQTT & Home Assistant

Dieses Projekt liest mehrere analoge Feuchtesensoren über den **ESP32** aus und sendet die Messwerte per **MQTT** an **Home Assistant**.  
Ein definierter Schwellenwert löst zusätzlich einen **Feuchtealarm** aus.

---

## ⚙️ Hardware

- ESP32 Dev-Board (z. B. UPesy Wroom)
- bis zu **4 analoge Bodenfeuchtesensoren**
- USB-Kabel für Programmierung
- WLAN mit Zugang zu Home Assistant (im gleichen Netzwerk)

---

## 🧙‍♂️ Projektstruktur

```
ESP32-FEUCHTE/
├── src/
│   └── main.cpp                # Hauptprogramm mit Sensorlogik und MQTT
├── platformio.ini              # Build- und Upload-Konfiguration
├── lib/                        # (optional) weitere Libraries
├── test/                       # Tests
├── README.md                   # Projektbeschreibung (diese Datei)
└── docs/                       # Entwickler- und Benutzerhandbuch
```

---

## ⚖️ Einrichtung

### 1. PlatformIO öffnen

Projekt im VS Code öffnen und sicherstellen, dass die Erweiterung **PlatformIO** installiert ist.

### 2. WLAN- und MQTT-Daten anpassen

In `main.cpp` die folgenden Werte ändern:

```cpp
const char* ssid = "DEIN_WLAN";
const char* password = "DEIN_PASSWORT";
const char* mqtt_server = "192.168.x.x";  // IP deines Home Assistant
const char* mqtt_user = "mqttuser";
const char* mqtt_pass = "mqttpasswort";
```

### 3. ESP32 flashen

USB-Port im `platformio.ini` prüfen:

```ini
upload_port = COM4
monitor_speed = 115200
```

Dann über **PlatformIO → Upload** das Programm kompilieren und flashen.

---

## 🌐 MQTT-Struktur

Der ESP32 veröffentlicht folgende Topics:

| Topic                  | Beschreibung                   | Beispiel |
| ---------------------- | ------------------------------ | -------- |
| `home/feuchte/sensor1` | Feuchtewert Sensor 1 (0100 %) | `42.3`   |
| `home/feuchte/sensor2` | Feuchtewert Sensor 2 (0100 %) | `85.7`   |
| `home/feuchte/sensor3` | Feuchtewert Sensor 3 (0100 %) | `10.4`   |
| `home/feuchte/sensor4` | Feuchtewert Sensor 4 (0100 %) | `70.1`   |
| `home/feuchte/alarm`   | 1 = Feucht, 0 = Trocken        | `1`      |

---

## 🏠 Integration in Home Assistant

1. **MQTT-Integration aktivieren**  
   → Einstellungen → Geräte & Dienste → Integration hinzufügen → MQTT  
   → Broker konfigurieren oder den internen Broker von Home Assistant nutzen.

2. **Entitäten anlegen** (in `configuration.yaml` oder per GUI):

```yaml
binary_sensor:
  - name: "Feuchte Alarm"
    state_topic: "home/feuchte/alarm"
    payload_on: "1"
    payload_off: "0"
    device_class: moisture

sensor:
  - name: "Feuchte Sensor 1"
    state_topic: "home/feuchte/sensor1"
    unit_of_measurement: "%"
  - name: "Feuchte Sensor 2"
    state_topic: "home/feuchte/sensor2"
    unit_of_measurement: "%"
  - name: "Feuchte Sensor 3"
    state_topic: "home/feuchte/sensor3"
    unit_of_measurement: "%"
  - name: "Feuchte Sensor 4"
    state_topic: "home/feuchte/sensor4"
    unit_of_measurement: "%"
```

3. **Neuladen:**  
   → Entwicklerwerkzeuge → YAML → _Manuell konfigurierte MQTT-Entitäten neu laden_

4. **Prüfen:**  
   → Entwicklerwerkzeuge → Zustände → Suchbegriff „feuchte“  
   → Werte sollten live aktualisiert werden.

---

## 🔔 Optionale Automationen

Beispiel: Benachrichtigung, wenn Feuchtealarm aktiv ist:

```yaml
automation:
  - alias: "Feuchtealarm"
    trigger:
      - platform: state
        entity_id: binary_sensor.feuchte_alarm
        to: "on"
    action:
      - service: notify.mobile_app_iphone
        data:
          message: "🚨 Feuchte erkannt! Bitte prüfen!"
```

---

## 🧠 Entwicklerhinweise

- **Kalibrierung:**  
  Werte in `main.cpp` anpassen:
  ```cpp
  float V_TROCKEN = 2.80f;  // Spannung an Luft
  float V_NASS = 1.20f;     // Spannung im Wasser
  float ALERT_THRESHOLD = 70.0f;  // Alarm ab 70%
  ```
- **Sampling:**  
  Jeder Sensor wird 16× gemessen und gemittelt (`SAMPLES = 16`).

- **Logging:**  
  Serielle Ausgabe mit `monitor_speed = 115200`.

---

## 📘 Lizenz

MIT License  
Autor: Ismail Ali  
© 2025

---

## 📂 Weitere Dokumentation

Siehe `docs/`-Ordner für:

- **Installationsanleitung Schritt-für-Schritt**
- **Troubleshooting (WLAN, MQTT, HA)**
- **Kalibrierung & Erweiterung (mehr Sensoren, Relais, Displays)**