Herramientas de usuario

Herramientas del sitio


guias:raspberry_iot

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
guias:raspberry_iot [2019/01/19 17:17]
Alejandro Taracido primera versión
guias:raspberry_iot [2019/01/19 19:02] (actual)
Alejandro Taracido correcciones menores
Línea 8: Línea 8:
 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 20: Línea 20:
  
   - Descarga última imagen Lite de Raspbian: [[https://​www.raspberrypi.org/​downloads/​raspbian/​|https://​www.raspberrypi.org/​downloads/​raspbian/​]] Yo he utilizado para esta guía Raspbian Stretch Lite versión November 2018   - Descarga última imagen Lite de Raspbian: [[https://​www.raspberrypi.org/​downloads/​raspbian/​|https://​www.raspberrypi.org/​downloads/​raspbian/​]] Yo he utilizado para esta guía Raspbian Stretch Lite versión November 2018
-  - Carga de imagen en SD:Podemos ​utilizar [[https://​www.balena.io/​etcher/​|Etcher]],​ es muy sencillo de utilizar, ​solo hay que seleccionar cual es nuestra tarjeta sd y la imagen que queremos cargar. +  - Carga de imagen en SD: podemos ​utilizar [[https://​www.balena.io/​etcher/​|Etcher]],​ es muy sencillo de utilizar, ​sólo hay que seleccionar cual es nuestra tarjeta sd y la imagen que queremos cargar. 
-  - 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 "​ssh"​ (sin extensión). ​ +  - 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 "​ssh"​ (sin extensión). <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</​note>​ 
-<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</​note>​ +  - Iniciar por primera vez la raspi: ​expulsamos ​la SD del ordenador y la introducimos en la raspi (apagada). La conectamos con cable de red a nuestro router y posteriormente la alimentamos. Una vez hecho esto no deberiamos necesitar volver a tocar físicamente ​la raspi ^_^
-  - Iniciar por primera vez la raspi: ​Expulsamos ​la SD del ordenador y la introducimos en la raspi (apagada). La conectamos con cable de red a nuestro router y posteriormente la alimentamos. Una vez hecho esto no deberiamos necesitar volver a tocar fisicamente ​la raspi ^_^+
  
 ---- ----
Línea 31: Línea 30:
  
 ==== Buscando nuestra raspi ==== ==== Buscando nuestra raspi ====
-Hay multiples ​opciones para encontrar que IP le ha asignado nuestro router. Podemos conectarnos a nuestro router y buscar que dispositivos están conectados o hacer un escaneo de IPs en nuestra red. pero os voy a recomendar una fantástica herramienta open source de Adafruit. El [[https://​learn.adafruit.com/​the-adafruit-raspberry-pi-finder/​finding-and-connecting|Pi Finder]] te permite detectar raspis en tu red y hasta conectarte por ssh. Super recomendable si no quieres complicarte.+Hay múltiples ​opciones para encontrar que IP le ha asignado nuestro router. Podemos conectarnos a nuestro router y buscar que dispositivos están conectados o hacer un escaneo de IPs en nuestra red. pero os voy a recomendar una fantástica herramienta open source de Adafruit. El [[https://​learn.adafruit.com/​the-adafruit-raspberry-pi-finder/​finding-and-connecting|Pi Finder]] te permite detectar raspis en tu red y hasta conectarte por ssh. Súper ​recomendable si no quieres complicarte.
  
 ==== Hablemos por ssh ==== ==== Hablemos por ssh ====
Línea 49: Línea 48:
  
 ==== 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 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.+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 de 0 a 255)Yo utilizaré por ejemplo la 192.168.0.210.
  
   - Una vez conectados por ssh vamos a editar el archivo de configuración de dhcp: <​code>​sudo nano /​etc/​dhcpcd.conf</​code>​   - Una vez conectados por ssh vamos a editar el archivo de configuración de dhcp: <​code>​sudo nano /​etc/​dhcpcd.conf</​code>​
Línea 65: Línea 64:
   - Ejecutamos el comando <​code>​sudo raspi-config</​code>​   - Ejecutamos el comando <​code>​sudo raspi-config</​code>​
   - 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 "​Network options"​ y luego "​Hostname"​ esto es para cambiar el nombre de la raspi visible en la red, es recomendable por seguridad que no se vea claramente que es una raspi.   - 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 "​Network options"​ y luego "​Hostname"​ esto es para cambiar el nombre de la raspi visible en la red, es recomendable por seguridad que no se vea claramente que es una raspi.
-  - Cambiar huso horario: seleccionamos "​Localisation Options"​ y luego "​Change Timezone"​ y selecciona tu area geográfica y una ciudad correspondiente a tu uso horario (para España Madrid) +  - Cambiar huso horario: seleccionamos "​Localisation Options"​ y luego "​Change Timezone"​ y selecciona tu área geográfica y una ciudad correspondiente a tu uso horario (para EspañaMadrid) 
-  - Activar definitivamente SSH: Con esto ya no necesitas meter más el archivo ​vacio "​ssh"​. Vamos a "​Interfacing Options" ​ y luego "​SSH"​ +  - Activar definitivamente SSH: con esto ya no necesitas meter más el archivo ​vacío ​"​ssh"​. Vamos a "​Interfacing Options" ​ y luego "​SSH"​ 
-  - Expandir partición: ​Con esto expandimos la partición para que utilice toda la SD. Vamos a "​Advanced Options"​ y luego "​Expand Filesystem"​ +  - Expandir partición: ​con esto expandimos la partición para que utilice toda la SD. Vamos a "​Advanced Options"​ y luego "​Expand Filesystem"​ 
-  - Salimos dando a "​Finish"​ y reiniciamos.Se cerrará la conexión ssh, espera un minuto y vuelve a conectarte+  - Salimos dando a "​Finish"​ y reiniciamos. Se cerrará la conexión ssh, espera un minuto y vuelve a conectarte
  
 ==== Actualización del sistema ==== ==== Actualización del sistema ====
Línea 85: Línea 84:
 sudo reboot</​code>​ sudo reboot</​code>​
   - Al reiniciar se nos cierra la conexión ssh, ahora nos volvemos a conectar por ssh, pero en vez de utilizar el usuario "​pi"​ a partir de ahora utilizaremos siempre el nuevo usuario que hemos creado <​code>​ssh USERNAME@192.168.0.XXX</​code> ​   - Al reiniciar se nos cierra la conexión ssh, ahora nos volvemos a conectar por ssh, pero en vez de utilizar el usuario "​pi"​ a partir de ahora utilizaremos siempre el nuevo usuario que hemos creado <​code>​ssh USERNAME@192.168.0.XXX</​code> ​
-<note tip>Como hemos cambiado las claves de ssh en el anterior paso, el ordenador lo detectará ​e igual tienes que eliminar la clave antigua en un fichero de tu sistema. En mac se soluciona poniendo en la terminal "nano /​Users/​TUUSUARIO/​.ssh/​known_hosts"​ y eliminando la linea de la ip de tu raspi</​note>​+<note tip>Como hemos cambiado las claves de ssh en el anterior paso, el ordenador lo detectará ​y a lo mejor tienes que eliminar la clave antigua en un fichero de tu sistema. En mac se soluciona poniendo en la terminal "nano /​Users/​TUUSUARIO/​.ssh/​known_hosts"​ y eliminando la linea de la ip de tu raspi</​note>​
   - Eliminar usuario pi: una vez reconectados por ssh eliminaremos el usuario pi con el siguiente comando: <​code>​sudo deluser --remove-home pi</​code>​   - Eliminar usuario pi: una vez reconectados por ssh eliminaremos el usuario pi con el siguiente comando: <​code>​sudo deluser --remove-home pi</​code>​
  
Línea 111: Línea 110:
   - Si quisieras eliminar un usuario puedes usar: <​code>​sudo mosquitto_passwd -D passwordfile USERNAME</​code>​   - Si quisieras eliminar un usuario puedes usar: <​code>​sudo mosquitto_passwd -D passwordfile USERNAME</​code>​
   - Sin salir del la carpera /​etc/​mosquitto modificaremos el archivo mosquitto.conf <​code>​sudo nano mosquitto.conf</​code>​   - Sin salir del la carpera /​etc/​mosquitto modificaremos el archivo mosquitto.conf <​code>​sudo nano mosquitto.conf</​code>​
-  - Para obligar a usar un usuario y especificar donde está el archivo de password añadimos las siguientes ​lineas ​al final del archivo <​code>​allow_anonymous false+  - Para obligar a usar un usuario y especificar donde está el archivo de password añadimos las siguientes ​líneas ​al final del archivo <​code>​allow_anonymous false
 password_file /​etc/​mosquitto/​passwordfile</​code>​ password_file /​etc/​mosquitto/​passwordfile</​code>​
  
Línea 141: Línea 140:
 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 toda la gestión y programación de tu sistema. 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 toda la gestión y programación de tu sistema.
  
-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, solo hay que lanzar: <​code>​bash <(curl -sL https://​raw.githubusercontent.com/​node-red/​raspbian-deb-package/​master/​resources/​update-nodejs-and-nodered)</​code>​+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: <​code>​bash <(curl -sL https://​raw.githubusercontent.com/​node-red/​raspbian-deb-package/​master/​resources/​update-nodejs-and-nodered)</​code>​
  
 ==== Securizando Node Red ==== ==== Securizando Node Red ====
-Node red por defecto no necesita usuario y contraseña,​ pero es muy importante por seguridad, por lo que instalaremos un complemento para que solo se pueda entrar después de autentificarse. Además utilizaremos https para que cuando trabajemos con nuestra interfaz de Node Red, toda la información viaje por nuestra red interna de manera cifrada.+Node red por defecto no necesita usuario y contraseña,​ pero es muy importante por seguridad, por lo que instalaremos un complemento para que sólo se pueda entrar después de autentificarse. Además utilizaremos https para que cuando trabajemos con nuestra interfaz de Node Red, toda la información viaje por nuestra red interna de manera cifrada.
   - Nos vamos a la carpeta de Node Red <​code>​cd ~/​.node-red</​code>​   - Nos vamos a la carpeta de Node Red <​code>​cd ~/​.node-red</​code>​
   - Ahora instalamos el complemento node-red-admin mediante npm <​code>​sudo npm install -g node-red-admin</​code>​ <note tip>​Puede que te salgan errores durante este paso, pero es normal y debería funcionar todo igual ^_^</​note>​   - Ahora instalamos el complemento node-red-admin mediante npm <​code>​sudo npm install -g node-red-admin</​code>​ <note tip>​Puede que te salgan errores durante este paso, pero es normal y debería funcionar todo igual ^_^</​note>​
-  - Generamos un hash con nuestro password de node red ( ejecuta, pon el password que quieras para Node Red y cuando te lo de cópialo para despues) <​code>​node-red-admin hash-pw</​code>​+  - 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) <​code>​node-red-admin hash-pw</​code>​
   - 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) <​code>​cd ~/​.node-red/​   - 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) <​code>​cd ~/​.node-red/​
 openssl genrsa -out privatekey.pem 1024 openssl genrsa -out privatekey.pem 1024
Línea 156: Línea 155:
   - Ahora modificaremos el archivo de configuración de Node Red <​code>​nano settings.js</​code>​   - Ahora modificaremos el archivo de configuración de Node Red <​code>​nano settings.js</​code>​
   - Busca y descomenta eliminando las dobles barras de: <​code>​var fs = require("​fs"​);</​code>​   - Busca y descomenta eliminando las dobles barras de: <​code>​var fs = require("​fs"​);</​code>​
-  - Busca y descomenta la siguiente sección, y despues ​coloca el nombre de usuario que quieras y el hash del password que copiaste antes <​code>​adminAuth:​ {+  - 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 <​code>​adminAuth:​ {
     type: "​credentials",​     type: "​credentials",​
     users: [{     users: [{
Línea 164: Línea 163:
            }]            }]
 },</​code> ​ },</​code> ​
-  - Busca, descomenta y modifica las siguientes ​lineas ​(sustituye USERNAME por el nombre de tu usuario de la raspi) <​code>​https:​ {+  - Busca, descomenta y modifica las siguientes ​líneas ​(sustituye USERNAME por el nombre de tu usuario de la raspi) <​code>​https:​ {
          key: fs.readFileSync('/​home/​USERNAME/​.node-red/​privatekey.pem'​),​          key: fs.readFileSync('/​home/​USERNAME/​.node-red/​privatekey.pem'​),​
          cert: fs.readFileSync('/​home/​USERNAME/​.node-red/​certificate.pem'​)          cert: fs.readFileSync('/​home/​USERNAME/​.node-red/​certificate.pem'​)
Línea 170: Línea 169:
   - Ahora comprobaremos que todas las modificaciones que hemos hecho funcionan, inicia Node red <​code>​node-red</​code>​   - Ahora comprobaremos que todas las modificaciones que hemos hecho funcionan, inicia Node red <​code>​node-red</​code>​
   - Cuando ponga algo como "​[info] Server now running at http://​127.0.0.1:​1880/"​ nos vamos a nuestro navegador y entramos en la dirección "​https://​192.168.0.XXX:​1880"​ sustituyendo para que apunte a la IP de nuestra raspi   - Cuando ponga algo como "​[info] Server now running at http://​127.0.0.1:​1880/"​ nos vamos a nuestro navegador y entramos en la dirección "​https://​192.168.0.XXX:​1880"​ sustituyendo para que apunte a la IP de nuestra raspi
-  - Que 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 :)+  - 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 ==== ==== 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. Solo tienes que ejecutar los siguientes comandos <​code>​sudo systemctl disable nodered.service+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 <​code>​sudo systemctl disable nodered.service
 sudo npm install -g pm2 sudo npm install -g pm2
 pm2 start node-red pm2 start node-red
guias/raspberry_iot.txt · Última modificación: 2019/01/19 19:02 por Alejandro Taracido