Herunterfahren (sudo halt) per arcade button

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Tag zusammen,

    ich bin seit kurzem Besitzer eines Raspberry Pi und im Zuge dessen auch Mitglied dieses Forums.

    Ich habe bereits einiges mit der kleinen Kiste getestet (XBMC, Raspbian, Retrogaming etc.) und bin wirklich begeistert.

    Da ich nun allerdings vorhabe, den Raspberry für mein Arcade Cab zu verwenden, stellt sich mir folgendes Problem:

    Ich habe bereits alle Arcade-Buttons erfolgreich über die GPIO-Schnittstelle verkabelt. Dies funktionert auch wunderbar.
    Sämtliche Arcade-Buttons sind einer bestimmten Keyboard-Taste zugewiesen.

    Jetzt würde ich gerne - falls dies technisch möglich ist - einen Arcade-Button mit einem Befehl zum runterfahren ("sudo halt")
    ausstatten. Dies vor dem Hintergrund, dass der Raspberry innerhalb des Arcade-Cabinets verbaut werden soll und ich somit gerne
    per Knopfdruck auf den Arcade-Button das Gerät herunterfahren möchte.

    Lange Rede kurzer Sinn:

    1. Arcade Button mit GPIO verbinden
    2. Betätigung des Buttons soll "sudo halt" ausführen.

    Ist so etwas möglich? Falls ja, könnte mir jemand sagen wie?

    Ich bedanke mich so oder so vorab für eure Mühen und verbleibe

    mit allerfreundlichsten Grüßen

    M4ttes

  • Möglich ist eigentlich alles :)

    Im prinzip brauchst du nur ein Script das auf einen interrupt auf dem GPIO Port wartet und wenn der eintritt wird ein Befehl ausgeführt..

    Guck dir dazu mal folgende Seiten an:
    http://kampis-elektroecke.de/?page_id=3740
    http://raspi.tv/2013/how-to-us…pi-and-rpi-gpio

    Spoiler anzeigen
  • Ich danke euch beiden vom Herzen.

    Leider verstehe ich "dort" bisher nur Bahnhof :)

    Aber ich werde mal versuchen mich einzulesen. Hatte gehofft es gibt bereits eine "Fertig-Lösung" :)Gibts doch nicht das ich der Erste mit exakt diesem Anliegen bin :helpnew:

    Naja. Übung macht den Meister.

    :danke_ATDE:

  • Ja, da hast du Recht.

    Als Person ohne Programmierkenntnisse tue ich mich aber selbst damit schon schwer.

    Wobei...

    Ich müsste vermutlich nur irgendwie ein sudo-halt-script schreiben.
    Bin gerade dabei zu ergooglen wie man das macht :-/

    Wird schon werden. Nochmal danke!

    • Offizieller Beitrag

    Quick'n'Dirty. kann sein das du das script als root ausführen musst.
    [code=php]
    import os
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    #setzen des GPIO 23 auf HIGH
    GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    try:
    #Das Programm wartet an der dieser Stelle so lange bis der Schalter
    #gedrueckt wurde und der GPIO 23 dadurch auf LOW wechselt
    GPIO.wait_for_edge(23, GPIO.FALLING)
    os.system("sudo halt")
    except KeyboardInterrupt:
    GPIO.cleanup()
    GPIO.cleanup() [/php]

  • So liebe Leute. Ich glaube ich stehe kurz vor dem Durchbruch :bravo2:

    Ich habe hier wirklich alles möglich versucht, aber als "Nicht-Programmierer" fallen mir auch diese vermeitlich einfachen Sachen schwer und es hat alles nicht funktioniert :)

    Jetzt bin ich bei meiner google recherche auf eine andere Methode hingewiesen worden.

    Das sogenannte vorinstallierte "Triggerhappy". In einem anderen Forum gab es wohl jemanden mit der gleichen bzw. einer ähnlichen Fragestellung. Dort wurde folgendes empfohlen (Annahme, der shutdown soll über die Taste F8 durchgeführt werden):


    Code
    # apt-get install triggerhappy
    # echo 'KEY_F8   1   /usr/sbin/shutdown -P now' >/etc/triggerhappy/trigger.d/shutdown.conf
    # /etc/init.d/triggerhappy restart

    Leider passiert danach mit dem Tastendruck auf F8 nichts :s

    Wenn ich aber

    Code
    # echo 'KEY_F8   1   /usr/bin/logger -- /usr/sbin/shutdown -P now' >/etc/triggerhappy/trigger.d/shutdown.conf
    # /etc/init.d/triggerhappy restart

    eingebe und im Anschluss in /var/log/syslog schaue, so sieht man das in der Tat mit dem Betätigen der F8-Taste ein shutdown ausgeführt wird (shutdown -P now).

    Kann mir evtl. jemand auf die Sprünge helfen?

    Ich danke euch in jedem Falle.

    Gruß

    M4ttes

    :danke_ATDE:

  • Oh sorry. Das ist für mich immer noch alles Neuland und ich werfe da wohl viel durcheinander.

    Ich bin bereits in der Lage bestimmte Keyboard-Tasten über GPIO per Arcade-Button anzusteuern.
    Dafür nutze ich die Software "retrogame" (https://github.com/adafruit/Adafruit-Retrogame).

    Mein Gedanke war jetzt der, dass ich den shutdown (bzw. sudo halt) auf eine Taste lege (z. B. F8) und ich über o. g. Software "F8" per Arcade-Button ansteuere. :s

    Nochmal Danke für alles.

    Gruß

  • Ich grabe das alte Thema noch mal aus.

    Ich habe in der Prozesstabelle einen Prozess namens "thd" (triggerhappy) gesehen, und mich gefragt, wo der herkommt, denn wissentlich habe ich ihn nicht gestartet. Beim Versucht, das Paket zu entfernen, passiert folgendes:

    Code
    apt-get remove triggerhappy
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut.       
    Statusinformationen werden eingelesen.... Fertig
    Die folgenden Pakete werden ENTFERNT:
      raspi-config triggerhappy
    0 aktualisiert, 0 neu installiert, 2 zu entfernen und 0 nicht aktualisiert.
    Nach dieser Operation werden 186 kB Plattenplatz freigegeben.
    Möchten Sie fortfahren [J/n]? n
    Abbruch.

    Jetzt frage ich mich, wie Du das Paket triggerhappy jemals einzeln installieren konntest bzw musstest:

    Code
    # apt-get install triggerhappy
    # echo 'KEY_F8   1   /usr/sbin/shutdown -P now' >/etc/triggerhappy/trigger.d/shutdown.conf
    # /etc/init.d/triggerhappy restart

    Es hätte doch schon längst auf Deinem System installiert sein müssen. Ich stelle diese Frage, weil ich das Paket gerne entfernen möchte, aber ohne daß mir apt-get gleich auch das raspi-config mit runterwirft.

    Irgendwelche Ideen?:s

  • Gegenfrage: Wieso möchtest du triggerhappy deinstallieren?

    raspi-config hängt ab von triggerhappy:

    Spoiler anzeigen
  • Gute Frage, nächste Frage :D

    Aber wie gesagt, wenn du das raspi-config Script weiterhin nutzen können willst aber auf triggerhappy verzichten, kannst du auch folgendes machen:

    Code
    apt-get remove --purge triggerhappy -y
    wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20131216-1_all.deb
    dpkg -i raspi-config_20131216-1_all.deb
    rm -f raspi-config_20131216-1_all.deb
    
    
    raspi-config

  • Gute Frage, nächste Frage :D

    Wieso, weshalb, warum, wer nicht fragt bleibt dumm...

    Gibt es einen logischen Grund für diese Abhängigkeit? Wozu benötigt raspi-config einen Dienst, der auf (Spezial)Tasten einer Tastatur lauscht?

    Zitat


    Aber wie gesagt, wenn du das raspi-config Script weiterhin nutzen können willst aber auf triggerhappy verzichten, kannst du auch folgendes machen:

    Ich weiß, wie ich Pakete mit dpkg statt mit apt installiere. Aber wenn ich das mache, meckert apt anschließend ständig über das fehlende Paket. Da muss ich noch ein Dummy-Paket installieren, das nur die Abhängigkeit befriedigt, aber sonst keine Dateien enthält.

    Aber wie gesagt: mir ging es mehr um den Grund für diese Abhängigkeit. Leider habe ich bei Debian und allen Ablegern schon häufiger nicht nachvollziehbare Abhängigkeiten erlebt, wenn z.B. apache verlangt wird, obwohl es auch ein viel kleinerer Server täte, weil nur statische Seiten ausgeliefert werden. Mir ist schon klar, daß die Entwickler und Paketschnürer versuchen müssen, möglichst viele Eventualitäten abzudecken. Aber manchmal bin ich mir nicht sicher, ob das Ergebnis dieser Bemühungen wirklich sinnvoll ist.

  • Hey! Du hast mich neugierig gemacht und das hat dazu geführt, daß ich jetzt triggerhappy statt gpm benutze, um den Pi mit der Maus runterzufahren oder neu zu starten. Das ist ja noch viel einfacher: bei gpm muss ich 4 mal klicken für eine Aktion¹, bei triggerhappy muss ich nur einmal klicken. Genial!

    Danke für den Denkanstoß! :thumbs1:

    (Siehe man gpm: special commands)


  • PInguin
    Wie machst du das mit der Maus genau?
    Hast du ein Script dazu?

    Das ist recht einfach: dazu gibt es das Programm "triggerhappy". Die Konfiguration dazu erfolgt unter /etc/triggerhappy/triggers.d/:

    Zum Anhalten erstellst Du dort z.B. die Datei "halt.conf" mit folgendem Inhalt:

    Code
    BTN_LEFT+BTN_MIDDLE     1       /usr/bin/sudo /sbin/halt

    Für einen Neustart z.B. die Datei "reboot.conf":

    Code
    BTN_RIGHT+BTN_MIDDLE    1       /usr/bin/sudo /sbin/reboot

    Wie Du an den Kommandos siehst, müssen sie mit "sudo" aufgerufen werden. Der Benutzer "pi" ist bereits in /etc/sudoers entsprechend eingetragen, daher ist es am sinnvollsten, triggerhappy mit den Rechten von pi zu starten:

    /etc/default/triggerhappy:

    Code
    DAEMON_OPTS="--user pi"


    Durch Drücken der entsprechenden Tasten führt der Dämon dann das entsprechende Kommando aus. Wichtig sind dabei zwei Dinge:

    1.
    Das "+" bedeutet nicht, daß beide Tasten exakt gleichzeitig zu drücken sind, sondern daß die zuerst angegebene Taste gedrückt und gehalten werden muss, und dann die zweite zusätzlich.

    2.
    Und das ist wirklich sehr, sehr, sehr wichtig: es gibt Raspian-Versionen, die haben modifizierte Start-Skripte, und in einem dieser Skripte wird der Start von Triggerhappy annulliert. Oder er wird nach kurzer Zeit wieder gestoppt.

    Das habe ich jetzt selber erst nach langer Korrespondenz mit einem Betroffenen erfahren. Achte also darauf, ob "/usr/sbin/thd" einige Minuten nach dem Start noch in der Prozesstabelle auftaucht, bevor Du Dich wunderst, warum nichts passiert.

    Taucht das Programm nicht auf, durchsuche das Verzeichnis /etc rekursiv nach dem Wort "triggerhappy" (bzw nach "thd") und schaue, wo er wieder gestoppt wird.

    Einmal editiert, zuletzt von PInguin (4. September 2015 um 10:02)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!