i made all attemps by giving access to low secure app and changing the password
i am getting error as
below is the youtude link i followedsmtpUser , smtpPass not accepted
https://youtu.be/0kpGcMjpDcw
below is the youtude link i followedsmtpUser , smtpPass not accepted
Code: Select all
import RPi.GPIO as GPIO # This is the GPIO library we need to use the GPIO pins on the Raspberry Pi
import smtplib # This is the SMTP library we need to send the email notification
import time # This is the time library, we need this so we can use the sleep function
# Define some variables to be used later on in our script
# You might not need the username and password variable, depends if you are using a provider or if you have your raspberry pi setup to send emails
# If you have setup your raspberry pi to send emails, then you will probably want to use 'localhost' for your smtp_host
smtp_username = "enter_username_here" # This is the username used to login to your SMTP provider
smtp_password = "enter_password_here" # This is the password used to login to your SMTP provider
smtp_host = "smtp.gmail.com" # This is the host of the SMTP provider
smtp_port = 587 # This is the port that your SMTP provider uses
smtp_sender = "sender@email.com" # This is the FROM email address
smtp_receivers = ['receiver@email.com'] # This is the TO email address
# The next two variables use triple quotes, these allow us to preserve the line breaks in the string.
# This is the message that will be sent when NO moisture is detected
message_dead = """From: Sender Name <sender@email.com>
To: Receiver Name <receiver@email.com>
Subject: Moisture Sensor Notification
Warning, no moisture detected! Plant death imminent!!! :'(
"""
# This is the message that will be sent when moisture IS detected again
message_alive = """From: Sender Name <sender@email.com>
To: Receiver Name <receiver@email.com>
Subject: Moisture Sensor Notification
Panic over! Plant has water again :)
"""
# This is our sendEmail function
def sendEmail(smtp_message):
try:
smtpObj = smtplib.SMTP(smtp_host, smtp_port)
smtpObj.login(smtp_username, smtp_password) # If you don't need to login to your smtp provider, simply remove this line
smtpObj.sendmail(smtp_sender, smtp_receivers, smtp_message)
print "Successfully sent email"
except smtplib.SMTPException:
print "Error: unable to send email"
# This is our callback function, this function will be called every time there is a change on the specified GPIO channel, in this example we are using 17
def callback(channel):
if GPIO.input(channel):
print "LED off"
sendEmail(message_dead)
else:
print "LED on"
sendEmail(message_alive)
# Set our GPIO numbering to BCM
GPIO.setmode(GPIO.BCM)
# Define the GPIO pin that we have our digital output from our sensor connected to
channel = 17
# Set the GPIO pin to an input
GPIO.setup(channel, GPIO.IN)
# This line tells our script to keep an eye on our gpio pin and let us know when the pin goes HIGH or LOW
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
# This line asigns a function to the GPIO pin so that when the above line tells us there is a change on the pin, run this function
GPIO.add_event_callback(channel, callback)
# This is an infinte loop to keep our script running
while True:
# This line simply tells our script to wait 0.1 of a second, this is so the script doesnt hog all of the CPU
time.sleep(0.1)
Code: Select all
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
email_user = "account@gmail.com"
email_password = "password"
email_send = "address to send to"
subject = "Test email from pi"
msg = MIMEMultipart()
msg["From"] = email_user
msg["To"] = email_send
msg["Subject"] = subject
body = "Hi there, sending this email from Python!"
msg.attach(MIMEText(body,"plain"))
text = msg.as_string()
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
Code: Select all
import RPi.GPIO as GPIO # This is the GPIO library we need to use the GPIO pins on the Raspberry Pi
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import time # This is the time library, we need this so we can use the sleep function
# This is our sendEmail function
def send_mail(body):
email_user = "account@gmail.com"
email_password = "password"
email_send = "address to send to"
subject = "Moisture Sensor Notification"
msg = MIMEMultipart()
msg["From"] = email_user
msg["To"] = email_send
msg["Subject"] = subject
msg.attach(MIMEText(body,"plain"))
text = msg.as_string()
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
# This is our callback function, this function will be called every time there is a change on the specified GPIO channel, in this example we are using 17
def callback(channel):
if GPIO.input(channel):
print "LED off"
body = "Warning, no moisture detected! Plant death imminent!!! :'("
send_mail(body)
else:
print "LED on"
body = "Panic over! Plant has water again :)"
send_mail(body)
# Set our GPIO numbering to BCM
GPIO.setmode(GPIO.BCM)
# Define the GPIO pin that we have our digital output from our sensor connected to
channel = 17
# Set the GPIO pin to an input
GPIO.setup(channel, GPIO.IN)
# This line tells our script to keep an eye on our gpio pin and let us know when the pin goes HIGH or LOW
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
# This line asigns a function to the GPIO pin so that when the above line tells us there is a change on the pin, run this function
GPIO.add_event_callback(channel, callback)
# This is an infinte loop to keep our script running
while True:
# This line simply tells our script to wait 1 of a second, this is so the script doesnt hog all of the CPU
time.sleep(1)
Code: Select all
import RPi.GPIO as GPIO
import time
import datetime
def check(channel):
print datetime.datetime.now()
if GPIO.input(channel):
print('No moisture detected')
else:
print('Moisture detected')
GPIO.setmode(GPIO.BCM)
channel = 17
GPIO.setup(channel, GPIO.IN)
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
GPIO.add_event_callback(channel, check)
while True:
time.sleep(0.1)
I want to send the following message alerts based on if and else statementsI want to run code based on time that is for example every 1 hour or 2 hours gap
subject = "Status from moisture sensor"
for if statement i need to send
body="Warning, no moisture detected! Plant death imminent!!!"
and for else statement i need send
body="No need to water your plant"
See my post above dated 06 May 2020, 17:13 used your previously posted code as a base and added my email code to it.Kanna wrote: ↑Thu May 07, 2020 9:38 amwhen the sensor detects moisture, the output is LOW (0V). When the sensor can no longer detect moisture the output is HIGH (3.3V).
sensor working conditionCode: Select all
import RPi.GPIO as GPIO import time import datetime def check(channel): print datetime.datetime.now() if GPIO.input(channel): print('No moisture detected') else: print('Moisture detected') GPIO.setmode(GPIO.BCM) channel = 17 GPIO.setup(channel, GPIO.IN) GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300) GPIO.add_event_callback(channel, check) while True: time.sleep(0.1)I want to send the following message alerts based on if and else statementsI want to run code based on time that is for example every 1 hour or 2 hours gapsubject = "Status from moisture sensor"
for if statement i need to send
body="Warning, no moisture detected! Plant death imminent!!!"
and for else statement i need send
body="No need to water your plant"
Code: Select all
import sys
import RPi.GPIO as GPIO
import os
import Adafruit_DHT
import urllib2
import smbus
import time
from ctypes import c_short
DHTpin=14
key='92L7QM03PXTZU0B2'
GPIO.setmode(GPIO.BCM)
def readDHT():
humi, temp=Adafruit_DHT.read_retry(Adafruit_DHT.DHT11,DHTpin)
return(str(int(humi)),str(int(temp)))
def main():
print ('system ready...')
URL='https://api.thingspeak.com/update?api_key=%s'% key
print ('wait..')
while True:
(humi,temp)=readDHT()
finalURL=URL+'&field1=%s&field2=%s'%(humi,temp)
print (finalURL)
s=urllib2.urlopen(finalURL);
print (humi + ' ' + temp + ' ')
s.close()
time.sleep(10)
if __name__=='__main__':
main()
Code: Select all
import RPi.GPIO as GPIO # This is the GPIO library we need to use the GPIO pins on the Raspberry Pi
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import time # This is the time library, we need this so we can use the sleep function
# This is our sendEmail function
def send_mail(body):
email_user = "account@gmail.com"
email_password = "password"
email_send = "address to send to"
subject = "Moisture Sensor Notification"
msg = MIMEMultipart()
msg["From"] = email_user
msg["To"] = email_send
msg["Subject"] = subject
msg.attach(MIMEText(body,"plain"))
text = msg.as_string()
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
# This is our callback function, this function will be called every time there is a change on the specified GPIO channel, in this example we are using 17
def callback(channel):
if GPIO.input(channel):
print "LED off"
body = "Warning, no moisture detected! Plant death imminent!!! :'("
send_mail(body)
else:
print "LED on"
body = "Panic over! Plant has water again :)"
send_mail(body)
# Set our GPIO numbering to BCM
GPIO.setmode(GPIO.BCM)
# Define the GPIO pin that we have our digital output from our sensor connected to
channel = 17
# Set the GPIO pin to an input
GPIO.setup(channel, GPIO.IN)
# This line tells our script to keep an eye on our gpio pin and let us know when the pin goes HIGH or LOW
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
# This line asigns a function to the GPIO pin so that when the above line tells us there is a change on the pin, run this function
GPIO.add_event_callback(channel, callback)
# This is an infinte loop to keep our script running
while True:
# This line simply tells our script to wait 1 of a second, this is so the script doesnt hog all of the CPU
time.sleep(1)
Code: Select all
import sys
import os
import Adafruit_DHT
import urllib2
import smbus
from ctypes import c_short
import RPi.GPIO as GPIO # This is the GPIO library we need to use the GPIO pins on the Raspberry Pi
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import time # This is the time library, we need this so we can use the sleep function
DHTpin=14
def readDHT():
humi, temp=Adafruit_DHT.read_retry(Adafruit_DHT.DHT11,DHTpin)
return(str(int(humi)),str(int(temp)))
# This is our sendEmail function
def send_mail(body):
email_user = "account@gmail.com"
email_password = "password"
email_send = "address to send to"
subject = "Moisture Sensor Notification"
msg = MIMEMultipart()
msg["From"] = email_user
msg["To"] = email_send
msg["Subject"] = subject
msg.attach(MIMEText(body,"plain"))
text = msg.as_string()
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
# This is our callback function, this function will be called every time there is a change on the specified GPIO channel, in this example we are using 17
def callback(channel):
if GPIO.input(channel):
print "LED off"
body = "Warning, no moisture detected! Plant death imminent!!! :'("
send_mail(body)
else:
print "LED on"
body = "Panic over! Plant has water again :)"
send_mail(body)
# Set our GPIO numbering to BCM
GPIO.setmode(GPIO.BCM)
# Define the GPIO pin that we have our digital output from our sensor connected to
channel = 17
# Set the GPIO pin to an input
GPIO.setup(channel, GPIO.IN)
# This line tells our script to keep an eye on our gpio pin and let us know when the pin goes HIGH or LOW
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
# This line asigns a function to the GPIO pin so that when the above line tells us there is a change on the pin, run this function
GPIO.add_event_callback(channel, callback)
key='92L7QM03PXTZU0B2'
print ('system ready...')
URL='https://api.thingspeak.com/update?api_key=%s'% key
print ('wait..')
# This is an infinte loop to keep our script running
while True:
(humi,temp)=readDHT()
finalURL=URL+'&field1=%s&field2=%s'%(humi,temp)
print (finalURL)
s=urllib2.urlopen(finalURL);
print (humi + ' ' + temp + ' ')
s.close()
time.sleep(10)