Das Raspberry Pi als Wassersensor benutzen – E-Mail als Benachrichtung

41 Kommentare Autor: Jürgen (jdo)

Ich brauche einen Wassersensor und zwar einen, der mich bei vorhandenem Wasser informiert. Nun habe ich nach solchen Geräten gesucht und die gibt es auch, allerdings derzeit nicht für mich greifbar. Allerdings kann man das auch mit einem Raspberry Pi realisieren, was meinen Ansprüchen noch besser taugt, da ich mich dann per E-Mail benachrichtigen lassen kann. Seitdem ich das Raspberry Pi 2 habe, liegt Version B eigentlich nur traurig im Schrank – bisher – nun bekommt der ältere Winzling eine sehr wichtige Aufgabe. Wir funktionieren das Gerät zu einem Wassersensor um.

Gleich vorweg möchte ich nehmen, dass die Lösung Wassersensor mit Raspberry Pi nicht viel oder gar nicht teurer ist als kommerzielle Produkte.

Was brauchen wir für das Raspberry Pi als Wassersensor?

Hinweis: Wenn Du etwas am Breadboard oder der GPIO-Schnittstelle änderst, dann ist es ratsam, das Raspberry Pi herunterzufahren und abzustecken. Also ich mache das zumindest, um Schäden an dem Winzling zu vermeiden.

Wie gesagt komme ich nicht an die Teile aus einem Elektroshop und musste einfach suchen. Dann bin ich auf diese kurze Anleitung gestoßen und habe im Prinzip die Schaltung übernommen – den Buzzer und den Kondensator (das fette schwarze Ding auf der rechten Seite und das Ding nach dem violetten Draht) habe ich auch nicht zur Hand, dafür eine LED.

Einwurf: Manchmal ist es wunderbar, wenn man nicht alles bestellen kann oder Dinge nicht greifbar sind – man fängt an, kreativ zu werden … Die oben erwähnte Anleitung hat mir den Schalter im Gehirn umgelegt, dass ich für den Wassersensor an sich eigentlich nur ein leitendes Material brauche, um einen Stromkreis zu schließen.

Raspberry Pi als Wassersensor: Die Schaltung (Quelle: http://fritzing.org)

Raspberry Pi als Wassersensor: Die Schaltung (Quelle: http://fritzing.org)

Logischerweise benötigen wir ein Raspberry Pi und eine SD-Karte mit Raspbian oder einem anderen funktionierendem Linux-System darauf. Dann sind einige Steckbrücken nicht verkehrt und ein bisschen Draht. In dem oben erwähnten Projekt wird selbstklebendes Kupferband verwendet. An das komme ich aber auch nicht und jemand bringt es mir im August mit. Ich habe dafür ein Stück Ethernet-Kabel genommen und das hat ebenfalls funktioniert.

Erst auf dem Breadboard testen

Zunächst habe ich meine zugegeben recht simple Schaltung auf einem Breadboard mit einem Schalter und dann mit Drähten und Wasser getestet. Diese kleinen Komponenten kann man alle einzeln kaufen oder man bestellt sich so ein Starter Kit für das Raspberry Pi / Arduino. Da ist auch alles drin, was man zum Testen benötigt.

Mit drei Drähten, einem Schalter, einem Widerstand und einer LED sieht das Ganze so aus. Der Schalter ersetzt dabei den eigentlichen Sensor.

Das Rasperry Pi als trockener Wassersensor

Das Rasperry Pi als trockener Wassersensor

Was passiert nun, wenn man den Schalter drückt? Der Stromkreis wird geschlossen und die LED leuchtet. Weiterhin wird Strom auf GPIO #18 angelegt, der Zustand ändert sich also auf 1. Das ist wichtig, da wir für den Wassersensor genau diesen GPIO-PIN beobachten.

  • 0 ist Stromkreis unterbrochen -> keine Leitung -> kein Wasser
  • 1 ist Stromkreis geschlossen -> es findet Leitung statt -> Wasser
Schalter gedrückt simuliert, dass Wasser am Sensor ist.

Schalter gedrückt simuliert, dass Wasser am Sensor ist.

Wassersensor: Schalter durch Drähte ersetzt

Versuchen wir das Ganze nun mit Drähten anstelle des Schalters. Ein an den Enden abisoliertes Ethernet-Kabel (ich habe nur zwei von acht Kabeln genommen, das reicht) lässt sich gut in das Breaboard stecken. Das andere Ende ist zunächst nicht verbunden, was uns den Zustand 0 oder unterbrochener Stromkreis beschert. Hmmm – grün und braun waren für das Foto eher nicht ideal – ich hätte wohl rot und blau nehmen sollen – egal jetzt …

Die Drähte ersetzen den Schalter.

Die Drähte ersetzen den Schalter.

Stecke ich nun das andere Ende in ein Glas mit Wasser, fängt die LED zu leuchten an. Das bedeutet für GPIO #18 den Zustand 1 -> Stromkreis geschlossen -> Wasser.

Die Drähte befinden sich nun in einem Glas mit Wasser und schließen den Stromkreis.

Die Drähte befinden sich nun in einem Glas mit Wasser und schließen den Stromkreis.

Update: Das Testkabel war 1,3 Meter lang. Ich habe es nun mit einem Cat 5 Ethernet-Kabel mit zehn Metern probiert, plus die 1,3 Meter noch manuell hingezwirbelt. Also mit einer unsauberen Verbindung nach zehn Metern funktioniert das KOnstrukt mit über elf Metern – die LED leuchtet allerdings nur noch sehr schwach.

Raspberry Pi Wassersensor schickt E-Mail

Der Wassersensor an sich funktioniert und würde uns über die LED benachrichtigen, wann Wasser vorhanden ist oder nicht. Nun möchte ich mich allerdings gerne per E-Mail benachrichtigen lassen, wann die beiden Drähte im Wasser stecken.

Auf der oben erwähnten Seite gibt es ein Python-Skript, das sich water_sensor.py nennt. Das tut alles, was wir wollen und so muss man das Rad nicht neu erfinden. Die Logik dahinter ist klar:

  • Schicke E-Mail mit Sensor ist nass, wenn auf GPIO #18 Zustand 1 erreicht ist
  • Schicke E-Mail mit Sensor ist trocken, wenn auf GPIO #18 Zustand 0 erreicht ist

Gmail-Konto notwendig

Der Erschaffer des Skripts weist darauf hin, dass man ein GMail-Konto braucht, um das Skript verwenden zu können. Das stimmt, wenn man lediglich die Parameter am Anfang modifizieren möchte (Name / Passwort). Es wird aber die smtplib von Python verwendet und wer sich ein bisschen auskennt, kann die Parameter im Skript so modifizieren, dass sich auch ein anderer SMTP-Server verwenden lässt.

Vorsicht!: Das Passwort wird im Klartext in diesem Skript hinterlegt. Am besten wäre es wohl, ein separates E-Mail-Konto für den Wassersensor zu verwenden.

Starten wir also nun das Skript manuell: sudo python water_sensor.py

Ist das Skript richtig eingestellt, dann sieht das so aus (ein Rundgang – trocken -> nass -> trocken) …

Skript für den Wassersensor in Aktion

Skript für den Wassersensor in Aktion

… und bekomme ich nun entsprechend das E-Mail zugesandt.

E-Mail vom Raspberry Pi

E-Mail vom Raspberry Pi

Der Wassersensor ist nass!

Der Wassersensor ist nass!

Persönlich habe ich das Senden von E-Mails deaktiviert, wenn der Sensor wieder trocken wird (email(‘dry’) wurde auskommentiert mit # – ebenso wurden die Buzzer-Aktionen auskommentiert, brauche ich auch nicht). Mich interessiert nur, wenn er nass ist.

Bei anderen könnte aber das Umgekehrte der Fall sein. Sie wollen möglicherweise eine Nachricht, wenn der Wasserpegel unter einen bestimmten Stand fällt, damit man nachfüllen kann. Gibt es eigentlich schon Bierkrüge, die dem Wirt eine Nachricht schicken, wenn der Bierfüllstand niedrig wird? 🙂

E-Mail nicht sofort schicken

Update: Aus irgendwelchen Gründen schickt mir das Raspberry Pi nach der Installation alle ein bis zwei Stunden eine Nachricht, dass der Sensor nass ist und dann sofort danach, dass er wieder trocken ist. Für wenige Augenblicke muss also GPIO #18 unter Strom stehen und ich weiß (noch) nicht genau, warum.

Update 2: Hier noch ein Hinweis aus einem Kommentar – Danke!

einfacher zum Thema “E-Mail nicht sofort schicken” ist es den GPIO-Pin mit einen Pull_Up_Down-Widerstand intern zu belegen:
also die Zeile:
GPIO.setup(RCpin, GPIO.IN)
ändern in:
GPIO.setup(RCpin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

Damit treten dann keinerlei Fehler auf und das Script braucht nicht angepasst zu werden.

Nun habe ich den Code umgeschrieben, dass der Stromkreis mindestens einige Sekunden geschlossen sein muss, bevor eine E-Mail geschickt wird. Das kann man sehr einfach mit einem Counter realisieren. Ich definiere also weiter oben water_count = 0 und meine while-Schleife sieht dann so aus:

...
water_count = 0
...
while True:
    time.sleep(1)
    water_count = 0
    if RCtime(18) == 1:
        print "Sensor is wet"
        # email('wet')
        while True:
            time.sleep(1)
            if RCtime(18) == 1:
                print "Sensor is still wet..."
                if water_count == 5:
                email('wet')
                # buzz_on(17)
            water_count = water_count + 1
            continue
            ...

Das scheint nun bisher zu funktionieren.

Das Skript für den Wassersensor automatisch starten

Dieses Unterfangen ist sehr einfach und wird im Skript selbst auf Englisch auch beschrieben. Der Vollständigkeit halber erkläre ich es trotzdem.

Editiere dafür die Datei /etc/rc.local und füge vor der Zeile exit 0 das ein: /usr/bin/python /Pfad/zu/Deinem/Skript/water_sensor.py

In meinem Fall steht da drin: /usr/bin/python /home/pi/water_sensor.py

Noch ein paar Hinweise und Tipps für das Raspberry Pi und Raspbian

Ich habe ein ganz normales Raspbian am Laufen. Natürlich läuft für diese Aktion keine grafische Oberfläche, weil das verschwendete Ressourcen sind.

Allerdings habe ich zum Einrichten das Raspberry Pi in die grafische Oberfläche starten lassen, da ich eine WLAN-Karte verwende. Ich muss ja irgendwie ins Netzwerk kommen, sonst kann ich keine E-Mails schreiben lassen. In der grafischen Oberfläche kann man via GUI die WLAN-Karte konfigurieren und die verbindet sich dann auch, wenn das Raspberry Pi ohne GUI startet.

Im Endeffekt konfiguriert mir das grafische Konfigurations-Tool die Datei /etc/wpa_supplicant/wpa_supplicant.conf. Man kann diese natürlich auch via Konsole bearbeiten, aber bevor ich mir das ganze Zeug wieder zusammensuche, starte ich einfach grafisch, konfiguriere das System und deaktiviere X wieder (Stichwort sudo raspi-config).

Da ich das Raspberry Pi im Netzwerk via SSH erreichen möchte, hätte ich zudem gerne, dass es immer die gleiche IP-Adresse hat. Man könnte das nun im System einstellen. Ich habe allerdings meinem DHCP-Server gesagt, dass er der WLAN-Karte mit Mac-Adresse <was auch immer> immer die gleiche IP-Adresse zuweisen soll.

Eine dritte Möglichkeit über die Konsole wäre wicd-curses. Damit muss man die grafische Desktop-Oberfläche nicht bemühen und muss trotzdem nicht alle Parameter im Kopf haben.

wicd-curses: WLAN - Einstellungen

wicd-curses: WLAN – Einstellungen

Im Endeffekt ist es egal, wie man das realisiert. Bei einem Gerät, das headless betrieben wird, ist es nur angenehm, wenn man es immer gleich findet.

Ich habe auf jeden Fall nun meinen Wassersensor und musste keine zusätzlichen Teile bestellen. Außerdem ist das kleine Raspberry Pi B glücklich, wieder einen Sinn im Leben gefunden zu haben …

Nette Pi-Konstellation

Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.




 Alle Kommentare als Feed abonnieren

41 Kommentare zu “Das Raspberry Pi als Wassersensor benutzen – E-Mail als Benachrichtung”

  1. postlet says:

    Das Kurzschließen des Kabels ist eine erschreckend einfache Lösung für ein kompliziert wirkendes Problem. Also alleine dieser Umstand wäre schon den ganzen Artikel wert gewesen =D

    Hast du mal ausprobiert, wie lang das Kabel sein kann, das du als Sensor verwendest? Oder anders gefragt, mit welcher Kabelänge arbeitest du in diesem Fall?

    Ich hätte da tatsächlich auch einen Anwendungsfall, müsste aber den Pi aber wegen den "Umweltbedingungen" mit einigen Metern Entfernung montieren.

    • jdo says:

      Ja, das dachte ich mir auch ... "Kabel kurzschließen!" - das ist es! ...

      Das Ethernet-Kabel für den Test war 1,3 Meter lang - ich brauche aber auch 6-7 Meter Entfernung, weil der Sensor außen sein, das RasPi aber im Haus stehen soll. Ich muss das längere Kabel heute Nachmittag noch kaufen und sage dann Bescheid.

      Ich gehe aber davon aus, dass es funktioniert, weil ein Ethernet-Kabel (ich komme nur an Cat 5) sehr wenig Widerstand hat.

    • jdo says:

      Ich musste das nun wissen und habe mir zehn Meter Cat 5 Ethernet-Kabel gekauft. Daran habe ich die 1,3 Meter altes Kabel noch angeflanscht (zusammengedreht eben) - es funktioniert immer noch mit über elf Metern. Die rote LED leuchtet allerdings nur noch recht schwach - was mir egal ist, Hauptsache GPIO #18 wird auf 1 gesetzt. Habe das im Artikel selbst auch noch nachgetragen.

  2. postlet says:

    Danke für das Testen der Kabellänge! Das sollte dann auch in meiner Umgebung funktionieren.

    Ich bin in Elektrotechnik nicht besonders fit, aber vermutlich ließe sich das schwache Leuchten der LED wohl kompensieren, wenn man den Vorwiderstand etwas reduziert. Für eine halbwegs handfeste Berechnung brauche ich aber wahrscheinlich länger als für das Umsetzen deiner Anleitung =D

    • jdo says:

      Das RasPi steht momentan an einer Stelle, an der ich die LED sowieso nicht sehe. Vielleicht werfe ich sie raus und schließe passive Lautsprecher an - wie ein Klingelton würde ich dann bei Wasser ein mp3 abspielen lassen oder so - das ginge mit mpg123 ... Ich bastle, tüftle und optimiere noch 🙂

  3. […] Direkt gebastelt wird derzeit gar nicht – meinen Wassersensor Raspberry Pi werde ich demnächst etwas schicker machen. Ich mache mir aber im Moment Gedanken, wie man mit dem […]

  4. Danny says:

    Moin, Danke für die Anleitung, das wird mich bald ruhiger schlafen lassen bzgl. unseres 🙂 Eine Frage, wenn man die LED nicht benötigt, kann man diese weglassen - klaro.
    Benötigt man den Widerstand zwischen + und - zwingend oder kann man diesen auch weglassen, dann wäre der Kreislauf ja komplett kurzgeschlossen (mir war so aus Physik, dass kein Verbraucher nicht gut ist). Gruß Danny

    • jdo says:

      Ich bin da auch kein Experte, habe es aber auch so in Erinnerung, dass gar kein Verbraucher nicht gut ist. Schaden tut der Widerstand wohl auf keinen Fall.

  5. Danny says:

    Wort vergessen: ... ruhiger schlafen lassen bzgl. unseres Drainagenschachtes/Tauchpumpe

  6. Mike says:

    Hallo Jürgen,

    Kannst du mir bitte dein script zur verfügung stellen mit deiner Änderung, ich hatte das jetzt selber versucht zu ändern nach deinen angaben aber leider bekomme ich das nicht hin. Würde mich freuen.

    Gruß Mike

    • jdo says:

      Klar, kann ich machen - Benutzung auf eigene Gefahr ... 😉 klick für Download

      P.S: Anstatt zu löschen kommentiere ich lieber aus. Somit sieht das möglicherweise etwas chaotisch aus - aufräumen musst Du selbst ... außerdem habe ich die Wartezeit auf 30 Sekunden erhöht und die Schleife wiederholt sich dafür nur ein mal ... aber die beiden Zahlen kannst Du einfach anpassen.

  7. Mike says:

    Klasse, Danke für deine Bemühungen.
    Wünsche frohe Feiertage und einen guten Rutsch.

  8. Dane says:

    Hallo Leute,
    erstmal vielen Dank für diesen Post mega coole Sache.
    ich habe mal eine Frage, bin Anfänger was python angeht.
    Ich habe den Python script 1 zu 1 übernommen und es funktioniert nur ich habe das gleiche Problem wie du, ich bekomme jede sec. ein mail wet, dry wie genau hast du denn den Count gesetzt so sieht das Original aus. Vor was muss ich den water_count = 0 setzen?
    Kann mir da jemand weiter helfen?

    while True:
    time.sleep(1) # check for wetness every second
    if RCtime(18) == 1:
    buzz_on(17)
    print "Sensor is wet"
    email('wet')
    print "Waiting for dryness..."
    while True:
    time.sleep(1) # check for dryness every second
    if RCtime(18) == 0:
    buzz_off(17)
    print "Sensor is dry again"
    email('dry')
    print "Waiting for wetness..."
    break

    • jdo says:

      Es sollte eigentlich funktionieren. Nur mal ein Schuss ins Blaue - was für eine Stromversorgung verwendest Du für das Pi? Wenn die zu schwach ist, dann könnte das so eine Schwankung auslösen?

      Und schau Dir mal mein Skript in dem Beitrag noch mal an - das ist anders als das Original und da wird bis 5 gezählt, bevor der Alarm ausgelöst wird.

      Das water_count = 0 setzt Du irgendwo vor die while-Schleife. Wo ist egal - damit definierst Du lediglich einen Parameter.

  9. Dane says:

    Das mit dem Netzteil muss ich nochmal prüfen danke für den Hint.
    habe das script so angepasst also nur unten:
    #!/usr/bin/python

    #########
    # About #
    #########

    # This script uses a Raspberry Pi to sense for the presense or absense of water.
    # If there is water, an email is sent and a buzzer goes off.
    # When it's dry again, another email is sent, and the buzzer turns off.

    # To run this script at boot, edit /etc/rc.local to include (no quotes) 'sudo python .py'
    # Schematic here: http://fritzing.org/projects/raspberry-pi-water-sensor/

    ###########
    # License #
    ###########
    # Released under the WTFPL.
    #Full text and more information here: http://en.wikipedia.org/wiki/WTFPL

    ########################################
    # Gmail login credentials to send email#
    ########################################

    username = 'exampleusername' #you don't need the "@gmail.com" bit.
    password = 'examplepassword'

    ############################
    # General Email Parameters #
    ############################

    From = "senderaddress@domain.com"
    To = "recipientaddress#domain.com"

    #######################################
    # Email Parameters when sensor is Wet #
    #######################################

    Subject_wet = "RPi Water Sensor is WET"
    Body_wet = "Your water sensor is wet."

    #######################################
    # Email Parameters when semsor is Dry #
    #######################################

    Subject_dry = "RPi Water Sensor is DRY"
    Body_dry = " Your water sensor is dry again!"

    import smtplib
    from email.mime.text import MIMEText
    import RPi.GPIO as GPIO
    import string
    import time

    # Function Definitions

    #takes either "wet" or "dry" as the condition.
    def email(condition):
    print "Attempting to send email"
    if condition == 'wet':
    Body = string.join((
    "From: %s" % From,
    "To: %s" % To,
    "Subject: %s" % Subject_wet,
    "",
    Body_wet,
    ), "\r\n")
    if condition == 'dry':
    Body = string.join((
    "From: %s" % From,
    "To: %s" % To,
    "Subject: %s" % Subject_dry,
    "",
    Body_dry,
    ), "\r\n")

    # The actual mail send
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    print "Logging in..."
    server.login(username,password)
    print "Logged in as "+username+"."
    server.sendmail(From, [To], Body)
    server.quit()
    print "Email sent."

    #Tests whether wter is present.
    # returns 0 for dry
    # returns 1 for wet
    # tested to work on pin 18
    def RCtime (RCpin):
    reading = 0
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(RCpin, GPIO.OUT)
    GPIO.output(RCpin, GPIO.LOW)
    time.sleep(0.1)
    GPIO.setup(RCpin, GPIO.IN)
    # This takes about 1 millisecond per loop cycle
    while True:
    if (GPIO.input(RCpin) == GPIO.LOW):
    reading += 1
    if reading >= 1000:
    return 0
    if (GPIO.input(RCpin) != GPIO.LOW):
    return 1

    # Turns on the piezo buzzer
    # tested to work on pin 17
    def buzz_on (pin):

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, GPIO.HIGH)

    # Turns off the piezo buzzer
    # tested to work on pin 17
    def buzz_off(pin):

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, GPIO.LOW)

    # Main Loop

    water_count = 0

    while True:
    time.sleep(1)
    water_count = 0
    if RCtime(18) == 1:
    print "Sensor is wet"
    # email('wet')
    while True:
    time.sleep(1)
    if RCtime(18) == 1:
    print "Sensor is still wet..."
    if water_count == 5:
    email('wet')
    # buzz_on(17)
    water_count = water_count + 1
    continue
    ...
    while True:
    time.sleep(1) # check for dryness every second
    if RCtime(18) == 0:
    buzz_off(17)
    print "Sensor is dry again"
    email('dry')
    print "Waiting for wetness..."
    break

    da bekomme ich bei meinen raspy immer diese Fehlermeldung.
    pi@raspberrypi:/usr/bin $ sudo python python.py
    File "python.py", line 139
    email('wet')
    ^
    wenn ich das script nicht veränder wir es auch gestartet vielleicht habe ich irgenwo ein Fehler eher wahrscheinlich. ;.)

  10. Dane says:

    ok super, heute Abend teste ich es, danke in voraus
    und schönes Wochenende.

  11. Tom says:

    Bei mir steht durchgehend Attempting to send email
    und dann passiert nichts mehr

  12. Tom says:

    Ich wollte mal fragen ob es vlt. möglich wäre den script so zu ändern das er sagt "NASS" wenn der Stromkreißlauf geöffnet wird anstatt geschlossen wird. Und wenn wie geht das ?
    MFG . TOM

    PS: Ich benutze den Script übrigens für eine Alarmanlage deswegen muss es funktionieren wenn der Stromkreis geöffnet ist. Danke im Voraus !

    • jdo says:

      Auch ein interessanter Anwendungsfall ...

      Die Zeile if RCtime(18) == 1: überprüft im Prinzip, ob Strom fließt oder nicht. if RCtime(18) == 0: wäre dann praktisch der andere Fall oder wenn kein Strom fließt, ... oder wenn Stromkreis unterbrochen

  13. Fabi says:

    Hallo!

    Super Tutorial, besten Dank!
    Ich baue zur Zeit eine Zapfanlage/Longdrinkmixer. Per Pumpe werden die einzelnen Flüssigkeiten (z.B. Cola) aus der Flasche ins Glas gepumpt.

    Nun möchte ich angeben, wann die Flasche leer ist und ausgetauscht werden muss.
    Dafür hatte ich überlegt einen Flow Sensor zu verwenden, um zu gucken, ob die Pumpe auch tatsächlich etwas fördert. Problem: Die Abfrage kann nur erfolgen, wenn auch eine Pumpe angesprochen wird. Ist z.B. in der Cola noch was drin, aber es reicht nicht mehr für einen ganzen Longdrink, möchte ich das wissen, bevor die Pumpe angesprochen wird. (Halbfertige Longdrinks schmecken nicht 😉 )

    Jetzt hatte ich die Überlegung zwei Drähte (befestigt am Ansaugschlauch) mit in die Colaflasche zu Stecken. Bei leitender Verbindung ist noch genug da, bei fehlender Verbindung nicht.

    Mein Problem: Ich möchte ungerne, dass die ganze Zeit ein Kupferdraht in der Cola schwimmt (giftig).

    Meine Frage: Gibt es Drähte, die aus nicht giftigem Material bestehen? Oder würdest du mein Problem ganz anders lösen?

    Vielen Dank und schönen Gruß
    Fabi

    • jdo says:

      Hallo,

      ich weiß nicht, aus welchem Material dieser Wassersensor ist.

      Eine andere Option wäre, es mit einer Art Schwimmer zu lösen, an dem ein Draht oder so hängt. Also ein Korken oder was weiß ich. Dann wäre der giftige Teil aus der Flüssigkeit. Also wenn Schwimmer weit unten, Stromkreis schließt sich ...

  14. Danny says:

    Ich bräuchte das Skript aber statt über email soll es über ejabberd laufen, könnte mir da jemand helfen da ich eine Niete im scripten bin. Die Daten werde ich denke ich dann schon hinkriegen ins Skript richtig umzusetzen, vielen Dank im Voraus.

  15. Menschenkind says:

    Ich habe diesen Artikel sehr aufmerksam verfolgt, weil er genau das verspricht, was ich brauche. Ich bin totaler Python-Neuling und habe mit dem GPIO vom RSPi noch nicht gearbeitet.

    Ich halte das Projekt, so wie es dargestellt ist für gescheitert aus folgenden Gründen:

    Das erste was mir auffällt an der simplen Schaltung: Es wird kein Widerstand zwischen GPIO 18 und 3V3 eingebaut...dies kann bewirken, dass man sich den Ein/Ausgang zerschießt, da diese nicht gegen Kurzschlüsse abgesichert sind.
    ALSO, wichtig: Immer einen Widerstand einbauen und die Pins nicht direkt kurzschließen!

    Das zweite was mir auffällt: Das Script funktioniert nicht!
    Egal ob ich den Knopf gedrückt habe, oder nicht...es war immer Wasser da!
    Also habe ich mich auf die Suche nach dem Original gemacht und noch weitere Wassersensorscripte gefunden. Teilweise waren die zu komplex und lieferten Fehlermeldungen wegen nicht installierter Module.

    Also habe ich versucht, zu verstehen, was hier eigentlich passiert und mich mit einfachsten Schaltungen und Scripten an die Funktionsweise der GPIO's herangetestet.

    Dann habe ich versucht, die Schleife nachzuvollziehen und festgestellt, dass sie total blödsinnig programmiert ist und eigentlich wenige Zeilen ausreichen.
    Also habe ich das neu geschrieben.

    Danach habe ich versucht die Mail-Funktion einzubinden...auch hier bin ich an meine Grenzen gestoßen weil das vorliegende Script nicht funktionierte und habe wieder Tante Google bemüht...diesmal mit Erfolg!

    Da ich kein Display zur Verfügung haben werden, wurden von mir noch verschiedenfarbene LED's verbaut, die den jeweiligen Status der Sensoren, der Platine und des Programms zurück liefern.

    Und noch etwas ist mir aufgefallen: Es gibt keine Möglichkeit, die GPIOs bei Fehlern oder Programmabbrücken (KeyboardInterrupt) zurück zu setzen, das sollte immer getan werden, da sonst unbeabsichtigt Spannung an einzelnen Ports anliegen könnte.

    Wie das funktioniert wird hier erklärt:
    http://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi

    Auf Wunsch stelle ich gerne mein Script zur Verfügung.

    Freundliche Grüße

    • jdo says:

      Du kannst Dein Script gerne zur Verfügung stellen.

      1. Wie Du an den Bildern siehst, ist ein Widerstand eingebaut (oben rechts)

      2. Das Script wie hier beschrieben funktioniert einwandfrei, denn genau so habe ich es im Einsatz.

      3. Ich habe an keiner Stelle behauptet, dass meine Lösung perfekt ist - aber sie funktioniert und genügt meinen Ansprüchen

      4. Viele Wege führen nach Rom

      Mehr kann ich leider dazu nicht sagen.

  16. Miro says:

    Hallo @Menschenkind,

    mich würde Dein Script und Dein Setup auch interessieren. Das was jdo gemacht hat versuche ich nachzubauen, aber bei mir passiert das selbe. Gleich nach dem Start des Script with Wasser erkannt, als ob gleich eine 1 gemeldet würde ohne Wasser. Hab einen 1K und 10K Widerstand getested, beides gleich.
    Vielen Dank schon mal im Voraus.

    Danke auch Dir, jdo, diese Anleitung hat mich dazu bewegt mit dem Pi was anzufangen 🙂

    Cheers,
    Miro

  17. Frank says:

    Hallo,

    einfacher zum Thema "E-Mail nicht sofort schicken" ist es den GPIO-Pin mit einen Pull_Up_Down-Widerstand intern zu belegen:
    also die Zeile:
    GPIO.setup(RCpin, GPIO.IN)
    ändern in:
    GPIO.setup(RCpin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

    Damit treten dann keinerlei Fehler auf und das Script braucht nicht angepasst zu werden.

    Gruss

    Frank

  18. juxreal says:

    Welcher Widerstand wurde verbaut?
    Das steht leider nicht im Text, und habe ich hier auch nicht gefunden (oder ich bin Blind).

    Danke für die Anleitung, werde das dann mal testen

  19. juxreal says:

    Mh, ich habe alles wie beschrieben verkabelt (dachte ich).
    Python script läuft auch.. aber sobald etwas den PIN Außen 5 berührt wechselt der Status.. Mh irgendetwas stimmt noch nicht ganz bei mir

  20. juxreal says:

    Mh, ich habe alles wie beschrieben verkabelt (dachte ich).
    Python script läuft auch.. aber sobald etwas den PIN Außen 6 berührt wechselt der Status.. Und wenn es nur ein blankes Kabel ist! Ohne irgendwas dran.

    Das Verhaltens sehe ich auch bei zwei verschiedenen Raspberrys (2)

    Mh irgendetwas stimmt noch nicht ganz bei mir

  21. juxreal says:

    Die Lösung ist (wie oben beschrieben):

    GPIO.setup(RCpin, GPIO.IN)
    ändern in:
    GPIO.setup(RCpin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

  22. juxreal says:

    Und für alle die anstatt einer E-Mail Bash cide ausführen möchten (ich z.B. 240V USB Relay für eine Pumpe)

    Zeile2:
    import os

    z.B. unter:
    # email('wet')

    command = os.popen('ls -al')
    print(command.read())
    print(command.close())

    GANZ WICHTIG:
    Bei Python am besten die code abtippen (TABS beim einfügen möglich)
    und achtet da drauf das ihr richtig eingerückt habt! (erster Buchstabe dort wo email steht)

    Viel Spaß!

    Danke für die Anleitung

  23. MT says:

    Kannst du uns bitte schreiben, welchen Widerstand du verwendest hast?

    Ist es
    Orange Orange Schwarz Gold = 33 Ohm
    oder
    Orange Orange Braun Gold = 330 Ohm

    Ich kann die Farbe am dritten ring leider wirklich nicht erkennen.

    danke!

    • jdo says:

      Kein Problem. Um ganz sicher zu gehen, habe ich nun das Messgerät angeworfen und es zeigt 330 Ohm (also 327).

  24. Maik says:

    Hallo jdo,

    vielen Dank für diesen tollen Artikel. Das Ganze habe ich nun nachgebaut.
    Wenn ich die Kabel an dem (Wasser)-Ende zusammenhalte, dann wird "Wasser" erkannt und eine Mail versendet. Allerdings wird kein Wasser erkannt, wenn die Kabel tatsächlich im Wasser sind.
    Anstelle eines Ethernetkabels verwende ich einfach Jumperdrähte: (https://www.amazon.de/gp/product/B017BHK6IA/ref=oh_aui_detailpage_o05_s00?ie=UTF8&psc=1)

    Funktioniert es ggf. mit diesen Drähten nicht? Oder habe ich ggf. einen zu hohen Widerstand gewählt?

    Zur Info, bin eher ein Anfänger 🙂

    Vielen Dank im Voraus
    Maik

    • jdo says:

      Das ist schwer, aus der Ferne zu beantworten ... an Deiner Stelle würde ich vorsichtig mit den Komponenten experimentieren.

      Experimentierst Du mit destilliertem Wasser? Vielleicht leitet das zu wenig. Aber die Frage lässt sich echt schwer beantworten, weil es zu viele Punkte gibt, an denen man feilen kann.