-
Notifications
You must be signed in to change notification settings - Fork 37
/
GPIO-shutdown-sample.py
executable file
·107 lines (107 loc) · 3.68 KB
/
GPIO-shutdown-sample.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#! /usr/bin/python
#
# HOW TO USE:
#
# HAVE TO RUN THIS SCRIPT WITH SUDO PRIVILIDGES. Shutdown commands needs SUDO.
# If you plan to run this from a cron job, you can exit the utility if the battery is
# good. This sample shows how the command is run in a loop.
# Command usage:
# sudo python <filename.py>
# where file name is the name for this file.
#
#
# RIGHT TO USE STATEMENT
# (C) 2017 Alchemy Power Inc.
# Right to use, copy, distribute etc. of this code with Pi-UpTimeUPS or
# PiZ-UpTime or any other Alchemy Power Inc. product or any product. Right is granted to you
# by Alchemy Power Inc. as long as you maintain the lines from line 1 to "END OF HEADERS" line
# with every copy.
#
#################### END OF HEADERS ##########################
#
#
# This file shows alternate ways to use the Python code. You can use whichever one you
# are familair with.
#
# Instead of firt line /usr/bin/python, you can use line below to setup the environment for Python.
#
#!/usr/bin/env python
#
#
#
import RPi.GPIO as GPIO
import time
#
# import os if using the os method to initiate the shutdown.
#
import os
#
# sys is needed for flushing std out on an interrupt.
#
import sys
#
# import subprocess to start the shut down process as a seperate thread
# and exit the script cleaning out the GPIO.
#
import subprocess
# Use the number carefully - GPIO.BOARD for pin number on the board.
# Use the BCM method if
# Use the GPIO.BCM if you are using the BCM method to assign the GPIO number.
# Make sure the GPIO jumper is in.
# If the GPIO jumper is out, the GPIO connection is broken.
#
buttonPin = 37 # GPIO 26, Pin 37
# Use pin number 37 on the board by using the setmode below.
#
GPIO.setmode(GPIO.BOARD)
#
# Use GPIO number if you are using BCM technique below.
# GPIO.setmode(GPIO.BCM)
#
# Use the pull up i.e. expect output to be zero. When it goes to 1, GPIO is set.
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#
# Opposite of what we did above - normally 1, GPIO set when it goes to zero.
# GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#
# Use schlaf variable below to indicate how long the program sleeps for before checking again.
#
schlaf = 10
while True:
if (GPIO.input(buttonPin)):
# GPIO is 0
# Debug
# print("GPIO is 0 ")
# This just prints the time letting you know if the Pi is up. This can be logged
# to keep track of pi. Note comment line if you are using the cron method to check battery
# status.
print("Time is %s " % (time.ctime()))
# os.system('echo yea-yea')
time.sleep(schlaf)
else:
# GPIO is 1. We are here because the sensors triggered the battery being low.
print("Shutdown initiated at %s " % (time.ctime()))
#
# The command shuts down the pi in 2 minutes. Replace
# 2 with word "now" (without the quotes) for immediate
# shutdown. If you use the Pi-Zero-Uptime (the one which uses 14500 battery)
# recommend using shutdown -h now instead of shutdown -h 2.
# The subprocess method forks a process which can run in the background while this
# program exits properly. os.system method continues to run in the program thread.
#
# os.system('sudo shutdown -h 2')
#
subprocess.call("shutdown -h 2 &", shell=True)
#
# Sleep for a second or so for the shutdown process to fork and then exit
# script cleaning out GPIO.
time.sleep(2)
# Flush any stdout messages before exiting..
sys.stdout.flush()
# exit the while monitoring loop.
exit()
# Flush any buffers if ^C or interrupt is pressed.
sys.stdout.flush()
# Clean up GPIO handler on exit of the script.
# Clean up is optional. If the system reboots it will clean up!
# GPIO.cleanup()