Runterfahren über Taster ?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Iksi
    Lox Guru
    • 27.08.2015
    • 1111

    Runterfahren über Taster ?

    Hallo,

    ich würde gerne an meinem Loxberry einen Taster mit LED anschließen um Runter- und Hochfahren zu können.
    Vom Prinzip her funktioniert das ganze auch. Ich habe dafür ein kurzes Python Programm, welches, wenn ich es als root ausführe, auch genau das macht was ich möchte.
    Hier mal das Programm:
    Code:
    #!/usr/bin/env python
    
    # shutdown script for Raspberry Pi
    # watch LOW level on pin 5 to enter sleep mode
    # status led on pin 7: ON = ready, BLINK = confirm button
    
    import RPi.GPIO as GPIO
    import os
    import time
    
    # use the pin number as on the raspi board
    
    GPIO.setmode(GPIO.BOARD)
    
    # set pin 7 as output and HIGH, pin 5 is input
    
    GPIO.setup(7, GPIO.OUT)
    GPIO.output(7, True)
    GPIO.setup(5, GPIO.IN)
    
    # start the loop for every .5 seconds, waiting for LOW on pin 5
    # then 2 short flashes with led to confirm and shutdown to sleep mode
    
    while True:
            if not (GPIO.input(5)):
                  GPIO.output(7, False)
                 time.sleep(.1)
                 GPIO.output(7, True)
                 time.sleep(.1)
                 GPIO.output(7, False)
                 time.sleep(.1)
                 GPIO.output(7, True)
                 os.system("sudo shutdown -h now")
           time.sleep(.5)
    Es wird also einfach der GPIO Pin überwacht und wenn der Taster gedrückt wird, wird herunter gefahren. Zudem leuchtet die LED einfach immer und bei betätigung des Tasters blinkt sie kurz zur Bestätigung.

    Um das Programm bei jedem start zu starten habe ich das einfach unter /opt/loxberry/system/cron/cron.reboot gespeichert.
    Auch das funktioniert an sich, das Programm wird zumindest jedes mal gestartet, das ist auch daran zu erkennen dass die LED dann angeht.
    Das Problem was ich habe ist dass das runter fahren nicht klappt. Ich vermute mal weil das ja nicht als Root ausgeführt wird und daher die Berechtigung für das Runter fahren fehlt, oder was könnte der Grund dafür sein ?

    Kann ich das Script irgendwie bei jedem Systemstart als Root starten ? Möglichst natürlich auch so dass es Updates vom Loxberry übersteht....

    Danke und Gruß

    Iksi
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11218

    #2
    Probiers mit sudo /sbin/poweroff
    lg, Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

  • AlexAn
    Lebende Foren Legende
    • 25.08.2015
    • 4257

    #3
    oder
    sudo shutdown -h now
    Grüße Alex

    Kommentar


    • Iksi
      Iksi kommentierte
      Kommentar bearbeiten
      Das habe ich ja in meinem Script.... aber geht halt nicht
  • Wörsty
    LoxBus Spammer
    • 06.11.2015
    • 203

    #4
    Wie fährst du ihn denn mit dem Taster wieder hoch?
    Ich habe das gar nicht so kompliziert gemacht- mein Tastschalter hängt einfach zwischen den 5V der Versorgungsspannung.
    Hat der LoxBerry Saft, leuchtet er und wenn nicht, nicht.

    Aber das mit dem sudo müsste eigentlich gehen.
    ich hatte aber auch letztens so ein Problem und habe versucht es über ein Plugin zu lösen, welches nur aus einem Dämon besteht, der ja root Rechte hat.
    Geht aber immer noch nicht 100%ig.
    Da muss ich auch nochmal gucken...

    Also halt mich mal auf dem laufenden, wie du es letztendlich gemacht hast
    Loxone Miniserver (letzte Beta) in KNX Umfeld

    Kommentar


    • Iksi
      Iksi kommentierte
      Kommentar bearbeiten
      Wenn du an PIN 5 einen Taster mit PullUp und gegen Masse anschließt, kannst du ihn über den Taster wieder hoch fahren. Geht aber nur an PIN 5. Und per Script kann man ihn dann über den gleichen Taster runter fahren...
      Das mache ich an anderen RPIs auch so.
      das PYTHON Script funktioniert auch. Wenn ich das als Root per ssh starte läuft alles. Halt nur nicht wenn ich das über das Cron Verzeichnis starten lasse...
      Zuletzt geändert von Iksi; 12.09.2020, 18:28.

    • Wörsty
      Wörsty kommentierte
      Kommentar bearbeiten
      Cool. Wusste ich gar nicht.Wieder was gelernt.
      Vielleicht kannst du dir ja das Plugin für deine Zwecke umbauen.
      Als PowerControl Plugin oder so.
      GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
  • Iksi
    Lox Guru
    • 27.08.2015
    • 1111

    #5
    Es lag tatsächlich nur an dem Befehl.
    Mit dem von Christian geschriebenen "sudo /sbin/shutdown" klappt es dann.

    ich habe das Script noch um die Möglichkeit des Neustarts erweitert.
    kurzer Druck --> Runter fahren
    langer Druck (>2.5s) --> Neustart

    hier nochmal der Code:

    Code:
    #!/usr/bin/env python
    
    # shutdown script for Raspberry Pi
    # watch LOW level on pin 5 to enter sleep mode or reboot, depending on duration of low level
    # status led on pin 7: ON = ready, BLINK = confirm button
    
    import RPi.GPIO as GPIO
    import os
    import time
    
    # use the pin number as on the raspi board
    
    GPIO.setmode(GPIO.BOARD)
    
    # set pin 7 as output and HIGH, pin 5 is input
    
    GPIO.setup(7, GPIO.OUT)
    GPIO.output(7, True)
    GPIO.setup(5, GPIO.IN)
    
    # start the loop for every .5 seconds, waiting for LOW on pin 5
    # then 2 short flashes with led to confirm and shutdown to sleep mode
    
    while True:
        if not (GPIO.input(5)):
            for i in range(1, 25): #Frage 25 mal alle 0.1s den GPI$
                if GPIO.input(5):
                    for j in range(1,3):
                        GPIO.output(7, False)
                        time.sleep(.3)
                        GPIO.output(7, True)
                        time.sleep(.3)
                    os.system("sudo /sbin/poweroff")
                    i = 0
                    break
                time.sleep(.1)
            #while not (GPIO.input(5)):
            # time.sleep(.2)
            if (i!=0):
                for j in range(1,5):
                    GPIO.output(7, False)
                    time.sleep(.15)
                    GPIO.output(7, True)
                    time.sleep(.15)
                #print 'restart'
                os.system("sudo /sbin/restart")
        time.sleep(.2)
    Mal noch eine Off-Topic Frage:
    Wenn ich hier Code einfüge, übernimmt der bei mir die Leerezeichen und TAB's zum einrücken nicht, gibts da nen Trick ?
    Jetzt formatiere ich das im Nachgang händisch mit Leerzeichen, finde das aber etwas umständlich. Zumal das bei Python ja essentiell ist...

    Gruß Iksi
    Zuletzt geändert von Iksi; 14.09.2020, 12:38.

    Kommentar

    Lädt...