Al terminar la
entrada de blog anterior indiqué tres deficiencias a corregir de la
instalación:
- Que no arranca
automáticamente. Dado que OpenHAB va a ser el sistema que controle todos
los automatismos de mi hogar, es importante que arranque automáticamente
si, por ejemplo, se va la luz y vuelve.
- No tiene usuario y
contraseña, lo que significa que cualquiera que pueda conectarse a su
servidor web, podrá ver y controlar todos sus automatismos.
- Tiene instalados un gran
número de extensiones que, al menos de momento, no usamos y que lo unico
que hacen es hacer que el sistema vaya más lento y generar mensajes de
error.
Ahora vamos a ver
como resolver cada una de estas deficiencias.
Nota: Por si no te
has dado cuenta con las anteriores entradas, se asume que el usuario tiene
cierta experiencia con el uso de una Raspberry Pi, de su entorno gráfico y es
capaz de abrir una ventana de terminal y ejecutar comandos sencillos de Unix,
también es conveniente saber usar SSH. Aunque la mayoría de las veces intento
dar instrucciones detalladas tipo "copia y pega", el entender lo que
se está haciendo ayuda mucho.
Arranque automático
==================
Para que este
arranque se produzca es necesario crear un script especial. En Internet es
posible encontrar varios scripts que hacen esta función. Sin embargo ninguno
me funcionó a la primera y opté por crear mi propio script de arranque, aunque
está basado mas o menos libremente, en alguno de los que he visto:
- conectate a tu
raspberry Pi por SSH o abriendo una ventana de terminal desde el entorno
gráfico.
- es conveniente crear un
usuario específico para que ejecute el entorno OpenHAB y no usar el
usuario "pi" que trae por defecto la Raspberry Pi. (Le has
cambiado la contraseña al usuario pi, ¿verdad?, si no lo has hecho la
forma más sencilla es, desde el usuario "pi" ejecutar el
comando "passwd" y te pedirá dos veces la nueva contraseña -no
se verá en pantalla. Si escribes lo mismo las dos veces, cambiará la
contraseña anterior por la que acabas de escribir, asi que conviene que
te acuerdes MUY BIEN de cual has puesto). Para crear un usuario openhab
escribe:
sudo adduser openhab
- El sistema te
pedirá una contraseña, escríbela (y acuerdate de ella) y al resto de
preguntas que hace contesta pulsando simplemente Intro sin escribir nada.
- Seguidamente se cambia la
propiedad de todos los archivos instalados de OpenHAB
chown -R openhab:openhab /opt/openhab
- Cuando arranca
cualquier sistema Unix/Linux y especificamente la Raspberry Pi, busca en
un directorio los llamados script de arranque. Un script es una secuencia
de comandos que se graba en un fichero para poder ejecutarlos todos de
golpe con solo escribir el nombre del fichero. Los scripts de arranque,
como su nombre indica son los que se ejecutan al arrancar el sistema y en
nuestro caso queremos crear uno para que arranque OpenHAB. Para crear el
archivo vamos a usar el editor de textos nano y copiar y pegar la lista
de comandos. En primer lugar ejecuta el comando:
sudo nano /etc/init.d/openhab
- El sistema te
pide la contraseña de tu usuario y a continuación tienes que copiar y pegar el texto
siguiente que son los comandos a ejecutar:
#!/bin/sh
###
BEGIN INIT INFO
#
Provides: openhab
#
Required-Start: $remote_fs $syslog
#
Required-Stop: $remote_fs $syslog
#
Default-Start: 2 3 4 5
#
Default-Stop: 0 1 6
#
Short-Description: OpenHAB Daemon
#
Description: Build your smart home in no time!
###
END INIT INFO
ROOT_DIR=/opt/openhab
PIDFILE=/opt/openhab/openhab.pid
cd
$ROOT_DIR
#
set path to eclipse folder.
eclipsehome="/opt/openhab/server";
#
set ports for HTTP(S) server
HTTP_PORT=8080
HTTPS_PORT=8443
#
get path to equinox jar inside $eclipsehome folder
cp=$(find
$eclipsehome -name "org.eclipse.equinox.launcher_*.jar" | sort |
tail -1);
OPENHAB_ARGS="-Dosgi.clean=true
\
-Declipse.ignoreApp=true
\
-Dosgi.noShutdown=true
\
-Djetty.port=$HTTP_PORT
\
-Djetty.port.ssl=$HTTPS_PORT
\
-Djetty.home=.
\
-Dlogback.configurationFile=configurations/logback.xml
\
-Dfelix.fileinstall.dir=addons
-Dfelix.fileinstall.filter=.*\\.jar \
-Djava.library.path=lib
\
-Djava.security.auth.login.config=./etc/login.conf
\
-Dorg.quartz.properties=./etc/quartz.properties
\
-Dequinox.ds.block_timeout=240000
\
-Dequinox.scr.waitTimeOnBlock=60000
\
-Dfelix.fileinstall.active.level=4
\
-Djava.awt.headless=true
\
-jar
$cp $* \
-console"
do_start()
{
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile
--user openhab --chuid openhab --chdir /opt/openhab --exec /usr/bin/java --
$OPENHAB_ARGS
}
do_stop()
{
start-stop-daemon --stop --pidfile $PIDFILE --retry 10
}
case
"$1" in
start|stop)
do_${1}
;;
restart|reload|force-reload)
do_stop
do_start
;;
status)
status_of_proc "$DAEMON_NAME"
"$DAEMON" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DAEMON_NAME
{start|stop|restart|status}"
exit 1
;;
esac
exit
0
- Una vez lo hayas pegado, pulsa Control-X y
el programa te preguntará si quieres guardar los cambios: "Save
modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?".
Pulsa Y cuando te pregunte
"File Name to Write: /etc/init.d/openhab" pulsa Intro
para que lo guarde con el nombre que le hemos dado.
- Después de crear
el script hay que cambiar los permisos para que el sistema pueda
ejecutarlo:
sudo chmod a+x /etc/init.d/openhab
sudo update-rc.d openhab defaults
- Aunque
no es extrictamente necesario vamos a crear el sitemap por defecto usando
la configuración "demo" cargada previamente. Así podrás ver que
funciona y es más fácil usar esa configuración e irla modificando que
partir de cero. Para ello simplemente ejecuta en una sola linea, si te
aparece cortado en dos es por el tamaño de la línea):
sudo cp
/opt/openhab/configurations/sitemaps/demo.sitemap /opt/openhab/configurations/sitemaps/default.sitemap
- Ahora
reinicia el sistema para que arranque automáticamente:
sudo reboot
- Después
de arrancar hay que dejar pasar unos minutos para OpenHAB haga sus tareas
internas y esté listo para trabajar. Para comprobar que funciona abre un
navegador y ejecuta:
sustituyendo 192.168.1.3 por la IP fija que ajustaste en el
paso anterior. En la pantalla del navegador te tiene que aparecer:
Usuario
y Contraseña
======================
En
el paso anterior has visto que has podido conectarte a la página de OpenHAB
sin usuario y contraseña. Imaginate que sigue así cuando lo tengas todo
configurado y cualquier persona que acceda a tu red pueda encender y apagar
las luces o cualquier otra operación.
Queda
claro que es necesario protegerlo con usuario y contraseña.
Para
ello en primer lugar hay que indicarle al sistema que tiene que solicitar
usuario y contraseña. Esto se consigue modificando la opción security en el
archivo de configuración de OpenHAB. Lo editamos
sudo
nano /opt/openhab/configurations/openhab_default.cfg
Busca
y cambia la línea (está al principio del archivo):
security:option=
Por
security:option=ON
A
continuación tienes que dar de alta al menos un usuario. Tienes que editar el
archivo /opt/openhab/configurations/users.cfg y añadir uno o varios usuarios
con su contraseña con el formato <usuario>=<contraseña> :
sudo
nano/opt/openhab/configurations/users.cfg
admin=123456
Ahora
sólo tienes que parar y arrancar el servidor y ya estará funcionando.
Eliminar
extensiones innecesarias
============================
Un
pequeño inconveniente de OpenHAB (también puede ser una ventaja) es que trae
todas las extensiones activadas. Evidentemente la ventaja es que según lo
arrancamos puede, en teoría, funcionar con todos los dispositivos –aunque hay
que configurarlos. El inconveniente es que muchas de estas extensiones van a
dar error.
La
forma de desactivar las que queramos es sencilla. OpenHAB busca al arrancar
todas las extensiones en un directorio específico. Basta con mover las que no
queremos fuera de ese directorio y ya no molestarán.
El
directorio en cuestión se llama addons y está dentro del directorio openhab.
En nuestro caso /opt/openhab/addons.
Vamos
a crear otro directorio addons.bak:
cd
/opt/openhab
mkdir
addons.bak
Ahora
entramos en addons y movemos todo lo que no nos interese a addons.bak
cd
addons
ls
La
lista que aparece puede asustar, son 198 archivos, pero en caso de duda deja
los que no sepas y mueve los que estés seguro/a que no necesitas. Basicamente
los que tengan nombres de dispositivos comerciales y los que te den error en
el log de OpenHAB. Cuando vayas aprendiendo podrás desactivar mas.
El
comando para hacerlo es:
sudo mv org.openhab.action.ecobee-1.8.3.jar ../addons.bak
sustituyendo org.openhab.action.ecobee.... por la extensión que
quieres desactivar.
Entre los que tienes que conservar (y no mover) porque se usan,
están:
org.openhab.action.mqtt-1.8.3.jar
org.openhab.binding.configadmin-1.8.3.jar
org.openhab.binding.http-1.8.3.jar
sudo
mv org.openhab.persistence.rrd4j-1.8.3.jar
Una
vez hechos estos pasos, estamos listos para configurar el OpenHAB para que
gestione nuestros equipos domésticos.