# Programmname: Treiber.py # Autoren: Sven Gruetzmacher, Fabian Staller, Christian Schoon, Okan Kaya, Dominik Gotthardt # Datum der Veroeffentlichung XX.XX.2015 #-*- coding: utf-8 -*- import time import RPi.GPIO as GPIO #fuer Pin-Belegungssteuerung import MySQLdb as db #fuer MySQLdb = db import sys import os GPIO.setmode(GPIO.BOARD) #legt die Pin-Belegungsart fest => Pins von 1 bis 26 nicht GPIO.BCM GPIO.setwarnings(False) #deaktiviert die Fehlermeldungen #GPIO.cleanup() #Pins werden zurueckgesetzt # Eingaenge fuer Tuer Kontakte MAGNET_01 = 40 #legt Sensor auf Pin fest und umgekehrt MAGNET_02 = 38 #s.o. #MAGNET_03 = #Magnetkontakte Scharf/Nicht Scharf stellen MAGNET_01_on = 0 #1 = scharf gestellt = 1 MAGNET_02_on = 0 #0 = nicht scharf gestellt #MAGNET_03_on = 0 # Eingang fuer den Lichtsensor LIGHT_01 = 18 #Lichtsensor Scharf/Nicht Scharf stellen LIGHT_01_on = 0 # Tuer Kontakte als INPUT einstellen GPIO.setup(MAGNET_01, GPIO.IN, pull_up_down=GPIO.PUD_UP) #regelt die Spannungshoehe => PUD_UP = geringe Spannung GPIO.setup(MAGNET_02, GPIO.IN, pull_up_down=GPIO.PUD_UP) cs_01 = 0 # cs = Current State MAGNET_01 ps_01 = 0 # ps = Previous State MAGNET_01 cs_02 = 0 # cs = Current State MAGNET_02 ps_02 = 0 # ps = Previous State MAGENT_02 cs_03 = 0 # cs = Current State MAGNET_03 ps_03 = 0 # ps = Previous State MAGNET_03 while True: ts = time.time() # Zeitpunkt/Uhrzeit db = "database.db" # Pfad zu MySQL Datenbank #Start Kontakt cs_01 = GPIO.input(MAGNET_01) # KONTAKT -> GEOEFFNET if cs_01 == 1 and ps_01 == 0 and MAGNET_01_on != 1: #Statusaenderung (ps/cs s.o.) print "Tuer 1 offen" #Statusausgabe con = db.connect('localhost','Userdb','PWUserdb','dbFile'); #Aenderung auf MySQL ff with con: cur = con.cursor() cur.execute("INSERT INTO Log values(null, %d, 'Tuer 1','geoeffnet')" % (ts) ) ps_01=1 # KONTAKT -> ALARM elif cs_01 == 1 and ps_01 == 0 and MAGNET_01_on == 1: print "Tuer 1 ALARM" #LED ALARM (LED blinkt) GPIO.setup(29, GPIO.IN) # Pin 29 auf Input setzen GPIO.setup(33, GPIO.OUT) # Pin 33 auf Output setzen while 1: # Dauersschleife GPIO.output(11, GPIO.LOW) # LED immer ausmachen if GPIO.input(18) == GPIO.HIGH: # GPIO lesen GPIO.output(11, GPIO.HIGH) # LED an time.sleep(0.1) # Warte 100 ms GPIO.output(11, GPIO.LOW) # LED aus time.sleep(0.1) # Warte 100 ms #Eintrag in die Datenbank erstellen con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 1','Alarm')" % (ts) ) #evtl. Datumsabfrage #Email,SMS,Anruf,Sirene,Foto oder Video aufnehme #Sirene => playProcess = subprocess.Popen (['omxplayer','/Pfad/AudioAlarmFile.mp3']) #Video/Bild => Ruecksprache mit Team Hardware / Software ps_01=1 #Pause 10sek # KONTAKT -> geschlossen elif cs_01==0 and ps_01 == 1: print "Tuer 1 geschlossen" #LED SCHARF GPIO.setup(29, GPIO.IN) # Pin 29 auf Input setze GPIO.setup(33, GPIO.OUT) # Pin 33 auf Output setzen if GPIO.input(29) == GPIO.LOW: # GPIO lesen GPIO.output(11, GPIO.HIGH) # LED an # Eintrag in die Datenbank con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 1','geschlossen')" % (ts) ) ps_01=0 # MAGNET 01 ENDE # MAGNET 02 START cs_02 = GPIO.input(MAGNET_02) # KONTAKT -> GEOEFFNET if cs_02 == 1 and ps_02 == 0 and MAGNET_02_on != 1: print "Tuer 2 offen" #Eintrag in die Datenbank con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 2','geoeffnet')" % (ts) ) ps_02=1 # KONTAKT -> ALARM elif cs_02 == 1 and ps_02 == 0 and MAGNET_02_on == 1: print "Tuer 2 ALARM" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 2','Alarm')" % (ts) ) #Email,SMS,Anruf,Sirene,Foto oder Video aufnehmen ps_02=1 # KONTAKT -> geschlossen elif cs_02==0 and ps_02 == 1: print "Tuer 2 geschlossen" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 2','geschlossen')" % (ts) ) ps_02=0 # MAGNET 02 ENDE # MAGNET 03 START cs_03 = GPIO.input(MAGNET_03) # KONTAKT -> GEOEFFNET if cs_03 == 1 and ps_03 == 0 and MAGNET_03_on != 1: print "Tuer 3 offen" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 3','geoeffnet')" % (ts) ) ps_03=1 # KONTAKT -> ALARM elif cs_03 == 1 and ps_03 == 0 and MAGNET_03_on == 1: print "Tuer 3 ALARM" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 3','Alarm')" % (ts) ) #Email,SMS,Anruf,Sirene,Foto oder Video aufnehmen ps_01=1 # KONTAKT -> geschlossen elif cs_03==0 and ps_03 == 1: print "Tuer 3 geschlossen" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Tuer 1','geschlossen')" % (ts) ) ps_01=0 # MAGNET 03 ENDE # Lichtsensoren cs_04 = 0 # cs = Current State LIGHT_01 ps_04 = 0 # ps = Previous State LIGHT_01 def init(): os.system('clear') def main(): init() i = 0 try: while True: #LDR-Timing mit GPIO-Pin 18 print "[LDR-Lichtsensor] [",i,"] LDR-Timing: ", LDRtime(LIGHT_01), "in ms" i = i + 1 if LDRtime(LIGHT_01) > 5 # LIGHT_01 START cs_04 = GPIO.input(LIGHT_01) # LICHT -> AN if cs_04 == 1 and ps_04 == 0 and LIGHT_01_on != 1: print "Licht an" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Licht','angeschaltet')" % (ts) ) ps_04=1 # LICHT -> ALARM elif cs_04 == 1 and ps_04 == 0 and LIGHT_01_on == 1: print "Licht ALARM" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Licht','Alarm')" % (ts) ) #Email,SMS,Anruf,Sirene,Foto oder Video aufnehmen ps_04=1 # LICHT -> ausgeschaltet elif cs_04==0 and ps_04 == 1: print "Licht ausgeschaltet" con = db.connect('localhost','Userdb','PWUserdb','dbFile') with con: cur = con.cursor() cur.execute("INSERT INTO tbl_log values(null, %d, 'Licht','ausgeschaltet')" % (ts) ) ps_04=0 # LIGHT_01 ENDE # Bewegungsmelder PIR = 25 # legt PIN fest def initPIR(PIR): # Init PIR for input print "Waiting for PIR..." while GPIO.input(PIR) == 1: print "PIR Ready" return 0 def motion(): # Aktion wenn Bewegung erkannt wurde (SQL anbindung?) print "Motion detected!" return def motionGone(): print "Ready for new motion detection!" # Aktion wenn Bewegung erkannt wurde return GPIO.setmode(GPIO.BCM) GPIO.setup(PIR, GPIO.IN) PirPreviousState = 0 # Festlegung Status Current und Previous PirCurrentState = initPIR(PIR) try: while True: PirCurrentState = GPIO.input(PIR) # Current Status ist der Input des Melders if PirCurrentState == 1 and PirPreviousState == 0: # Wenn Current Status 1 und Previous Status 0, dann ist der Melder ausgelöst motion() # Es folgt die Aktion PirPreviousState=1 # Previous Status wird auf 1 gesetzt elif PirCurrentState == 0 and PirPreviousState == 1: # Wenn Current Status 0 und Previous Status 1, motionGone() # Melder ist wieder bereit PirPreviousState=0 # Previous Status wird wieder auf 0 gesetzt time.sleep(0.1) except KeyboardInterrupt: # mit STRG+C lässt sich das Script beenden # massive CPU-Auslastung verhindern time.sleep(0.01)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question