PDA

Ver la versión completa : [Ayuda] Reproducir sonido en petición HTTP



The_Punisher
27/11/2014, 10:53
Buenas zagales, estoy probando unas cosas con un server en python (ejecutandose en Raspbian) y no consigo reproducir un sonido cuándo alguien introduce un url en el navegador, igual me explico fatal, pero dejo el código a ver si me podeís echar una mano.


import BaseHTTPServer
import serial
import os
os.system("aplay police_s.wav")


try:
RaspberrySerial = serial.Serial('/dev/ttyACM0', 9600)
except:
RaspberrySerial = serial.Serial('/dev/ttyACM1', 9600)

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
if '/on' == self.path:
RaspberrySerial.write('1')
elif '/off' == self.path:
RaspberrySerial.write('0')
elif 'fabrica_on' == self.path:
RaspberrySerial.write('2')
elif 'fabrica_off' == self.path:
RaspberrySerial.write('3')
elif 'parque_despejado' == self.path:
RaspberrySerial.write('4')
RaspberrySerial.write('5')
elif 'parque_ocupado':
RaspberrySerial.write('6')
RaspberrySerial.write('7')
elif 'bocina' == self.path:
os.system("aplay police_s.wav")


self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(str(self.path))

if __name__ == '__main__':
HOST_NAME = '0.0.0.0'
PORT_NUMBER = 8088
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
print "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

El montaje es una Raspberry conectada con un Arduino Mega y se conectan por serie, por ejemplo el /on /off funcionar perfectamente, y el /bocina llega al server pero no ejecuta el sonido.
La primera linea es para probar que ejecuta el sonido, y lo hace perfectamente.
¿Alguna idea de porque no tira? :(

akualung
27/11/2014, 13:19
Igual lo que voy a decir es una solemne gilipollez pero, por si acaso, ahí va. Si este lenguaje es ligeramente parecido a cuando yo hacía servlets en el ciclo formativo, veo que solamente estás sobreescribiendo el método do_GET, ¿No podría ser que la petición se estuviera haciendo por POST o cualquier otro método en lugar del GET y por lo tanto no ejecutase nada?

Si no, otra cosa que se me ocurre es que por agún motivo que se me escapa, la condición de ese if '/on' == self.path: no se cumpla y por lo tanto no entre en él.