Home Assistant + MQTT + ESP32 es la combinación definitiva para domótica local: tus datos no salen de tu red, no dependes de ningún servidor externo y las automatizaciones funcionan aunque no tengas internet.
Arquitectura del Sistema
- ESP32: sensor o actuador → publica/suscribe a topics MQTT
- Broker MQTT (Mosquitto): corre en Raspberry Pi o en el mismo Home Assistant
- Home Assistant: recibe los datos y crea dashboards + automatizaciones
Instalar Broker Mosquitto en Home Assistant
En Home Assistant: Ajustes → Complementos → Tienda de complementos → Mosquitto Broker → Instalar → Iniciar. Luego en Ajustes → Dispositivos e integraciones → MQTT para configurar la integración. Usuario y contraseña se crean en el complemento Mosquitto.
Código ESP32 con PubSubClient
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
const char* SSID = "TuWiFi";
const char* PASS = "TuContraseña";
const char* MQTT_IP = "192.168.1.100"; // IP de Home Assistant
const char* MQTT_USER = "mqtt_user";
const char* MQTT_PASS = "mqtt_pass";
DHT dht(4, DHT11);
WiFiClient espClient;
PubSubClient mqtt(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(SSID, PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
mqtt.setServer(MQTT_IP, 1883);
mqtt.connect("esp32-salon", MQTT_USER, MQTT_PASS);
}
void loop() {
if (!mqtt.connected()) mqtt.connect("esp32-salon", MQTT_USER, MQTT_PASS);
mqtt.loop();
float t = dht.readTemperature();
float h = dht.readHumidity();
if (!isnan(t)) {
mqtt.publish("salon/temperatura", String(t).c_str());
mqtt.publish("salon/humedad", String(h).c_str());
}
delay(30000);
}
Configuración en Home Assistant (configuration.yaml)
mqtt:
sensor:
- name: "Temperatura Salón"
state_topic: "salon/temperatura"
unit_of_measurement: "°C"
device_class: temperature
- name: "Humedad Salón"
state_topic: "salon/humedad"
unit_of_measurement: "%"
device_class: humidity
Automatización de Ejemplo
En Home Assistant puedes crear una automatización que encienda un ventilador (via relay ESP32) cuando la temperatura supera 28°C: cuando sensor temperatura salón > 28 → activar switch ventilador. Todo corre localmente, en milisegundos, sin latencia de internet.