jueves, 14 de junio de 2012

Domótica en RaspberryPi (parte 3)

... demonio para monitorizar

Hola de nuevo!. Este post es la continuación de este y de este, así no te servirá de mucho, si aún no has realizado los dos anteriores. Hasta ahora hemos mandado comandos x10 desde el RaspberryPi, hacia el CM15PRO. Ahora vamos a hacer lo contrario, vamos a leer la información que llega al CM15PRO, con la ayuda de un demonio de fabricación casera. Al lío.


Antes de nada, volveré a deciros que no tengo ni idea de programar, por ello este demonio es un poco ... casero. Cubre las necesidades al 100% pero sólo es elegante en un 50%, si alguien quiere regalarme tiempo y un par de cursos de perl y python, se lo agradeceré ;)
Vamos al demonio, lo primero es ver que es lo que pasa por el CM15PRO, en nuestro RaspberryPi:
nc localhost 1099
... y no pasa nada, mantenemos la conexión y en el minimando x10 le damos al A2 On:
06/13 21:40:04 Rx RF HouseUnit: A2 Func: On
06/13 21:40:04 Tx PL HouseUnit: A2
06/13 21:40:04 Tx PL House: A Func: On
06/13 21:40:05 Rx PL HouseUnit: A2
06/13 21:40:06 Rx PL House: A Func: On
interesante, ahora le damos al A2 Off:
06/13 21:40:12 Rx RF HouseUnit: A2 Func: Off
06/13 21:40:12 Tx PL HouseUnit: A2
06/13 21:40:12 Tx PL House: A Func: Off
06/13 21:40:13 Rx PL HouseUnit: A2
06/13 21:40:13 Rx PL House: A Func: Off
vale, parece que la línea que nos interesa es la que contiene las palabras HouseUnit y Func ¿verdad?. Ahora viene la gran pregunta:
¿cómo mantengo la conexión abierta con el mochad y actúo en consecuencia? Pues vamos a usar un poco de perl y ngrep:
apt-get install ngrep
De forma que la conexión es:
ngrep -d any 'HouseUnit' port 1099 | perl -ne 'system("/usr/local/bin/ejecutadorx10.sh $_") if (/HouseUnit/)'
básicamente eso mantiene la conexión y hace el primer filtrado "HouseUnit", y se lo envía a /usr/local/bin/ejecutadorx10.sh , de forma que la única línea que recibe ejecutador.sh es:
06/13 21:40:04 Rx RF HouseUnit: A2 Func: On
06/13 21:40:12 Rx RF HouseUnit: A2 Func: Off
Perfecto, podemos por lo tanto hacer un script /usr/local/bin/demoniox10.sh :
#!/bin/bash
ngrep -d any 'HouseUnit' port 1099 | perl -ne 'system("/usr/local/bin/ejecutadorx10.sh $_") if (/HouseUnit/)'
y le damos permisos:
chmod +x /usr/local/bin/demoniox10.sh
Ahora el script ejecutador, tiene que hacer un segundo filtro con "Func" y por ahora guardar lo recibido en un archivo temporal, de forma que en siguientes post podamos usarlo para las alarmas y otros menesteres. Este es el script /usr/local/bin/ejecutadorx10.sh:
#!/bin/bash
correcto=$(echo $@ | grep Func | wc -l) # 1 ok - 0 fail

if [ $correcto = 1 ];
then
        modulo=$(echo $@ | cut -f6 -d\ )
        funcion=$(echo $@ | cut -f8 -d\ )
        echo se recibe $modulo $funcion >> /usr/local/bin/recibido.txt
fi
le damos permiso:
chmod +x  /usr/local/bin/ejecutadorx10.sh
De acuerdo, ahora ejecutamos el demonio:
/bin/bash /usr/local/bin/demoniox10.sh
en otro terminal estamos atentos:
touch /usr/local/bin/recibido.txt
tail -f /usr/local/bin/recibido.txt
y en el minimando pulsamos A3 On (por ejemplo), en el nuevo terminal tiene que salir:
se recibe A3 On
jejejeje que bueno, solo queda parar el demonio (CTRL+c) y añadimos:
/bin/bash /usr/local/bin/demoniox10.sh
al archivo (antes del exit 0):
/etc/rc.local
y sin tener ni idea de ná! este post es la leche ...

9 comentarios:

  1. Que pena no entender ni papa porque mola un huevo y medio todo esto, y tmb tengo un raspberry

    ResponderEliminar
    Respuestas
    1. que no hombre que es superfácil. Tienes un parato gordo y otros paratos chicos. El parato gordo lo enchufas al RaspberryPi y le mandas ordenes a los paratos chicos ;)

      Eliminar
  2. También tengo la Raspberry, y llevo tiempo queriendo utilizarla para domótica en mi casa. Tengo que decir que después de leer tus 3 posts me he animado y me voy a lanzar al ruedo.
    Me pasa un poco como a ti (aunque lo tuyo es muy cuestionable), y es que soy aprendiz de todo y maestro de nada. Pero bueno, si consigo aportar alguna cosa nueva te lo mandaré en agradecimiento. De momento seguiré tus pasos. Como meta me pongo una app de android para el control.

    ResponderEliminar
    Respuestas
    1. la app de android no es difícil, la puedes poner que se comunique con el RaspberryPi por puerto 80, o si el terminal esta rooteado podrías hacerlo por telnet. Sea como sea que lo hagas, avísanos!.

      Eliminar
    2. Buenas, creo que hay alguna app ya que podría valer. A ver si la encuentro, la pruebo y os cuento. Saludos y enhorabuena por el blog!

      Eliminar
  3. Buenas Juanmol te llevo lleyendo desde hace ya unos dias, cuando encontré este blog por el maravilloso mundo del googleo xD, bueno resulta que estoy muy interesado en el tema este de la domótica y tengo encargada mi Raspberry Pi a la paginilla esa española. El tema es que estoy estudiando Ing Industrial electrónica y quiero encaminar mi PFC en base al control del consumo en el hogar, ojeando por la web encontre http://openenergymonitor.org/emon/ y me intereso muchisimo, con 3 CT, un AC/AC y un arduino son capaces de controlar el consumo a partir de coms.com, me dije a mi mismo joder se puede, pero porque limitarme a esto solo si juanmol me enseña que con la raspberry pi puede hasta "apagar las luces cuando le da al jodido PLAY". Así que me puse a investigar (partiendo de la base que todavia no tengo ni Raspberry pi), como hacer esto sin arduino, pero el GPIO de la RASP, uuuUFF muy delicado y la verdad que no se por donde tirar si seguir con mi idea de arduino y raspberry o tal y como vi en adafruit solo con la raspberry. Pero me parecio interesante el uso de cosm.com y creo que tu con tus "minimos conocimientos" (ironía), tal pues me puedas enseñar la luz a mi y a cualquier interesado de por aquí.

    Un saludo y felicidades por el post de verdad que alucionó xD.

    ResponderEliminar
  4. Hola Juan,

    Me encanta tu blog, enhorabuena.
    Está muy chulo el sistema domótico que te has montado, pero tengo una duda:
    ¿Como accederías a la configuración de tu sistema fuera de tu red local?
    Esto no lo termino de comprender.
    Muchas gracias.

    Un saludo

    ResponderEliminar
    Respuestas
    1. Hola anónimo (ponte nombre por favor), para mandar ordenes al sistema domotico, tanto dentro como fuera de mi red, uso gtalk, un interfaz web, ssh, teléfono, un mando de radio frecuencia o lo que se me vaya ocurriendo. Voy explicandolo poco a poco en los posts. Ponte nombre y preguntame si quieres mas detalles ;)

      Eliminar