Wechselschaltung mit .sh script

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • also: ich versuche in einer .sh dabei den status eines GPIO abzufragen ( 0 oder 1 ) und dann mit einem Befehl den gegenteiligen zustand zu setzen, (Für eine wechselschaltung meiner Außenbeleuchtung ) , ich hab aber noch keinen Ansatz dafür, hat hier jemand eine Idee ?

    ich dachte an eine abfrage mit if , aber ich bin absolut nicht so tief im Thema.

  • Hallo,

    Code
    #! /bin/bash
    
    
    status=$(cat /sys/class/gpio/gpiox/value)
    if [ $status == 0 ]
    then
            echo "Pin ist low"
    else
            echo "Pin ist high"
    fi
  • Script:

    Ausgabe:

    Spoiler anzeigen


    //EDIT: Und das ganze als Python Script:


    [/spoiler]


  • Hallo,

    Code
    #! /bin/bash
    
    
    status=$(cat /sys/class/gpio/gpiox/value)
    if [ $status == 0 ]
    then
            echo "Pin ist low"
    else
            echo "Pin ist high"
    fi


    das könnte glaube ich das richtige sein, aber fehlerausgabe lautet:


    ./outon.sh: line 4: [: ==: unary operator expected

  • ..mangelhafter codeschnipsel :D

    Bei gpiox musst du das x mit einer Zahl ersetzen.. Also z.B.:

    Code
    status=$(cat /sys/class/gpio/gpio17/value)

    Desweiteren muss die Datei existieren also der gpio exportet/aktiviert worden sein.

  • ok, das hätte ich auch sehen müssen, sorry,
    also Fehler ist weg aber die Ausgabe ist nicht wie gewünscht,
    ich kann das licht einschalten und ausschalten über 2 Dateien aber so wie ich den code verstehe sollte es doch jetzt egal sein welcher zustand gerade geschaltet ist, es wird das Gegenteil eingeschaltet, also müsste ich über ein und die selbe sh an und ausschalten können oder?

  • Hast du den Pin angepasst?

  • Hi,

    Code
    if [[ $(gpio read 1) = 0 ]]; then
        gpio write 1 1
    else
        gpio write 1 0
    fi

    Ich hab das so in Kombination mit einem Taster im Einsatz.
    Das komplette Skript sieht so aus:

    Spoiler anzeigen

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (21. März 2015 um 19:28)

  • Die Verwendung des gpio Befehls bremst das ganze aber aus :fies: Lieber darauf verzichten und zum Beispiel den Benutzer pi in die Gruppe gpio aufnehmen, oder das Script als root ausführen also über sudo dann werden alle darin befindlichen Befehle ebenfalls als root ausgeführt.

    (sudo = superuser do = root)

  • Mal auf das nötigste gekürzt mit Pin 21:

    Code
    #! /bin/bash
    
    
    echo "21">/sys/class/gpio/export
    echo "out">/sys/class/gpio/gpio21/direction
    
    
    GPIOstate=$(cat /sys/class/gpio/gpio21/value)
    NEWstate=$(( ! $GPIOstate ))
    echo $NEWstate > /sys/class/gpio/gpio21/value


    Wobei der Pin natürlich nur einmal als Output deklariert werden muss. Dafür die Zeilen 4-7 von meigrafd.

    Konkret also meigrafds Lösung ohne while:

Jetzt mitmachen!

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