import RPi.GPIO as GPIO
import time
import os      
import smtplib 

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)

PHOTO_PIN=24
REFILL_VALUE=2000

addresses = [
'YOUR@vtext.com',
'ADDRESSES@vtext.com',
'HERE@gmail.com'
]

MAX_TEXT_LENGTH = 160
MAIL_SERVER = "smtp.gmail.com"
MAIL_PORT = 587
EMAIL = "YOUREMAIL@gmail.com" 
PASS = "PASSWORD" 
MESSAGE_TEXT = "Cat feeder needs food!"

def ReadPhotocell():
        reading = 0
        GPIO.setup(PHOTO_PIN, GPIO.OUT)
        GPIO.output(PHOTO_PIN, GPIO.LOW)
        time.sleep(0.1)
 
        GPIO.setup(PHOTO_PIN, GPIO.IN)
        
	while (GPIO.input(PHOTO_PIN) == GPIO.LOW):
                reading += 1
	print reading
        return reading

def LogInSMTPServer():
   server = smtplib.SMTP( MAIL_SERVER, MAIL_PORT )
   server.starttls()
   server.login( EMAIL, PASS )
 
   return server

def SendNotification( server ):
   if len( MESSAGE_TEXT ) <= MAX_TEXT_LENGTH:
	msg = MIMEMultipart()
	msg.attach( MIMEText(MESSAGE_TEXT, 'plain') )
	for address in addresses:
   		server.sendmail( '', address, msg.as_string() )
		print 'notification sent to %s' % address
   else:
      print 'Message is too long. SMS not sent.'
 
   server.quit()

pwm=GPIO.PWM(18,50)

print "starting"
pwm.start(40)
time.sleep(2)

pwm.ChangeDutyCycle(2)
time.sleep(.5)

pwm.ChangeDutyCycle(40)
time.sleep(2)

pwm.ChangeDutyCycle(2)
time.sleep(.5)

pwm.ChangeDutyCycle(40)
time.sleep(2)

reading = ReadPhotocell()
GPIO.cleanup()
if (reading < REFILL_VALUE):
	# if we are here, there is light which means we need food
	smtp_server = LogInSMTPServer()
	SendNotification(smtp_server)

print "done"
