11 junio 2012

X-10: Comunicaciones a través de la red eléctrica (2/2)


Como prometí en la primera entrada sobre X-10, quería documentar mi experiencia de haber estado trasteando con  este tipo de dispositivos.

Hay dos formas de "X-10-izar" una casa. Mediante dispositivos (interruptores,  casquillos de bombilla, etc,…) que lleven incorporada la electrónica X-10 necesaria; o, si no queremos cambiar los interruptores, se pueden intercalar módulos o micromódulos X-10, que activen o desactiven lo que queramos (un motor, una bombilla, una sirena,...).

¿Cómo se envían los códigos X-10 necesarios?
Los interfaces que comentamos en la primera entrada CM-11, CM-15 o CM-17, emitiremos las señales necesarias para que funcionen los dispositivos actuadores.

Como dijimos, un dispositivo X-10 se identifica por un código de casa (de la A a la P) y un código de dispositivo (del 1 al 16). En perl (y supongo que en otros lenguajes de alto nivel como Python), hay diferentes módulos como ControlX10::CM11 o ControlX10::CM17. Recordad que CM11 funciona por puerto serie y CM15 y CM17 van por USB. En el caso de CM11, podemos "hablarle" al puerto serie directamente y enviar los comandos necesarios, y en el caso de los que funcionan por USB, será necesario utilizar un driver para poder tener un dispositivo en /dev (en Linux).

Estos módulos Perl permiten abstraerte del mundo del bit para, directamente, decirle al módulo C4 que se encienda o que se apague. Sin embargo, en el caso de CM15 (que es el emisor que compré), no encontré nada útil en CPAN.
Así que dije: bueno, pues do-it-yourself… Lo primero era hacer que el sistema operativo detectara el dispositivo.
Un lsusb lo detecta así:

Bus 002 Device 013: ID 0bc7:0001 X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant)

Descargué el código fuente de un driver CM-15A y, después de un ratito quitando errores de compilación, logré tener un cm15a.ko que cargaba correctamente en mi CentOS y me generaba un device /dev/cm15a0. 

A partir de aquí, lo siguiente es probar a emitir. Los códigos de casa y dispositivo a enviar que se pueden encontrar en ftp://ftp.x10.com/pub/manuals/cm11a_protocol.txt no responden a ningún tipo de lógica ni algorítmica, por lo que (no recuerdo dónde) encontré un script que convertía los códigos que se deseaban a los bits necesarios a enviar al dispositivo USB para enviar un comando a un dispositivo:

A partir de ese script, hice el mío propio para poder enviar por línea de comandos lo que se quiera:



  
Como véis en el código, es tan sencillo como ejecutar el programa pasándole el código de casa, de dispositivo y el comando a ejecutar (en mi caso, on/off y creo que DIM, aunque no lo he probado) Si vía línea de comandos le paso el 0 como código de dispositivo, interpretaré que he de ejecutar el mismo comando en TODOS los dispositivos controlados vía X-10

Las contras de X-10
  • Fiabilidad del protocolo: No todo en el mundo X-10 es de color de rosa, y es que la fiabilidad de la recepción de las señales no es 100%. De hecho, me atrevería a decir que esa ha sido la causa de su bajo éxito en el mundo casero. Inherentemente, el propio protocolo en sí, utiliza la señal de baja tensión de la corriente eléctrica para enviar una serie de impulsos eléctricos que los dispositivos X-10 identifican como bits para saber si tienen o no que encenderse/apagarse o lo que sea. El propio protocolo es tan poco fiable, que de por sí, manda la señal dos veces seguidas. Por las pruebas que yo he hecho, puedo decir que en muchos casos, incluso yo he tenido que mandar el comando hasta 3 veces (en mi user-space) para que los sensores X-10 ejecuten la acción. Al ser, los que yo tengo, dispositivos unidireccionales (que no permiten "leer" el estado de los elementos que controlan) no hay forma de saber si les ha llegado la orden. Por si acaso, la mando tres veces y aumento las probabilidades.

  • La longitud del cable: Aunque parezca que la electricidad funciona estupendamente, no siempre es así. Que toques la Fase y el Neutro de la corriente eléctrica de casa, a nosecuantos metros de cable del cuadro eléctrico, y te electrocutes no quiere decir que por conectar un dispositivo X-10 ahí, éste vaya a interpretar correctamente las órdenes y vaya a funcionar correctamente. Cuantos más metros de cable o cuantos más dispositivos X-10 encadenes entre ellos (en mi caso, tuve que "coser" 6 interruptores X-10) menor fiabilidad existirá. Recomiendo encarecidamente poner el mayor de los cuidados en no hacer "chapuzas eléctricas". Es decir, que cuantos más pelillos de cable entren en los diferentes interruptores, mayor será la calidad de recepción de la señal, por lo que tendremos una mayor tranquilidad que la orden se ejecutó convenientemente. Para ello, recomiendo que no se "cosan" más de tres  dispositivos X-10 entre ellos, de manera que la corriente tenga que atravesarlos todos para llegar. Incluso haciendo conexiones en paralelo, es conveniente sacar toma de corriente de diferentes enchufes o cajas de empalmes, para hacer más sencillo el flujo de los datos a través de la red eléctrica.

  • Las interferencias electromagnéticas: Lógicamente, el ruido electromagnético existente en la red eléctrica (en base a los diferentes electrodomésticos conectados a la misma, así como su actividad) afectan enormemente a la fiabilidad de los comandos X-10. Sin embargo, he de decir que me ha sorprendido el grado en el que el funcionamiento se ve afectado. En mi caso, que enciendo 6 motores vía X-10, el propio ruido eléctrico que generan los tres primeros, hacen que la orden para los otros tres no se interprete correctamente mientras los primeros mecanismos aún se están moviendo. Por poneros un ejemplo aún más curioso, ha coincidido que hace un par de semanas he tenido que preparar un curso de Checkpoint GAiA para dar a un cliente. Para ello, he estado instalando el software de Checkpoint en un PC que tenía en el trastero. Pues simplemente, con tener enchufada la máquina (un Dell Dimension 2400), sin que siquiera estuviese encendido, sólo enchufado en la misma fase donde tengo conectado el CM15A,… ya inhabilita su funcionamiento completamente. No os imagináis el susto que me llevé cuando ví que el X-10 dejaba de funcionar. Para ocasiones en las que no podemos desenchufar un electrodoméstico que genere mucho ruido eléctrico, se puede incorporar un filtro en el enchufe que mitigue esas interferencias.

  • Seguridad de X-10: Se supone que en instalaciones monofásicas (el mayor porcentaje de las casas), las órdenes X-10 llegan hasta los elementos conectados a ese cuadro eléctrico y ya está, quedando acotadas a lo que haya dentro de ese diferencial. En instalaciones trifásicas, en las que necesitamos hablar a dispositivos X-10 que están en las diferentes fases, hay que hacer una "pequeña" modificación en el cuadro eléctrico para permitir el paso de las señales X-10. Se supone que los comandos no salen de nuestra propia red eléctrica, pero por si acaso, he desarrollado un sencillo script que por fuerza bruta, pone a ON todos los dispositivos X-10 del espectro posible. Así que si tenéis la seguridad que la vecina (o los servicios comunes de una comunidad) tienen dispositivos X-10, podéis probar a ejecutar este script desde vuestra casa (o desde un enchufe público de la comunidad), y ver si hay suerte y se pone algo a funcionar:



  • Dónde comprar dipositivos X-10: En tiendas físicas, esto del X-10 y la domótica no existe. Y en tiendas online, desgraciadamente, cada vez quedan menos que distribuyan este tipo de dispositivos. En mi caso, he tenido la suerte de haber hecho buenas migas con Javier Elices, uno de los dueños de la tienda online "Domoticayseguridad", cuya oficina física está cerca de Plaza Castilla en Madrid. Si necesitáis asesoramiento sobre dispositivos domóticos, os puedo asegurar que Javier es uno de los que "lo vive" (qué identificado me he sentido en las largas conversaciones que hemos tenido sobre mis locas ideas...)

3 comments :

franco87 dijo...

Muy bueno el post.

franco87 dijo...

Lorenzo, conoces Opendomo? Es un sistema domotico libre que incorpora soporte para dispositivos X10.
No se que tal funciona con X10 porque no lo he probado, pero con arduino va perfecto y se pueden hacer cosas muy interesates

Lorenzo_Martinez dijo...

 Hola... en algún post pasado (creo que fue @Agux) me dejaron un comentario respecto a OpenDomo. Estuve viendo pantallazos (no llegué a probarla) y me pareció que es más o menos lo que tengo, aunque en mi caso ha sido hecho a medida... Siempre digo que no hay que reinventar la rueda, pero en según qué casos, puede que no todo sea compatible, o quieras personalizarlo más a tu gusto. Con Linux en general, y lenguajes de programación que permiten alto nivel de abstracción como ir "al bit", del estilo de Perl o Python y ciertas dosis de imaginación, se puede dar solución a grandes problemas :)