22 octubre 2017

Pimatic. Acceso desde Internet. SSL

pimatic-logo

Tal vez necesitemos acceder a nuestro sistema domótico cuando estemos fuera de casa, para ello es recomendable, casi obligatorio, hacerlo a través de una conexión segura (https), ya que no querremos que nuestro sistema domótico se vea expuesto a peligros innecesarios.

Lo primero que debemos hacer es cumplir un par de requisitos:
  • Necesitaremos un servicio de DNS Dinámico para nuestra dirección IP. Como sabemos, nuestra dirección IP suele cambiar cada vez que reiniciamos el router, por lo que estos servicios lo que hacen es asignarnos un dirección del tipo "xxxxx.no-ip.com" y mediante una aplicación o si nuestro router trae esa opción, se le envía nuestra IP actual a ese servicio que la mantiene actualizada, por lo que da igual que cambie ya que nosotros accedemos a la dirección anterior que nos redirige a nuestra IP. Si tenemos IP fija no es necesario hacer nada de esto.
  • Es necesario redirigir el puerto https (443 por defecto) en nuestro router a la dirección dentro de nuestra red de la Raspberry Pi.
Sabiendo los requisitos ya nos podemos poner manos a la obra. Para usar https necesitamos crear un certificado auto-firmado. Para ello es necesario crear una Autoridad Certificadora (CA). Pimatic nos simplifica este proceso con un script, tecleamos:
sudo apt-get install wget
cd pimatic-app
wget https://raw.githubusercontent.com/pimatic/pimatic/master/install/ssl-setup
chmod +x ./ssl-setup
./ssl-setup
Automáticamente nos crea todos los certificados necesarios donde debemos indicar una contraseña para el certificado privado y la dirección dinámica que hayamos configurado en el servicio DNS.

Para configurar la conexión https y que todas nuestras conexiones a Pimatic se hagan con el protocolo SSL debemos editar el archivo de configuración config.json que deberia quedar así:
"httpsServer": {
"enabled": true,
"port": 443,
"hostname": "",
"keyFile": "ca/pimatic-ssl/private/privkey.pem",
"certFile": "ca/pimatic-ssl/public/cert.pem",
"rootCertFile": "ca/certs/cacert.crt"
},
El último paso es importar el certificado de la Autoridad Certificadora (CA) que hemos creado en todos los dispositivos que vayamos a usar para gestionar Pimatic, tecleando en el navegador la siguiente dirección: http://tu-ddns/root-ca-cert.crt. Si no hacemos esto es posible que nos dé algún error cuando accedamos a Pimatic con el protocolo https.

Pimatic. Configuración de inicio

pimatic-logo

Una vez instalado Pimatic vamos a ver como iniciar, parar o reiniciar el sistema.
Para iniciarlo basta con teclear:
sudo node_modules/pimatic/pimatic.js
Y para hacerlo correr como demonio:
sudo node_modules/pimatic/pimatic.js start
Donde podremos usar los comandos status, stop o restart.

Al intentar iniciar Pimatic por primera vez es posible que nos de un error relacionado con sqlite3, para tratar de solucionarlo primero vamos a borrar la carpeta donde debería estar instalado sqlite3:
sudo rm -rf /home/pi/pimatic-app/node_modules/sqlite3
Y vamos a instalar el módulo a mano:
cd pimatic-app
sudo npm install sqlite3
Todo esto es debido a que en el inicio de Pimatic no encuentra la versión correcta para descargar del módulo sqlite3 para arm. Al instalarlo después nosotros a mano el módulo sqlite se compila en la Raspberry Pi, por lo que este proceso es bastante largo (20/30 minutos).

Continuamos. Para poder iniciar Pimatic globalmente lo hacemos con:
cd ./node_modules/pimatic
sudo npm link
Una vez hecho esto ya podemos iniciar Pimatic de un modo más sencillo con los siguientes comando:
sudo pimatic.js [start|stop|status|restart]
De esta forma, para ejecutar Pimatic, lo debemos hacer en modo manual con alguno de los comandos, para simplificarlo, vamos a hacer que Pimatic se ejecute automáticamente al iniciar la Raspberry Pi, para ello debemos instalar el script init.d:
wget https://raw.githubusercontent.com/pimatic/pimatic/v0.9.x/install/pimatic-init-d
sudo cp pimatic-init-d /etc/init.d/pimatic
sudo chmod +x /etc/init.d/pimatic
sudo chown root:root /etc/init.d/pimatic
sudo update-rc.d pimatic defaults
Ahora ya podemos iniciar Pimatic como servicio con :
sudo service pimatic start
Para finalizar reiniciamos la Raspberry Pi, al arrancar de nuevo y al cabo de un par de minutos Pimatic ya debería estar corriendo y listo para acceder.

Pimatic. Control domótico en casa. Instalación

pimatic-logo

Vamos a instalar un sistema domótico en casa. Queremos controlar temperaturas, persianas, puertas de garaje y tenerlo todo más o menos automatizado y controlado desde el PC y/o móvil. Para la Raspberry Pi existen multitud de sistemas domóticos, después de buscar y buscar nos hemos decidido por éste en concreto, Pimatic, por su sencillez de uso, instalación y configuración.

"Pimatic es un framework de automatización del hogar que corre bajo node.js. Proporciona una plataforma extensible común para el control del hogar y las tareas de automatización", esa es la descripción de este sistema en su web y tras algunas pruebas con él nos ha sorprendido gratamente, la cantidad de plugins que incorpora, y como hemos dicho antes, la sencillez en su instalación y configuración, nos han hecho decidirnos por este sistema en concreto.

Lo primero es instalar Raspbian, para eso nos dirigimos a la página de descargas de Raspbian y nos descargamos la imagen que grabaremos en la SD. En este caso usaremos Raspbian Stretch Lite ya que no necesitamos la imagen completa, con esta versión nos sirve. Para instalar Raspbian en la SD seguiremos los pasos ya explicados anteriormente en esta entrada.

¡¡IMPORTANTE!!, en esta versión de Raspbian, Stretch, el acceso por SSH viene desactivado por defecto, para activarlo, una vez hayamos copiado la imagen a la SD, basta con crear un archivo en blanco con el nombre ssh y colocarlo en la raíz de la partición boot. También aprovechamos y hacemos que la Raspberry nada más encenderse se conecte a nuestra red WIFI, para ellos creamos un archivo con el nombre wpa_supplicant.conf , con el siguiente contenido e igualmente lo colocamos en la raíz de la partición boot de la SD:
country=ES
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="nombre_de_nuestra_red"
psk="contraseña_de_nuestra_red"

}
Pues ya estamos listos para instalar Pimatic. Lo primero es actualizar el sistema para ello tecleamos:
sudo apt-get update
Y después:
sudo apt-get upgrade
Comenzamos la instalación de node.js con los siguientes comandos:
Para la Raspberry Pi modelo A, B, B+ o Zero;
wget https://nodejs.org/dist/v4.8.4/node-v4.8.4-linux-armv6l.tar.gz -P /tmp
cd /usr/local
sudo tar xzvf /tmp/node-v4.8.4-linux-armv6l.tar.gz --strip=1
Y para la Raspberry Pi B o Pi 3 modelo B;
wget https://nodejs.org/dist/v4.8.4/node-v4.8.4-linux-armv7l.tar.gz -P /tmp
cd /usr/local
sudo tar xzvf /tmp/node-v4.8.4-linux-armv7l.tar.gz --strip=1
Comprobamos si Node.js se ha instalado correctamente con:
/usr/bin/env node --version
Seguimos ya con la instalación de Pimatic. Instalamos los compiladores necesarios:
sudo apt-get install build-essential git
Una vez que node.js y npm ya están correctamente instalados seguimos para instalar el framework de Pimatic con:
cd /home/pi
mkdir pimatic-app
npm install pimatic --prefix pimatic-app --production
Copiamos el archivo de configuración por defecto con:
cd pimatic-app
cp ./node_modules/pimatic/config_default.json ./config.json
Ahora solamente nos queda establecer la contraseña por defecto para el usuario administrador editando el siguiente archivo:
sudo nano config.json
Una vez abierto buscamos "users" y ahí ya cambiamos el valor del "password" para el usuario "admin" poniendo la contraseña que nosotros deseemos.

17 diciembre 2016

Reconexión WiFi automática en Raspberry Pi con aviso

Es posible que algunas veces nuestra Raspberry Pi pierda la conexión a la red WiFi a la que está conectada, bien sea porque el interfaz inalámbrico se haya colgado o porque el punto de acceso no está disponible. En el segundo caso poco podemos hacer, pero si se pierde la conexión vamos a tratar de que la Raspberry Pi se reconecte al punto de acceso y nos avise de ello. Para eso vamos a crear un script que se ejecute cada 5 minutos y compruebe que el punto de acceso sigue disponible, si no lo está, reiniciará el interfaz inalámbrico y nos enviará un correo.

Creamos el script Wifi-reinicia.sh en la siguiente ubicación /usr/local/bin:
 sudo nano /usr/local/bin/Wifi-reinicia.sh
Con el siguiente contenido que explicamos a continuación:
#!/bin/bash

SERVER=192.168.1.1
ping -c2 ${SERVER} > /dev/null
if [ $? != 0 ]
then
   ifdown --force wlan0
   ifup wlan0
   sleep 120
   sudo /home/pi/mailIPwifi
fi
Necesitamos saber que la Raspberry Pi está conectada a la red, para eso hacemos ping a un servidor, 192.168.1.1, la dirección IP de nuestro router en este caso, si no obtiene respuesta entonces reiniciará el interfaz inalámbrico y después de 2 minutos nos enviará un correo avisándonos de que se ha reconectado.
Lo guardamos y le damos permisos de ejecución:
sudo chmod +x /usr/local/bin/Wifi-reinicia.sh
Como ya tenemos el servidor de correo instalado vamos a crear el mensaje que nos llegará al correo:
sudo nano mailIPwifi
Y pegamos lo siguiente, donde YOURMAIL, es la dirección donde queremos recibir el correo de aviso::
 #!/bin/sh
 mailreciever=YOURMAIL
 today=$(date)
 my_ip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
 my_pi="El WiFi de la Raspberry Pi se ha reinicado!! "
 message="El WiFi de la Raspberry Pi se ha reiniciado el $today. Dirección IP = $my_ip"
 echo $message > message.txt
 mutt -s "${my_pi}" ${mailreciever} < message.txt
Lo guardamos y le damos permisos de ejecución:
sudo chmod +x mailIPwifi
Para que el script se ejecute automáticamente vamos a añadir una tarea a cron:
sudo nano /etc/crontab
Y antes del último #, añadimos la siguiente linea. Así el script de reconexión se ejecutará cada 5 minutos:
 */5 * * * * root /usr/local/bin/Wifi-reinicia.sh
Para probarlo bastará con tirar abajo el interfaz inalámbrico, en un rato se reconectará automáticamente a nuestra red WiFi y nos enviará el correo de aviso.
ifdown --force wlan0
Instrucciones tomadas de este post.

16 diciembre 2016

Notificación por email al reinicio de la Raspberry Pi

En la anterior entrada ya hemos configurado nuestra Raspberry Pi para que ante cualquier cuelgue se reinicie automáticamente. Eso está muy bien, pero quizás nos interesa saber cuando se ha quedado colgada, por si se repite habitualmente investigar a que es debido. Para eso vamos a configurar que después de cada reinicio nos envíe un email avisándonos de ello.

Abrimos el terminal e instalamos los paquetes necesarios:
sudo apt-get install sendmail-bin
sudo apt-get install mutt
Creamos el archivo .muttrc:
sudo nano /root/.muttrc
Con el siguiente contenido, donde editaremos las seis primeras lineas con los datos de nuestra cuenta de Gmail:
# basic .muttrc for use with Gmail
# Change the following six lines to match your Gmail account details
set imap_user = "username@gmail.com"
set imap_pass = ""
set smtp_url = "smtp://username@smtp.gmail.com:587/"
set smtp_pass = ""
set from = "username@gmail.com"
set realname = "Firstname Lastname"
#
# # Change the following line to a different editor you prefer.
set editor = 'vim + -c "set textwidth=72" -c "set wrap"'
# Basic config
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set imap_check_subscribed=yes
set hostname = gmail.com
set mail_check = 120
set timeout = 300
set imap_keepalive = 300
set postponed = "+[GMail]/Drafts"
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
set move = no
set include
set sort = 'threads'
set sort_aux = 'reverse-last-date-received'
set auto_tag = yes
set pager_index_lines = 10
ignore "Authentication-Results:"
ignore "DomainKey-Signature:"
ignore "DKIM-Signature:"
hdr_order Date From To Cc
alternative_order text/plain text/html *
auto_view text/html
bind editor complete-query
bind editor ^T complete
bind editor noop
# # Gmail-style keyboard shortcuts
macro index,pager am "unset trash\n " "Gmail archive message" # different from Gmail, but wanted to keep "y" to show folders.
macro index,pager d "set trash=\"imaps://imap.googlemail.com/[GMail]/Bin\"\n " "Gmail delete message"
macro index,pager gi "=INBOX" "Go to inbox"
macro index,pager ga "=[Gmail]/All Mail" "Go to all mail"
macro index,pager gs "=[Gmail]/Starred" "Go to starred messages"
macro index,pager gd "=[Gmail]/Drafts" "Go to drafts"
macro index,pager gl "?" "Go to 'Label'" # will take you to a list of all your Labels (similar to viewing folders).
 Creamos el script con el contenido del email que nos enviará cuando se reinicie:
sudo nano mailIP
Y pegamos lo siguiente, donde YOURMAIL, es la dirección donde queremos recibir el correo de aviso:
 #!/bin/sh
 mailreciever=YOURMAIL
 today=$(date)
 my_ip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
 my_pi="La Raspberry Pi se ha reinicado!! "
 message="La Raspberry Pi se ha reiniciado el $today. Dirección IP = $my_ip"
 echo $message > message.txt
 mutt -s "${my_pi}" ${mailreciever} < message.txt
Nos aseguramos de darle permisos de ejecución:
sudo chmod +x mailIP
Y lo probamos con este comando:
./mailIP
Si todo está correctamente configurado habremos recibido un correo en la cuenta que hemos especificado anteriormente. Ahora vamos a hacer que ese correo se mande después de cada reinicio, para ello editamos:
sudo nano /etc/rc.local
Y añadimos lo siguiente después de esta linea "printf "My IP address is %s\n" "$_IP"":
  sleep 30
  sudo /home/pi/mailIP &
Lo guardamos y le damos permisos de ejecución:
sudo chmod 0755 /etc/rc.local
Solo nos queda reiniciar y comprobar que recibimos el correo:
sudo reboot
 

©2011 Trasteando con Raspberry Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.
Creado a partir de la obra en Trasteando con Raspberry. | FuuTheme diseñado por Fuutec | Ir arriba ↑