Mostrando entradas con la etiqueta NSLU2. Mostrar todas las entradas
Mostrando entradas con la etiqueta NSLU2. Mostrar todas las entradas

domingo, 15 de febrero de 2009

Instalar KNXWeb 0.6 en NSLU2 (unslung)

KNXWeb es una interfaz web hecha en PHP para poder controlar nuestra instalación domótica.
Utiliza para ello la interfaz XML de linknx, por lo que podremos inteactuar con los
objetos definidos previamente en linknx.

KNXWeb nos permitirá diseñar el aspecto y los elementos a controlar.
Podemos ver una demostración del funcionamiento de la versión 0.4 en http://ouaye.net/linknx/linknxwebsim/

Requisitos:
- unslung (yo he usado la versión 6.8) en nuestro NSLU2
- Tenerlo contectado a Internet
- lighttpd instalado y configurado
- linknk instalado y configurado

Pasos a seguir para instalar KNXWeb 0.6:

- Descargamos el código de knxweb y lo descomprimimos en el directorio /opt/share/www
cd /opt/share/www
wget http://ovh.dl.sourceforge.net/sourceforge/linknx/knxweb-0.6.tar.gz
gzip –d knxweb-0.6.tar.gz
tar xvf knxweb-0.6.tar.gz

Ya está instalado, ahora solo tendremos que acceder abriendo en un navegador la URL:
http://:8081/knxweb

Podemos cambiar el puerto cambiando la línea server.port=8081 en /opt/etc/lighttpd.conf.
El puerto 80 no se puede usar porque ya está usado por la interfaz web de configuración de unlung.

Referencias:
Proyecto KNXWeb en SourceForge - http://sourceforge.net/projects/knxweb/
Demostración KNXWeb 0.4 - http://ouaye.net/linknx/linknxwebsim/

Lighttpd + PHP en NSLU2 (unslung)

Vamos a instalar lighttpd con soporte PHP para posteriormente instalar KNXWeb y controlar nuestra instalación domótica vía web.
Lighttpd es un servicio web ligero, sencillo y potente.

Requisistos:
- Tener instalado unslung (yo he usado la versión 6.8) en nuestro NSLU2
- Tenerlo contectado a Internet

Pasos:
- Entrar al NSLU2 por SSH o telnet
- Para instalar lighttpd ejecutamos:
ipkg install lighttpd

- Para instalar el soporte PHP:
ipkg install php
ipkg install php-fcgi

- Editamos /opt/etc/lighttpd/lighttpd.conf
nano /opt/etc/lighttpd/lighttpd.conf

Modificamos las secciones server.modules y cgi.assign para que queden de la siguiente forma:

server.modules = (
"mod_cgi",
"mod_access",
"mod_accesslog"
)

# soporte para PHP.
cgi.assign = (
".php" => "/opt/bin/php-fcgi",
)

El módulo mod_accesslog se utiliza solo para ver los logs de conexiones. Realmente no es necesario.
No usamos el módulo fastcgi porque el php que se instala por defecto en unslung no lo soporta, utilizamos en su lugar el módulo CGI (mod_cgi)

- Reiniciamos el sistema

Lighttpd sirve los documentos ubicados en /opt/share/www/
El puerto de acceso por defecto que instala lighttpd en unslung es el 8081, por lo que para acceder al servicio tendremos que poner:
http://:8081
Ejemplo:
http://192.168.1.77:8081

Referencias:
Lighttpd - http://ouaye.net/linknx/linknxwebsim/

sábado, 14 de febrero de 2009

Instalar Linknx en NSLU2

En este post muestro las instrucciones paso a paso para instalar linknx y hacer una configuración muy básica.

Requisitos:
- unslung (yo he usado la versión 6.8) en nuestro NSLU2
- Tenerlo contectado a Internet
- eibd instalado y configurado

Instalación Linknx:

- Entrar por SSH o telnet al NSLU2
- Descargar el binario de linknx de SourceForge
cd /tmp
wget http://downloads.sourceforge.net/linknx/linknx-0.0.1.25-nosmtp-optware-FSG3.tgz


No he descargado el correspondiente a NSLU2 ya que no funcionaba. Creo que el problema proviene de la biblioteca libesmtp.

- Descomprimimos el fichero .tgz
gzip –d linknx-0.0.1.25-nosmtp-optware-FSG3.tgz
tar xvf linknx-0.0.1.25-nosmtp-optware-FSG3.tar


- instalamos el paquete de linknx
ipkg install linknx_0.0.1.25-3_armeb.ipk

- instalamos otros paquetes necesarios (alguno puede que ya esté instalado)
ipkg install libcurl
ipkg install glib
ipkg install libstdc++


- Creamos el fichero /opt/etc/INIT.d/S71linknx con el siguiente contenido
#!/bin/sh
/opt/bin/linknx -c /home/linknx/linknx.xml -d


- Damos permisos de ejecución al fichero
chmod 755 /opt/etc/init.d/S71linknx


Configuración básica para linknx:


- Creamos el directorio /home/linknx
mkdir /home/linknx

- Dentro de este directorio creamos el fichero linknx.xml
usamos el editor que mas nos guste, yo usaré nano (si no está instalado: ipkg install nano)
nano /home/linknx

El contenido del fichero:
<config>
<objects>
<object type="1.001"
id="luz_salon_ONOFF" gad="1/1/10">
Luz Salon ON/OFF</object>
</objects>
<rules>
</rules>
<services>
<knxconnection url="ip:127.0.0.1">
<xmlserver type="inet" port="1028">
<exceptiondays>
<date day="1" month="1">
</date>
</exceptiondays>
</xmlserver>
</knxconnection></services>


No configuramos el envio de correos. Existe un problema con la librería libestmp.

- Reiniciamos de forma que se arranque automaticamente.

Si queremos ver si funciona linknx, los telegramas que recibe y el funcionamiento de las reglas, iniciamos otra sesión SSH o telnet y lo arrancamos manualmente sin la opción -d (demonio)
/opt/bin/linknx -c /home/linknx/linknx.xml

Cada vez que se reciba un telegrama de una dirección de grupo configurada o se active una regla o temporizador, lo veremos en la consola.

En el wiki de linknx tenemos toda la documentación sobre linknx. Configuración, interacción via interfaz XML, problemas, etc.

Por último, tengo que mencionar un comportamiento un poco raro para cuando creamos reglas. Si utilizamos una condición que queremos que se active cuando cambie el estado de un objeto, no olvidar poner "trigger=true" en la condición. El comportamiento extraño consiste en que solo se activa la regla cuando cambia el estado del objeto y tiene el valor que nos interesa, no cada vez que se reciba un telegrama con ese valor.


Referencias:
Pagina oficial Linknx
Wiki Linknx

Acceder al bus KNX con interfaz USB en NSLU2

Vamos a ver como instalar eibd y configurarlo con una interfaz USB (en mi caso de JUNG)

Antes de nada hemos de comprobar que nuestro interfaz USB está soportado:
http://bcusdk.wiki.sourceforge.net/SupportedHardware

Para instalar eibd en el NSLU2 seguimos los siguientes pasos:
- Configuramos el NSLU2 para que tenga acceso a Internet.
- Entramos por SSH o telnet al NSLU2 y ejecutamos
ipkg install http://ouaye.net/linknx/optware-nslu2/pthsem_2.0.7-1_armeb.ipk
ipkg install http://ouaye.net/linknx/optware-nslu2/eibd_0.0.3-4_armeb.ipk

(también podemos descargar los paquetes .ipkg en /tmp y luego instalarlos con ipkg install

- Creamos el fichero /opt/etc/init.d/S70eibd con el siguiente contenido:
#!/bin/sh
usbport=$(findknxusb | /bin/sed -e '1 d' -e 's/device //' | /usr/bin/cut -d':' -f1-2)
eibd -d -D -S -T -i usb:$usbport

- Damos permisos de ejecución al fichero
chmod 755 /opt/etc/init.d/S70eibd

- Reiniciamos el NSLU2 con el USB conectado y debería cargar sin problemas.
Podemos comprobar que se está ejecutando eibd listando los procesos en ejecución con el comando ps -a

En caso de que eibd no se arranque automaticamente, probablemente tendremos una interfaz "delicada". En http://bcusdk.wiki.sourceforge.net/ABB_USB podemos ver cuales funcionan, cuales necesitan "un apaño", y el motivo del problema.

El "apaño" en cuestión, consiste en editar el fichero /opt/etc/init.d/S70eibd para que quede de la siguiente manera:
#!/bin/sh
usbport=$(findknxusb | /bin/sed -e '1 d' -e 's/device //' | /usr/bin/cut -d':' -f1-2)
bcuaddrtab -w 0 usb:$usbport && eibd -d -D -S -T -i usb:$usbport

La versión de eibd que se ha instalado nos permitirá usar ETS para programar nuestra instalación KNX. Simplemente crearemos una nueva conexión en ETS del tipo KNXNet usando la IP del NSLU2.


Referencias:
BCUSDK con eibd de la Universidad de Viena (en SourceForge)
Problemas con algunas interfaces USB

sábado, 15 de diciembre de 2007

Configuración de la actualización automática de hora

Al iniciar el NSLU2 la hora del sistema no está correctamente configurada. Vamos a configurarlo para que sincronice la hora por Internet al iniciar el sistema operativo y una vez al dia.

Requisitos:
  • NSLU2 con unslug 6.8 (seguramente con otras versiones funciona igual)
  • Sistema configurado con acceso a Internet
Pasos a seguir:

Instalamos el cliente NTP
ipkg install ntpclient
Creamos el fichero S78ntpclient con el siguiente contenido

#!/bin/sh
/opt/bin/ntpclient -h pool.ntp.org -s &>/dev/null

Modificamos los permisos del fichero para hacerlo ejecutable
chmod 755 /opt/etc/init.d/S78ntpclient

Modificamos el fichero /etc/crontab y añadimos

# sincroniza hora por Internet cada dia a las 4:00
00 4 * * * root /opt/bin/ntpclient -h pool.ntp.org -s &>/dev/null

Con esta configuración, nuestro NSLU2 estará siempre en hora.

Puerto serie por USB en NSLU2(unslug 6.8)

Al NSLU2 se le puede poner un puerto serie soldando directemente un adaptador de señal (Maxim 3232) y un conector, o bien usando un adaptador USB a serie. La solución del adaptador es más cómoda, menos peligrosa y la que yo uso.

Requisistos:
- NSLU2 con unslug 6.8 (con otras versiones probablemente sea igual)
- adaptador USB a serie soportado por Linux (casi todos)


Pasos a seguir:

Entramos por telnet o SSH al NSLU2

Conectamos el adaptador USB

Ejecutamos el comando dmesg para ver que tipo de adaptador ha detectado el sistema operativo
En mi caso aparece la siguiente línea:
usb.c: USB device 2 (vend/prod 0x67b/0x2303) is not claimed by any active driver.
Podemos instalar y cargar todos los módulos para adaptadores usb a serie o bien averiguar que dispositivo tenemos a partir de los codigos de fabricante y producto. En mi caso el adaptador lleva un chip Prolific PL2303

Instalamos los modulos usbserial y el correspondiente al adaptador USB.
ipkg install kernel-module-usbserial
ipkg install kernel-module-pl2303

Hay varios modulos para adaptadores USB-serie (kernel-module-pl2303, kernel-module-belkin-sa, kernel-module-ftdi-sio o kernel-module-keyspan)

Ejecutamos depmod para que actualice la lista de modulos

Comprobamos el nombre de los modulos
ls /lib/modules/`uname -r`/kernel/drivers/usb/serial

Cargamos los modulos para ver si está todo correcto
insmod usbserial
insmod pl2303

Y volvemos a ejecutar dmesg para comprobar que los modulos corresponden con el hardware
En mi caso encuentro la línea
usbserial.c: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
por lo que el nuevo puerto serie será /dev/ttyUSB0

Ahora vamos a hacer que se carguen los modulos del adaptador en el inicio del sistema

Creamos el fichero /opt/etc/init.d/S79usbserial con el siguiente contenido
#!/bin/sh
insmod usbserial
insmod pl2303

Modificamos los permisos del fichero para hacerlo ejecutable
chmod 755 /opt/etc/init.d/S79usbserial


A partir de este momento ya tendremos puerto serie cada vez que arranque el sistema.

miércoles, 28 de noviembre de 2007

Linknx en Linksys NSLU2

Una vez instalado y configurado el entorno de compilación cruzada para el NSLU2, me he animado a crear los paquetes necesarios para compilar Linknx en el NSLU2.

Dentro del directorio optware, hay un subdirectorio make que contiene las instrucciones para compilar todos los paquetes. Cada fichero make contiene las instrucciones para generar cada paquete.

Los pasos para crear un nuevo paquete son:
  1. Copiar el fichero make/template.mk a make/nombredelpaquete.mk
  2. Editar el fichero nombredelpaquete.mk
El paso 2 es un poco lioso, lo mejor es guiarse por otros ficheros .mk

Linknx necesita eibd para funcionar, y eibd necesita la libreria pthsem. Por lo tanto, he tenido que crear los tres paquetes.

Creación del paquete de la libreria pthsem
  1. Descargar pthsem-2.0.7.tar.gz en subdirectorio downloads de optware
  2. Crear pthsem.mk y meterlo en el subdirectorio make
  3. Ejecutar make pthsem-ipk

Creación del paquete eibd
  1. Descargar bcusdk_0.0.3.tar.gz en subdirectorio downloads de optware
  2. Crear eibd.mk y meterlo en el subdirectorio make
  3. Ejecutar make eibd-ipk

Creación del paquete linknx

  1. Descargar la ultima versión de linknx en subdirectorio downloads de optware
  2. Crear linknx.mk y meterlo en el subdirectorio make
  3. Modificar en el fichero linknx.mk el campo LINKNX_VERSION=0.0.1.20 con la versión descargada
  4. Ejecutar make linknx-ipk
Los ficheros .ipk de los paquetes están en el subdirectorio builds

Y por si no quereis poneros a compilar, dejo los enlaces a los paquetes compilados
http://webs.ono.com/uidas/nslu2/pthsem_2.0.7-1_armeb.ipk
http://webs.ono.com/uidas/nslu2/eibd_0.0.3-1_armeb.ipk
http://webs.ono.com/uidas/nslu2/linknx_0.0.1.20-1_armeb.ipk

Nota: Linkx necesita tener instalados libcurl y libesmtp para que funcione el envio de SMS y correos electrónicos.

lunes, 26 de noviembre de 2007

Compilando aplicaciones para NSLU2

O como instalar el compilador cruzado para generar aplicaciones para NSLU2.

Hay que instalar el entorno de desarrollo para paquetes Optware. Estos son los típicos paquetes que instalamos con ipkg install. Aprovechamos este entorno para compilar nuestros programas sin tener que generar el paquete. Aunque si lo generamos, mucho mejor.

Es recomendable utilizar un usuario diferente a root, por lo que pueda pasar. Si compilamos algunos paquetes y hacemos un make install, posiblemente substituyamos librerias y programas importantes del sistema por versiones compiladas para otra plataforma, lo cual no puede ser bueno.

Pasos a seguir:

Nos vamos a nuestro directorio home
cd ~

Creamos un directorio nslu2dev
mkdir nslu2dev

Descargamos el código para crear paquetes optware
svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware

Vamos a generar solo el entorno de compilación cruzada para NSLU2
cd optware
make nslu2-target
cd nslu2; make directories ipkg-utils

Compilamos por ejemplo el comando unzip para forzar a que se compile e instale el entorno de desarrollo completo
make unzip

Si falla al descomprimir gcc-3.3.5.tar.bz2:
nos vamos al directorio ~/downloads borramos gcc-3.3.5.tar.bz2 y descargamos de nuevo el gcc
wget ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-3.3.5/gcc-3.3.5.tar.bz2

Volvemos al directorio ~/nslu2dev/optware
cd ~/nslu2dev/optware

y ejecutamos de nuevo
make unzip

Compilará todo el entorno de compilación cruzada y el paquete que le hemos indicado

Para compilar un programa sin generar el paquete crearemos un script que pondremos en el directorio donde estn los fuentes del programa a compilar. Hay que ponerlo en el mismo directorio en que está el Makefile y configure

El script en cuestión:
export PATH=~/nslu2dev/optware/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/bin:$PATH
./configure --host=armv5b-softfloat-linux && make

Si queremos compilar un solo fichero, substituimos la ultima linea por
armv5b-softfloat-linux-gcc nombredelprograma.c -o nombredelprogramaejecutable

Después, no hay mas que subir los ejecutables al NSLU2, ponerles permisos de ejecución y listos.

Si se complica la cosa o no funciona lo mejor va a ser leerse la documentación:
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware

miércoles, 21 de noviembre de 2007

Cambiando el firmware del NSLU2 - Unslug 6.8

Para los que no conozcan el NSLU2, es un cacharrillo de Linksys con un puerto Ethernet y dos puertos USB 2.0. El objetivo para el que lo diseñó Linksys es para convertir un par de discos duros USB en discos de red, osea en NAS. Internamente funciona con Linux y comparte los discos utilizando Samba.

Bueno, pues se puede utilizar para casi cualquier cosa que no requiera mucha potencia. Yo lo tengo funcionando conectado a una estación meteorológica 1-wire de forma que mande los datos de temperatura, velocidad y dirección de viento a un servidor. El próximo objetivo es usarlo con Linknx y como servidor web EIB.

La comunidad Linux ha desarrollado varios nuevos firmwares para el NSLU2, siendo el mas simple de instalar y usar Unslug.

Como he tenido que hacer un pequeño manual en castellano sobre como instalar Unslug, lo pongo a continuación. El objetivo del manual es tener una guia paso a paso en castellano bastante simplificada. La hice con un poco de prisa por lo que se aceptan comentarios y correcciones para mejorarla :)

El manual en cuestión:

Requisitos:
- NSLU2
- Memoria flash USB de al menos 512MB

Pasos a seguir.

Comprobación RedBoot (MUY IMPORTANTE)
Antes de poner el nuevo firmware hay que comprobar que el cargador de arranque (bootloader) funciona correctamente. Si no estuviera funcionando, no podriamos recuperar el sistema en caso de fallo en la actualización de firmware.

Para comporbar que el cargador de arranque RedBoot está funcionando seguimos las instrucciones del siguiente documento:

http://www.nslu2-linux.org/wiki/HowTo/TelnetIntoRedBoot


Ya se que está en inglés pero es bastante simple, básicamente consiste en:
  • Conectar con un cable el NSLU2 a un PC.
  • Ponerle al PC una IP 192.168.0.x donde x debe ser mayor que 1.
  • Hacer un telnet a la IP 192.168.0.1, puerto 9000 en el momento justo que el NSLU2 arranca

Instalación del firmware (resumen en castellano del README)
  • Descargaremos el nuevo firmware de http://www.slug-firmware.net/u-dls.php (o bien www.nlu2-linux.org). En esta guia utilizamos Unslug-6.8-beta
  • Arrancamos el NSLU2 con los puertos USB libres.
  • Accedemos a la interfaz web en la IP 172.16.1.77 con usuario admin y clave admin. Podemos cambiar la IP antes de hacer nada con la utilidad del CD o a través de la interfaz web.
  • Actualizamos el firmware con unslug-6.8. Suele tardar 5 minutos pero puede ser mucho mas tiempo. En el menú Administration -> Advanced -> Upgrade. Mientras actualiza, el LED Ready/Status cambia alternativamente entre color rojo y verde. Una vez actualizado se reiniciará solo.
  • Apagamos el NSLU2, conectamos la memoria flash al puerto 2 (DISK2) y encendemos de nuevo.
  • Comprobamos que seguimos teniendo acceso a la interfaz web del NSLU2 y que la unidad de disco está presente. En caso de que no esté todo bien, parar y leer el README y http://www.nslu2-linux.org/wiki/HowTo/TroubleshootADriveMissingCondition
  • Apagar el NSLU2 de nuevo y desconectar la memoria flash.
  • Encendemos de nuevo el NSLU2 (sin discos conectados).
  • Habilitamos la interfaz Telnet en "http://192.168.1.77/Management/telnet.cgi"
  • Conectamos la memoria flash al DISK2, esperamos un par de minutos a que se monte la unidad.
  • Comprobamos en la interfaz web que se ha montado la unidad y la formateamos con el NSLU2 si no lo habiamos hecho previamente. (Administration -> Advanced -> Disk). El disco tiene que aparecer como "Formatted (EXT)"
  • Conectamos por telnet (telnet 192.168.1.77). El usuario es "root" y la contraseña "uNSLUng".
  • Ejecutamos "/sbin/unsling disk2".Nos pedirá la palabra de paso de root para cuando arranque desde el disco flash.
  • Ejecutamos reboot
La unidad flash deberá estar siempre conectada al puerto DISK2

Conectamos de nuevo a la interfaz web y comprobamos que en la parte inferior pone
uNSLUng status: Unslung to disk2, /dev/sda1

Ya tenemos instalado Unslug 6.8

Configuración IP
  • Configuramos a través de la interfaz web la dirección IP definitiva, máscara de subred, puerta de enlace predeterminada y servidores DNS, para que el NSLU2 tenga acceso a Internet. Menú Administration -> LAN

Instalación servicio SSH
  • Volvemos a habilitar telnet con http:///Management/telnet.cgi
  • Entramos por telnet
  • Ejecutamos los siguientes comandos:
    • ipkg update
    • ipkg install dropbear
    • reboot
Si queremos usar sftp para tansferencia segura de ficheros, en vez de instalar el dropbear instalamos openssh.
Ya podemos entrar por SSH de forma segura sin tener que habilitar telnet cada vez.

Prolongando la vida de la memoria flash
Unslug está instalado en una memoria flash y estas memorias tienen un número limitado de escrituras. Vamos a configurar el sistema para que escriba en la memoria flash el menor número de veces posible.

Para ello entramos por telnet o SSH y creamos el archivo .ext3flash en la raiz del sistema de ficheros
touch /.ext3flash

NOTAS: Al reiniciar, el NSLU2 se toma su tiempo, sobre todo si hace una comprobación de disco. No es recomendable apagar el NSLU2 desconectando la alimentación.
Cuando termina de arrancar emite un pitido. Hasta unos segundos después del pitido no podremos entrar por ssh.


Referencias:
http://www.nslu2-linux.org
http://www.nslu2-linux.org/wiki/Unslung/Ext3flash
README del firmware descargado.