Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

PHP: Domótica fácil y económica con X10 y Linux, controlar tu casa desde el móvil
Linux


Mostramos en este tutorial cómo montar una casa domótica automatizada mediante X10 y un PC con Linux. Podremos, de forma muy fácil y económica, controlar casi cualquier aparato de nuestra casa. Todo ello desde el móvil o el PC (por Internet). Con X10 podremos encender y apagar luces, encender calefacción y otras muchas posibilidades. Mostramos cómo crear un servidor web y una página web para controlar la domótica de nuestra casa desde cualquier parte. Hay que decir que X10 no es la mejor opción para la domótica de la casa pues permite activación pero no permite saber el estado de cada dispositivo. Pero la gran ventaja es su sencillez y su coste muy asequible.



X10, domótica para la casa

X10

X10 es un protocolo de comunicaciones para el control remoto de dispositivos eléctricos, que utiliza la línea eléctrica (220V o 110V) preexistente, para transmitir señales de control entre equipos de automatización del hogar (domótica) en formato digital.

Los dispositivos X10 que se comercializan son solo para uso individual y en entornos domésticos de hasta 250 m2, dada su limitación en ancho de banda y en el número máximo de dispositivos a controlar (256). No obstante existen elementos de última generación que incorporan, entre otros, los protocolos X-10 extendidos, para dar funcionalidad a soluciones de comunicación como la bidireccionalidad, solicitud de estados y comprobación de la correcta transmisión de las tramas.

X10 fue desarrollada en 1978 por Pico Electronics of Glenrothes, Escocia, para permitir el control remoto de los dispositivos domésticos. Fue la primera tecnología domótica en aparecer y sigue siendo la más ampliamente disponible, principalmente por su característica de autoinstalable, sin necesidad de cableado adicional. Las señales de control de X10 se basan en la transmisión de ráfagas de pulsos de RF (120 kHz) que representan información digital. Estos pulsos se sincronizan en el cruce por cero de la señal de red (50 Hz ó 60 Hz). Con la presencia de un pulso en un semiciclo y la ausencia del mismo en el semiciclo siguiente se representa un '1' lógico y a la inversa se representa un '0'. A su vez, cada orden se transmite 2 veces, con lo cual toda la información transmitida tiene cuádruple redundancia. Cada orden involucra 11 ciclos de red (220 ms para 50 Hz y 183,33, para 60Hz). Primero se transmite una orden con el Código de Casa y el Número de Módulo que direccionan el módulo en cuestión. Luego se transmite otra orden con el código de función a realizar (Function Code). Hay 256 direcciones soportadas por el protocolo.

El protocolo X10 consta de bits de direcciones y de órdenes. Por ejemplo, permite decir lámpara #3, ¡enciéndete! y el sistema procederá a ejecutar dicho mandato. Se pueden direccionar varias unidades antes de dar la orden. Existen múltiples instrucciones utilizadas por el protocolo entre las cuales destacamos: ON, OFF, All Lights ON, All off, DIM, BRIGHT.

Los dispositivos están generalmente enchufados en módulos X10 (receptores). X10 distingue entre módulos de lámparas y módulos de dispositivos. Los módulos de lámpara proporcionan energía y aceptan órdenes X-10. Los módulos de dispositivos son capaces de gestionar cargas grandes (ej. máquinas de café, calentadores, motores,...), simplemente encendiéndolos y apagándolos. Si se desea controlar luces vía mandatos X-10, se deberá conectar la luz en un módulo de luz en la red y, a continuación, asignarle una dirección (A1, por ejemplo). Así, cuando se envíe la orden A1 encendido a través de los cables de la red eléctrica, la luz se debería encender.

Lista de comandos X10

Código
Función
Descripción
Unidireccional Bidireccional
0 0 0 0 All units off Apaga todos los dispositivos con el código de casa indicado en el mensaje X
0 0 0 1 All lights on Enciende todas las luces (con la posibilidad de controlar el brillo) X
0 1 1 0 All lights off Apaga todas las luces X
0 0 1 0 On Enciende un aparato X
0 0 1 1 Off Apaga un aparato X
0 1 0 0 Dim Atenúa la intensidad de la luz X
0 1 0 1 Bright Incrementa la intensidad de la luz X
0 1 1 1 Extended code Código de extensión X
1 0 0 0 Hail request (solicitud de saludo) Solicita una respuesta del dispositivo(s) con el código de casa indicado en el mensaje X
1 0 0 1 Hail acknowledge (confirmación de saludo) Respuesta al comando anterior X
1 0 1 0 Pre-set dim Permite la selección de dos niveles predefinidos de intensidad de luz X
1 1 0 1 Status is on Respuesta a la Solicitud de Estado indicando que el dispositivo está encendido X
1 1 1 0 Status is off Respuesta indicando que el dispositivo está apagado X
1 1 1 1 Status request Solicitud pidiendo el estado de un dispositivo X

 

Requisitos para convertir nuestra casa en domótica con X10 y poder controlarla desde cualquier lugar con un móvil o PC con conexión a Internet

Dispositivos X10, emisor y receptores

Como es lógico, para poder convertir nuestra casa en una casa domótica y poder controlar determinados interruptores, luces y demás de forma remota, desde nuestro móvil (smartphone) o desde un PC con Internet, necesitaremos todos los dispositivos X10 que queramos, en función de los elementos que queramos controlar. Necesitaremos de forma obligatoria un CM15 PC Interface, que es un dispositivo con una conexión USB para el PC y una antena para emitir los comandos X10 por radiofrecuencia. Este dispositivo es necesario, el resto se adquirirán en función de los elementos que queramos controlar.

  • Emisor, en nuestro caso un CM15 USB PC INTERFACE. Este emisor irá conectado por el puerto USB al equipo con Linux:

Dispositivos X10, emisor y receptores

  • Receptores: podremos tener tantos como deseemos y de diferentes tipos como AW12 (micromódulo interruptor, se instala detrás del enchufe que se quiere controlar, totalmente oculto), AM12 Appliance Module (enchufe que nos permitirá controlar cualquier cosa enchufada a él), LM15ES (módulo de lámpara en rosca, casquillo para lámparas, para encender y apagar luces), etc.:

Dispositivos X10, emisor y receptores

Equipo físico o virtual con sistema operativo Linux, Apache y PHP

Si queremos realizar control remoto desde cualquier lugar del mundo (con conexión a Internet), desde un móvil o un PC, necesitaremos disponer de un PC o máquina virtual con Linux. Dicho PC o MV deberá ser un servidor web con Apache y PHP. En nuestro caso usaremos una máquina virtual con Linux Ubuntu Server. A continuación mostramos cómo montar un servidor web con Linux Ubuntu Server, Apache y PHP:

 

Redirección de puerto, Internet, dirección IP pública estática

Para el acceso externo al control de nuestra casa domótica con X10 necesitaremos disponer de una IP pública estática (proporcionada por nuestro proveedor de servicios de acceso a Internet) o en su defecto de algún software que nos permita consultar la IP pública de nuestra casa, como por ejemplo AjpdSoft Aviso cambio IP pública.

Por otro lado necesitaremos redireccionar o mapear el puerto 80 en el router o cortafuegos apuntando a la IP de nuestro equipo Linux Ubuntu Server. A continuación mostramos algunos tutoriales para hacer esto:

De tal forma que las peticiones que se hagan a la IP pública irán encaminadas a nuestro equipo Linux servidor web Apache y PHP.

Preparar equipo con Linux para manejo de X10 con libusb y cm15ademo

Vamos a mostrar a continuación cómo preparar nuestro equipo con Linux Ubuntu Server para que pueda enviar comandos X10 y comunicarse con nuestros dispositivos X10. Para ello necesitaremos las libusb y cm15ademo.

En primer lugar conectaremos el dispositivo CM15 PC Interface al PC con Linux por el puerto USB:

Preparar equipo con Linux para manejo de X10 con libusb y cm15ademo

 

Instalar libusb en Linux Ubuntu Server

Para instalar las libusb, necesarias para la conexión USB con el módulo X10 CM15, ejecutaremos el siguiente comando en el shell (ventana de terminal) del equipo Linux Ubuntu, este comando descargará el paquete con las libusb:

wget http://launchpadlibrarian.net/76071936/libusb-dev_0.1.12-18_i386.deb

Una vez descargado lo instalaremos con el comando:

dpkg -i libusb-dev_0.1.12-18_i386.deb

Instalar libusb en Linux Ubuntu Server

Instalar cm15ademo en Linux Ubuntu Server

A continuación descargaremos el software que nos permitirá enviar los comandos X10 pendiante el puerto USB (con las libusb) desde nuestro equipo Linux Ubuntu. Para ello seguiremos estos pasos:

1. Crearemos una carpeta "install" con el comando:

mkdir -p ~/install

(con la cerilla "~" crearemos la carpeta "install" en la carpeta del usuario)

2. Accederemos a esta carpeta:

cd ~/install

3. Descargaremos el fichero cm15ademo.tar.gz con el comando:

wget http://www.eclipsehomeauto.com/cm15a_on_linux/cm15ademo.tar.gz

4. Crearemos la carpeta cm15a:

mkdir cm15a

5. Accederemos a la carpeta creada:

cd cm15a/

6. Descomprimiremos el fichero cm15ademo.tar.gz:

tar xzvf ../cm15ademo.tar.gz

Los ficheros que descomprimirá el comando anterior:

cm15ademo.c
cm15ax10.c
config.h
libusbahp.c
libusbahp.h
makefile
onetext.h

Instalar cm15ademo en Linux Ubuntu Server

7. Editaremos el fichero makefile con nano:

nano makefile

Cambiamos las dos líneas que marcamos en la imagen por:

LFLAGS = -DDEVEL -DDEBUG -DLINUX -DX10DEMO -o $@

EXTLIBS = -lusb -lm -lpthread

Guardamos los cambios y cerramos con Control + O y Control + X.

Instalar cm15ademo en Linux Ubuntu Server

8. A continuación ejecutaremos:

make

9. Copiaremos la carpeta cm15ademo a /usr/local/bin con:

sudo cp cm15ademo /usr/local/bin/cm15a

10. Estableceremos los permisos apropiados a la carpeta con:

sudo chown root /usr/local/bin/cm15a

sudo chmod +s /usr/local/bin/cm15a

11. Comprobaremos que tenemos correctamente conectado y detectado el dispositivo X10 en el PC, en nuestro caso X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant) con el comando:

lsusb

Y ya podremos controlar la domótica de nuestra casa con sencillos comandos Linux, por ejemplo, para encender un módulo X10 etiquetado como C2:

Instalar cm15ademo en Linux Ubuntu Server

Ejecutaremos el comando:

/usr/local/bin/cm15a C2 on

Para apagarlo:

/usr/local/bin/cm15a C2 off

Instalar cm15ademo en Linux Ubuntu Server

Que encenderá y apagará el dispositivo que tengamos conectado al X10 AM12 Appliance Module, que en nuestro caso es una lámpara:

Instalar cm15ademo en Linux Ubuntu Server

 

Página web en PHP para controlar la domótica de nuestra casa con X10

Una vez que tenemos configurado correctamente nuestro sistema Linux Ubuntu y hemos verificado que funciona la ejecución de los comandos X10, ahora podremos crear una sencilla página web de ejemplo usando PHP y la función PHP shell_exec que nos permitirá ejecutar comandos del sistema operativo Linux.

En primer lugar accederemos a la carpeta raíz de nuestro servidor web Apache, para el caso de Linux Ubuntu, por defecto:

cd /var/www

Ahora crearemos un fichero php con el nombre "domo_encender_c2.php":

nano domo_encender_c2.php

Página web en PHP para controlar la domótica de nuestra casa con X10

Y añadiremos el siguiente código PHP:

<?php
  $salida = shell_exec('/usr/local/bin/cm15a C2 on');
  if (empty($salida))
  {
    echo "Luz encendida.";
  }
  else
  {
    echo "Error al encender luz";
  }
?>

Página web en PHP para controlar la domótica de nuestra casa con X10

Repetiremos el proceso para apagar, el fichero "domo_apagar_c2.php", el código:

<?php
  $salida = shell_exec('/usr/local/bin/cm15a C2 off');
  if (empty($salida))
  {
    echo "Luz apagada.";
  }
  else
  {
    echo "Error al apagar luz";
  }
?>
  

 

Ahora ya podremos probar nuestra domótica X10 desde Internet ejecutando en un navegador web:

http://{IP_Publica}/domo_encender_c2.php

Página web en PHP para controlar la domótica de nuestra casa con X10

Y para apagar:

http://{IP_Publica}/domo_apagar_c2.php

Página web en PHP para controlar la domótica de nuestra casa con X10

Por supuesto, la web se puede y se debe mejorar, añadiendo seguridad, solicitando usuario y contraseña, guardando en base de datos el estado de cada dispositivo, haciendo una web más amigable con menús, incluso se pueden programar determinados comandos que ejecuten varias tareas a la vez. Con este tutorial hemos sentado las bases para poder controlar la domótica de nuestra casa desde el móvil, el resto se deja a la imaginación del usuario.

Anexo

Resultado ejecución de comandos Linux:

root@proyectoa:/tmp# wget http://launchpadlibrarian.net/76071936/libusb-dev_0.1.12-18_i386.deb
--2015-02-28 10:32:56-- http://launchpadlibrarian.net/76071936/libusb-dev_0.1.12-18_i386.deb
Resolviendo launchpadlibrarian.net... 91.189.89.228, 91.189.89.229
Conectando con launchpadlibrarian.net[91.189.89.228]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 33496 (33K) [application/x-debian-package]
Grabando a: "libusb-dev_0.1.12-18_i386.deb"

100%[===================>] 33.496 --.-K/s en 0,1s

2015-02-28 10:32:57 (337 KB/s) - "libusb-dev_0.1.12-18_i386.deb" guardado [33496/33496]

root@proyectoa:/tmp# dpkg -i libusb-dev_0.1.12-18_i386.deb
(Leyendo la base de datos ... 71033 ficheros o directorios instalados actualmente.)
Preparando para reemplazar libusb-dev 2:0.1.12-18 (usando libusb-dev_0.1.12-18_i386.deb) ...
Desempaquetando el reemplazo de libusb-dev ...
Configurando libusb-dev (2:0.1.12-18) ...
Procesando disparadores para man-db ...
root@proyectoa:/# mkdir -p ~/install
root@proyectoa:/# cd ~/install
root@proyectoa:~/install# pwd
/root/install
root@proyectoa:~/install# wget http://www.eclipsehomeauto.com/cm15a_on_linux/cm15ademo.tar.gz
--2015-02-28 10:41:30-- http://www.eclipsehomeauto.com/cm15a_on_linux/cm15ademo.tar.gz
Resolviendo www.eclipsehomeauto.com... 63.226.39.39
Conectando con www.eclipsehomeauto.com[63.226.39.39]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 28902 (28K) [application/x-gzip]
Grabando a: "cm15ademo.tar.gz.1"

100%[===============>] 28.902 71,9K/s en 0,4s

2015-02-28 10:41:32 (71,9 KB/s) - "cm15ademo.tar.gz.1" guardado [28902/28902]

root@proyectoa:~/install# mkdir cm15a
root@proyectoa:~/install# cd cm15a/
root@proyectoa:~/install/cm15a# tar xzvf ../cm15ademo.tar.gz
çcm15ademo.c
cm15ax10.c
config.h
libusbahp.c
libusbahp.h
makefile
onetext.h
root@proyectoa:~/install/cm15a# nano makefile
root@proyectoa:~/install/cm15a# make
root@proyectoa:~/install/cm15a# sudo cp cm15ademo /usr/local/bin/cm15a
root@proyectoa:~/install/cm15a# sudo chown root /usr/local/bin/cm15a
root@proyectoa:~/install/cm15a# sudo chmod +s /usr/local/bin/cm15a
root@proyectoa:~/install/cm15a# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 013: ID 0bc7:0001 X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant)
root@proyectoa:~/install/cm15a# /usr/local/bin/cm15a C2 on
root@proyectoa:~/install/cm15a# /usr/local/bin/cm15a C2 off

 

Contenido fichero makefile original:

LINKFILE=
CC = gcc

CFLAGS = -DDEVEL -DDEBUG -DLINUX -DX10DEMO -c
LFLAGS = -DDEVEL -DDEBUG -DLINUX -DX10DEMO -g /lib/libpthread* -o $@

PROGS = cm15ademo
EXTLIBS = -lusb -lm

all: $(PROGS)

cm15ademo: cm15ademo.c libusbahp.c config.h onetext.h libusbahp.c libusbahp.h cm15ax10.c
$(CC) $(LFLAGS) cm15ax10.c cm15ademo.c libusbahp.c $(EXTLIBS)

%.o: %.c
$(CC) $(CFLAGS) $<

clean:
rm -f *.o $(PROGS)


 


Artículos relacionados

 

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Sábado, 28 febrero a las 12:24:00 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A