ESP8266ESP8266 - EinführungioBroker Tutorials

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 (3166 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.

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

  • Ulf Palme

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

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

    Antwort
  • eber37

    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
  • Ralf

    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
    • Hey Ralf,
      konntest du das schon realisieren?

      Viele Grüße

      Antwort
  • 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
    • Matthias Korte

      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
  • 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
    • Frank Zoellner

      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
    • Marcus Hüneke

      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
      • Exakt das gleiche Problem habe ich leider auch.
        Anmeldung an MQTT im IoBroker problemlos.
        Sobald jedoch die beiden Spitzen mit dem Wasser in kontakt kommen, passiert nichts.

        Antwort
  • Cedric CUVELIER

    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
    • Matthias Korte

      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
  • 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
  • Volkmar Großwendt - Autor, Dozent, Publizist und Journalist(akkr.)

    Hallo Matthias,

    ich habe das Beispiel auch mit einem „aktuellen“ ESP-01-S nachgebaut, der ja nur noch die „blaue“ LED auf dem Board hat. Und ja, auch hier ist der 12K Pull-Up Widerstand zwischen 3V3 und CH-PD aktiv. Wie hier zahlreich beschrieben, läuft der Wassermelder auch bei mir nicht.

    Mir fällt auf, dass du den deepSleep(0) hier in der Loop-Funktion eingesetzt hast. Der sitzt doch nochmalerweise im setup() und in der loop() dann konsequenterweise das yield().

    So simpel das Beispiel eigentlich ist, gibt es wohl massiv probleme. Der Aufbau ist derart einfach, aber auch bei mir läuft das nicht. Ich habe versucht ein Basis-Beispielsetup zu generieren, in dem die Sensorik Pol(A) an 3V3 liegt und der Pol(B) direkt an CH_PD. Der ist ja hochohmig und sollte bei Wasserkontakt auch zuverlässig auslösen. Selbst eine einfache Testschaltung ohne Kommunikations-Overlay lief nicht. Der Aufbau zum testen:

    -> 3V3 an VDD und RESET und Sensor-Pol(A)
    -> CH_PD an Sensor-Pol(B)
    -> GND an GND

    zudem habe ich dann eine LED mit 220R-Widerstand von 3V3 über 220R über LED an GPIO2 geroutet. Im Alarmfall sollte als GPIO2 auf LOW/GND gezogen werden und die LED zur Kontrolle angehen. Wassererkennung läuft aber nicht, LED bleibt dunkel.

    Freue mich auf eine kurze Rückmeldung.

    LG
    Volkmar

    Antwort
  • Stefan Dreßler

    Hallo!

    Bei mir ist das selbe Problem – publish klappt am Anfang 1x – dann kein Aufwachen mehr aus dem DeepSleep. Kann mir jemand einen Tipp geben, der das vielleicht schon gelöst hat?

    Antwort
  • Joachim

    Hervorragend, genau das habe ich gesucht! Noch 3 Verständnisfragen:
    1. Der USB-Adapter wird nur fürs Flashen verwendet?
    2. Der Breadboardadapter bleibt anschließend auf dem ESP, am diesem werden die Fühlerdrähte angeschlossen?
    3. Wie groß sollte ungefähr der Abstand der beiden Fühlerlitzen sein und wie lange in etwa dürfen bzw sollen sie beiden Fühlerdrähte sein? Wie sieht das mit Kupfer und Korrosion aus? (ich komme später nicht mehr an die Stellen, die überwacht werden sollen)
    Herzlichen Dank!!

    Antwort

Schreibe einen Kommentar zu Ulf Palme Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.