-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
executable file
·122 lines (83 loc) · 3.79 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import email_alarm
from ConfigParser import SafeConfigParser
import re
import os
# Einstellungen abrufen und setzen
#---------------------------------
config_file = "alert.conf"
path = os.path.dirname(os.path.abspath(__file__)) # Pfad der aktuellen Datei
path_config_file = "%s/%s" %(path, config_file) # Pfad und Dateiname für die Konfigurationsdatei
config = SafeConfigParser()
config.read(path_config_file)
email = config.getboolean('alert', 'email') # Soll eine Alarm- E-Mail versendet werden?
telefon = config.getboolean('alert', 'telefon') # Soll ein Alarmanruf ausgeführt werden
# Liste mit allen Inputs
inputs = []
for section in config.sections():
if re.search('^input-\d\d$', section):
inputs.append(section)
# Liste mit allen Outputs
outputs = []
for section in config.sections():
if re.search('^output-\d\d$', section):
outputs.append(section)
logfile = config.get('alert', 'logfile')
# GPIO initialisieren
#---------------------
GPIO.setmode(GPIO.BOARD) # PIN Nummerierung per P1 RPi Board
GPIO.setwarnings(False) # Warnung mehrfach Initialisierung deaktivieren
# Inputs
for section in inputs:
GPIO.setup(int(config._sections[section]["pin"]), GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # GPIO PIN als Eingang einstellen
GPIO.add_event_detect(int(config._sections[section]["pin"]), GPIO.RISING, bouncetime=500) # Flankenerkennung für Eingang aktivieren
# Outputs
for section in outputs:
GPIO.setup(int(config._sections[section]["pin"]), GPIO.OUT) # GPIO PIN einstellen
def main():
try:
print (time.strftime("%Y-%m-%d %H:%M ") + "Alert_pi gestartet") # Textausgabe
while(True): #Loop
# Zusände der Eingänge abrufen
#------------------------------
zeit = time.strftime("%Y-%m-%d;%X") # Aktuelle Systemzeit einlesen
# Flankenerkennung
for section in inputs:
if GPIO.event_detected(int(config._sections[section]["pin"])): # Auslöser
save_log(zeit, config._sections[section]["name"]) # Log eintragen
# Zusandserkennung
# for section in inputs:
# if GPIO.input(int(config._sections[section]["pin"])): # Auslöser
# save_log(zeit, config._sections[section]["name"]) # Log eintragen
time.sleep(config.getfloat('alert', 'time_interval')) #Wartezeit bis die Schleifen ein weiters mal durchlaufen wird
except KeyboardInterrupt: # Ausnahme, wenn Abbruch durch Strg + C
close() # GPIOs zurücksetzen
print ("\n" + time.strftime("%Y-%m-%d %H:%M ") + "Abbruch durch den Benutzer") # Textausgabe
def save_log(time, name):
file = open(logfile,"a") # Datei öffnen
file.write(str(time) + ";" + name + "\r\n") # Daten in Datei speichern
file.close() # Datei schließen
print str(time) + " " + name + " wurde ausgelöst"
def Result():
# Alarmausgeben
#--------------
email_alarm.senden(email) # Je nach Einstellung wird eine Alarm- E-Mail versendet
if telefon: # Bedingung für Telefonalarm
GPIO.output(OUT_01, True) # GPIO-Ausgang setzen
print("Start TIME")
print(time.strftime("%Y-%m-%d;%X")) # Aktuelle Systemzeit einlesen
time.sleep(1.0) # Wartezeit
GPIO.output(OUT_01, False) # GPIO zurücksetzen
print("End TIME")
print(time.strftime("%Y-%m-%d;%X")) # Aktuelle Systemzeit einlesen
def close():
# Abschlussprozedur
#------------------
GPIO.cleanup() # GPIO Einstellungen zurücksetzen
#Codeblock zum Testen bei direktem aufrufen der Datei
#----------------------------------------------------
if __name__ == "__main__":
main()