Raspberry: Hogar inteligente

Una Smarthome u hogar inteligente es una vivienda que tiene una serie de dispositivos para medir algunas cualidades del lugar y realizar acciones.

Por lo general estos dispositivos requieren de un HUB el cual se conecta a la red del hogar y estos kits pueden llegar a costar por lo menos 200 USD. Pero si lo que quieres es probar ideas de Smart Things en tu hogar no tienes que gastar tanto dinero.

Para empezar hice un sensor de movimiento, humedad y temperatura compatible con el HomeKit de Apple utilizando una Raspberry Pi. Utilice los siguientes componentes:

ComponentePrecio
Raspberry Pi 3B+ con fuente de energia$50 USD
Sensor de Temperatura y Humedad DHT11$2 USD
Sensor de movimiento HC-SR501$2 USD
Total: $54 USD

Hardware

Para conectar el sensor de humedad DHT11 a la Raspberry debe ser de la siguiente forma.

Esquema de conexion DHT11

Para conectar el sensor de movimiento HC-SR501

Esquema de conexión HC-SR501

Software

El sistema operativo que utilice fue Raspbian que puede ser instalado fácilmente mediante la herramienta NOOBS.

Tip: Para que no tengan que trabajar sobre la Raspberry pueden conectarse a ella mediante SSH o VNC primero deben activar el protocolo que deseen en las configuraciones de Raspbian.

Toda la programación la hice sobre NodeJS, se instala con los siguientes comandos.

curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
sudo apt install nodejs

Cuando tenemos la instalación de NodeJS lista podemos instalar los módulos.

Homebridge

El primer modulo es HomeBridge es un modulo escrito sobre NodeJS que brinda compatibilidad de cualquier dispositivo con Apple Homekit. Se instala y sus dependencias con el siguiente comando.

sudo apt-get install libavahi-compat-libdnssd-dev
npm install -g homebridge

Mosca

Mosca es un servidor MQTT por el cual se efectuara la comunicacion entre Homebridge y los dispositivos. Lo instalamos de la siguiente manera.

npm install mosca pino -g

Homebride MQTTthing

homebridge-mqttthing es un modulo para Homebridge que le permite soportar varios dispositivos mediante MQTT.

npm install -g homebridge-mqttthing

Codigo

Ahora crearemos una carpeta donde pondremos nuestro código. Yo le llamare smarthome.

En la terminal nos movemos a la carpeta de smarthome e instalamos los módulos para la comunicación con los sensores. onoff para el sensor de movimiento y node-dht-sensor para la humedad y temperatura y mqtt que nos sirve para enviar los mensajes al servidor mosca.

npm i onoff node-dht-sensor mqtt --save

En la misma carpeta de smarthome creamos un archivo llamado temperatura.js y tendra un código de la siguiente manera:

var sensor = require('node-dht-sensor');
var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://localhost')
setInterval(() => {
    sensor.read(11, 4, function(err, temperature, humidity) {
        if (!err) {
            client.publish('my/room/temperature',temperature.toFixed(1))
            client.publish('my/room/humidity',humidity.toFixed(0))
        } else {
            console.log(err)
        }
    });
}, 1000 * 13);

Con este código cada 13 segundos vamos a enviar una actualización sobre las medidas de temperatura y humedad.

Para el sensor de movimiento creamos un archivo llamado movimiento.js y le pegamos el siguiente código.

var gpio = require('onoff').Gpio;
var pir = new gpio(12, 'in', 'both');
var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://localhost')
pir.watch(function(err, value) {
    if (value == 1) {
        client.publish('my/room/pir', '1')
    } else {
        client.publish('my/room/pir', '0')
    }
});

Con este código enviamos una actualización cada vez que el sensor detecta movimiento en la habitación.

Por un momento nos vamos a la carpeta de homebridge. Si esta carpeta no existe aun, ejecuten el comando homebridge y luego CTRL + C para detener su ejecución.

cd ~/.homebridge/

En esta carpeta crearemos un archivo llamado config.json en el cual le diremos HomeBridge de donde sacar la información para los sensores.

{
    "bridge": {
      "name": "Homebridge",
      "username": "DD:7C:A6:26:A7:69",
      "port": 55555,
      "pin": "423-37-792"
    },
    "description": "This is an example configuration file. You can use this as a template for creating your own configuration file.",
    "platforms": [],
    "accessories": [
      {
        "accessory": "mqttthing",
        "type": "temperatureSensor",
        "name": "Temperatura",
        "topics":
        {
            "getCurrentTemperature": "my/room/temperature"
        },
        "history": true
    },
    {
      "accessory": "mqttthing",
      "type": "humiditySensor",
      "name": "Humedad",
      "topics":
      {
          "getCurrentRelativeHumidity": "my/room/humidity"
      },
      "history": true
  },
  {
    "accessory": "mqttthing",
    "type": "motionSensor",
    "name": "Movimiento",
    "topics":
    {
        "getMotionDetected": "my/room/pir"
    },
    "integerValue": true,
    "history": true
}
    ]
  }

Con esta configuración homebridge se conectara a mosca por defecto y comenzara a recibir información de los sensores.

Ahora volvemos a la carpeta de smarthome y ponemos a andar todo.

homebridge & $(mosca -v | pino) & node temperatura.js & node movimiento.js &

En la terminal le saldrá un codigo QR el cual pueden escanear con la App de HomeKit en su dispositivo iOS.

Si tienen todo bien configurado verán una pantalla como esta.

Si tienen alguna sugerencia o necesitan ayuda no duden en dejar un comentario y recuerden compartir el articulo a quien le pueda interesar seria de mucha ayuda!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *