Beiträge von loeffelpan

    Ursprünglich war /dev/gpiomem mit 600 und root:root berechtigt.

    Leider hat es nichtmal ausgereicht die Gruppe „osmc“ mit 660 auf das device zu berechtigen. Damit war es lediglich möglich die Pins zu lesen - add_event_detect oder wait_for_edge gingen weiterhin nur mit sudo.

    Allein die udev-Regel aus meinem gestrigen Post sorgt für die richtigen Berechtigungen.

    Da wird aber weit mehr gemacht als nur das.

    Allerdings kein Grund weiter zu suchen.

    Ich kann damit gut leben und es funktioniert ja.

    Leider lagst du nicht 100% richtig.

    Hab das gerade mal auf meinem RPi mit OSMC ausprobiert.

    Die gpiozero library setzt auf RPi.GPIO auf und benötigt das Modul und damit auch die geänderten Rechte (unter OSMC) für /dev/gpiomem.

    Deinem Ratschlag folgend müsste ich also alles machen, was ich auch gemacht habe und anschließen noch gpiozero installieren, um ein oder zwei Zeilen Code zu sparen. Funktionieren tut es aber.

    Sieht gut aus, funktioniert aber nur mit nem Taster bzw. wenn das Ziehen auf GND als Trigger dient.

    Noch einfacher wäre dann das hier - da braucht man sich gar nicht mit Python rumschlagen. Funktioniert aber nicht mit jedem Betriebssystem.

    https://blog.gc2.at/post/pi-herunterfahren/

    Da kann man einfach in der config.txt eine Zeile einfügen und nen Taster an einen definierten PIN anstecken/löten.

    Einmal drücken -> Herunterfahren; Nochmal drück -> Hochfahren; GENIAL!

    Leider entspricht das nicht ganz dem gewünschten Szenario, da es kein Taster ist und der Pin nicht als Trigger auf GND gezogen wird.

    Die Platine von Neueinsteiger zieht den Shutdown-Anschluss auf GND während die Trigger-Spannung anliegt.

    Heruntergefahren werden soll es wenn die Trigger-Spannung abfällt und die Spannung am PIN wieder ansteigt (GPIO.RISING).

    Hätte Neueinsteiger auch anders herum lösen können, aber dafür wäre die Platine aufwändiger gewesen und hätte noch einen Draht mehr gehabt (3,3V zur Platine).

    Danke trotzdem für die Ergänzung, vielleicht hilft es ja dem ein oder anderen.

    Ich möchte mich ebenfalls herzlichst bei Neueinsteiger bedanken.

    Für mich hatte er ebenfalls eine Platine (mit Shutdown-Steuerung).

    Das Beste: Er hat mir sogar noch einen StepDown von 12V auf 5V davorgeschaltet, damit ich den Trigger-OUT meines AVR nutzen kann.

    Klinkenbuchse oder -kabel anlöten fertig. Vielleicht auch interessant für andere, die das hier finden.

    nikelrah

    Besten Dank dafür!

    Der Reset funktionierte direkt einwandfrei - nur mit dem Python fürs runterfahren über den GPIO Pin musste ich etwas rumprobieren.

    Ergebnis poste ich morgen hier.

    EDIT:

    Hier das Python-Script. Und weil es für mich nicht ganz klar war und hier im Thread oftmals Python-Scripte mit Pull-Down gepostet wurden - nochmal mit Erklärung.
    Die Platine von Neueinsteiger zieht den Shutdown-Anschluss auf GND während die Trigger-Spannung anliegt.

    Das bedeutet, dass wir einen (internen) PullUP auf dem Pin brauchen, der diesen wieder auf 3,3V zieht wenn die Trigger-Spannung abfällt.

    Das Python-Script reagiert dann auf diese aufsteigende Flanke.

    Gestartet wird das Script bei mir per systemd-Unit.

    Ergänzung für alle OSMC-Benutzer:

    Ich musste bei OSMC erst die Berechtigungen für die GPIO-Pins anpassen, damit das Python nicht mit root laufen muss.

    Habe ich per UDev-Regel erledigt. Einfach eine Datei anlegen (z. B "997-gpio-permissions.rules) in /etc/udev/rules.d mit folgenden Inhalt und dann einmal neustarten.

    Code
    SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="osmc", MODE="0660"
    SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:osmc /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
    SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:osmc /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"