Ok. Das ist eine gewagte Überschrift.
Ich kann euch sagen, ab 3 Stück, erreichen wir den Preis
( Ohne Batterien – DE Bestellung – Amazon )

 

Was wird benötigt?

ESP 01
AA Batteriegehäuse 10 Stück 
Klingeldraht oder Jumperkabel
Steckleiste / Stiftleiste 2,54 mm
3D Druck Gehäuse ( Download-Link )


Am Standort muss eine Wlan Verbindung aufgebaut werden können!

Im Script wird die Qualität der Verbindung übertragen, testet das Modul und prüft ob am gewünschten Standort eine Verbindung aufgebaut werden kann! 

Je höher der angezeigte Wert bei der Signalstärke, desto schlechter das Signal (-0 dBm wäre ideal).Werte zwischen -30 dBm und -40 dBM sind für einWLAN gut, Werte jenseits von -85 dBm sind kritisch.


Zum Flashen können wir einen Arduino UNO / Mini / Mega oder einfach einen FTDI Adapter benutzen.
( Sollte keiner Vorhanden sein, so erhöht sich der Preis pro Wassermelder )

Preislich liegen wir bei ( Stand 20.06.2019 )

ESP 01 bei 1 Stück : 3€
AA Batteriegehäuse  Stück :0,7 €
Klingeldraht oder Jumperkabel ( paar cents )
Steckleiste / Stiftleiste RM2,56 ( paar cents )
3D Druck Gehäuse ( paar cents )

Und so kommen wir auf einen ~ Preis von 4 Euro.
Die Produktpreise sind vom Amazon mit kostenfreier Lieferung ( Prime )

Jetzt kommen wir zu dem Teil der Spannend wird, wir müssen auf dem ESP 01 die LED entfernen:

Wir haben zwei Möglichkeiten diese zu entfernen:

1.)  Auslöten
2.) Mit etwas gewallt abziehen

Meine Messung ergaben:
Im Deep-Sleep Modus habe ich mit LED 27uA gemessen
Im Deep-Sleep Modus ohne LED habe ich : 15uA gemessen

Nach dem wir also nun die LED entfernt haben, sparen wir 0,12 mA
Das schon ordentlich 🙂

Daraus ergibt sich folgende „Theoretische“ Lebensdauer:
Berechnung:
1,2Ah/0,000015A=80000h.
80000h/24= 3333 Tage.
3333Tage/365Tage= 9,13 Jahre.

Gehen wir von jetzt davon aus das die Batterien nur ein drittel* tatsächlich schaffen, sind wir immerhin noch bei 3 Jahren.

*Temperaturschwankungen
*Selbstentladung
*leichte Schwankungen im Verbrauch
*Batterietypen unterschied

Der ESP Chip kann noch eine Meldung bei 2,3V absetzen, danach ist Schluss, alles unter 2,3V wird kritisch!
Daher würde ich empfehlen, den Wassermelder jedes Jahr zu testen und ggf. die Batteriespannung zu messen.


Aufbau:

Um die ganze Schaltung irgend wo unter zu bringen, habe ich mir ein 3D Druck – Gehäuse gedruckt.

Sobald nun die Verbindung oben bzw unten mit Wasser in Berührung kommen, startet der ESP und gibt seine Meldung ab.

Abmaße sind nun:
L/H/B
75 x 30 x 50 mm

Arduino-Code:

/* Wassermelder V2
 * Sleep-Mode 
 * Rote LED muss entfernt werden, da wir sonst unser Sparziel nicht erreichen
 * Wlan SSID und Passwort müssen eingetragen werden 
 * client.connect(EUER Anmeldename beim Broker, mqttUser, mqttPasswort ) 
 * client.publish(); Zeilen müssen angepasst werden!
 * URL: https://www.techdroid.de/artikel
 * 
 * Code wurde auf das nötigste reduziert! 
 */
 #include <ESP8266WiFi.h>
 #include <PubSubClient.h>
 #include <time.h>
 WiFiClient espClient; 
 PubSubClient client(espClient); 
 bool wasser_gemeldet = true;
char ssid[] = "SSID";  //  SSID (name)
char pass[] = "passwort";       // password
const char* mqtt_server = "192.168.178.62"; //Broker IP Address
const char* mqttUser = "iobroker"; // Broker Name
const char* mqttPassword = "passwort"; // Broker Passwort
char tmp[50];
char time_value[20];
// Millis() setzen
unsigned long int currentMillis = millis();
unsigned long startMillis;  //
const unsigned long period = 10000;  // führe nach x nochmals ein Event aus 


void connect_to_MQTT() {
 client.setServer(mqtt_server, 1890);//MQTT Server, - Port
 //wassermelder-euren Standort anpassen
  if (client.connect("wassermelder-kueche" , mqttUser, mqttPassword)) {
    Serial.println("Verbinde zum MQTT Server");
  } else {
    Serial.println("zu MQTT Server nicht verbunden ");
    //wassermelder-euren Standort anpassen
    if (!client.connect("wassermelder-kueche" , mqttUser, mqttPassword)) {
            Serial.print("Fehlgeschlagen, state=");            
        }
  }
}

void setup() {
  
WiFi.begin(ssid, pass);
configTime(2 * 3600, 0, "0.de.pool.ntp.org", "ptbtime1.ptb.de"); // Zeitserver
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  
  connect_to_MQTT();
  delay(3000);
}

void loop() {
if (!client.connected()) {
    connect_to_MQTT();
  }
  time_t now = time(nullptr);
  String time = String(ctime(&now));
  time.trim();
  time.substring(0,19).toCharArray(time_value, 20); 
  // Bitte TEXT anpassen ( wassermelder-X ) rest bleibt stehen! 
    client.publish("wassermelder-kueche/wassereinbruch/time", time_value);
  if (wasser_gemeldet == true ) {
    long rssi = WiFi.RSSI();
    itoa(rssi,tmp,10);
    //Wlan Signalstärke ( Standort Bestimmung )
    // Bitte TEXT anpassen ( wassermelder-X ) rest bleibt stehen! 
    client.publish("wassermelder-kueche/wassereinbruch/rssi",tmp);
   // Führe Aktion aus wenn Wasser gemeldet ist ( Gerät wurde aktiviert = Wassereinbruch ) 
     delay(3000);
    aktiviere();
  } 
  
}

 void aktiviere() {
  // setze millis() auf aktuell
  startMillis = millis();
     // Wassereinbruch
      // Melde dies per MQTT 
    delay(1100);
    // Bitte TEXT anpassen
    client.publish("wassermelder-kueche/wassereinbruch/text", "Wassermelder aktiv: Standort: Küche");
    if (currentMillis - startMillis >= period) 
  {
    //delay(5000);
    // Bitte TEXT anpassen
    client.publish("wassermelder-kueche/wassereinbruch/text", "Wassermelder aktiv: Standort: Küche"); 
  }  
    delay(500);
    ESP.deepSleep(0); // Schlafen legen
    delay(100);
  
 }

Bitte passt das Script mit euren Daten an!
Was angepasst werden muss, ist mit einem Kommentar versehen!

Das ganze Flashen wir auf unseren ESP 01.

Da der ESP 01 kein USB Eingang hat, müssen wir diesen über die vorhanden Pins Flashen:

VCC auf VCC und auf CH_PD ( Externe 3V Quelle verwenden, beim Flashen! )
TX auf RX
RX auf TX
GND auf GND
GPIO 0 muss auf LOW gezogen werden ( GND )
Dach dem Starten , reseten wir den ESP 01 mittels dem RST Pin ( auf GND legen )
Anschließend nehmen wir die Masse ( GND ) vom GPIO 0.

Somit sind wir im Flash Modus.
Einstellungen in der Arduino IDE:

Nach dem nun das Script auf unseren ESP 01 geladen ist, bauen wir alles zusammen.
Haltet die Leitungen so kurz wie möglich, so lang wie nötig.

Gehen an dem gewünschten Standort und machen unseren Finger nass und verbinden die Kontakte oben oder unten.
Der Wassermelder muss nun eine Meldung abgeben die in eurem Broker auftaucht.

Ich habe das ganze mittel ioBroker gelöst, sobald eine Meldung kommt, werde ich per Telegram informiert!

Das Script dafür gibt es hier:
Bitte eure Datenpunkte anpassen!

<block xmlns="http://www.w3.org/1999/xhtml" type="on" id="dj~Zd-;,N,5MlQw}2w3-" x="-687" y="-312">
  <field name="OID">mqtt.1.wassermelder-kueche.wassereinbruch.text</field>
  <field name="CONDITION">any</field>
  <field name="ACK_CONDITION"></field>
  <statement name="STATEMENT">
    <block type="telegram" id="*`Pvb$)XOf6ru]o)X]UC">
      <field name="INSTANCE"></field>
      <field name="LOG"></field>
      <field name="SILENT">FALSE</field>
      <field name="PARSEMODE">default</field>
      <value name="MESSAGE">
        <shadow type="text" id="O3tcWqD;f3JQkrUu-y;#">
          <field name="TEXT">text</field>
        </shadow>
        <block type="text_join" id="_U_]-GaGYApB5H2]b#So">
          <mutation items="3"></mutation>
          <value name="ADD0">
            <block type="get_value" id="KCE/+u[0X*r@Vt(m0SF]">
              <field name="ATTR">val</field>
              <field name="OID">mqtt.1.wassermelder-kueche.wassereinbruch.text</field>
            </block>
          </value>
          <value name="ADD1">
            <block type="text" id="?jGF%U_a8WuAgnf_rcF@">
              <field name="TEXT"> Festgestellt : </field>
            </block>
          </value>
          <value name="ADD2">
            <block type="get_value" id="?:,4:Dyj]-,tXhCck_3g">
              <field name="ATTR">val</field>
              <field name="OID">mqtt.1.wassermelder-kueche.wassereinbruch.time</field>
            </block>
          </value>
        </block>
      </value>
      <value name="USERNAME">
        <block type="text" id="ihcX)/#~2n*/+7,74lob">
          <field name="TEXT">Pascal</field>
        </block>
      </value>
    </block>
  </statement>
</block>

 

Das war es eigentlich auch schon. 🙂

Gerne könnt Ihr mir einen Kommentar da lassen.
Fragen werden zeitnah beantwortet.

 

Bis zum nächsten Beitrag 🙂

* Meine Links führen zu Amazon, solltet ihr über diesen Link etwas kaufen, erhalte ich eine kleine Provision. Die Produkte werden keinen Cent teurer, wenn Ihr von hier aus auf Amazon geht!
Danke!

6 Replies to “Arduino Wlan Batterie Wassermelder für ~ 4€”

  1. Hallo,

    ich möchte ein Wasserleck am eine Wasserleitung Verbindung.
    Dabei sind 4 Stellen zu überwachen.
    -> Wie kann man der Aufbau anpassen um der Status den 4 Stellen zu überwachen ?
    Das Hochfahren der ESP kann man durch das Verbiden von alle 4 Stellen mit der CH_PD -Eingang lösen.
    -> Aber welche Pin der ESP können noch dazu das Widerstand messen ?
    -> Oder kann das ESP 01 eignetlich gar nicht verwalten?

    Kannst du mir eine Skizze und Sketch zuschicken ?

    1. Hallo Selfa,

      vielen Dank für Deine Antwort und Rückfrage.

      Mit dem ESP01 geht es leider nicht.
      Denke Du möchtest schon angezeigt bekommen welche Deiner 4 Stellen Wassereinbruch meldet.
      Wenn nicht, kannst Du 4 Kupferkabel an CG_PD hängen und diese parallel anschließen.
      Nachteil: Wenn einer der Kontakte geschlossen wird, meldet er fleißig, jedoch nicht welcher der vier es gewesen ist.

      Ich habe derzeit echt viel um die Ohren, werde mir aber heute Abend mal Gedanken machen und hier nochmals eine Antwort schreiben.

    1. Hallo Peter,

      soll er auch nicht, sobald der ESP aus seinem Schlaf geholt wird, muss zwingend die Variable auf true stehen um die Funktion : aktiviere() zu starten.

      In dieser Funktion legt er sich auch wieder schlafen.
      delay(500);
      ESP.deepSleep(0); // Schlafen legen

      Sollte der ESP ständig anspringen, so muss der Eingang bzw die Verkabelung an CH_PD überprüft werden.
      ( Der Pin ist sehr hochohmig, daher reicht schon wenig Spannung aus um diesen auf High zu ziehen )

  2. Hallo,

    interessante einfache Schaltung. Habe es mit 2 ESPs versucht.
    leider sendet er nichts. Mqtt Verbindung klappt. Habe mir eine Meldung in setup gelegt.
    client.publish(„wassermelder-kueche/wassereinbruch/ESPein“,“Eingeschaltet“);
    Kommt einwandfrei an.
    Danach passiert nichts mehr.
    VCC und RST liegen auf 3Volt
    EN (CH_PD) ist der 2. Pol
    Wie gesagt, er meldet sich beim Einschalten und das war es dann.

    Kann es sein, dass es nicht mit allen ESPs funktioniert.?

    Grüße

    Marcus

    1. Danke für Deinen Kommentar.

      Sobald der ESP gestartet ist, gibt es jetzt in Deinem Script ein “ Eingeschaltet “ und legt sich dann sofort schlafen.
      Sobald der CH_PD Pin ein wenig Spannung bekommt, startet er wieder und gibt wieder eine Meldung ab.

      Mit dieser Meldung musst Du weiter Arbeiten ( denn diese kommt nur wenn er startet ) ( Siehe Script )

      Hast Du mal mit einem nassen Finger die PINS gebrückt und so quasi einen Wassereinbruch zu melden?

      Grüße
      Pascal

Schreibe einen Kommentar

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.