Hallo,
die '3000' sind Millisekunden, das ergibt deine gewünschten 3 Sekunden.
Die '3' bei mir ist der GPIO 3 Pin, das entspricht der Pin-Nummer 5, siehe:
https://gpiozero.readthedocs.io/en/stable/recipes.html Absatz 2.2
Die Zeit, die man den Button gedrückt halten muss ist mit 'time=' angegeben, das ist bei mir jetzt 2 Sekunden. Kann man ja beliebig anpassen.
Der Code ist vom selben Link, Absatz 2.8.
Wenn du das verwenden möchtest, in dem Link Absatz 1.1 steht wie du gpiozero installierst. Das ist übrigends eine tolle Bibliothek mit guter und meiner Meinung nach verständlicher Doku.
Grüße
Dennis
Raspberry Pi mit langen Tastendruck herunterfahren
Ok ich versuche mich mal das durch zu arbeiten evtl. klappt es ja damit.
Ist halt nur komisch das der Dienst immer verschwindet wen ich die kontakte verwende, das ist bei meinem alten script ohne timer nicht passiert
Ist halt nur komisch das der Dienst immer verschwindet wen ich die kontakte verwende, das ist bei meinem alten script ohne timer nicht passiert
Nachtrag:
Der Fehler war nur ein Tippfehler, es muss heißen 'GPIO.RISING' anstatt 'GPIO_RISING'
Ich hatte allerdings noch eine Fehlermeldung wegen Berechtigungen bekommen, dann den Shutdown-Befehl abgeändert und es ging:
Grüße und viel Spass beim probieren
Dennis
Der Fehler war nur ein Tippfehler, es muss heißen 'GPIO.RISING' anstatt 'GPIO_RISING'
Ich hatte allerdings noch eine Fehlermeldung wegen Berechtigungen bekommen, dann den Shutdown-Befehl abgeändert und es ging:
Code: Alles auswählen
#!/usr/bin/env python3
from RPi import GPIO
from subprocess import run
BUTTON_PIN = 5
TIMEOUT = 3000 # ms
def main():
try:
GPIO.setmode(GPIO.BCM)
# GPIO5 (pin 29) set up as input. It is pulled up to stop false signals
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
# wait for the pin to be sorted with GND and, if so, halt the system
GPIO.wait_for_edge(BUTTON_PIN, GPIO.FALLING)
channel = GPIO.wait_for_edge(BUTTON_PIN, GPIO.RISING, timeout=TIMEOUT)
if channel is None:
print("Shutting down...")
run(["sudo", "shutdown", "-h", "0"])
finally:
GPIO.cleanup()
if __name__ == "__main__":
main()
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Ah... damit hat es jetzt geklappt
Code: Alles auswählen
from gpiozero import Button
from subprocess import check_call
from signal import pause
def shutdown():
check_call(['sudo', 'poweroff'])
shutdown_button = Button(3, hold_time=2)
shutdown_button.when_held = shutdown
pause()