Como empezar con home assistant: el servidor


Home Assistant se presenta como una plataforma de domótica de código abierto diseñada para centralizar el control y la gestión de dispositivos inteligentes en el hogar, independientemente de la marca o protocolo que utilicen. Uno de sus aspectos más importantes es que funciona localmente dentro de la red doméstica, lo que garantiza la privacidad y el control total del usuario sin depender de servicios en la nube y evitando posibles filtraciones de información. Esta característica lo convierte en una opción muy atractiva para quienes valoran la seguridad de sus datos y desean mantener su hogar inteligente autónomo y confiable.

La plataforma es compatible con una enorme variedad de dispositivos, abarcando desde bombillas, termostatos y cámaras, hasta sensores, persianas y electrodomésticos, integrando tecnologías como Zigbee, Z-Wave, Wi-Fi o Matter, y con soporte para asistentes de voz populares como Alexa y Google Home.

Dispositivos compatibles con Home Assistant

Para ampliar tu instalación es recomendable buscar dispositivos con soporte nativo en Home Assistant o vía Zigbee2MQTT o Z-Wave, además de aprovechar la integración oficial de Alexa para control por voz y sincronización con dispositivos compatibles.

Así, Home Assistant puede centralizar una gran cantidad de dispositivos compatibles con Alexa y otras marcas, permitiendo gestión local sin depender siempre de la nube y mayor capacidad para automatizaciones avanzadas.​

Algunos de los dispositivos compatibles:

  • Home Assistant puede integrar dispositivos de muchas marcas y tecnologías: Zigbee, Z-Wave, WiFi, Bluetooth, Matter, etc. Algunos ejemplos populares incluyen Sonoff, Aqara (sensores, interruptores), IKEA Tradfri (bombillas y enchufes), Tuya, Moes, Shelly, Nanoleaf, entre muchos otros.
  • Dispositivos de domótica como sensores de movimiento, sensores de puerta/ventana, cámaras, termostatos, persianas, enchufes inteligentes, y más pueden ser gestionados desde la plataforma.
  • Existen integraciones oficiales y comunitarias para cientos o miles de dispositivos, lo que permite un control local o en la nube según la preferencia.

También es posible la integración de HA con Alexa:

  • Home Assistant puede integrarse con Alexa para aprovechar sus capacidades de control por voz y sincronizar dispositivos.
  • Sin embargo, Alexa no expone todos sus dispositivos directamente a Home Assistant, sino que Home Assistant puede exponer algunos dispositivos para controlarlos por Alexa.
  • Muchos dispositivos que funcionan en Alexa también tienen integración nativa o vía complementos en Home Assistant, por lo que se pueden controlar ambos sistemas en paralelo y hacer automatizaciones más complejas en Home Assistant.

En definitiva y a modo de resumen estos son los tipos de dispositivos comunes integrables (además de Philips Hue) mas comunes:

  • Bombillas inteligentes (IKEA Tradfri, TP-Link Tapo, Govee, LIFX)
  • Enchufes y relés inteligentes (Aqara, Shelly, Sonoff)
  • Sensores de movimiento, humedad, temperatura (Aqara, Sonoff)
  • Termostatos inteligentes (Ecobee, Nest, Honeywell)
  • Cámaras IP (con integración ONVIF o marcas compatibles)
  • Cerraduras electrónicas, persianas y motores de cortinas
  • Sistemas de climatización (aire acondicionado y calefacción)
  • Altavoces inteligentes y dispositivos multimedia (Alexa, Google Home, Sonos)

El servidor HA

Y ahora que hemos hablado de los dispositivos domóticos compatibles toca hablar de una pieza clave sin la cual no es posible HA: el servidor. Para empezar con Home Assistant, la elección del servidor depende de varios factores como la escala del proyecto, el presupuesto, el rendimiento deseado y la facilidad de mantenimiento.

Algunas opciones comunes para el servidor Home Assistant:

  • Raspberry Pi (especialmente la Pi 4 o Pi 5):Es la opción más popular para principiantes. Su tamaño compacto, bajo consumo eléctrico y suficiente potencia para la mayoría de las instalaciones de hogar hacen que sea ideal para empezar. Home Assistant OS se puede instalar fácilmente y la comunidad ofrece abundante soporte para Raspberry Pi. Asimismo, puedes utilizar almacenamiento USB o SSD para mejorar la velocidad y confiabilidad frente a la tarjeta SD clásica. Sin embargo, para proyectos muy grandes o con muchas integraciones intensivas, puede quedar limitada. Ademas el precio no es precisamente su gran baza pues la version 5 ronda los 100€ sin fuente ni SD , aunque hay que reconocer que integra un hardware muy a la altura ( procesador quad-core a 2.4GHz, 64-bit Arm Cortex-A76,GPU VideoCore VII, con soporte OpenGL ES 3.1 y Vulkan 1.2,Dual-band 802.11ac Wi-Fi,Bluetooth 5.0 / Bluetooth Low Energy (BLE),microSD card slot, con soporte para el modo de alta velocidad SDR104 y 2 puertos USB 3.0, cada uno soportando hasta 5Gbps simultáneamente).
raspberry pi 5
  • PC o Mini PC dedicado: Ofrece una potencia de procesamiento superior, ideal para instalaciones grandes o si quieres correr otros servicios junto a Home Assistant, como servidores multimedia, bases de datos o máquinas virtuales. Un mini PC con un procesador Intel i5/i7 o AMD Ryzen, 8 GB o más de RAM y SSD es recomendado para un rendimiento fluido y margen para ampliaciones futuras. También evita problemas típicos de la Raspberry Pi como el desgaste de tarjetas SD y tiene mejor conectividad de red y USB.​ Hoy en dia se pueden adquirir minipc’s por un precio razonable de 139€ (por ejemplo el BMAX Mini PC 8 GB LPDDR4 128 GB eMMC W-11 Pro B1Pro Gemini Lake N4000 hasta 2,6 GHz con pantalla Dual Admite 4K HDMI, WiFi 2,4G/5G, Bluetooth 4.2 PC doméstica Computadora de Oficina PC).
  • Servidor dedicado/Home Assistant Box (como Home Assistant Yellow o Green): Son dispositivos optimizados y diseñados específicamente para ejecutar Home Assistant con un buen balance entre rendimiento, facilidad de uso y estabilidad. Son plug-and-play, pero suelen tener un coste mayor comparado a Raspberry Pi o PCs reutilizados. Son una opción cómoda si prefieres evitar configuraciones manuales complejas y desde luego es la opción mas económica sobre todo si se adquiere en mercados orientales.​

A continuación un resumen comparativo de los pros y contras de cada opción:

ParámetroRaspberry PiPC/Mini PC dedicadoServidor dedicado Home Assistant Box
PotenciaModerada (ideal proyectos pequeños y medianos)Alta (proyectos grandes, multiuso)Media-alta (optimizado para HA)
Consumo energéticoBajoMedio (depende del equipo)Bajo-medio
Facilidad de usoAlta (gran comunidad y documentación)Media (requiere conocimientos)Muy alta (plug-and-play)
ConfiabilidadBuena, aunque tarjeta SD puede desgastarseMuy alta (SSD, hardware robusto)Alta, hardware testeado
PrecioModeradoVariable (puede ser alto)Moderado a bajo

El análisis sobre consumo eléctrico y precio entre Raspberry Pi, Mini PC y Home Assistant Box muestra lo siguiente:

Consumo eléctrico

  • Raspberry Pi 4/5: Consume alrededor de 5 a 7 vatios en uso típico, ligeramente más si se usa con SSD externo.
  • Mini PC de bajo consumo (ej. Intel N100): Consume aproximadamente entre 6 y 15 vatios, dependiendo del modelo y carga. Por ejemplo, el Intel N100 tiene un TDP oficial de 6W, pero el consumo real puede estar cerca de 10-15W promedio.
  • Home Assistant Box (como Home Assistant Yellow): Suelen tener un consumo similar o incluso inferior al de un Mini PC, diseñado específicamente para eficiencia. El consumo típico se sitúa en torno a 5-10 vatios.

Precio

  • Raspberry Pi 5 con accesorios: El costo puede superar los 160€ considerando placa, fuente, caja, tarjeta SD o SSD.
  • Mini PC de gama media: Un modelo como el Beelink Mini S12 Pro está sobre los 180-200€, pero incluye procesador más potente, 16GB RAM y SSD rápido.
  • Home Assistant Box: Puede ser más económico que una Raspberry Pi 5 completa con accesorios. Por ejemplo, Home Assistant Yellow o Green puede costar menos y venir optimizado para la función, aunque con menor capacidad de expansión que un Mini PC.

Aunque el servidor Home Assistant Box puede parecer más económico en compra inicial que una Raspberry Pi equipada descatalogada, esta última es muy popular por su versatilidad y comunidad amplia. El Mini PC ofrece mejor potencia y almacenamiento rápido, con un consumo eléctrico razonable, pero a un coste ligeramente mayor. En eficiencia energética, Home Assistant Box y Raspberry Pi están bastante igualados, ambos con consumos muy bajos ideales para estar siempre encendidos.

Así, el Home Assistant Box puede ser la opción más económica y eficiente en consumo si la prioridad es un equipo dedicado exclusivo para Home Assistant, mientras que Raspberry Pi o Mini PC proporcionan más flexibilidad y potencia según necesidades futuras y presupuesto.​

Recomendación

Lo verdaderamente poderoso aparte de la privacidad y carácter abierto radica en su capacidad para personalizar automatizaciones avanzadas, permitiendo que diferentes dispositivos interactúen entre sí según condiciones específicas, horarios o eventos, facilitando la vida diaria y optimizando el consumo energético. Además, la interfaz amigable y multiplataforma facilita su manejo desde dispositivos móviles o navegadores web, adaptándose a distintos niveles de usuario

Para empezar de forma sencilla y económica si ya cuentas con el hw, la Raspberry Pi 4 o 5 es ideal y suficiente. Si tu proyecto crece o quieres usar otras aplicaciones en el mismo equipo, un mini PC dedicado con Linux o Proxmox será mejor. Si prefieres una solución sencilla y optimizada, un servidor dedicado Home Assistant Box es recomendado.

Así, la elección depende de tus necesidades de rendimiento, presupuesto y el grado de control o simplicidad que busques.​

Monitor de Co2 con sensor mh z19


¿Alguna vez se ha preguntado por qué a menudo se siente somnoliento o incluso cansado por la mañana después de dormir toda la noche? Hay muchas cosas que pueden provocar un sueño de mala calidad,   pero   dada la grave pandemia  al que nos estamos exponiendo  desgraciadamente, también  hay otra razón  contundente: una mayor  exposición a  agentes virulentos al no  estar suficientemente ventilado la estancia .

En efecto , ambas casuísticas citadas  se deben a una concentración inadecuada de dióxido de carbono (CO2) puesto que las personas emiten dióxido de carbono durante la respiración , lo  que implica que   la concentración de CO2 es uno de los principales factores que afectan la calidad del aire y con ello   la exposición a agentes infecciosos.

Por estas razones según los científicos  apuntan que puede ser interesante contar con  un medidor de CO2 para comprender si la concentración de CO2 en nuestro entorno  como afecta la calidad del aire.

Una concentración menor de 800 ppm se considera adecuada, aunque lo ideal es que ronde las 500 ppm. A partir de 800 ppm salta la alerta ya que la ventilación es deficiente, lo que facilita en gran medida la permanencia del virus en el aire, de tal forma que su capacidad de transmisión puede prolongarse durante varias horas.

Estos medidores se pueden comprar ya montados, pero  no dispondremos ningún nivel de mejora ni personalización ni interacción  y los de bajo coste además ofrecen muy poca precisión ,  por lo que vamos a  ver como construir  un medidor real para que entendamos como funciona y de paso podemos pensar en futuras mejoras .

 

La elección del sensor

En un prototipo puede que se vea tentado en usar  sensores del tipo  MQ135 , un sensor de calidad de aire barato) , que detecta NH3, NOx, alcohol, benceno, humo, CO2  y que hemos visto en numerosos proyectos en este blog.

Este  tipo sensores  son  módulos listo para usar para Arduino y Raspberry Pi  gracias a su doble salida analogica   y digital  (para el uso con laRPi se requiere un convertidor AD adicional a no ser que solo necesite la señal de haber superado el umbral  ajustable de disparo de la señal digital ,pero para Arduino la conexión es directa ). 


Los sensores de la serie MQ utilizan un pequeño elemento calefactor con un sensor electrónico-químico por lo que son sensibles a una amplia gama de gases y son adecuados para su uso en interiores. Es cierto que  tienen una alta sensibilidad y un tiempo de respuesta rápido, pero tardan unos minutos en dar lecturas precisas porque el sensor tiene que calentarse.

Estos sensores son  muy fáciles de de usar para medir la concentración de GLP, i-butano, propano, metano, alcohol, hidrógeno y humo en el aire, midiendo concentraciones de gas de 100 a 10000 ppm   siendo ideal para la detección de fugas de gas, alarmas de gas u otros proyectos de robótica y microcontroladores. 

Según el fabricante  en general este tipo de sensores tienen relativa poca precisión incluso después de aplicar la corrección de temperatura y humedad. Además  suelen  tener  un alto consumo de energía (800 mw) y un tiempo de precalentamiento  excesivo lo cual son bastantes inconvenientes para abandonarlo y probar con otro  tipo de sensor.

Hay bastantes sensores de CO2 en el mercado de precios muy variados: MG811 (~ 40 $), MH-Z14 WINSEN (~ 40 $), MH-Z19 WINSEN (~ 30 $), K-30 (~ 85 $), VERNIER CO2-BTA ( ~ 330 $).

Los  sensores de CO2 NDIR (infrarrojo no dispersivo) son el   tipo de sensor más común utilizado para medir el CO2, pues  tienen buena precisión y bajo consumo de energía aunque los precios son muy variados.

Un ejemplo de sensor NDIR es el sensor MH-Z19 tiene buenas características y muy buen precio, así que puede ser una buena opción.  Aquí algunos parámetros técnicos del sensor MH-Z19 :

Tensión de trabajo   4,5 V ~ 5,5 V CC
Corriente media   <85 mA
Nivel de interfaz   3,3 V
Rango de medición   0 ~ 5% VOL opcional
Señal de salida   PWM, UART
Tiempo de precalentamiento   3min
Tiempo de respuesta   T90 <90 s
Temperatura de trabajo   0-50C
Humedad de trabajo   0 ~ 95% de humedad relativa
Peso   15 g
Esperanza de vida   > 5 años
Dimensión   57,5 × 34,7 × 16 mm (largo × ancho × alto)

Este sensor e pequeña escala de uso general  utiliza el principio infrarrojo no dispersivo (NDIR) para detectar la presencia de CO2 en el aire, con buena selectividad y dependencia anaerobia, larga vida y cuenta con compensación de temperatura incorporada y al mismo tiempo  salida en serie, salida analógica y salida PWM. Además, tiene un precio contenido (en amazon unos 14€)

Hay varias  variantes de este sensor con diferentes rangos de medición:

  • 0 ~ 10000 ppm
  • 0 ~ 2000 ppm
  • 0 ~ 5000 ppm

Una opción interesante es la primera porque el modelo B es el más extendido y fácil de conseguir,  si bien  un nivel de CO2 superior a 2000 ppm no sería apropiado para un ambiente doméstico. 

Puede ser interesante montar un dispositivo móvil para poder medir el nivel de CO2 donde quiera dentro del hogar , puesto que como el voltaje de trabajo del MH-Z19 es de 4.5 ~ 5.5V DC, puede usarse la salida USB standard  o simplemente  3 baterías AA ) como fuente de alimentación.

 

Respecto a la visualización de los datos una pantalla OLED LCD 0.96 «I2C IIC SPI Serial 128X64 (en amazon unos 9€)  es una buena opción pues  es muy fácil usarla con nuestro Arduino  gracias a la conexión I2C , y claro las librerías gratuitas para Arduino

Para  poderla usar en nuestro proyecto , es importante tener en cuenta que necesitaremos  la biblioteca de controladores oled Adafruit SSD1306

Respecto al conexionado , no puede ser más sencillo, pues conectaremos la alimentación   del sensor ,la pantalla  y nuestro  arduino  a través de un interruptor al polo positivo de   un portapilas de 3 pilas de 1.5V. Obviamente  complementaremos las conexiones de VCC  con las  masa (0v) conectando el  polo negativo del portapilas a las conexiones de 0v del sensor ,la pantalla  y nuestro  arduino.  

El montaje se complementará con las conexiones de datos  del  sensor MH-Z19    y de la pantalla , conectando la salida PWM del  sensor digital  al pin 7 (pin digital 7) de Arduino ,  y las conexiones de datos I2C  de la pantalla a los pines  SDA( pin 19)   y   pin SCL(pin 18) de nuestra placa Arduino. 

 

Este  es el resumen de elementos básicos de  hw para hacer este pequeño proyecto:

  • Sensor de co2 infrarrojo MH-Z19 (en amazon unos 14€)
  • Arduino Pro Micro  ( o cualquier otra placa Arduino que disponga)
  • Pantalla OLED LCD 0.96 «I2C IIC SPI Serial 128X64 (en amazon unos 9€)
  • Soporte de batería 3 AAA 1.5V 
  • Interruptor

Implementación

Necesitaremos lo siguientes elementos software para implementar este proyecto

Respecto al   proyecto, cuyo código Arduino al completo podemos ver más abajo , de forma  simplificada  este es   su funcionamiento: 

Primero importamos las librerías  para el control de la  pantalla I2C

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

A continuación definiremos las variables, empezando definiendo el pin 7 para el pwm para el sensor de Co2,  constantes, etc   destacando el valor del precalentamiento para el sensor de co2  cuyo valor es de 120 segundos

#define pwmPin 7        
int preheatSec = 120;
int prevVal = LOW;
long th, tl, h, l, ppm = 0;

Ahora veremos la  parte esencial , cuya principal ocupación es proporcionar el valor de la medida de C02 en la variable ppm 

void PWM_ISR() {
long tt = millis();
int val = digitalRead(pwmPin);

if (val == HIGH) {
if (val != prevVal) {
h = tt;
tl = h - l;
prevVal = val;
}
} else {
if (val != prevVal) {
l = tt;
th = l - h;
prevVal = val;
ppm = 2000 * (th - 2) / (th + tl - 4);
}
}
}

Otra  función  importante es la inicialización de la pantalla OLED , que  conseguiremos al introducirla en la función setup

void setup() { 
Serial.begin(115200);
pinMode(pwmPin, INPUT);
attachInterrupt(digitalPinToInterrupt(pwmPin), PWM_ISR, CHANGE);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
display.setTextColor(WHITE);
}

Dado el intervalo de precalentamiento , es interesante una función que presente la cuenta atrás para que el usuario sea consciente de que es necesario esperar ese intervalo:

void displayPreheating(int secLeft) {
display.setTextSize(2);
display.println("PREHEATING");
display.setTextSize(1);
display.println();
display.setTextSize(5);
display.print(" ");
display.print(secLeft);
display.display();
}

Obviamente tampoco nos puede faltar la visualización del nivel de ppm , que solo se mostrará si es superior  a 1000 ppm ( obviamente podemos ajustar este umbral al valor que deseemos).

void displayPPM(long ppm) {
display.setTextSize(2);
display.println("CO2 PPM");
display.setTextSize(1);
display.println();
display.setTextSize(5);
if (ppm < 1000) {
display.print(" ");
}
display.print(ppm);
display.display();
Serial.println(ppm);
}

Finalmente en el bucle principal  básicamente  borraremos la pantalla y mostraremos la  cuenta atrás  del precalentamiento para finalmente mostrar el nivel de ppm  cada 1000ms.

void loop() { 
display.clearDisplay();
display.setCursor(0,0);
if (preheatSec > 0) {
displayPreheating(preheatSec);
preheatSec--;
}
else {
displayPPM(ppm);
}
delay(1000);
}

 

Para terminar, IhorMelynk nos ofrece el código fuente para Arduino que el mismo cargó en su Arduino:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

#define pwmPin 7

int preheatSec = 120;
int prevVal = LOW;
long th, tl, h, l, ppm = 0;

void PWM_ISR() {
long tt = millis();
int val = digitalRead(pwmPin);

if (val == HIGH) {
if (val != prevVal) {
h = tt;
tl = h - l;
prevVal = val;
}
} else {
if (val != prevVal) {
l = tt;
th = l - h;
prevVal = val;
ppm = 2000 * (th - 2) / (th + tl - 4);
}
}
}

void setup() {
Serial.begin(115200);
pinMode(pwmPin, INPUT);
attachInterrupt(digitalPinToInterrupt(pwmPin), PWM_ISR, CHANGE);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
display.setTextColor(WHITE);
}

void displayPreheating(int secLeft) {
display.setTextSize(2);
display.println("PREHEATING");
display.setTextSize(1);
display.println();
display.setTextSize(5);
display.print(" ");
display.print(secLeft);
display.display();
}

void displayPPM(long ppm) {
display.setTextSize(2);
display.println("CO2 PPM");
display.setTextSize(1);
display.println();
display.setTextSize(5);
if (ppm < 1000) {
display.print(" ");
}
display.print(ppm);
display.display();
Serial.println(ppm);
}

void loop() {
display.clearDisplay();
display.setCursor(0,0);
if (preheatSec > 0) {
displayPreheating(preheatSec);
preheatSec--;
}
else {
displayPPM(ppm);
}
delay(1000);
}

 

Teniendo esto en cuenta, a la hora de mantener el contacto social los espacios al aire libre se presentan como la mejor alternativa. En espacios cerrados la ventilación es fundamental. No es suficiente con abrir las ventanas 10 minutos cada hora. La ventilación debe ser constante. Por supuesto, en ambos casos la mascarilla sigue siendo un elemento de protección esencial.