Eastron SDM120 con ESPHome: medir consumo por RS485 sin nube (YAML)

Para leer el Eastron SDM120 desde ESPHome conecta el puerto RS485 del medidor a un ESP32 a través de un MAX485 y usa la plataforma `sdm_meter`. Si tu variante no responde, `modbus_controller` te deja leer cada registro a mano. Aquí están el cableado, el YAML y lo que conviene comprobar antes de compilar.

Publicado el 27/09/2026 · Última revisión: 27/09/2026
Medidor eléctrico en carril DIN junto a la instalación doméstica

Este artículo es información general de instalación, no un consejo eléctrico prescriptivo. Si vas a tocar el cuadro, corta la corriente o deja el trabajo a un electricista. Aquí se describe el cableado de la parte RS485 y de bajo voltaje, no la acometida del medidor.

Qué mide el SDM120 y por qué interesa leerlo desde ESPHome

El Eastron SDM120 es un contador de energía monofásico con salida Modbus RTU. Publica tensión, corriente, potencia activa, factor de potencia, frecuencia y energía importada/exportada. Si lo integras con ESPHome, los datos quedan en Home Assistant y no dependen de la app de nadie: todo se lee en tu red local.

El modelo SDM120M usa el carril DIN y mide a través de la conexión directa; el SDM120CT mide mediante pinza. Si tu objetivo es monitorizar, no facturar, el CT suele ser más cómodo de instalar sin tocar la acometida. Los registros Modbus son parecidos, pero no asumas que son idénticos entre revisiones.

Material necesario

Medidor eléctrico y caja de fusibles en una pared blanca
El SDM120 va en carril DIN, normalmente junto al cuadro eléctrico. La foto es de contexto y no muestra el modelo exacto. Foto de Akashni Weimers en Pexels

Cableado RS485 entre SDM120, MAX485 y ESP32

La secuencia de pines que doy aquí sigue la configuración publicada por esp32.co.uk para el SDM120M: RO al RX del ESP32 (GPIO16 en su ejemplo), DI al TX (GPIO17) y DE/RE juntos al pin de control de flujo (GPIO4). Si tu ESP32 usa otros GPIO, cámbialos en los dos lados, no solo en el YAML.

Conexionado RS485 con un ESP32 (ejemplo sobre GPIO16/17/4)
SDM120 (puerto RS485)MAX485ESP32
A (+)A—
B (−)B—
—ROGPIO16 (RX)
—DIGPIO17 (TX)
—DE y RE unidosGPIO4 (flow_control_pin)
—VCC5 V
—GNDGND

El bus A/B es diferencial: no lo juntes con GND ni lo pases por una breadboard larga si puedes evitarlo. Un par trenzado corto reduce los errores de lectura.

Baud rate: 2400 o 9600 depende de tu unidad

La guía de esp32.co.uk fija 2400 como valor habitual del SDM120M, con 9600 como alternativa si tu medidor está configurado así. La etiqueta del fabricante y el manual de tu revisión son lo que manda; si no ves datos en Home Assistant tras compilar, cambia `baud_rate` antes que sospechar del cableado. Sin confirmar a fecha de 27/09 para todas las variantes Eastron: no hay un único valor universal.

YAML primero: `sdm_meter`, el camino corto

ESPHome incluye la plataforma `sdm_meter` para contadores Eastron. Cuando tu medidor sigue el mapa de registros estándar, esto es todo lo que necesitas:

uart:
  id: modbus_uart
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 2400
  stop_bits: 1
  parity: NONE

modbus:
  id: modbus_bus
  uart_id: modbus_uart
  flow_control_pin: GPIO4

sensor:
  - platform: sdm_meter
    address: 1
    voltage:
      name: "Tensión red"
    current:
      name: "Corriente"
    active_power:
      name: "Potencia activa"
    frequency:
      name: "Frecuencia red"
    total_import_energy:
      name: "Energía importada"
    total_export_energy:
      name: "Energía exportada"

El `flow_control_pin` gestiona DE/RE: ESPHome lo pone en marcha al transmitir. El `address` es la dirección Modbus del contador; si has cambiado la suya, cámbiala aquí.

YAML de emergencia: `modbus_controller` para leer un holding register

Si tu SDM120 tiene un mapa de registros distinto (o quieres leer solo un valor concreto sin depender de la plataforma dedicada), usa `modbus_controller`. El esqueleto es este:

uart:
  id: modbus_uart
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 2400
  stop_bits: 1
  parity: NONE

modbus:
  id: modbus_bus
  uart_id: modbus_uart
  flow_control_pin: GPIO4

modbus_controller:
  - id: sdm120
    address: 1
    modbus_id: modbus_bus
    update_interval: 10s

sensor:
  - platform: modbus_controller
    modbus_controller_id: sdm120
    name: "Holding register ejemplo"
    register_type: holding
    address: 0x0000
    value_type: U_WORD

La dirección `0x0000` es un ejemplo genérico de holding register, no la dirección de tensión del SDM120. Consulta la hoja de datos de tu revisión para saber qué registro corresponde a cada magnitud, o quédate con `sdm_meter` si la plataforma dedicada te funciona. El tipo `U_WORD` se usa para registros enteros sin signo de 16 bits; si el valor viene en otro formato, ajústalo al tipo documentado por Eastron.

Cómo verificar que la lectura funciona

Tras compilar y flashear, mira los logs del dispositivo. Si la comunicación es correcta, verás los sensores creados y valores que cambian. Si aparece `Modbus timeout` o valores constantes, revisa en este orden: baud rate, A/B invertidos, y que el pin DE/RE esté realmente en el GPIO declarado.

En Home Assistant los sensores aparecerán con los nombres que pusiste y con `device_class` apropiado para integrarlos en el panel de energía. Enlaza la energía importada al contador de la red y tendrás el consumo local histórico sin pasar por ninguna nube.

Fuentes consultadas

Cambios de esta pieza

  • 27/09/2026: primera versión. Verificado contra esphome.io, esp32.co.uk y modbusmanager.com. Direcciones de registro y baud rate por lote marcados como dependientes de la revisión del medidor.