Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
guias:raspberry_iot [2019/01/19 14:32] – Alejandro Taracido | guias:raspberry_iot [2021/04/16 20:41] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Raspberry PI: Configuración para IOT ====== | ====== Raspberry PI: Configuración para IOT ====== | ||
- | WORK IN PROGRESS | + | Si quieres hacer experimentos con IOT o simplemente quieres automatizar tu hogar o laboratorio esta es tu guía! |
- | + | En esta guía te explicaré como instalar de cero un sistema headless en tu Raspberry Pi, Mosquitto un broker MQTT y Node Red un auténtico pegamento de tecnologías. | |
- | Si quieres hacer experimentos con IOT o simplemente quieres automatizar tu hogar o laboratorio esta es tu guía! En esta guía te explicaré como instalar de cero un sistema headless en tu Raspberry Pi, Mosquitto un broker MQTT y Node Red un auténtico pegamento de tecnologías. Empezamos! | + | Empezamos! |
===== Hardware necesario ===== | ===== Hardware necesario ===== | ||
+ | Necesitarás una Raspberry Pi, da igual el modelo con tal de que tengas una manera de conectarlo a tu red. | ||
- | Necesitarás una Raspberry Pi, da igual el modelo con tal de que tengas una manera de conectarlo a tu red. | + | Para que nuestro sistema sea lo más estable posible, lo vamos a conectar mediante cable ethernet. Si quieres conectarlo por wifi hay infinidad de tutoriales en internet. |
- | + | ||
- | Para que nuestro sistema sea lo más estable posible, lo vamos a conectar mediante cable ethernet, si quieres conectarlo por wifi hay infinidad de tutoriales en internet. | + | |
Aunque orientaremos la guía a Raspberry puedes utilizar otro sistema embebido con pequeños cambios. | Aunque orientaremos la guía a Raspberry puedes utilizar otro sistema embebido con pequeños cambios. | ||
Línea 16: | Línea 15: | ||
===== Instalación sistema operativo ===== | ===== Instalación sistema operativo ===== | ||
- | |||
Vamos a utilizar una versión lite (o reducida) de raspbian para este proyecto, ya que vamos a utilizar la raspi en modo headless, es decir sin utilizar monitor, ratón o demás periféricos. | Vamos a utilizar una versión lite (o reducida) de raspbian para este proyecto, ya que vamos a utilizar la raspi en modo headless, es decir sin utilizar monitor, ratón o demás periféricos. | ||
Línea 22: | Línea 20: | ||
- Descarga última imagen Lite de Raspbian: [[https:// | - Descarga última imagen Lite de Raspbian: [[https:// | ||
- | - Carga de imagen en SD:Podemos | + | - Carga de imagen en SD: podemos |
- | - Activar ssh: Una vez cargada la imagen, desconectamos la SD del ordenador y la volvemos a conectar. En los siguientes pasos necesitamos conectarnos a la raspi mediante ssh y las últimas versiones lite no lo tienen activado de serie. Para activarlo debemos crear un archivo en la partición boot de la SD, debe estar vacío y tener nombre " | + | - Activar ssh: una vez cargada la imagen, desconectamos la SD del ordenador y la volvemos a conectar. En los siguientes pasos necesitamos conectarnos a la raspi mediante ssh y las últimas versiones lite no lo tienen activado de serie. Para activarlo debemos crear un archivo en la partición boot de la SD, debe estar vacío y tener nombre " |
- | + | - Iniciar por primera vez la raspi: | |
- | <note tip>Esto solo activa ssh para el primer arranque! Si apagas la raspi en el proceso tendrás que volver a poner el archivo para poder volver a conectarte</ | + | |
- | + | ||
- | - Iniciar por primera vez la raspi: | + | |
---- | ---- | ||
===== Conexión mediante ssh ===== | ===== Conexión mediante ssh ===== | ||
- | |||
A partir de ahora siempre nos comunicaremos con la raspi mediante ssh o posteriormente la interfaz de programación de NodeRed. Pero para poder conectarnos a ella primero debemos encontrarla en nuestra red! | A partir de ahora siempre nos comunicaremos con la raspi mediante ssh o posteriormente la interfaz de programación de NodeRed. Pero para poder conectarnos a ella primero debemos encontrarla en nuestra red! | ||
==== Buscando nuestra raspi ==== | ==== Buscando nuestra raspi ==== | ||
- | + | Hay múltiples | |
- | Hay multiples | + | |
==== Hablemos por ssh ==== | ==== Hablemos por ssh ==== | ||
- | + | Para conectarnos por ssh tenemos varias opciones. | |
- | Para conectarnos por ssh tenemos varias opciones. | + | |
La más sencilla es utilizar el Pi Finder del anterior apartado, utilizaremos el usuario " | La más sencilla es utilizar el Pi Finder del anterior apartado, utilizaremos el usuario " | ||
Línea 48: | Línea 40: | ||
Si en cambio usas linux o macOS entra en la terminal y utiliza (sustituyendo las X por la IP de tu raspi): | Si en cambio usas linux o macOS entra en la terminal y utiliza (sustituyendo las X por la IP de tu raspi): | ||
- | + | < | |
- | < | + | |
- | ssh [email protected] | + | |
- | </ | + | |
---- | ---- | ||
===== Configuración SO ===== | ===== Configuración SO ===== | ||
- | |||
Una vez ya conseguimos estar dentro de la raspi, vamos a configurarla. Haremos los cambios necesarios para que todo funcione correctamente. | Una vez ya conseguimos estar dentro de la raspi, vamos a configurarla. Haremos los cambios necesarios para que todo funcione correctamente. | ||
==== IP fija ==== | ==== IP fija ==== | ||
+ | Debido a que vamos a instalar un broker de MQTT y que posteriormente conectaremos nuestros dispositivos IOT a dicho broker vamos a configurar una ip fija a nuestra raspi. Mira en que rango de IPs tiene tu red, puede ser de la forma 192.168.0.XX. Elige una IP que esté libre en tu red y que te sea fácil de recordar (el rango suele ir de 0 a 255). Yo utilizaré por ejemplo la 192.168.0.210. | ||
- | Debido a que vamos a instalar un broker de MQTT y que posteriormente conectaremos nuestros dispositivos IOT a dicho broker vamos configurar una ip fija a nuestra raspi. Mira en que rango de IPs tiene tu red, puede ser de la forma 192.168.0.XX. Elige una IP que esté libre en tu red y que te sea fácil de recordar (el rango suele ir desde el 0 a 255), Yo utilizaré por ejemplo la 192.168.0.210. | + | |
- | + | - Vete al final del archivo y añade lo siguiente sustituyendo las XX por la IP que quieras que tenga la raspi si tu router no está en la ip 192.168.0.1 cámbialo también ; < | |
- | | + | |
- | + | ||
- | < | + | |
- | sudo nano / | + | |
- | </ | + | |
- | + | ||
- | - Vete al final del archivo y añade lo siguiente sustituyendo las XX por la IP que quieras que tenga la raspi si tu router no está en la ip 192.168.0.1 cámbialo también ; | + | |
- | + | ||
- | < | + | |
- | interface eth0 | + | |
static ip_address=XXX.XXX.XXX.XXX/ | static ip_address=XXX.XXX.XXX.XXX/ | ||
static routers=192.168.0.1 | static routers=192.168.0.1 | ||
- | static domain_name_servers=192.168.0.1 | + | static domain_name_servers=192.168.0.1 </ |
- | </ | + | |
- Presiona " | - Presiona " | ||
- | - Reinicia la raspi con | + | - Reinicia la raspi con < |
- | + | - La conexión ssh se cortará, espera un minuto a que se reinicie la raspi y prueba a hacer ssh a tu pi con la nueva ip < | |
- | < | + | |
- | sudo reboot | + | |
- | </ | + | |
- | + | ||
- | - La conexión ssh se cortará, espera un minuto a que se reinicie la raspi y prueba a hacer ssh a tu pi con la nueva ip | + | |
- | + | ||
- | < | + | |
- | ssh [email protected] | + | |
- | </ | + | |
==== Raspi-config ==== | ==== Raspi-config ==== | ||
- | |||
Ahora utilizaremos este comando para configurar varios aspectos de la raspi. | Ahora utilizaremos este comando para configurar varios aspectos de la raspi. | ||
- | - Ejecutamos el comando | + | - Ejecutamos el comando < |
- | + | ||
- | < | + | |
- | sudo raspi-config | + | |
- | </ | + | |
- Cambiar nombre de red: Nos movemos con los cursores del teclado y seleccionando con enter. No cambies por ahora el password, lo haremos en otro paso. Seleccionamos la opción " | - Cambiar nombre de red: Nos movemos con los cursores del teclado y seleccionando con enter. No cambies por ahora el password, lo haremos en otro paso. Seleccionamos la opción " | ||
- | - Cambiar huso horario: seleccionamos " | + | - Cambiar huso horario: seleccionamos " |
- | - Activar definitivamente SSH: Con esto ya no necesitas meter más el archivo | + | - Activar definitivamente SSH: con esto ya no necesitas meter más el archivo |
- | - Expandir partición: | + | - Expandir partición: |
- | - Salimos dando a " | + | - Salimos dando a " |
==== Actualización del sistema ==== | ==== Actualización del sistema ==== | ||
- | |||
Aunque descargamos la última versión de la web, habrá actualizaciones intermedias del sistema, vamos a asegurarnos que tenemos todo con la última versión. | Aunque descargamos la última versión de la web, habrá actualizaciones intermedias del sistema, vamos a asegurarnos que tenemos todo con la última versión. | ||
- | - Actualizamos repositorios | + | - Actualizamos repositorios < |
- | + | - Actualizamos sistema < | |
- | < | + | |
- | sudo apt-get update | + | |
- | </ | + | |
- | + | ||
- | - Actualizamos sistema | + | |
- | + | ||
- | < | + | |
- | sudo apt-get upgrade | + | |
- | </ | + | |
==== Eliminar usuario pi y crear nuevo usuario ==== | ==== Eliminar usuario pi y crear nuevo usuario ==== | ||
- | |||
Por seguridad evitaremos utilizar el usuario pi por lo que crearemos un nuevo usuario con un nuevo password. | Por seguridad evitaremos utilizar el usuario pi por lo que crearemos un nuevo usuario con un nuevo password. | ||
- | - Crear nuevas claves ssh y añadir usuario: utilizamos los siguientes comandos uno a uno (cambiando " | + | - Crear nuevas claves ssh y añadir usuario: utilizamos los siguientes comandos uno a uno (cambiando " |
- | + | ||
- | < | + | |
- | sudo rm / | + | |
sudo ssh-keygen -A | sudo ssh-keygen -A | ||
sudo adduser USERNAME | sudo adduser USERNAME | ||
sudo adduser USERNAME sudo | sudo adduser USERNAME sudo | ||
- | sudo reboot | + | sudo reboot</ |
- | </ | + | - Al reiniciar se nos cierra la conexión ssh, ahora nos volvemos a conectar por ssh, pero en vez de utilizar el usuario " |
- | + | <note tip>Como hemos cambiado las claves de ssh en el anterior paso, el ordenador lo detectará | |
- | - Al reiniciar se nos cierra la conexión ssh, ahora nos volvemos a conectar por ssh, pero en vez de utilizar el usuario " | + | - Eliminar usuario pi: una vez reconectados por ssh eliminaremos el usuario pi con el siguiente comando: < |
- | + | ||
- | < | + | |
- | ssh [email protected] | + | |
- | </ | + | |
- | + | ||
- | <note tip>Como hemos cambiado las claves de ssh en el anterior paso, el ordenador lo detectará | + | |
- | + | ||
- | - Eliminar usuario pi: una vez reconectados por ssh eliminaremos el usuario pi con el siguiente comando: | + | |
- | + | ||
- | < | + | |
- | sudo deluser --remove-home pi | + | |
- | </ | + | |
==== Utilizar TMPFS ==== | ==== Utilizar TMPFS ==== | ||
- | |||
Las raspis hacen un uso intensivo de las memorias sd por lo que suele pasar que al poco tiempo se suelen estropear. Por ello utilizaremos el sistema TMPFS que utiliza la memoria ram para evitar este problema. | Las raspis hacen un uso intensivo de las memorias sd por lo que suele pasar que al poco tiempo se suelen estropear. Por ello utilizaremos el sistema TMPFS que utiliza la memoria ram para evitar este problema. | ||
- | - Modificamos el archivo fstab: | + | - Modificamos el archivo fstab: < |
- | + | - Añadimos al final del archivo: < | |
- | < | + | |
- | sudo nano /etc/fstab | + | |
- | </ | + | |
- | + | ||
- | - Añadimos al final del archivo: | + | |
- | + | ||
- | < | + | |
- | tmpfs /tmp | + | |
tmpfs / | tmpfs / | ||
tmpfs / | tmpfs / | ||
- | tmpfs / | + | tmpfs / |
- | </ | + | |
---- | ---- | ||
===== Instalación de Mosquitto ===== | ===== Instalación de Mosquitto ===== | ||
- | |||
MQTT es un protocolo de comunicación de mensajes entre máquinas muy adecuado para IOT. Funciona con un sistema de publicación/ | MQTT es un protocolo de comunicación de mensajes entre máquinas muy adecuado para IOT. Funciona con un sistema de publicación/ | ||
- | < | + | < |
- | sudo apt-get install mosquitto mosquitto-clients | + | |
- | </ | + | |
==== Securizando Mosquitto ==== | ==== Securizando Mosquitto ==== | ||
- | |||
Vamos a crear un usuario y password para Mosquitto. | Vamos a crear un usuario y password para Mosquitto. | ||
+ | - Nos vamos al directorio de Mosquitto < | ||
+ | - Añadimos un usuario, nos pedirá primero el password del usuario de la raspi y luego que introduzcamos el password para el usuario de Mosquitto (sustituye USERNAME por el nombre de usuario que quieras) < | ||
+ | - Si en un futuro quieres añadir otro usuario puedes usar: < | ||
+ | - Si quisieras eliminar un usuario puedes usar: < | ||
+ | - Sin salir del la carpera / | ||
+ | - Para obligar a usar un usuario y especificar donde está el archivo de password añadimos las siguientes líneas al final del archivo < | ||
+ | password_file / | ||
- | - Nos vamos al directorio | + | ==== Reinicio automático en caso de fallo ==== |
+ | - Primero paramos el servicio y eliminamos lo que ya había < | ||
+ | sudo update-rc.d mosquitto remove | ||
+ | sudo rm / | ||
+ | - Ahora modificamos el archivo mosquitto.service < | ||
+ | - Y añadimos las siguientes líneas < | ||
+ | Description=Mosquitto | ||
+ | ConditionPathExists=/ | ||
+ | AfteR=network.target | ||
+ | Requires=network.target | ||
- | < | + | [Service] |
- | cd / | + | Type=simple |
- | </ | + | ExecStart=/ |
+ | Restart=always | ||
- | | + | [Install] |
+ | WantedBy=multi-user.target </ | ||
+ | - Y por último relanzamos todo < | ||
+ | sudo systemctl enable mosquitto | ||
+ | sudo systemctl start mosquitto.service</ | ||
- | < | + | ---- |
- | sudo mosquitto_passwd | + | |
- | </ | + | |
- | - Si en un futuro quieres añadir otro usuario | + | ===== Instalación Node Red ===== |
+ | Ahora instalaremos Node Red, con este auténtico pegamento de tecnologías podremos editar el comportamiento de nuestro sistema de una manera muy sencilla e intuitiva. La interfaz de Node Red es una página web que te servirá la raspi y desde donde puedes | ||
- | < | + | Realizar la instalación de Node Red y todas las aplicaciones que necesita para funcionar es muy sencillo gracias a un script que se encarga de todo, sólo hay que lanzar: |
- | sudo mosquitto_passwd | + | |
- | </ | + | |
- | - Si quisieras eliminar un usuario puedes usar: | ||
- | < | + | Versión actualizada (marzo 2020): |
- | sudo mosquitto_passwd | + | ==== Securizando Node Red ==== |
- | </ | + | Node red por defecto no necesita usuario y contraseña, |
+ | - Nos vamos a la carpeta de Node Red < | ||
+ | - Ahora instalamos el complemento node-red-admin mediante npm < | ||
+ | - Generamos un hash con nuestro password de node red ( ejecuta, pon el password que quieras para Node Red y cuando te lo dé cópialo para despues) < | ||
+ | - Ahora generaremos un certificado ssl local para nuestro https con los siguientes comandos (cuando te pida datos puedes poner lo que quieras ya que el certificado va a ser local. No pueden estar todos en blanco) < | ||
+ | openssl genrsa -out privatekey.pem 1024 | ||
+ | openssl req -new -key privatekey.pem -out private-csr.pem | ||
+ | openssl x509 -req -days 365 -in private-csr.pem -signkey privatekey.pem -out certificate.pem</ | ||
+ | - Ejecutaremos Node Red para ver que funciona y generar el archivo settings.js < | ||
+ | - Una vez ponga algo como " | ||
+ | - Ahora modificaremos el archivo de configuración de Node Red < | ||
+ | - Busca y descomenta eliminando las dobles barras de: < | ||
+ | - Busca y descomenta la siguiente sección, y después coloca el nombre de usuario que quieras y el hash del password que copiaste antes < | ||
+ | type: " | ||
+ | users: [{ | ||
+ | | ||
+ | | ||
+ | | ||
+ | }] | ||
+ | },</ | ||
+ | - Busca, descomenta y modifica las siguientes líneas (sustituye | ||
+ | key: fs.readFileSync('/ | ||
+ | cert: fs.readFileSync('/ | ||
+ | },</ | ||
+ | - Ahora comprobaremos que todas las modificaciones que hemos hecho funcionan, inicia Node red < | ||
+ | - Cuando ponga algo como " | ||
+ | - Qué pasada! si todo ha ido bien podrás ver la pantalla de login, pon tu usuario y contraseña de Node Red y si entras sin problemas reprime tus instintos de cacharreo, cierra la web y a continuación en tu terminal ssh pulsa Control+C para parar Node Red, aun no hemos terminado! Pero ya queda poco :) | ||
- | ---- | + | ==== Inicio automático de Node Red con PM2 ==== |
+ | Casi todos los tutoriales recomiendan utilizar systemctl para iniciar Node Red, pero yo he tenido bastantes problemas por lo que recomiendo probar con PM2. Sólo tienes que ejecutar los siguientes comandos < | ||
+ | sudo npm install | ||
+ | pm2 start node-red | ||
+ | pm2 save | ||
+ | pm2 startup</ | ||
- | ===== Instalación | + | Ya está! Ya puedes comenzar a cacharrear con Node Red y MQTT, hay muchos tutoriales por internet para hacer cosas chulísimas. En esta página podras encontrar tanto " |
+ | |||
+ | Por último te puedo recomendar un chat de Telegram sobre Node Red en castellano : [[https:// | ||
+ | A disfrutarlo! | ||