
En este artículo, discutiré cómo construí un sistema de automatización del hogar inteligente con Angular y Node.js en una Raspberry Pi sin depender de ningún servicio externo en la nube.
Intro
Durante los últimos días, pasé algunas noches diseñando y desarrollando un sistema de domótica basado en JavaScript, con el uso de Angular y Node.js. Y, como con cualquier otro proyecto, la planificación implicó una investigación profunda en Internet.
Resultó que hay muchos peces en el mar, muchas soluciones sobre cómo implementar un sistema de automatización del hogar. Algunos ofrecen servicios de pago en "la nube" y otros explican cómo crear uno propio utilizando una tecnología llamada MQTT.
Ninguna de las soluciones tenía sentido para mí. Todas las opciones eran caras o tenían implementaciones inconvenientes o incluso fallas de seguridad.
Pero, antes de continuar, expliquemos qué es MQTT. MQTT son las siglas de MQ Telemetry Transport . Es un protocolo de mensajería de publicación / suscripción, extremadamente simple y ligero. MQTT está diseñado para dispositivos restringidos y redes de bajo ancho de banda, alta latencia o poco confiables.
Los principios de diseño son minimizar el ancho de banda de la red y los requisitos de recursos del dispositivo mientras se intenta garantizar la confiabilidad y cierto grado de garantía de entrega. Estos principios también hacen que el protocolo sea ideal para el mundo emergente de dispositivos conectados de “máquina a máquina” (M2M) o “Internet de las cosas”, y para aplicaciones móviles donde el ancho de banda y la energía de la batería son muy importantes.

¿Por qué no estaba convencido de usar MQTT o de ninguna de las soluciones que encontré en Internet? Dos razones:
- Si bien la tecnología MQTT parece muy conveniente para los dispositivos de IoT, todavía pensé que era innecesaria. El sistema que mostraré en el siguiente tutorial opera en el mismo medio donde viven los dispositivos IoT. Todos los beneficios que MQTT tiene por ser “rápido” y tener “bajo ancho de banda” se vuelven irrelevantes. Además, existe toda la molestia que implica su implementación y toda la sobrecarga adicional con los paquetes npm adicionales que se requieren para que funcione en un entorno JavaScript. En su lugar, usaré solo bibliotecas genéricas de JavaScript y Node.js, ¡nada más!
- ¿Qué pasa con la parte de seguridad? Bueno, no soy un gran admirador de “la nube” o la computación en la nube en general. En algunos casos puede ser muy beneficioso, pero en la mayoría de los casos simplemente es innecesario. Piénselo: ¿por qué tendría un servicio que se requiere para controlar sus electrodomésticos y que esté alojado en otro lugar en "la nube" y no en su propia red?

Se podría pensar que “la nube” brinda la posibilidad de acceder a sus electrodomésticos desde cualquier parte del mundo a través de Internet.
Pero piense en esto: cuando su red doméstica no tiene conexión a Internet, "la nube" se vuelve redundante. Más importante aún, aún puede hacer que su sistema de automatización del hogar sea accesible desde Internet mediante el reenvío de puertos, incluso si está alojado en su red local.
Fue entonces cuando "hizo clic" para mí, y pensé en alojar todo el sistema en una Raspberry Pi y mantenerlo en mi red local.

La tecnología
- Software: la razón por la que elegí Angular y Node.js es porque están basados en JavaScript y ya estoy familiarizado con ellos. Después de todo, quería diseñar y desarrollar una aplicación web progresiva que se comunicara con mis dispositivos de IoT a través de HTTP, y JavaScript ofrecía toda la funcionalidad que necesitaba.
- Hardware: El sistema funciona con microcontroladores como Arduino Uno / Mega / Du / MKR1000, Adafruit HUZZAH CC3000 y cualquier otro microcontrolador con conexión WiFi. Estoy usando el ESP8266 como componente base para mi sistema de automatización del hogar. Es un microchip WiFi de bajo costo con capacidad de microcontrolador. ¡Tiene todo lo que necesito y por un precio económico! Por último, necesitamos alojar el sistema en algún lugar de nuestra red local, entonces, ¿qué es mejor que la Raspberry Pi?
Este no será un tutorial de codificación en el que profundice en la codificación, ya que este proyecto es de código abierto y lo publicaré todo en GitHub. Solo demostraré cómo implementar su propio sistema de automatización del hogar y seguiré cada paso. Si eres un desarrollador, bifurca el repositorio e involúcrate en mejorarlo.
La puesta en marcha
Calculo que llevará unos 40 minutos finalizar toda esta configuración más el tiempo que pase en línea buscando soluciones para los errores de instalación.
¿Qué se necesita?
Se requiere una Raspberry Pi. En mi ejemplo, estoy usando una Raspberry Pi 3, pero debería funcionar con la mayoría de las versiones. Los componentes necesarios son:
- Tablero Raspberry Pi
- Tarjeta microSD (se recomienda una clase 10 con 16 GB o más)
- Un lector de tarjetas USB MicroSD o un adaptador de tarjetas SD
- Monitor HDMI y un teclado USB (solo se requiere temporalmente para el primer arranque de la Raspberry Pi)
- Cable Ethernet (no es necesario para Raspberry Pi 3 ya que tiene WiFi integrado)
Instalación del sistema operativo Raspbian en Raspberry Pi
Raspbian es un sistema operativo gratuito basado en Debian Linux y está optimizado para Raspberry Pi.
Recomiendo la versión sin cabeza "LITE". No tiene un entorno de escritorio ni una interfaz gráfica de usuario, y se puede acceder a él de forma remota desde una computadora o dispositivo en la misma red a través de SSH. Mantenemos las cosas simples ya que esta es la única forma en que vamos a acceder a la Raspberry Pi. La versión LITE tiene toda la funcionalidad que buscamos.
- Descargue la última imagen de Raspbian del sitio web oficial de Raspberry Pi.
- Actualice la imagen del sistema operativo Raspbian a la tarjeta SD con Etcher o cualquier otro software de grabación de imágenes del sistema operativo de su elección.
Configurar la Raspberry Pi
Para que la Raspberry Pi esté lista para arrancar, necesitamos:
- Inserte la tarjeta MicroSD en la Raspberry Pi
- Conecte el teclado USB y el cable HDMI
- Conecta el cable Ethernet o si tienes una Raspberry Pi 3 y quieres usar WiFi deberías configurar la red en la siguiente sección
Cuando la Raspberry Pi haya terminado de iniciarse, inicie sesión con nombre de usuario pi
y contraseñaraspberry
Habilitar WiFi y conectarse a la red
Omita este paso si eligió conectarse con un cable Ethernet.
- Abra el archivo de configuración "wpa-supplicant"
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
2. agregue lo siguiente en la parte inferior del archivo mientras agrega su nombre de wifi y contraseña:
network={
ssid="your_networks_name" psk="your_networks_password"
}
3. Presione Ctrl+X
para guardar el código. Confirmar con Y
luegoEnter
4. Reinicie la Raspberry Pi con el siguiente comando:
$ sudo reboot
Habilitar SSH y cambiar el nombre de usuario y la contraseña
Ahora que la Raspberry Pi está conectada a Internet, se recomienda cambiar la contraseña predeterminada.
- Abra la herramienta de configuración Raspberry Pi y haga clic en la segunda opción "Cambiar contraseña de usuario" y siga las instrucciones
$ sudo raspi-config

2. Seleccione la opción 5 "Opciones de interfaz" y luego active SSH
3. Reinicie la Raspberry Pi. Cuando esté activo, tendrá SSH habilitado y estará listo para acceder de forma remota desde su computadora de escritorio
$ sudo reboot
Configurar el acceso remoto a la Raspberry Pi
Ahora, finalmente, la parte en la que instalamos el software requerido en la Raspberry Pi. Esta parte se puede ejecutar directamente en el Pi a través del terminal usando un monitor HDMI y un teclado USB. Para mayor comodidad, y dado que habilitamos la conexión SSH remota, nos conectaremos desde otro entorno de escritorio. Esta es la mejor y más sencilla forma de acceder y controlar de forma remota la Pi siempre que se necesiten cambios y configuraciones.
Entonces, básicamente, así es como puede acceder a la interfaz de línea de comandos de una Raspberry Pi de forma remota desde otra computadora o cualquier dispositivo en la misma red usando SSH. Esto se puede hacer de dos maneras:
- Usando el símbolo del sistema o PowerShell (estoy usando Windows en una computadora de escritorio), reemplácelo con su nombre de usuario y dirección IP
$ ssh [email protected]
Si no conoce la dirección IP, escriba “ hostname -I"
en la línea de comando de Raspberry Pi.

2. El segundo método consiste en utilizar un programa cliente como PuTTY o cualquier otrosoftware SSH cliente en funcionamiento. Aquí tienes una guía sencilla para usar PuTTY.
Instalación del software necesario en Raspberry Pi
Antes de instalar cualquier cosa, se recomienda actualizar el sistema operativo y los paquetes de Raspberry Pi. Hacer esto con regularidad lo mantendrá actualizado.
- Actualice la lista de paquetes del sistema con el siguiente comando:
$ sudo apt-get update
2. Actualice todos sus paquetes instalados a su última versión:
$ sudo apt-get dist-upgrade
3. Descargue e instale la última versión de Node.js:
// To download$ curl -sL //deb.nodesource.com/setup_8.x | sudo -E bash -
// To install$ sudo apt-get install -y nodejs
// Check if the installation was successful:$ node -v
4. Instale la CLI de Angular globalmente:
$ npm install -g @angular/cli
5. Instale el sistema de control de versiones de Git:
$ sudo apt-get install git
Instalación de la base de datos (MongoDB)
Necesitamos una base de datos para almacenar los usuarios registrados y sus credenciales. Estos son los pasos necesarios:
- Instalar MongoDB
$ sudo apt-get install mongodb
2. Inicie el proceso de MongoDB
$ sudo service mongodb start
3. Inicie el mongo Shell
$ mongo
3. Cree una base de datos llamada "smarthaus"
$ use smarthaus
En MongoDB, la base de datos predeterminada es prueba. Si no creó ninguna base de datos, las colecciones se almacenarán en la base de datos de prueba.
Instalación de Smart Haus
1. Verifique el directorio de trabajo actual usando este comando:
$ pwd
/* It will probably print "/home/pi" where "pi" is the current user directory */
Se recomienda clonar el repositorio del proyecto en el directorio de usuarios de pi, pero puede navegar a otro lugar si está seguro.
2. Clone el repositorio desde:
$ git clone //github.com/ameer157/smarthaus.git
Asegúrese de navegar dentro del directorio usando:
$ cd smarthaus
Antes de instalar cualquier paquete npm usando "npm install", consulte la guía npm para corregir los permisos y aprender cómo corregir los errores " EACCESS " que pueda encontrar durante la instalación. Esto es muy importante ya que evitará cualquier error de permiso npm y le permitirá instalar paquetes globalmente sin usar sudo. No se recomienda el uso de sudo con npm y debe evitarse .
3. Instale todos los paquetes necesarios para el proyecto:
$ npm install

Iniciando el servidor Node.js
Antes de iniciar el servidor, debemos construir el proyecto utilizando la herramienta CLI de Angular. Y por último, configuramos la Raspberry Pi para que ejecute el servidor siempre que se inicie.
- Construye el proyecto usando:
$ ng build --prod
2. Edite el rc.local
archivo usando nano
:
$ sudo nano /etc/rc.local
3. Agregue lo siguiente en la línea antes de exit 0
salir y guarde el archivo:
su pi -c 'cd /home/pi/smarthaus/backend && sudo node server.js > log.txt &'

¡El servidor Node.js ya está listo! Se ejecutará en cada inicio del sistema y guardará los registros en el mismo directorio en un archivo "log.txt".
Ejecútelo ahora y veamos si funciona con este comando:
$ sudo node server
El sistema ahora es accesible desde cualquier dispositivo en su red a través de la dirección IP de Raspberry Pi.
Por favor, continúe y bifurque este proyecto y participe en el desarrollo de las piezas que faltan.
El fin
Conseguimos un sistema de automatización del hogar que funcione de forma segura en una Raspberry Pi en nuestra red local sin el uso de "la nube" o el servidor de otra persona.




¿Mi Raspberry Pi junto a mi Fingbox y mi enrutador en la sala de estar?

Espero que hayas disfrutado leyendo
Por favor siguey compartir para más cosas tecnológicas?
