Last active
May 28, 2024 12:55
-
-
Save cmchap/5480533 to your computer and use it in GitHub Desktop.
Raspberry Pi Water Sensor - Incredibly vague schematic here: http://fritzing.org/projects/raspberry-pi-water-sensor/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <pathtoyourscript>.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 = "[email protected]" | |
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 | |
print 'Waiting for wetness...' | |
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 |
Hi, I've tried both, without success. Now I found a nice video, in which the following code ist presented:
# Datum: 22.10.2020
import smtplib
# Benutzerdaten z.B. bei web.de
user = '[email protected]'
pwd = 'password'
mail_text = 'Hallo,\n\das ist Text!\n\n'
subject = 'Test-Alarm'
MAIL_FROM = '[email protected]'
RCPT_TO = '[email protected]'
DATA = 'From:%s\nTo:%s\nSubject:%s\n\n%s' % (MAIL_FROM, RCPT_TO, subject, mail_text)
server = smtplib.SMTP('smtp.web.de:587')
server.starttls()
server.login(user, pwd)
server.sendmail(MAIL_FROM, RCPT_TO, DATA)
server.quit()
But even here (with the correct USER and PASSWORD) I got an error:
File "/home/USER/Downloads/melder.py", line 23, in <module>
server.starttls(context=context)
File "/home/USER/apps/thonny/lib/python3.7/smtplib.py", line 771, in starttls
server_hostname=self._host)
File "/home/USER/apps/thonny/lib/python3.7/ssl.py", line 423, in wrap_socket
session=session
File "/home/USER/apps/thonny/lib/python3.7/ssl.py", line 870, in _create
self.do_handshake()
File "/home/USER/apps/thonny/lib/python3.7/ssl.py", line 1139, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:1076)
(With an e-mail adress from t-online.de, I got the same error message.)
I didn't find a solution in the internet so far. Does anyone know, how to use this properly?
Regards
It worked with gmail, but you had to change something: allow unsecure apps.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@speedy-10
I haven't tested this, but I think you need to change
smtp.gmail.com:587
on line 78 to your email provider's smtp server and port.I found on the web that t-online.de uses securesmtp.t-online.de and port 465 for its smtp configuration, so that whole line should be
server = smtplib.SMTP('securesmtp.t-online.de:465')
for web.de I think it should be
server = smtplib.SMTP('smtp.web.de:587')
Depending on the email provider's smtp server configuration, you may have issues with 2-factor authentication or other security settings, but trying the above would be a good starting point.