forked from Howchoo/pi-power-button
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdietpi_button.py
More file actions
78 lines (64 loc) · 2.43 KB
/
dietpi_button.py
File metadata and controls
78 lines (64 loc) · 2.43 KB
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
#!/usr/bin/python3
from gpiozero import Button
from signal import pause
import subprocess
import os
# leds are dietpi names, see other raspbian version
# dietpi need to also install python3-lgpio
# connect your button to appropiate pin + ground
# pi 3: gpio 21 is pin 40, gpio 7 is pin 26, gpio 3 is pin 5
# gpio 5 pin 29, gpio 13 pin 33
# (only gpio 3 - pin 5 has power ON functionality)
offGPIO = 3
holdTime = 6
numPushed = 0
def set_led(led, trigger):
"""Sets triger mode for given LED (PWR/ACT)"""
path = f"/sys/class/leds/{led}/trigger"
subprocess.run(["sudo", "tee", path], input=trigger.encode(), check=True)
# pi3: ACT led0 green, PWR led1 red
def shutdown():
global numPushed
print(f"Hold detected! Executing action for {numPushed} pushes.")
if numPushed > 6:
# PWR red heartbeat, ACT green timer
set_led("PWR", "heartbeat")
set_led("ACT", "timer")
if numPushed == 6:
# PWR red timer, ACT green solid
print("== Powering Off")
set_led("PWR", "timer")
set_led("ACT", "default-on")
os.system("sudo poweroff")
if numPushed == 4:
# PWR red solid, ACT green heartbeat
print("== Nextcloud Stopped")
set_led("PWR", "default-on")
set_led("ACT", "heartbeat")
os.system("docker compose -f /home/dietpi/docker/app/docker-compose.yml stop")
if numPushed == 2:
# PWR red timer, ACT green solid
print("== Nextcloud Docker Pause")
set_led("PWR", "timer")
set_led("ACT", "default-on")
os.system("docker compose -f /home/dietpi/docker/app/docker-compose.yml pause")
print("== Reseting numPushed to 0")
numPushed = 0
def when_pressed():
global numPushed
numPushed += 1
print(f"Button pressed. Count is now: {numPushed}")
# start green heartbeat, red timer while pressed
set_led("PWR", "timer")
set_led("ACT", "heartbeat")
# def when_released():
# # be sure to turn back to green timer, red heartbeat if released
# os.system("echo $(date) button released")
# os.system("echo heartbeat | sudo tee /sys/class/leds/PWR/trigger")
# os.system("echo timer | sudo tee /sys/class/leds/ACT/trigger")
btn = Button(offGPIO, hold_time=holdTime, bounce_time=0.1)
btn.when_held = shutdown
btn.when_pressed = when_pressed
# btn.when_released = when_released
print("== my_button script running. Waiting for button presses...")
pause() # handle the button presses in the background