Hay dos caminos para meter un Shelly EM en Home Assistant. La integración nativa lo detecta sola (por CoIoT en los Gen1), no pide YAML y conserva la app y la nube de Shelly: es la vía para la mayoría. MQTT tiene sentido si ya corres un broker, quieres toda la casa en MQTT o necesitas los topics para otro sistema. Es la que más dudas genera, y es la que desarrollamos.
Activar MQTT, y qué pierdes
En la web del equipo (su IP en el navegador): Internet & Security → Advanced — Developer Settings, activa MQTT, pon la IP del broker, usuario y contraseña, puerto 1883, y guarda. El prefijo por defecto es shellies/shellyem-<id>, donde <id> es la parte hexadecimal del identificador del equipo, visible en su web.
En el EM Gen1, activar MQTT desactiva la nube de Shelly. Pierdes el control remoto desde la app y el histórico de Shelly Cloud; en tu red y en Home Assistant todo sigue funcionando.
Qué publica, y en qué unidades
Cada medida tiene su topic bajo shellies/shellyem-<id>/emeter/<canal>/, con 0 y 1 para las dos pinzas:
| Topic | Qué es | Unidad |
|---|---|---|
power | Potencia activa | W |
reactive_power | Potencia reactiva | VAR |
voltage | Tensión | V |
total | Energía consumida acumulada, persiste a reinicios | Wh |
total_returned | Energía vertida acumulada, persiste a reinicios | Wh |
energy | Consumida desde el último arranque | W·min |
returned_energy | Vertida desde el último arranque | W·min |
Además, shellies/shellyem-<id>/online publica true/false con la conexión del equipo, y el relé se lee en relay/0 y se manda en relay/0/command con on, off o toggle.
La regla que importa: para contar energía, los acumulados en Wh —total y total_returned—, divididos entre 1000. Los de W·min se ponen a cero cada vez que el equipo arranca y están en una unidad que obliga a convertir dos veces: no sirven para llevar la cuenta.
Los sensores en Home Assistant
Tres sensores por canal: la potencia instantánea, para ver el consumo en vivo y para automatizaciones; y las dos energías, que son las que alimentan el Panel de Energía. Sustituye XXXXXX por el identificador de tu equipo:
mqtt:
sensor:
- name: "EM potencia"
state_topic: "shellies/shellyem-XXXXXX/emeter/0/power"
unit_of_measurement: "W"
device_class: power
state_class: measurement
availability_topic: "shellies/shellyem-XXXXXX/online"
payload_available: "true"
payload_not_available: "false"
- name: "EM energía consumida"
state_topic: "shellies/shellyem-XXXXXX/emeter/0/total"
value_template: "{{ (value | float / 1000) | round(3) }}"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
- name: "EM energía vertida"
state_topic: "shellies/shellyem-XXXXXX/emeter/0/total_returned"
value_template: "{{ (value | float / 1000) | round(3) }}"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
La combinación device_class: energy + state_class: total_increasing sobre un acumulado en kWh es lo que hace que Home Assistant lo ofrezca en el Panel de Energía y lo reparta por horas, días y meses. La energía consumida va como «consumo de la red» y la vertida como «devolución a la red». El availability_topic hace que, si el equipo se desconecta, los sensores salgan como no disponibles en lugar de quedarse congelados en el último valor. Repite el bloque con /1/ para la segunda pinza.
Errores frecuentes
- Usar energy en el Panel de Energía: se reinicia con cada arranque y está en W·min.
- Olvidar state_class: total_increasing: el sensor no aparece en el panel.
- Usar returned_energy para el vertido: mismo problema que energy; es
total_returned. - Contar con la app en remoto: en Gen1, MQTT y nube son excluyentes.
¿Y con un EM Gen3 o un Pro?
Los Gen2 y posteriores hablan MQTT con otra estructura, basada en RPC: con «Generic status update over MQTT» activado publican el estado completo de cada componente en JSON, en <prefijo>/status/em1:0, en lugar de un topic por magnitud. Además, en ellos MQTT y la nube conviven. Para esos equipos la integración nativa de Home Assistant (por WebSocket RPC) es aún más directa; MQTT queda para cuando lo quieres expresamente.
Preguntas frecuentes
¿Necesito un broker?
Sí. El EM publica y alguien tiene que recibir: Mosquitto, por ejemplo el add-on oficial de Home Assistant.
¿El EM mide el excedente solar?
Sí, mide en los dos sentidos: lo que viertes sale en total_returned, y es el dato que necesita el Panel de Energía para la devolución a la red.
Resumen: total y total_returned en Wh ÷ 1000, device_class: energy y state_class: total_increasing; power solo para el instante; y en Gen1, MQTT a cambio de la nube.