Raspberry Autostart Skript – rc.local

# Die Datei rc.local mit nano öffnen
sudo nano /etc/rc.local

# exit 0 muss die letzte Zeile der Datei sein!
# Alle Änderungen und neuen Zeilen müssen über dieser Zeile stehen!

# Folgende Zeile hinzufügen
# Abschließendes &-Zeichen wenn das Skript ein Infinite-Loop ist
# oder eine Endlos-Schleife enthält da sonst der RPI u.U. nicht
# mehr korrekt bootet

# VARIANTE 1
python /home/pi/scriptname.py &

# VARIANTE 2
# Diese Variante bevorzuge ich und habe den Interpreter im
# Python-Script selbst festgelegt (#!/usr/bin/python)
/home/pi/scriptname.py & 

# Dateirechte setzen über Terminal
sudo chmod u+x /home/pi/scriptname.py

Raspberry PIR HC-SR501 Bewegungsmelder

    # ---------------------------------------------------------------------------------------------------- #
    # Permanentes Abfragen des GPIO PINs
    # [!] Diese Variante sollte nur genutzt werden, wenn maximal 2 PIR Sensoren genutzt werden
    # und sonst keine weiteren GPIO PINs verwendet werden.
    # Da in einer Endlos-Schleife der Status der GPIO PINs abgefragt wird, belastet dies natürlich
    # die CPU und verlansgamt Hintergrundprozesse - in meinem Fall allerdings gerade mal um 1%.
    # Die Auslastung ist also nicht wirklich hoch.
    # ---------------------------------------------------------------------------------------------------- #

#!/usr/bin/python

import RPi.GPIO as GPIO # GPIO Bibliothek
from time import sleep  # TIME Bibliothek (aber nicht komplett, nur SLEEP)

GPIO.setmode(GPIO.BCM)  # GPIO Referenz statt physikalscieh PIN Nummer

# GPIO PIN 17 als Eingang definieren
GPIO.setup(17, GPIO.IN)

# Initialisierung
PIN_INPUT = 0
PIN_STATE = 0

try:
    # Warten bis am GPIO PIN ein LOW anliegt
    while GPIO.input(17) != 0:
        sleep(0.1)
    print "PIR Sensor bereit, wartet auf Bewegung..."

    while True:
        # GPIO PIN auslesen
        PIN_INPUT = GPIO.input(17)

        if PIN_INPUT == 1 and PIN_STATE == 0:
            print "Bewegung erkannt!"
            # <do anything> an dieser Stelle, wenn eine Bewegung erkannt wurde
            PIN_STATE = 1
        elif PIN_INPUT == 0 and PIN_STATE == 1:
            print "PIR Sensor bereit, wartet auf Bewegung..."
            PIN_STATE = 0

        sleep(0.1)

except KeyboardInterrupt:
  # GPIO PIN freigeben (wichtig!)
  GPIO.cleanup()


    # ---------------------------------------------------------------------------------------------------- #
    # GPIO.add_event_detect()
    # [!] Diese Variante fragt zwar nicht ständig den Status des GPIO PINs ab,
    # fürhte aber bei mir zu "Fehlalarmen" und wiederholten Aufrufen der Callback-Funktion
    # Wird der PIR zwei oder mehrere Male ausgelöst durch Bewegungen, wird auch die Callback-
    # Funktion mehrmals hintereinander aufgerufen, auch mit bouncetime konnte der Effekkt nicht
    # gestoppt werden
    # ---------------------------------------------------------------------------------------------------- #

#!/usr/bin/python

import RPi.GPIO as GPIO # GPIO Bibliothek
from time import sleep  # TIME Bibliothek (aber nicht komplett, nur SLEEP)

GPIO.setmode(GPIO.BCM)  # GPIO Referenz statt physikalscieh PIN Nummer

# GPIO PIN 17 als Eingang definieren
GPIO.setup(17, GPIO.IN)

# Initialisierung
PIN_INPUT = 0
PIN_STATE = 0

def PIR_CALLBACK(channel)
    print "Bewegung erkannt!"
    # <do anything> an dieser Stelle, wenn eine Bewegung erkannt wurde

try:
    # Auf ein Ereignis (GPIO.RISING Pegelanstieg) lauschen
    GPIO.add_event_detect(GPIO_PIR, GPIO.RISING, callback=PIR_CALLBACK)
    # GPIO.add_event_detect(GPIO_PIR, GPIO.RISING, callback=PIR_CALLBACK, bouncetime=300)

    while True:
    sleep(20)

except KeyboardInterrupt:
  # GPIO PIN freigeben (wichtig!)
  GPIO.cleanup()