Sonntag, 17. September 2017

Wassermelder mit ESP8266


Die grundlegende Sensormechanik ist dem Homematic Wassermelder entlehnt. In ein Industrie Aufputz Gehäuse IP65 mit den Abmessungen 100x67x50 werden im Boden 5 Spikes eingebaut, ein Spike wird gekürzt um die Möglichkeit eines Wasserstandes zu haben.
Damit ergibt sich eine Bodenfreiheit von ca. 13 mm.
Zwei der Spikes bilden den primären Sensor, läuft Wasser auf dem Boden schließt er den Kontakt zwischen beiden Spikes.


Für die Schaltung braucht man im Wesentlichen neben etwas Draht noch einen ESP12F, 2 x 1 MOhm, 100µF Kondensator und eine Batteriehalterung für zwei AA Batterien.
Ein kleines Stück Universalplatine ein 6 poliger und ein 2 poliger Pfostenstecker sorgen für etwas Komfort beim Aufbau.
Das Schaltungsprinzip geht auf diesen Artikel zurück.

Ich habe aber als Software lediglich ESPEasy aufgespielt.

Funktion

Der Eingang RESET und GPIO16 (D0) wird über einen Jumper verbunden. damit kann man das Modul in den Sleep Modus versetzen und es kann zyklisch oder über den EN Eingang aufwachen.
Der Eingang EN (CH_PD) ist normalerweise über einen Widerstand 1 MOhm nach Masse gezogen, das Modul befindet sich im Sleep Modus und verbraucht nur ca. 16 µA.
Wird der Eingang durch Wasser mit dem Pluspol verbunden (normaler Betrieb) startet das Modul und liefert aktuelle Werte an das ESPEasy Modul von FHEM. Diesen Event kann man in FHEM auswerten.
Der Eingang GPIO14 (D5) wird ebenfalls mit einem Widerstand 1 MOhm nach Masse gezogen und ist mit dem abgesägtem Spike verbunden. Mit ihm könnte "Wasserstand  von ca. 5 mm ermittelt werden.

Betriebsarten

Konfiguration

Das Kabel zu den drei Fühlerspitzen wird entfernt.
Der Jumper wird von den Anschlüssen RST und D0 von J2 entfernt und so auf J6 gesteckt, dass EN und VCC gebrückt werden. Damit startet das Modul im normalen Modus.
Vorsicht, jetzt zieht das Modul dauerhaft ca. 80 mA. Wird es jetzt schon mit Batterie versorgt ist diese nach ca 15 Stunden (oder eher) leer.

Bei einem neuen Modul wird jetzt das Netzwerk konfiguriert.
Grundlegend ist die Konfiguration hier beschrieben

Nach dem Neustart unter dem Reiter Config:

  • ein sinnvoller Unit Name vergeben.
  • FHEM Server eintragen
  • Im Reiter Devices
    • Gerät definieren, System RSSI
    • Gerät definieren, Switch, GPIO14, kein Pullup


Nach dem die Geräte in FHEM automatisch angelegt wurden kann man den ESP in den Sleep Mode schicken: Unter Reiter Config Häkchen setzen. Mit der Zeitspanne in µsec kann man erreichen, dass sich der Melder immer wieder schlafen legt und in diesem Abstand eine erneute Meldung absetzt.

Normaler Betrieb

Jetzt zieht man den Jumper von J6 und steckt ihn auf J2 D0-RST
Das Gerät darf jetzt nicht mehr erreichbar sein.
Die Fühlerspitzen werden mit + EN D5 verbunden.

Reset Konfiguration

Ist das ESP Modul nicht mehr erreichbar oder soll neu konfiguriert werden, kann ESP-Easy zurückgesetzt werden. 
  • Das Kabel zu den Fühlerspitzen wird entfernt.
  • Ein zweiter Jumper wird so gesteckt, das an J6 TX und RX verbunden sind.
  • Der Jumper auf J6 wird so gesteckt, dass EN und VCC gebrückt werden.
Betriebsspannung einschalten und warten bis Wlan ESP_0 zu sehen ist. Dies dauert eine Weile!

Test 

Einfach die beiden Spikes mit feuchtem Finger verbinden, die blaue LED am ESP muss kurz aufleuchten und in FHEM muss ein Event erzeugt werden.

Konfiguration in FHEM

Hier noch eine Beispieldefinition
define ESPEasy_Wassermelder_WM1 ESPEasy 192.168.100.137 80 espBridge Wassermelder_WM1
attr ESPEasy_Wassermelder_WM1 IODev espBridge
attr ESPEasy_Wassermelder_WM1 Interval 300
attr ESPEasy_Wassermelder_WM1 event-on-change-reading .*
attr ESPEasy_Wassermelder_WM1 eventMap /gpio 14 on:on/gpio 14 off:off/
attr ESPEasy_Wassermelder_WM1 group ESPEasy Device
attr ESPEasy_Wassermelder_WM1 presenceCheck 1
attr ESPEasy_Wassermelder_WM1 readingSwitchText 1
attr ESPEasy_Wassermelder_WM1 room ESPEasy
attr ESPEasy_Wassermelder_WM1 setState 3

define Wassermelder_DOIF DOIF ([ESPEasy_Wassermelder_WM1:presence] eq "present") (set Wassermelder_dummy on)\
DOELSE (set Wassermelder_dummy off)
attr Wassermelder_DOIF do always
attr Wassermelder_DOIF icon helper_doif
attr Wassermelder_DOIF room Boden

17 Kommentare:

  1. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  2. Hallo Herr Klas,
    sehr interessanter Beitrag, da ich ESPeasy selber auf mehreren Wemos D1 mini zum Laufen gebracht habe, wollte ich den Wassermelder ebenfalls mit einem Wemos nachbauen.
    Bin leider an der Verbindung EN (CH_PD) gescheitert, kann ja nicht den Feuchtefühler direkt an 3,3V in abschließen.
    Hätten Sie einen Tipp für mich?
    Gruß Dirk





    AntwortenLöschen
    Antworten
    1. Hallo Dirk, der Wemos ist insgesamt natürlich wegen seiner Randbeschaltung für einen Batteriebetrieb kontraproduktiv. Der EN Eingang ist fest über einen Widerstand 12 k nach + 3,3 Volt verbunden, der Pin ist nicht rausgeführt. Da müsste man also den Widerstand R7 entfernen und den EN Eingang dort direkt kontaktieren und mit einem Widerstand von 1M nach Masse ziehen. Die größeren Kits haben alle den 12K Widerstand verbaut, obwohl das EN Pin nach aussen gezogen ist.

      Gruß Otto

      Löschen
    2. Hi,
      dann alles klar, danke. Hab mir schon den ESP-F bestellt.
      Im Netz habe ich eine Anleitung gefunden wie man den Wemos über den Reset-Pin aus dem Deepsleep Modus hochfahren kann. Will mal beide probieren.
      Nochmals Danke für die Anregung und Anleitung.
      Gruß Dirk

      Löschen
    3. Hi, aber auch da ist das "Problem" der nicht vorhandene "Hochohmigkeit" des Anschlusses. Auch der liegt mit 12k gegen Plus. Ich habe es nie probiert, vielleicht ist Wasser auf dem Boden immer sehr leitfähig und es spielt keine Rolle. Reines Wasser ist eher ein Isolator :) https://de.wikipedia.org/wiki/Spezifischer_Widerstand
      Gruß Otto

      Löschen
  3. Hallo Otto,
    ich bekomme es nicht hin. EspEasy läuft, ESP-F schläft ein und wacht auf, soweit alles OK.
    Wenn der ESp im deepsleep-Modus ist, bekomme ich hin durch die Wasserfühler nicht zu starten. Auch die Konfiguration gemäß "Link" weiter oben mit dem Kondensator am GND hilft nicht. Wenn ich es richtig verstehe, bekommt der GPIO CH-PC durch die Wasserfühler einen kurzen Impuls.
    Haste vielleicht noch eine Idee, will es heute noch einmal ohne Breadboard probieren.
    Gruß Dirk

    AntwortenLöschen
    Antworten
    1. der CH_PD / EN liegt im Schlafzustand auf Masse (minus) Er bekommt nicht einen Impuls sondern er wird auf den Pluspol 3 Volt gelegt. Erst dann kann der ESP starten.

      Löschen
  4. Hi,
    klar kein Impuls sondern kontakt zu VCC, unpräzise formuliert.
    Wenn der ESP schläft und ich den CH_PD/EN direkt mit VCC verbinde, müsse er doch hochfahren, oder?
    Das tut er leider nicht.
    Gruß Dirk

    AntwortenLöschen
    Antworten
    1. Hallo Dirk, dazu muss aber auch D0-RST verbunden sein.
      Gruß Otto

      Löschen
  5. Hi,
    ja hatte ich verbunden ja auch wegen deepsleep.
    Der ESp-F will auf dem GPIO CH_PD/En nicht starten.
    Unter EspEasy hab ich nichts weiter eingestellt, Verdrahtung wie oben dargestellt.
    Vielleicht noch eine Idee?
    Gruß Dirk

    AntwortenLöschen
  6. Hallo, ich schließe mich mal an. Der ESP wacht nicht auf, wenn man die Verbindung zwischen VCC und CH_PD/EN macht. Kurz den RST auf GND funktioniert. Ich bin auch ein wenig ratlos, habe mir extra einen neuen ESP bestellt weil ich dachte der erste ist defekt. Ich verwende ESPEasy "release mega-20201102".
    Gruß - Andreas

    AntwortenLöschen
    Antworten
    1. ... ich antworte mir mal selber :-)
      Auf der Adapterplatine vom ESP war ein 10k Widerstand zwischen Vcc und CH_PD/EN. Das war der Grund, warum es nicht klappen wollte. Widerstand entfernt, schon klappt es.

      Löschen
    2. Aber genau das steht in meinem Beitrag vor einem Jahr im Februar! Meine Anleitung ist mit einem nackten ESP12 - das will ich hier gern noch mal erwähnen. Irgendeine Nodemcu, Wemos - wie auch immer funktioniert nicht ohne Modifikation!

      Löschen
  7. Hallo,

    ich möchte etwas ähnliches bauen. Ich möchte meinen Wemos d1 Mini als Wassermelder einsetzen ohne Batteriebetrieb.

    Soll heißen das Gerät hängt im Sickerschacht mit 2 Kabeln. Wenn Diese berührung mit wasser bekommen kommt die entsprechende Medlung über MQTT. An welche Pins kommen die 2 Fühler und was muss ich in Esp_Easy einstellen? MQTT bekomm ich hin, es geht mir einzig die Fühler und den Kontakt mit Wasser. Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt und Du kanst mir helfen.

    Vielen Dank

    Kai

    AntwortenLöschen
    Antworten
    1. Hi, Wie schon mehrfach bemerkt, hat der Wemos d1 Pullup Widerstände 10 kOhm nach VCC. Der Baustein wird dadurch nicht ohen Modifikation funktionieren. Ansonsten stehen die Anschlüsse doch im Text? Nimm wie dargestellt den Eingang GPIO14 (D5) der wird ebenfalls mit einem Widerstand 1 MOhm nach Masse gezogen und als zweiten Anschluss VCC. Gruß Otto

      Löschen
  8. Hallo Otto,
    ich habe deinen Wassermelder nachgebaut und er funktioniert gut. Kennst Du eine Möglichkeit, die aktuelle Batteriespannung regelmäßig per MQTT zu senden?
    Gruß Thomas

    AntwortenLöschen
  9. Hallo,
    Dein Wassermelder gefällt mir. Was hast Du für die Spikes genutzt. Sieht sehr gut aus.
    Grüße und Danke
    Christian

    AntwortenLöschen