Estoy desarrollando una alarma de pánico (solo pulsar un boton y que suene) utilizando para ello una Raspberry (sistema operativo basado en debian), una red RS485, una aplicación Android para el botón de pánico, para poder activarla desde cualquier parte del mundo, y un microcontrolador PIC para activar la alarma (también modificar estado de luces, etc. Pero esto ya se aparta del tema), y tweeter, para generar registros de actividad.
La questión es que, para sacar un señal de activación de la alarma por el puerto série, y poder ser activada desde un terminal Android, he diseñado un script muy simple que queda escuchando en el puerto 8989, a la espera de recibir por metodo POST una instrucción mandada desde la aplicación Android. Seguidamente el script manda una instrucción por puerto série al PIC que activa la alarma, y también se llama a otro script que publica un aviso del evento en tweeter, pasandole el texto a publicar como argumento.
El script funciona perfectamente si lo ejecuto normalmente haciendo "./tcpalarm.py". Sin embargo, cuando hago que arranque con el sistema (Ya sabeis, "sudo update-rc.d..." también se ejecuta, pero solo parcialmente. Es decir, activa y desactiva la alarma correctamente al recibir la orden desde el smartphone, pero la llamada al script que publica el evento en Tweeter NO funciona o no se ejecuta, no entiendo el porqué...
Quizas algo que desconozco sobre los runtimes? Lo tengo en el 5, modo multiusuario con red.
Os adjunto el codigo de los dos scrits:
Script tcpalarm.py:
Código:
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import os
import sys
import serial
import commands
from flask import Flask, request
#Defino el puerto serie:
p = serial.Serial('/dev/ttyUSB0',9600,timeout=1, stopbits = 1)
#Inicio Flask:
app = Flask(__name__)
#Si activo la alarma:
@app.route("/SOS/ON")
def SOS_ON():
p.write("SOS_ON!")
resultado = commands.getoutput('./publicatweet.py "Alarma activada manualmente"')
print("Estado del tweet:" + resultado)
if(resultado == 'OK'):
try:
commands.getoutput('./escribeRegistro.py alarmas.txt "Alarma activada manualmente"')
print ("Se ha notificado al registro la activación de la alarma")
except:
print ("No se puede escribir en el fichero de registro!")
elif(resultado == 'ERROR'):
try:
commands.getoutput('./escribeRegistro.py alarmas.txt "Alarma activada manualmente - Error al publicar el tweet"')
print ("Se ha notificado al registro la activacióa de la alarma")
except:
print ("No se puede escribir en el fichero de registro!")
return "SOS_ON"
#Si desactivo la alarma:
@app.route("/SOS/OFF")
def SOS_OFF():
p.write("SOS_OFF!")
resultado = commands.getoutput('./publicatweet.py "Alarma desactivada manualmente"')
print("Estado del tweet:" + resultado)
if(resultado == 'OK'):
try:
commands.getoutput('./escribeRegistro.py alarmas.txt "Alarma desactivada manualmente"')
print ("Se ha notificado al registro la desactivación de la alarma")
except:
print ("No se puede escribir en el fichero de registro!")
elif(resultado == 'ERROR'):
try:
commands.getoutput('./escribeRegistro.py alarmas.txt "Alarma desactivada manualmente - Error al publicar el tweet"')
print ("Se ha notificado al registro la desactivación de la alarma")
except:
print ("No se puede escribir en el fichero de registro!")
return "SOS_OFF"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8989, debug=False)
Script publicatweet.py:
Código:
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import os
import time
import tweepy
import sys
CONSUMER_KEY = '*************************'
CONSUMER_SECRET = '**************************************'
ACCES_KEY = '**************************************************'
ACCES_SECRET = '************************************'
hora = time.strftime("%d/%b/%y %H:%M:%S ")
try:
#Me identifico en tweeter, y publico el tweet:
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCES_KEY, ACCES_SECRET)
x = tweepy.API(auth)
x.update_status(status = hora + sys.argv[1])
print("OK")
except:
print("ERROR")
Habreis observado que en el script 'tcpalarm.py' tambien se llama, por el mismo metodo, a un script 'escribeRegistro.py'. También funciona correctamente si ejecuto desde la linia de comandos, y tampoco si lo ejecuto al inicio del sistema...
Seguro que la explicación es mucho mas corta que la pregunta . Agradeceré mucho vuestra ayuda.
Gracias de antemano!