BlackJack hat geschrieben:Der Benutzer, oder sogar mehrere Benutzer können die `/info`-URL ja durchaus mehr als einmal aufrufen.
Ich hab ein Login mittels 'bottle.ext.sqlite' gebaut, so dass nur berechtigte User den Sensor an- oder abschalten können.
BlackJack hat geschrieben:Bist Du sicher, dass es okay ist `add_event_detect()` mehr als einmal aufzurufen?
Die Methode wird nur einmal aufgerufen, wenn der Schalter auf 'on' geht also wenn alarm = 1 ist, oder hab ich da was übersehen?
BlackJack hat geschrieben:Mit dem Dekorator hast Du doch ein Attribut auf dem Funktionsobjekt
Ja funktioniert auch gut. Ich werde mir im Laufe der Woche deinen Rat zu Gemüte führen und das Programm nochmals auseinander nehmen (Programmlogik und Benutzerinteraktion) und auch der Namensgebung mehr Beachtung schenken.
Bis jetzt habe ich es mittels jQuery gelöst, dies gleicht aber einer DDOS-Attacke, denn so wird permanent die URL '/bewegung' geladen.
Code: Alles auswählen
@counter
def get_motion(PIR_PIN):
#print 'Bewegung %d' % get_motion.count
print 'Bewegung erkannt Nr. {0} am: {1}'.format(get_motion.count, time.strftime("%d-%B-%Y %H:%M:%S"))
@app.route('/bewegung')
def get_motion_data():
return '{0}'.format(get_motion.count)
@app.route('/info')
def info(db):
global alarm
username = is_logged_in(db)
ip = request.environ.get('REMOTE_ADDR')
if not username:
return template('main', username=False, ip=ip)
else:
return template('info', username=username, alarm=alarm)
@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:
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=get_motion)
while True:
time.sleep(1)
elif alarm == 0:
print 'Exit'
GPIO.cleanup()
Code: Alles auswählen
% rebase('layout', title='Seiten-Titel', username=username)
<div class="container">
<h2>Bla Bla 1</h2>
<p class="page-header">Bewegungsmelder ein oder ausschalten</p>
<h4>Alarmanlage: <strong>{{alarm}}</strong></h4>
<input type="checkbox" name="my-checkbox">
<hr>
<p class="bg-primary">Bewegnung Nr. <strong></strong> erkannt</p>
</div>
Code: Alles auswählen
$("p.bg-primary").find( "strong" ).load( "bewegung" );
var refreshId = setInterval(function() {
$("p.bg-primary").load('bewegung');
}, 1000);
PS:
1x 'global' hab ich noch in Verwendung
