Das mit dem 'while True' ist einleuchtend. Ich habe dies stumpf 1:1 aus meinem Konsolen-Programm so übernommen. Auch wurde nun eine ID anstelle eines Tags im Template eingefügt. Ich habe noch eine Variable 'global alarm' in Verwendung, weil ich so den Zustand auch nach dem Schliessen des Browser speichern kann. Da ich eh schon eine DB habe, wäre es wohl besser, dies direkt in die DB zu schreiben und abzufragen. (?)
Der Sensor liefert nur 1 oder 0 zurück. Also wenn eine Bewegung erkannt wird, dann ist der GPIO Input ("GPIO.input(PIR_PIN)") für ca. 1/2 Sekunde auf 1 und dann wieder auf 0.BlackJack hat geschrieben:Wenn man sowieso schon regelmässig die Anzahl der Bewegungen abfragt, könnte man auch gleich den Zustand des Schalters mitliefern. Dann könnte man den auch immer aktualisieren.
Code: Alles auswählen
def get_time_of_motion():
time_of_motion = dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return time_of_motion
def counter(func):
@wraps(func)
def tmp(*args, **kwargs):
tmp.count += 1
tmp.motion_time = get_time_of_motion()
tmp.motion_liste = create_motion_list()
return func(*args, **kwargs)
tmp.count = 0
tmp.motion_time = '0:0:0:0'
tmp.motion_liste = []
return tmp
motion_list = []
def create_motion_list():
motion_list.append([get_motion.count, get_motion.motion_time])
return motion_list
@app.route('/info', method='POST')
def info_post():
global alarm
GPIO.setup(PIR_PIN, GPIO.IN)
alarm = int(request.forms.get('checkbox'))
if alarm == 1:
print 'Start PIR-Sensor'
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=get_motion)
elif alarm == 0:
print 'Exit'
GPIO.cleanup()
Code: Alles auswählen
% rebase('layout', title='Informations', username=username)
<div class="container">
<h2>Bla Bla 1</h2>
<p class="page-header">Bewegungsmelder ein oder ausschalten</p>
<h4>Alarmanlage: <status>{{alarm}}</status></h4>
<input type="checkbox" name="my-checkbox">
<hr>
<div id="my_table"></div>
</div>
Code: Alles auswählen
$("#my_table").load( "bewegung" );
var refreshId = setInterval(function() {
$("#my_table").load( "bewegung" );
}, 1000);
Code: Alles auswählen
Bewegung Datum
1 2014-10-09 14:37:17
2 2014-10-09 14:37:26
3 2014-10-09 14:37:40
4 2014-10-09 14:38:10
5 2014-10-09 14:38:29
6 2014-10-09 14:38:46
7 2014-10-09 14:39:04
8 2014-10-09 14:39:12
Ups, hab gerade noch gesehen, dass im Template noch ein Tag '<status>' anstelle einer ID ist. Muss ich noch ändern.