Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DonQuimi

#11
GNU/Linux / Re: Monitorizar el puerto serie
8 Marzo 2016, 12:45 PM
Solucionado.

No es exactamente lo que buscaba, pero cumple para mis propositos. Os cuento lo que he implementado por si a alguien le interesa.

Como no me interesava abrir y cerrar el puerto serie para cada consulta, pero me interesaba poder ir haciendo consultas periodicamente, e ir recibiendo las respuestas, he implementado un script que abre un socket TCP en la maquina, y queda a la escucha.

Desde los otros scripts que ejecutan las operaciones pertinentes, cuando necesito realizar una consulta por puerto série, se manda la consulta a dicho socket, y ese script la manda al puerto série, previamente abierto, y devuelve la respuesta. Después, sigue a la espera de recibir una nueva consulta sin necesidad de cerrar el puerto.

Es un pequeño truco que se me ha ocurrido. Seguro que hay alguna solución mejor que los entendidos implementarían, pero para mis propositos sirve perfectamente.

Saludos!

#12
GNU/Linux / Monitorizar el puerto serie
26 Febrero 2016, 11:54 AM
Buenos dias!

Quiero desarrollar un pequeño script que se ejecute al inicio para monitorizar la entrada de datos por el puerto série. Hasta aquí es fàcil, con lo que sé de Python tengo suficiente para hacerlo.

El problema es que, cuando el script ya se esé ejecutando, de vez en cuando, me gustaria poder pasarle un dato para enviar por el puerto série. Esto es lo que no sé como hacer: como pasar-le argumentos a un script que ya se encuentra en ejecución.

Que me recomendais?

Gracias por vuestra ayuda!
#13
GNU/Linux / Re: Ayuda con script de inicio
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:


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

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!
#14
Buenos dias,

Sigo con lo mismo.

De momento he conseguido redirigir hacia a fuera de la red la pagina principal del router. He abierto un puerto que queda escuchando a la espera de una peticion GET, y al recibirla, devuelve como resultado la pagina principal del router.


#!/usr/bin/python
# -*- encoding: utf-8 -*-

import os
import sys
from flask import Flask, request
import urllib2

app = Flask(__name__)

@app.route("/")
def index():
        response = urllib2.urlopen('http://192.168.1.1:80')
        return response.read()

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8989, debug=False)


Pero claro, no muestra correctamente el contenido que no es html, ni funcionan los codigos javascript...

Alguna otra manera de hacerlo?

Gracias de antemano!
#15
GNU/Linux / Ayuda con script de inicio
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:

#!/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:

#!/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!
#16
Buenos dias,

Estoy desarrollando una app para smartphone que interactua con una Raspberry Pi (un miniordenador con Linux) y que, entre otras cosas, me gustaria que lanzase una ventana de navegador dirigida a la pagina de administracion del router, un Livebox de Orange, al pulsar un botón.

Desafortunadamente el Livebox solo permite el acceso remoto desde una IP especifica, indicada previamente en la pagina de administración del router, por lo que es imposible preveerla si se pretende acceder desde un smartphone.

He pensado que, ya que estoy accediendo a un ordenador con Linux desde el exterior (esto ya funciona correctamente), quizás se pudiera hacer que sea la Raspberry quien solicite la pagina al router, ya que se encuentra en la misma red, y redirija la pagina al smartphone, del que se conocerá la IP en el momento de efectuar la petición.

No estoy seguro de si se podria implementar un script python que se encargue de esta operacion. Soy nuevo en python y en redes, en general.

Por supuesto, no solicito el script ya escrito, solamente una orientación sobre el mejor metodo de lograr este objetivo.

Muchas gracias por vuestra atención.
#17
Hacking / Re: Software para lista de palabras
14 Septiembre 2011, 21:38 PM
Pido disculpas a todos, no se que ocurrió cuando publicava la pregunta, pero ha salido varias veces y sin el mensaje.

Ruego a los moderadores la eliminen del foro y probaré de escribirla de nuevo.

Muchas gracias.
#18
Hacking / Software para lista de palabras
14 Septiembre 2011, 21:31 PM
Buenas tardes!

Nunca se piensa en una cosa hasta que te hace falta.. Esta tarde, he necesitado de una lista de palabras y he pensado: No existira ningun software que genere un fichero txt con palabras a partir de una direccion web..?

Y buscando en google, no lo he encontrado. Solo programas que descargan los archivos, video, pdfs de direcciones dadas. Pero algo como para usar de lista de palabras, nada.

Alguien conoce algun software que cumpla esta funcion?

Muchas gracias de antemano!
#19
Hacking / Software para lista de palabras
14 Septiembre 2011, 21:30 PM
Buenas tardes!

Nunca se piensa en una cosa hasta que te hace falta.. Esta tarde, he necesitado de una lista de palabras y he pensado: No existira ningun software que genere un fichero txt con palabras a partir de una direccion web..?

Y buscando en google, no lo he encontrado. Solo programas que descargan los archivos, video, pdfs de direcciones dadas. Pero algo como para usar de lista de palabras, nada.

Alguien conoce algun software que cumpla esta funcion?

Muchas gracias de antemano!
#20
Ante todo, gracias a todos por vuestra pronta respuesta.

La verdad es que de programación ando algo oxidado y, por lo que hace referencia a las herramientas que me habeis propuesto, ya habia leido sobre el http tunnel. El problema, como os decia al principio, es que me gustaria poder prescindir totalmente de otro ordenador. Es decir, no necesitar ninguna otra màquina con conexión http para el proceso. O, en la jerga màs adequada, poder conectarme a internet sin tener que tunelar, senzillamente, dirigir el trafico por otro puerto.

Por desgracia, no tengo acceso a la configuración del router, ya que desconozco el password, y ya he comprobado que no es el que suele venir por defecto en esa maquina. Lo que sí que sé seguro es que es desde el router desde donde esta capada la conexión, no por software.

Nuevamente, gracias por vuestro consejo.