Wassermelder für ioBroker über ESP8266 und MQTT

In diesem Artikel zeige ich Dir, wie Du Dir einen einfachen und günstigen Wassermelder auf Basis eines ESP8266 Mikroprozessor aufbauen kannst.

Ich habe für einen neuen Wasserspeicher einen kleinen Sensor entwickelt, mit dem ich bei einem Wasseraustritt direkt gewarnt werde. Den Sensor habe ich mittels einem ESP01 Mikroprozessor umgesetzt, da dieser im DeepSleep-Modus sehr geringe Verbrauchswerte aufweist und somit auch über eine längere Zeit mit handelsüblichen AA-Batterien betrieben werden kann.

Für die Integration des Sensors in das Smart-Home habe ich das MQTT-Protokoll verwendet. Bevor wir mit dem Aufbau des Sensors beginnen, hier zunächst die Liste der benötigten Materialien sowie Hilfsmittel zum Einfachen Flashen des ESP01-Mikroprozessor.

Als Gehäuse habe ich das folgende Gehäuse von reichelt.de gewählt:

https://www.reichelt.de/kunststoffgehaeuse-80-x-80-6-x-43-5-mm-rnd-455-00350-p193564.html?&trstct=pos_0&nbc=1

Da der ESP01-Mikroprozessor keinen USB-Anschluss besitzt, benötigst Du für das Flashen einen speziellen Adapter. Ich habe Dir den Adapter oben verlinkt, zudem solltest Du dir den folgenden Artikel zum Flashen ansehen, falls Du noch nicht mit dem ESP01-Mikroprozessor gearbeitet hast:

.

Nun beginnen wir mit dem Aufbau des Sensor. Ich habe den Sensor im ersten Schritt auf dem Breadboard entwickelt. Im folgenden Schaubild seht ihr die genaue Verkabelung des ESP01, der Batterie sowie die beiden Sensor-Kabel. Die nach oben führenden Anschlüsse habe ich mit einem Pin-Header versehen. Sobald dieser im Wasser ist, wach der ESP01 auf und publiziert die Meldung.

Im nächsten Schritt können wir dann mit der Implementierung des Sketch beginnen. Ich habe den Sketch als Download hier bereitgestellt:

Sketch - ioBroker Wassermelder (2029 Downloads)

Im Sketch müssen wir zunächst die Konfiguration vervollständigen. Hierfür muss die WLAN_SSID sowie das Kennwort eingetragen werden. Zudem muss die IP-Adresse des MQTT-Brokers (in meinem Fall die IP-Adresse von ioBroker) sowie der entsprechende Port definiert werden. Optional habe ich hier auch eine Authentifizierung am MQTT-Broker via Benutzername und Passwort vorgesehen.

In der Arduino IDE müssen wir unter den Werkzeugen das Generic Board für den ESP01 auswählen sowie den Port wählen.

Nach dem Flashen habe ich den Sensor dann das erste mal getestet. Im Kaffee-Becher funktioniert er natürlich auch problemlos 😉

In den ioBroker Objekten wird nun ein neuer Ordner mit der ClientID des Sensors angelegt. In meinem Fall sind die Datenpunkte dann unter mqtt.0.Kellerwassermelder001 zu finden.

Der Datenpunkt water_detected wird aktualisiert, sobald der Sensor einen Wasseraustritt registriert. Mit dem zweiten Datenpunkt wird dann noch die WLAN-Signalstärke übermittelt.

Im folgenden Blockly habe ich mir dann noch ein kleines Script erstellt, mit dem ich mit eine Telegram-Benachrichtigung zusende, sobald sich der Datenpunkt water_detected aktualisiert.

In der Telegram-App sehen wir bei einem Wasseraustritt die folgende Nachricht. Im nächsten Schritt könnten wir hier natürlich noch weitere Aktionen über ioBroker starten (Pumpe einschalten, Signalton anschalten, usw.).

Für ein möglichst lange Batterie-Laufzeit des Sensors müssen die beiden Status-LEDs des ESP01 entfernt werden. Hierfür habe ich einfach mit einer spitzen Zange die beiden LEDs zerstört und vorsichtig entfernt.

Der fertige Sensor wird dann im folgenden Gehäuse direkt im Keller installiert.

Ich hoffe Dir gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

14 Gedanken zu „Wassermelder für ioBroker über ESP8266 und MQTT

  • 19. Mai 2020 um 19:46
    Permalink

    Es wäre schön gewesen wenn du ein paar Worte zum Code verloren hättest. Kein Plan wie das Ganze funktioniert.

    Antwort
  • 20. Mai 2020 um 7:47
    Permalink

    Sehr schöne Beschreibung. Kannst Du noch das Gehäuse und Batteriehalterung verlinken?

    Antwort
  • 22. August 2020 um 13:38
    Permalink

    Gutes Tutorial.
    Kann sicher auch als Türklingel herhalten.
    Aber wie kann ich das Projekt abändern, um ein Singnal beim trockenfallen des Sensors zu erhalten?
    Würde das überhaupt funktionieren ?

    Antwort
  • 8. September 2020 um 12:39
    Permalink

    Könnte man evtl. noch eine Batteriespannung Messung mit einbauen ? Sonst ist irgendwann mal der Keller unter Wasser und es gibt keine Meldung, weil die Batterien leer sind.

    Antwort
    • 28. Juli 2021 um 0:41
      Permalink

      Hey Ralf,
      konntest du das schon realisieren?

      Viele Grüße

      Antwort
  • 17. Februar 2021 um 9:40
    Permalink

    Hallo,

    ich versuche das gerade nach zu bauen mit einem Wemos D1 Mini.
    Welche Anschlüsse muss ich da nehmen?
    Strom nehme ich über die USB Buchse wo kommen die 2 Fühlerkabel dran?
    Und geht die Sketch Datei auch beim Wemos D1 mini oder muss die umgebaut werden.
    Habe sie schon mal drauf gebrannt aber leider finde ich den Wemos nicht im Netzwerk.
    (Doofe Frage, die im Sketch zu ändernden Daten bleiben in den Spitzklammern??.

    Vielen Dank

    LG
    Kai

    Antwort
    • 18. Februar 2021 um 6:38
      Permalink

      Hallo Kai,

      grundsätzlich funktioniert das natürlich auch am Wemos D1 Mini, hier müssen nur in der Tat andere Anschlüsse verwendet werden. Ich würde Dir hierfür folgenden Artikel empfehlen, da hier genau Deine Hardware eingesetzt wird.

      http://heinz-otto.blogspot.com/2018/09/wassermelder-mit-esp8266.html

      Die ioBroker Anbindung über MQTT kannst Du dann wieder aus meinem Artikel entnehmen. Die spitzen Klammern stellen Platzhalter dar, und dürfen so nicht im Code stehen bleiben. Einfach den Platzhalter mit Deinen Wifi-Daten ersetzen.

      LG Matthias

      Antwort
  • 25. Februar 2021 um 8:07
    Permalink

    Hi,

    danke für die Anleitung. Leider bekomme ich den Reset, sprich das erneute Aufwachen noch nicht hin.
    Ein einmaliges publishen nach Anschluss der Versorgungsspannung funktioniert aber.

    Ich bin leider kein Elektrotechniker und verstehe da bei vielen Sachen nur Bahnhof. Ich denke es liegt an den Anschlüssen für den RST und EN PIN.

    Soweit ich deine Schaltung verstehe, wird der RST PIN einfach auch an die +3,3V angeschlossen.
    Von dort dann eine Leitung ins Wasser. Die andere Leitung direkt vom EN PIN ins Wasser.

    Ich hab eigentlich genau die Bauteile bestellt, die Du oben auflistest, aber scheinbar scheint es Unterschiede bei den ESP-01s hinsichtlich Pull-up-Widerständen zu geben.
    Auf dieser Seite hier (https://esp8266-server.de/Wassermelder.html) habe ich gelesen, dass man zwischen EN und 3,3V PIN den Widerstand messen soll. Ich messe dort in der Tat ~12kohm und nicht mehrere 100kohm. Das mit dem Widerstand entfernen hab ich auch ausprobiert. Der ESP funktioniert zwar noch, aber geändert hat sich leider nichts.

    Sobald ich die beiden Wasserleitungen kurzschließe erfolgt kein Reset.
    Was mache ich falsch?

    Btw: Für was ist eigentlich die „water_detected“ variable in deinem sketch?
    Die ist doch immer „true“ und damit kann man sie auch weglassen.

    Danke & Gruß,
    Flo

    Antwort
    • 4. März 2021 um 17:30
      Permalink

      Hallo,

      selbes Spiel bei mir. Wenn ich den Melder einschalte meldet er sich am mqtt an.
      Danach geht gar nichts mehr. Ich denke er wacht nicht aus dem deep sleep auf.
      Gibt es dafür eine Lösung?

      Soweit ich es sehe, regelt die water_detected variable ob die WLAn Signalstärke gesendet wird…

      Antwort
    • 4. April 2021 um 20:00
      Permalink

      Ich habe leider mit dem Entfernen des Widerstandes meinen ESP-01S gekillt. Zuerst gedacht, ok, irgendwie anders zerstört. Aber auch der zweite ESP-01S war nach Entfernen des Widerstandes nicht mehr flashbar. Also Vorsicht bei der beschriebenen Anleitung. Bei mir meldet sich das Teil auch nur beim Einschalten. Einen Wasserkontakt, bekomme ich nicht gemeldet. Hat da jemand eine Idee, woran es liegen könnte?

      Grüße und Danke

      Marcus

      Antwort
  • 15. Juli 2021 um 11:20
    Permalink

    Hallo,
    Großartiger Artikel!
    Ich bin Franzose Ich habe mit Google Translate ins Deutsche übersetzt Ich hoffe, es wird verständlich sein.
    Ich suche ein System zur Kontrolle des Wasserstandes in einem Regenwassersammeltank.
    Glaubst du, dass ich mit 3 Systemen wie deinem den Tank zu 100%, 50%, 0% verwalten kann?
    Vielen Dank.
    Grüße,

    Antwort
    • 20. Juli 2021 um 9:52
      Permalink

      Hallo,
      danke 😉
      Möglich ja, aber ich denke weniger sinnvoll. Hier würde sich meiner Meinung nach ein Ultraschallsensor (wasserdicht) besser eignen. Ich habe hierfür noch ein Projekt auf dem Plan 😉
      Dauert aber leider noch etwas…

      LG Matthias

      Antwort
  • 28. Juli 2021 um 0:25
    Permalink

    Hey Matthias,

    ich habe nach dem Unwetter die letzten Tage hier in NRW Bedarf, dass Ganze nachzubauen.
    Ich habe noch einen NodeMCU Lolin V3 Module ESP8266 ESP-12F hier liegen (/https://www.amazon.de/gp/product/B06Y1ZPNMS/ref=ppx_yo_dt_b_asin_image_o02_s00?ie=UTF8&psc=1). Klappt das Ganze mit dem ebenfalls? Wenn ja, an welche Pins, müsste ich den ESP wie verkabeln?

    Viele Grüße

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.