# Program down.py
# python3 down.py
import time
import RPi.GPIO as GPIO
import sys
import shutil
from os.path import exists
channel1 = 17 # motor left
channel2 = 27 # motor right
channel3 = 22 # power switch
traveltime = 86 # number of seconds to move blind
upfile = '/home/pi/shade/up.status' # existance means blinds are currently up
downfile = '/home/pi/shade/down.status' # existance means blinds are currently down
raisefile = '/home/pi/shade/raise.status' # existance means blinds were partly raised
lowerfile = '/home/pi/shade/lower.status' # existance means blinds were partly lowered
stopfile = '/home/pi/shade/stop.status' # existance means disable movement of blinds (windy)
stopfile_exists = exists(stopfile)
upfile_exists = exists(upfile)
downfile_exists = exists(downfile)
if ( stopfile_exists):
sys.exit('Warning cannot lower blind because of stopfile at: /home/pi/shade/stop.status')
if (not upfile_exists):
sys.exit('Error cannot lower blind that is not up: /home/pi/shade/up.status')
sys.stdout.write ('lower ')
shutil.move(upfile, lowerfile )
#GPIO setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel1, GPIO.OUT)
GPIO.setup(channel2, GPIO.OUT)
GPIO.setup(channel3, GPIO.OUT)
def motor_off(pin):
GPIO.output(pin, GPIO.HIGH) # Turn on
print ("off")
def motor_on(pin):
GPIO.output(pin, GPIO.LOW) # Turn off
print ("on")
def waitfor(seconds):
if (seconds >= 1):
for x in range(seconds):
if (x % 10 == 0):
sys.stdout.write (':')
else:
sys.stdout.write ('.')
sys.stdout.flush()
time.sleep (1)
else:
time.sleep (seconds)
# reverse
motor_on(channel1)
motor_on(channel2)
# turn on
waitfor (.1)
motor_on(channel3)
waitfor (traveltime)
# turn off
motor_off(channel3)
waitfor (.1)
shutil.move(lowerfile, downfile )
GPIO.cleanup()