Home Automation Server // IP Router + Arduino.

Automatización utilizando Router IP + Arduino + transmisores/receptores de radiofrecuencia (433 Mhz)

Para el desarrollo de este tutorial hse ha utilizado un router casero TP-Link Modelo Tl-WR841N.

Modificando el Firmware por uno tipo Custom, permitiendo mayor parametrización del router, lo utilizo como un pequeño servidor WEB y a su vez me permite utilizar el puerto serial interno, permitiendo por esta vía comunicarlo con el Arduino. Cabe destacar que el acceso y control se realiza por medio de servicios web, con ello obtenemos un sistema de automatización multiplataforma (Mac, Linux, Windows, Iphone, Android, Blackberry), lo que es fundamental hoy en día para estos tipos de sistemas, el cual no se limita a un sistema operativo específico.

Por ejemplo en mi primera publicación, la interface gráfica o GUI solo funciona bajo Windows ya que la aplicación fue realizada bajo Visual Studio 2013.

¿Como funciona?

Al router se le modifica el firmware cargándole el openWRT. Accesamos al router y dentro de él cargamos nuestra interface de automatización, en este caso una sencilla página web.

El index.html contiene los botones de encendido y apagado, ligados a un script que al presionar cada botón este se ejecuta en el router, enviando cadenas de texto al puerto serial. Estas cadenas las recibe nuestro Arduino y, por medio de la programación cargad,a nuestro Arduino capta e interpreta los datos recibidos por el puerto serial.

La programación del arduino interpreta la cadena y segun sea nuestro Arduino envía el codigo de control vía inalámbrica a nuestros “wireless remote controller switch” por medio del módulo RF433. Cabe destacar que el router continua funcionado como tal, con un firmware mejorado ya que se amplía la capacidad de parametrización del mismo, permitiendo al usuario avanzado sacarle más provecho al cambiarle el Firmware al router que adquiere teniendo un routeador de Internet y un servidor de automatización que consume menos de 4 Watts.

Para el desarrollo de este proyecto hemos utilizado los siguientes elementos:

DSC_0106

DSC_0100

Primer Proceso

I- Configuración del Router.

Instalar en el Router el firmware OpenWRT basado en Linux. Las instrucciones de instalación para el TP-LINK TL-WR841N se encuentran aqui. Puede utilizar los router listados aqui . Realizamos la configuración de nuestro router, teniendo en cuenta que el equipo ahora cuenta con el Firmware OpenWRT , recordando que la página de administracion/configuracion del fabricate ya no existe.

1. Abrimos el navegador (192.168.1.1) el usuario es: root y la contraseña queda en blanco.
2. Tendremos que configurar nuevamente nuestra red, recordar utilizar parámetros altos de seguridad, si van a poner en producción este proyecto, por lo que recomiendo conocimientos básicos de redes informáticas. Voy a explicar solo lo básico, si tiene problemas con la configuración puede contactarme.
Open-wrt tiene 3 menús.

  • Status
  • System
  • Network

open wrt menus

Ingresamos en System -> Administration y realizamos la siguiente configuración:
1. Router/Password : establecemos el password para ingresar a la administración del router ya que el password DEFAULT esta en blanco. MUY IMPORTANTE guardar y recordar esta contraseña[…].
2. SSH Access: mediante esta configuración podremos realizar cambios en el router y conectarnos a él por medio de programa WinSCP, Putty. La configuración Dropbear nos permite acceder al Shell (consola, terminal) del router por medio de la red y poder acceder al servidor integrado SCP server. Adjunto la imagen con la configuración.

open wrt ssh

3. Configuramos la red inalámbrica. En el menú NETWORK -> Wifi. En la opción Wireless Overview vamos a ver al botón Add.

 

open wrt configuracion wifi

 

Luego en Device Configuration en la opción de General Setup tenemos que habilitar la conexión inalámbrica por defecto viene desactivada. Pulsamos el botón Enable y vemos que el tag debe de decir Wireless network is enable.

 

open wrt configuracion wifi enable

Segimos con Interface Configuration

  • ESSID = el nombre de su red.
  • Mode = acces point
  • Network = lan, wan seleccionadas(es importante para poder salir al intenet y poder tener acceso a las interfaces físicas del router)
  • Wmm Mode = seleccionado
  • Salvamos en SAVE

 

open wrt configuracion wifi general

 

4. Ingresamos en Wireless Security, aplicar la configuración de seguridad inalambrica que guste.

    • Encryption WPA2-PSK
    • CIPHER = AUTO
    • KEY= INGRESE SU CLAVE DE ACCESO INALAMBRICO
    • Salvamos con Save & Apply

Segundo Proceso

II- Subir al Router la aplicación “Jada Home Automation Server“.

Debido a que la administración y configuración del router se realiza por el puerto 80, debemos de realizar cambios en el archivo de configuración uhttpd localizado dentro de las carpetas que contienen el firmware cargado en el I Paso. Con la configuración descrita, el router nos permitirá acceder a la aplicación web y trabajar en ella por el puerto 81. Al realizar los cambios en el archivo estaremos configurando un puerto secundario, por este puerto TCP trabajara nuestro sitio web de automatización.

1. Abrimos el programa WinSCP y establecemos los siguientes parámetros para la conexión:

  • Host name = a la dirección ip del router 192.168.1.1 (default).
  • Port: 22.
  • User name: root.
  • Password: es el password de administración y configuración (el que establecimos en la I parte) Router/Password )
  • File protocol: SCP.
  • Damos clic en el botón login.

winscp login

2. Luego establecer conexión veremos un programa similar a uno de FTP. nos muestra una estructura de carpetas, al darle clic al botón de subir como lo indica la imagen, podemos ver toda la estructura de archivos internos de nuestro router, “el firmware”.

winscp root

winscp root files

3. Ubicamos la siguiente ruta y realizamos cambios al siguiente archivo dándole doble click a uhttpd. /etc/config/uhttpd

winscp uhttpd
Ir al final y agregar los sig parámetros.

config ‘uhttpd’ ‘secondary’
option ‘listen_http’ ’81’
option ‘home’ ‘/routerapp/www’
option ‘cgi_prefix’ ‘/cgi-bin’
option ‘script_timeout’ ’60’
option ‘network_timeout’ ’30’

uhttpd config

Salvamos y cerramos.

5. Ahora creamos en el root una carpeta (presionamos F7) con el nombre routerapp dentro de esta creamos la carpeta con el nombre www. Dentro de la carpeta www descomprimimos y copiamos los archivos que contiene nuestra aplicación de automatización Jada home automation server, el index.html y sus subcarpetas.

Luego debemos de establecer permisos de acceso a los archivos on.cgi y off.cgi , estan dentro de la carpeta cgi-bin,  seleccionándo y presionando F9. Seleccionamos todos los cheqbox, nos mostrara los permisos 777.

Salvamos y reiniciamos el Router. Después de iniciar ya tenemos lista la aplicación de automatización cargada dentro del Router, siendo este nuestro servidor de automatización.

Tercer Proceso

En este paso ya estamos listos para realizar las conexiones de físicas tanto del Router al Ardunio y del Arduino al módulo RF433mhz.

Router al Arduino

En la página web de OpenWRT cuenta con la descripción de pines del puerto serial de los modelos que mantienen listados, el modelo de router que utilice mantiene varias versiones, cada versión mantiene placas diferentes por lo que dejare en este link para que vean la descripcion .

TP-LINK SERIAL PINOUT

serial conection
La conexión desde el Router al Arduino es en un solo sentido (Simplex).

Arduino al módulo RF 433mhz

arduino-rcswitch

Conectamos el módulo RF433 al nuestro arduino como lo muestra la imagen. Para comprender que códigos enviamos y como realizamos el control de los tomacorrientes inalámbricos le recomiendo lean el Primer Post

Cuarto Proceso

Programación del Arduino.

Descargamos el Sketch lo abrimos y cargamos a nuestro Arduino.

arduino sketch
Vemos en la imagen que la Programación esta compilada sin errores

Quinto Proceso

Cómo Funciona la Web Embedida en el Router?

index_shot

Cuando se presionan los Botones de encendido o Apagado el navegador carga un Scrip on.cgi/off.cgi para cada botón. El Router ejecuta los scrips (archivos .cgi) enviando los datos por su salida serial. Luego el Scrip redirige de regreso al navegador la página principal (index).

  • echo -e “\x9B\x01\x00\x34\xCB\x0D” > /dev/ttyS0 (dato ejecutado y enviado)
  • echo ” function Redirect(){ location.href = ‘../index.html’;}”(regresando a la pagina index)

Puede agregar cuantos botones quiera y personalizar los comandos que interpreta el Arduino modificando los archivos on.cgi/off.cgi

  • “\x9B\x01\x00\x34\xCB\x0D” (solo debe de modificarse en la cadena: Data1, Data2, Checksum)

En este caso el stream hexadecimal se compone asi

Byte# Funcion:

1. Synchronizacion (0x9B)
2. tipo de mensaje, utilice(0x00) o (0x01)
3. Data1 (convertido de ascii as hex) 0 = 0
4. Data2 (convertido de ascii as hex) 4 = 34
5. Suma de comprobación o Checksum (cualculo de Byte. 2~4)
6. Carácter de fin (, 0x0D)

Generador de caracteres(Pronto)

enlace que convierte los datos de ASCII a Hex

 

Escrito y Publicado Por Javier Brathwaite V.

¿Te gustó? ¡Comparte!Share on LinkedInShare on FacebookTweet about this on TwitterEmail this to someoneShare on RedditShare on TumblrShare on Google+Pin on PinterestBuffer this page