Cronjob GPIO schalten

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

    hab ein kleines Problem. Ich möchte meine GPIO's zu bestimmten Uhrzeiten schalten. Einzeln und auch mehrere. Bei Netz durchsuchen bin ich auf Cronjobs gestoßen. Allerdings führt der Cronjob ja nur Shellscript's auf wie ich das gesehen habe. Allerdings weis ich nicht genau was ich falsch mache. Hier mal der für einzuschalten

    Bash
    #!/bin/sh
    
    
    echo "1" > /sys/devices/virtual/gpio/gpio25/value



    wenn ich das so speichere und dann den Cronjob erstelle sprich

    Code
    30 21 * * * /home/pfad wo der Shellscript liegt


    mache tut sich um 21:30 Uhr nichts.

    Ich kann mir nur vorstellen das, dass was mit der Rechteverwaltung zu tun hat. Aber ich denke hier kann mir bestimmt jemand weiterhelfen.

    MfG Bierbauch

  • Hallo Bierbauch,

    hast Du Dein Skript auch ausführbar gemacht?

    Code
    chmod +x DeinSkript

    Ansonsten gehe ich mal davon aus, daß Du den cronjob als normaler user (=pi) mit "crontab -e" eingetragen hast, das sollte so passen.

    Gruß, mmi

  • Hallo Bierbauch,

    bevor du das ganze per Cronjob aufrufst solltest du das Skript von Hand aufrufen und sicherstellen, dass das Skript auch funktioniert. Hast du eigentlich die GPIO-Ports initialisiert?

    Zitat von mmi

    Ansonsten gehe ich mal davon aus, daß Du den cronjob als normaler user (=pi) mit "crontab -e" eingetragen hast, das sollte so passen.

    Wenn ich mich recht erinnere, dann benötigt man Root-Rechte um in "/sys/devices/virtual/gpio/gpioXX/value" schreiben zu dürfen. Diese hat man aber in der User-Crontab standardmäßig nicht. Aber das sieht man ja sehr schnell wenn man das Skript mal von Hand testet.

    Gruß Georg

  • Hallo,

    also wenn ich mich mit dem User Pi einlogge und dann chmod +x zeit.sh eingebe dann passiert nichts der gpio port wird nicht geschaltet. Es kommt aber auch zu keiner Fehlermeldung wenn ich sudo davor eingebe genau so wenig.

  • Zitat


    [font="Tahoma"]chmod +x zeit.sh[/font]


    Damit wird die Datei nur ausführbar gemacht, das war der erste Schritt, das schaltet tatsächlich nichts. Und es gibt auch keine Rückmeldung wenn alles gut gelaufen ist. Sollte man die Dateieigenschaften nicht ändern dürfen, dann würde eine Fehlermeldung zurückkommen.

    Schaltet das denn mit den bisherigen Anweisungen? Jetzt nach chmod?

    Einmal editiert, zuletzt von punk (17. August 2013 um 17:12)

  • Bevor man einen GPIO pin schalten kann, muss dieser exportiert also aktiviert werden, aber das darf nur root - über sudo funktioniert das leider auch nicht (zumindest nicht bei mir)

    Dafür gäbe es 2 Alternativen:

    - Entweder das Script direkt als root Benutzer ausführen und auch dessen crontab nutzen (oder in /etc/crontab eintragen und ebenfals als root ausführen (ACHTUNG! /etc/crontab hat eine Spalte mehr als die normalen Benutzer-Crontab Dateien, nämlich für den Benutzer über den der Befehl ausgeführt werden soll))

    - Oder wiringPi installieren und exportieren über das Programm "gpio" regeln

    Spoiler anzeigen
    Code
    apt-get install git-core
    git clone git://git.drogon.net/wiringPi
    cd wiringPi/
    ./build
    man gpio

    Wenn du also über gpio den Pin 25 aktivieren willst bzw um dessen Wert ändern zu können, musst du folgenden Befehl nutzen:

    Code
    gpio export 25 in


    Die Richtung musst du dabei immer mit angeben, kannst es aber später jederzeit ändern.

  • Hallo meigrafd,

    Zitat

    Bevor man einen GPIO pin schalten kann, muss dieser exportiert also aktiviert werden, aber das darf nur root - über sudo funktioniert das leider auch nicht (zumindest nicht bei mir)

    Ich vermute mal, dass du es mit dem folgenden Befehl probiert hast. Oder zumindest mit einem ähnlichen Aufruf.

    Code
    sudo echo 0 >/sys/class/gpio/export

    Das Problem dabei ist, dass zwar "echo" mit den Root-Rechten ausgeführt wird aber nicht die Ausgabeumlenkung. Siehe hierzu auch: http://www.gtkdb.de/index_7_2095.html
    Der korrekte Aufruf wäre in diesem Fall der Folgende.

    Code
    sudo su -c 'echo 0 >/sys/class/gpio/export'

    Gruß Georg

  • Hallo,

    jetzt bin ich gerade leicht verwirrt. Also vlt. nochmal von vorne. Es gibt bei mir 3 User einmal root dann pi und einen der heißt siri über dem läuft halt die Sprachsteuerung...
    wenn ich jetzt mit ''cd'' in den ordner wechsel und da dann sh zeit.sh eingebe geht das Licht an. Soweit funktioniert also das Script schonmal. Nur das jetzt in den Crontab -e zu prügeln... also das sieht im moment ungefähr so aus 30 21 * * * /home/pi/zeit.sh aber passiert ist nichts...

  • Hallo Bierbauch,

    Zitat

    wenn ich jetzt mit ''cd'' in den ordner wechsel und da dann sh zeit.sh eingebe geht das Licht an. Soweit funktioniert also das Script schonmal. Nur das jetzt in den Crontab -e zu prügeln... also das sieht im moment ungefähr so aus 30 21 * * * /home/pi/zeit.sh aber passiert ist nichts...

    Dann rufst du jetzt mal den folgenden Befehl auf.

    Code
    /home/pi/zeit.sh

    Wenn es funktioniert, dann wurdert es mich warum es per Cron nicht funktioniert. Ich denke aber, dass es nicht funktionieren wird. Wenn du das Skript von Hand aufrufst, übergibst du das Skript als Argument an "sh". Das bedeutet, dass Skript muss weder eine Shebang besitzen noch die entsprechenden Zugrifssrechte damit es ausgeführt werden kann.

    Gruß Georg

Jetzt mitmachen!

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