2016-06-02 11 views
1

Jedes Mal, wenn ein Anruf auf einem Web-Service auf unserem Backend gemacht wird, möchte ich eine LED blinken.Zünden Sie eine LED mit einem Raspberry Pi, wenn ein Anruf an einen Web-Service (Flask, Python) erfolgt

Es funktioniert, aber nur für ein paar Stunden, danach hört es einfach auf zu arbeiten.

Jedes Mal, wenn wir auf diese URL schreiben (http://IP_ADRESS:PORT/scan), blinkt unsere LED.

Ich frage mich, warum nach einer gewissen Zeit arbeitet er stoppt ..

Hier ist der Code aufgerufen, wenn ein POST durchgeführt wird:

@app.route('/scan', methods = ['POST']) 
def scan(): 
    time.sleep(0.5) 
    try: 
      LED.rainbow()   
    finally: 
      print("Scanned") 
    return 'Scanned!!!' 

Der LED.rainbow() Code kann here gefunden werden. Der Code des gesamten Projekts kann here gefunden werden.

Wenn es nicht mehr funktioniert, schließe ich per ssh auf dem Raspberry Pi und ich mache:

python 
>>> import app 
>>> app.scan() 

Und die blinkende LED machen !! Ich verstehe nicht, warum es mit ssh funktioniert und nicht über den http POST.

Am Anfang dachte ich, das Flask Server abgestürzt war, aber wenn ich versuche es über CURL zu nennen, ist alles in Ordnung:

$ http -f POST http://IP_ADDRESS:PORT/scan 
HTTP/1.0 200 OK 
Content-Length: 13 
Content-Type: text/html; charset=utf-8 
Date: Thu, 02 Jun 2016 20:11:02 GMT 
Server: Werkzeug/0.11.9 Python/2.7.9 

Scanned!!! 

Hier ist, wie ich meinen Flask-Server auf dem Raspberry Pi starten:

$ sudo crontab -e 
# Add this line at the end of the file 
@reboot python /home/pi/Desktop/Claudie/app.py & 

Was fehlt mir?

Jede Hilfe ist zu schätzen!

Danke!

+0

Wir vermissen etwas Code um den "Versuch", denke ich. auch können Sie versuchen, eine Zeit http-f POST http: // IP_ADDRESS: PORT/scan, wenn es funktioniert (wie es etwas Schlaf es kann einige Zeit dauern) und den gleichen Befehl, wenn funktioniert nicht mehr funktioniert? Um zu sehen, ob die Ausführung die gleiche Zeit benötigt, oder wenn etwas früh aufschnellt und die Schlafphasen nicht ausgeführt werden. –

+0

Danke @JulienPalard! Ich bearbeite nur meinen Code, ich habe den finally Block entfernt, weil es nur ein Log ist, leg es einfach zurück. Danke, ich werde das mit der Zeit überwachen !! –

+0

Vergessen Sie nicht, uns zu sagen, auch wenn Sie es finden ;-) –

Antwort

0

Den Fehler gefunden!

Das Problem ist in der rainbow() Funktion.

Diese Funktion wird mehrere Zeit genannt, und zu einer bestimmten Zeit hört sie auf zu arbeiten. Hier

ist, was die Funktion tun:

def rainbow(): 
    RED, GREEN, BLUE = initializeGPIO() # setup the GPIO, outputs, and PWM 

    # Light the LED 

    GPIO.cleanup() 

Ich bemerkte, dass in einer Schleife Aufruf dieser Funktion (ohne den Web-Server) nicht mehr funktioniert.

So entfernte ich die cleanup() und initializeGPIO(), und jetzt alles funktioniert perfekt :) Ich weiß wirklich nicht, warum die GPIO-Initialisierung (oder Bereinigung) macht die LED nicht mehr funktioniert, wenn jemand weiß, werde ich glücklich sein, Lies es!