Intelligentes Schlüsselbrett (das zweite)

  • Habe das Schlüsselbrett was die Software und die Verkabelung angeht am laufen, werde es aber noch erweitern und natürlich noch in ein schönes "Schlüsselbrett" einbauen damit man es auch in der Wohnung aufhängen kann.


    Habe mehrere Scripte erstellt, alle Dateien sind im Verzeichnis /home/pi auf dem Raspberry Pi abgespeichert. Da ich nur Laie bin ist es für einen Profi wahrscheinlich verwirrend aber es funktioniert. Das System läuft stabil und die CPU Auslastung schwankt zwischen 0 - 2 Prozent. Habe natürlich mein Ziel noch nicht ganz erreicht aber der Großteil ist erledigt.


    Auf meinem Raspberry Pi ist Raspbian "Jessie" und WiringPi installiert.


    Das erste Script lautet "Start.sh" und ist wie schon erwähnt im Verzeichnis /home/pi abgelegt. Es wird als Cronjob gestartet.


    Der Befehl in crontab -e sieht wie folgt aus:


    @reboot sudo bash /home/pi/Start.sh


    Hiermit werden die Python- und Bash-Scripte automatisch bei jedem Neustart gestartet. Das "&" hinter den Dateiendung bewirkt dass die aufgerufenen Scripte im Hintergrund laufen.


    "Start.sh"



    Die Bash-Datei "GPIOexport.sh" exportiert die GPIO PIN´s damit sie später durch die Scripte geschaltet werden können. Das Script sieht wie folgt aus:


    "GPIOexport.sh"



    Die nächsten beiden Python-Scripte unterscheiden sich nur in der Ansteuerung verschiedener GPIO PIN´s. Wird hier der jeweilige Schalter betätigt leuchtet die jeweilige grüne LED auf, einmalig gestartet durch den "subprocess" im Python-Script. Die vier aufgeführten Bash-Scripte schalten die grünen LED´s ein oder aus.



    "Auto.py"


    "LEDAutoAn.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio27/direction
    echo "1" > /sys/class/gpio/gpio27/value
    
    
    exit 0


    "LEDAutoAus.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio27/direction
    echo "0" > /sys/class/gpio/gpio27/value
    
    
    exit 0



    "Haus.py"


    "LEDHausAn.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio22/direction
    echo "1" > /sys/class/gpio/gpio22/value
    
    
    exit 0


    "LEDHausAus.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio22/direction
    echo "0" > /sys/class/gpio/gpio22/value
    
    
    exit 0



    Das dritte Python-Script "Alle.py" ist ähnlich wie die oberen beide Scripte allerdings wird hier nicht der abgefragte Pin "UP" gezogen sondern "DOWN" gezogen. Außerdem wird hier der Status beider Schalter angezeigt (siehe Abbildung Steckplatine). Die zwei aufgeführten Bash-Scripte schalten die rote LED ein oder aus.



    "Alle.py"


    "LEDAlleAn.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio17/direction
    echo "1" > /sys/class/gpio/gpio17/value
    
    
    exit 0


    "LEDAlleAus.sh"

    Bash
    #!/bin/bash
    
    
    echo "out" > /sys/class/gpio/gpio17/direction
    echo "0" > /sys/class/gpio/gpio17/value
    
    
    exit 0



    Die acht erstellten Bash-Scripte und die drei Python-Scripte per chmod +x ausführbar machen....



    In der Abbildung sieht man die Verkabelung auf dem Breadboard, den Anschluss am Raspberry Pi und an den Mikroschaltern.



    Die verwendeten Mikroschalter sind diese hier:


    https://www.amazon.de/10-St%C3%BCck-Mikroschalter-Wechselschalter-polig/dp/B00BXHN0J2/ref=sr_1_1?ie=UTF8&qid=1486289951&sr=8-1&keywords=mikroschalter (Affiliate-Link)


    Diese verwende ich als "Haken" für die Schlüssel und gleichzeitig als Schalter.



    Ich möchte dieses Projekt noch durch eine Sprachausgabe und durch die Ansteuerung eines zweiten Raspberry Pi per SSH erweitern. Dies geschieht in den Python-Scripten, da muss ich mich aber noch hineinarbeiten. Aus räumlichen Gründen ist die Verwendung von zwei RPi´s nötig.


    Für Hinweise, Verbesserungen oder das Aufzeigen von Fehlern bin ich dankbar.

  • Du startest ein script per "sudo", und in diesem Script startest du weitere Scripte per "sudo".


    War?


    meinst du nicht, dass das einmal ausreicht?


    Jeder Scriptaufruf staret einen neue Umgebung, in der alle Variablen, die dort definiert, oder geändert werden, lokal gültig sind.
    Jeder Script-Aufruf 'belastet' das System, und wenn du dann noch Benutzerwechel machst, noch mehr.



    Eigentlich läuft bei dir alles als "root". Warum startest du es dann nicht auch als "root"?
    Ohne "sudo", und anderes Geraffel.



    Oder du schreibst das ganze so, dass alles als PI funktioniert, dann brauchst du kein "sudo"

    Selber denken,
    wie kann man nur?

  • Du importierst in den Python-Scripts WiringPi, um die Eingänge abzufragen, aber um die Ausgänge zu schalten, rufst Du BASH-Scripte auf (auch noch ohne absoluter Pfadangabe). Spricht irgendetwas dagegen, die Ausgänge auch mittels WiringPi im Python-Script zu schalten?

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!