miércoles, 29 de mayo de 2013

Control domótico con Android

... otra forma más de domoticar!

Buenas tardes, como estaba dejando un poco de lado el tema de la domótica, hoy os propongo una forma muy sencilla de hacer un interfaz para controlarla. Para ello usaremos nuestros queridos androids, porque no creo que uséis "otras" cosas ;)
Vamos a desarrollar el interfaz con AppInventor, actualmente gestionado por el MIT.

Vamos a suponer que ya te funciona el Mochad, de este post, y que te funciona el script de ese mismo post (al final).
En el RaspberryPi, vamos a crear un demonio que se quede escuchando en un socket (puerto), este es código de /usr/local/bin/escucha_x10.sh :
#!/bin/bash
# Programado por Juanmol para http://rsppi.blogspot.com

RESP=/tmp/webresp
puerto=8989
x10=/usr/local/bin/x10.sh

[ -p $RESP ] || mkfifo $RESP

while true ; do
( cat $RESP ) | nc -l -p $puerto | (
REQ=`while read L && [ " " "<" "$L" ] ; do echo "$L" ; done`

if [ "$(echo $REQ | head -1 | cut -f2 -d\/)" == "x10" ];
then
        modulo=$(echo  $REQ | head -1 | cut -f3 -d\/);
        orden=$(echo  $REQ | head -1 | cut -f4 -d\/);
        $x10 $modulo $orden 2> /dev/null;
fi


cat >$RESP <<EOF
HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/plain
Server: bash/2.0
Connection: Close
Content-Length: 0

EOF
)
done
es muy sencillo y ya hemos usado algo parecido en otras ocasiones, ahora metemos esta línea en el /etc/rc.local para que se ejecute al arranque:
screen -dmS x10 /bin/bash /usr/local/bin/escucha_x10.sh
y ejecutamos ahora mismo esa línea.
screen -dmS x10 /bin/bash /usr/local/bin/escucha_x10.sh
Ahora vamos a crear el interfaz, como ya he dicho, con el AppInventor. Lo primero será dibujar la interfaz:
La URL de ConsultaWeb es http://192.168.1.2:8989/x10/ lo que viene a ser la ip del Rasp, puerto 8989 que es donde esta escuchando el script anterior y x10 para localizar la orden. Lo siguiente es muy fácil, nuestro script tiene que recibir la URL:
http://192.168.1.2:8989/x10/a4/on/
para que encienda (on) la luz del salón (a4), así que los botones quedan definidos tal que así:
¿y de verdad la gente paga miles de euros por esto? Pero si no me ha llevado ni una hora o_O ¿quieres un vídeo de demostración?

21 comentarios:

  1. Hola Juan!! Aprovechando este post quería comentarte si has podido trastear con la nueva cámara. No consigo hacerla funcionar y quería saber si tienes pensado hacer un tutorial. Ya que tienes la aplicación, se podría integrar para ver la cámara por streaming?
    Gracias por todo y enhorabuena por el blog!

    ResponderEliminar
    Respuestas
    1. Hola! Tengo la Raspicam, es decepcionante, por ahora. Hasta que no se pueda usar como /dev/videoX podemos olvidarnos de usarla en nuestros inventos. Por ahora es una cámara "externa", así que nada de streaming (lo del ejemplo con nc no es streaming).

      Eliminar
    2. Hola Juan!! Con la Raspicam te refieres a http://www.raspberrypi.org/archives/3890 ???
      Ya ya pero me preguntaba si se podría integrar con la cámara en una app para poder ver en streaming. Es decir, un sistema de CCTV con la raspberry y poder ver desde el móvil o un navegador.
      Saludos y gracias por la respuesta.

      Eliminar
    3. Insisto que con la RaspiCam no podemos hacer nada ahora mismo. Con cualquier webcam usb si podemos hacer hacer streaming, y mucho mejor si tiene mjpeg-encoder. En los comentarios de http://rsppi.blogspot.com.es/2013/01/streaming-de-video-desde-raspberrypi.html tienes algo más de información.

      Eliminar
  2. Hola juan, que presupuesto mas o menos calculas que te ha salido todos los x10?
    Cuanto abria que desembolsar para una casa mas o menos como la tuya.
    Un saludo

    ResponderEliminar
    Respuestas
    1. Hola, los he comprado todos en superinventos.com (o .es). No son muy baratos, pero una instalación con x10 la puedes ir haciendo poco a poco, no tienes que hacerlo todo del tirón. Por cierto esa tienda tiene tienda física en Sevilla y son la mar de apañaos, te resuelven dudas y eso, tienen robótica y demás. No tengo relación con la tienda, salvo como cliente satisfecho, pero si quieren hacerme un regalito por hacetles publicidad, no me negaré ;)

      Eliminar
  3. Hola Daniel, Yo te recomiendo que si tienes que empezar mejor z-wave. Yo empece con X10 y se me quedo pequeña y tenia interferencias. Tienes este pequeño adaptador http://razberry.z-wave.me/hardware.php para controlar toda la red. y lo puedes comprar aqui http://zwave.es/controllers/pcadapterzwave
    Gracias Juan Mol por compartir este otro método, yo lo estaba haciendo con http://www.openremote.org/

    ResponderEliminar
    Respuestas
    1. Hola, raid gracias por contestar, no conocia esta tecnologia y la verdad pinta muy bien, aunque hay que hacer un desembolso relativamente grande asi que ire poco a poco.
      Una consulta mas, he visto dos tipos de dimmers, uno con boton incluido y otro que va oculto en el boton, pero mas caro. El del boton incluido, puedo poner los que trae ya mi casa?

      Eliminar
    2. Hola Daniel, El del boton incluido no creo que puedas sacar la tapeta y poner la tuya, yo tengo el dimmer oculto de fibaro, se puede poner en el mismo cajetín detrás del interruptor o en la caja de empalmes. Lo puedes utilizar con Interruptores o pulsadores y en conmutados. No hace falta neutro por lo que es mas fácil de instalar. Yo en mi caso cambien los interruptores Simon 27 por pulsadores por 3 Euros und.
      Aqui tienes info de como funcionan http://www.vesternet.com/resources/application-notes/apnt-11 y http://www.vesternet.com/resources/application-notes/apnt-1

      Eliminar
  4. Hola Juan Mol, aprovechando tu script y la magia de Tasker + AutoVoice he conseguido un control por voz en Android. Que hasta ahora lo hacia con IOS y el SiriProxy. Os dejo un pequeño video http://www.youtube.com/watch?v=pK-gJjSmJB8

    ResponderEliminar
    Respuestas
    1. Hola he modificado la linea 18 del srcipt para que permita enviar un numero junto con el dim o bright
      $x10 $modulo "${orden//%20/ }" 2> /dev/null;
      ahora con poner http://192.168.1.2:8989/x10/a2/dim 5/ bajara mas intensidad que con dim(1)
      Saludos

      Eliminar
    2. la verdad es que hacer el dim de 1 en 1 es bastante lento, me apunto tu modificación.

      Eliminar
    3. Por cierto muy interesante el video, pero seria mucho mas interesante si publicas un manual completo ;)

      Eliminar
    4. Os dejo un video ScreenCast explicando como configurar Tasker http://www.youtube.com/watch?v=RKJ3-R8tciY

      Eliminar
    5. aaaaaahm ahora lo he entendido del todo. Muy buen uso del tasker y muy bien explicado.

      Eliminar
  5. Hola Juan, estoy haciendo un control para un robot a través de Appinventor (raspberry + arduino en el robot). El atasco lo tengo en la parte de la aplicación. En el editor de bloques que muestras cuando pulsas mandas un dato a través de un puerto? en mi caso lo que necesito es http:// 192.168.1.243:6000 y si mando un 1 hace una cosa y si mando un 2 pues hace otra. En tu aplicación creo que haces lo mismo pero creo que tienes "procedures" que no se ven podrias ayudarme en como mando ese dato. Gracias, perdón por el ladrillo y enhorabuena por el blog

    ResponderEliminar
    Respuestas
    1. quiero ver el robot quiero ver el robot quiero ver el robot quiero ver el robot quiero ver el robot ...
      en mi caso lo que hago con el appinventor es "montar" una url y destriparla con el demonio en el rasp. La url que monto es del tipo:
      http://192.168.1.2:8989/x10/a4/on/
      cada boton cambia la url y le hace un get, que es un procedure que trae el propio elemento web, no lo he creado yo. Realmente he puesto todos los bloques en la captura del post, para el resto de botones solo repite lo mismo una y otra vez, cambiando el modulo y la orden. A lo que iba que en la captura viene todo ;) asegurate de usar el modulo web, no el web viewer.

      Eliminar
    2. Buenas noches: Muchas gracias por contestar, la verdad es que he adelantado algo pero creo que estoy empezando la casa por el tejado. Te cuento a grandes rasgos que tengo el arduino "escuchando" el puerto serie conectado al raspberry. Hasta aquí todo bien he realizado un par de ejemplos de cominucacion entre raspberry y arduino por usb y bien. Tampoco tengo problema en conectar el raspb a través de no-ip y tener acceso desde fuera. Ahora bien he encontrado un programa muy simple que espera una conexión a un puerto y recibir datos (esto lo haría desde appinventor) para mandarlos al arduino, pero ahí es donde topo si quieres pongo el código. Por cierto dos cosas gracias por lo del appinventor (me ha sido de gran ayuda, pero ahora en appinventor2 el make text no esta) y la otra es que controlo una cámara ip (de las baratas) a través del App, no hace streaming o como se escriba en tiempo real pero es mas que aceptable y se controlan los motores y demás funciones de la cámara.
      Saludos

      Eliminar
  6. Hola juan mol. Me parece interesante tu proyecto con appinventor. Te cuento yo igual hago domotica, tengo un sistema de 3 switch video vigilancia y creo sonido de frecuencia que hace insoportable la zona, tambien lo manejo a distancia por tablet,pc o celu la programacion o hice por labview, me quedo genial pero dependo de un pc o notbook con windows. Ahora tengo una raspberry para hacerlo mas independiente y me gusto tu proyecto con x10 y la aplicacion.
    Me gustaria que me ayudaras solamente a crear 3switch de on y off con appinventor y lograr tener comicacion con la raspberry y arduino que va conectado con una shield de 8 rele que logro hacer esta maravilla. Te dejo mi correo para mas informacion manuel_cdns@hotmail.com. me gustaria que me ayudaras a crear esta aplicacion para controlar desde el celu a mi proyecto. Si te animas en ayudarme seria genial tu aporte y te lo agradeceria mucho, soy de la comunidad arduino chile y si te pudo ayudar en algo conarduino sin duda te ayudare por tu comprension gracias.

    ResponderEliminar
  7. hola!! muy bueno el post, pero me queda una duda, si yo compro el modulo http://superinventos.com/S110115.htm, ya lo puedo integrar con mi raspberry? o hay que comprar algun otro aparato x10 para controlarlo?

    ResponderEliminar
  8. Muy buen trabajo!!
    La comunicación la haces con un sistema x10 pero. ¿cómo sería el script si solo quiero que escuche y guarde el fichero?

    ResponderEliminar