elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Ayuda con script de inicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con script de inicio  (Leído 2,147 veces)
DonQuimi

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Ayuda con script de inicio
« en: 10 Febrero 2016, 08:59 am »

Buenos dias,

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!


En línea

DonQuimi

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: Ayuda con script de inicio
« Respuesta #1 en: 16 Febrero 2016, 13:52 pm »

Solucionado!

El problema estaba en la manera en que iniciava el script publicatweet.py, aunque no entiendo como es que a veces funcionava y otras no. En todo caso, el script corregido, por si a alguien le interesa:

Código:
import os
import time
import tweepy
import sys

CONSUMER_KEY = '****************************'
CONSUMER_SECRET = '**************************'
ACCES_KEY = '*********************************'
ACCES_SECRET = '**********************************'

def main(text):
        try:
                hora = time.strftime("%d/%b/%y %H:%M:%S ")
                auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
                auth.set_access_token(ACCES_KEY, ACCES_SECRET)
                x = tweepy.API(auth)
                x.update_status(status = hora + text)
                return "OK"
        except:
                return "ERROR"

if __name__== "__main__":
        main(sys.argv[1])

Como veis, he añadido el bloque
Código:
if __name__== "__main__":
        main(sys.argv[1])

Errores de novatos...

Soy consciente que publicar la hora en el tweet es una redundáncia. Lo hago por un motivo bien concreto y es que, la API de tweeter devuelve error si publicas dos tweets con el mismo texto. Añadiendo al texto horas:minutos:segundos, si que puedo mandar dos veces el mismo mensaje, si me conviene, ya que también uso este script para otras notificaciones, no solo para la activación/desactivación de la alarma.

En todo caso, ahora la alarma se activa correctamente desde un smartphone, incluso desde fuera del la red domestica y, además, publica un tweet que suena en todos los dispositivos moviles que me siguen en tweeter.

Aunque no haya recibido ayuda en este tema, gracias a los que habeis tenido el interés de leerlo!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Script de pagina de inicio en flash???
Diseño Gráfico
denacroxis 0 1,926 Último mensaje 3 Junio 2005, 03:17 am
por denacroxis
Ejecutar script que nesecita SUDO al inicio del systema
GNU/Linux
locot3 6 8,659 Último mensaje 17 Septiembre 2010, 21:06 pm
por locot3
[BATCH] Script para ver archivos que se ejecutan al inicio
Scripting
Davidmatias321 9 7,352 Último mensaje 23 Diciembre 2011, 10:25 am
por Eleкtro
duda script al inicio de debian
GNU/Linux
f3d3cav 1 2,444 Último mensaje 3 Octubre 2012, 01:05 am
por scalverth
Script .bat al inicio de windows.
Windows
Dark4ngel 4 4,581 Último mensaje 28 Abril 2014, 13:27 pm
por Dark4ngel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines