¿Te gustaría tener un panel ePaper siempre a la vista para monitorear los valores medidos por un sensor de temperatura y humedad conectado a Home Assistant? En este proyecto te propongo que construyamos uno basado en el M5 Paper S3 de M5 Stack.
Introducción
El M5 Paper S3 de M5Stack es un dispositivo muy versátil y útil para crear proyectos de visualización de información. Gracias a su gran pantalla de papel electrónico y a su conectividad WiFi, puede utilizarse como un panel capaz de mostrar datos obtenidos desde diferentes fuentes.
En un artículo anterior te compartí un proyecto en el que se mostraban frases inspiradoras en la pantalla de un Paper S3. Las frases eran obtenidas del sitio Zen Quotes accediendo a su API REST. En el mismo artículo vimos que es una API REST, sus características básicas y algunos ejemplos, además de Zen Quotes.
En esta ocasión retomaremos una idea similar, pero con una aplicación orientada a la domótica. En lugar de obtener información desde un sitio web externo, nos conectaremos a una instalación de Home Assistant para pedirle los valores de algunos de los sensores que tiene bajo su control.
El objetivo será construir un panel sencillo para visualizar la temperatura y la humedad de un ambiente, aprovechando la pantalla ePaper del M5 Paper S3 como una interfaz clara, de bajo consumo y fácil de consultar de un vistazo.
El panel ambiental
En mi hogar tengo instalado Home Assistant, que utilizo para monitorear distintos tipos de sensores y también para controlar luces, tanto desde el dashboard como mediante automatizaciones.
Uno de esos sensores es un SONOFF SNZB-02P, encargado de medir la temperatura y la humedad de mi habitación. Si bien puedo consultar fácilmente estos valores desde el dashboard de Home Assistant, ya sea en la computadora o en el teléfono, la idea de este proyecto es usar la pantalla del M5 Paper S3 como un panel auxiliar para tenerlos siempre a la vista.
Un panel de estas características no reemplaza al dashboard de HA sino que lo complementa y permite una visualización más rápida. Además, dado que la pantalla del Paper S3 tiene muy bajo consumo y no es necesario actualizar los valores ambientales con tanta frecuencia, el panel puede funcionar de manera autónoma con su batería por varios dias sin necesidad de recarga. Gracias a esta autonomía, el panel puede trasladarse de un lugar a otro, para acceder a la información ambiental en cualquier momento y lugar.
En la imagen de abajo te muestro el panel ya terminado y funcionando y en las secciones que siguen te explicaré cómo funciona y cómo programarlo usando UIFlow 2 de una manera muy sencilla. La idea es que puedas construir el tuyo y adecuarlo a tu instalación de Home Assistant para monitorear distintos sensores en tu hogar.
El M5 Paper S3
Hace unos meses publiqué un artículo en el que analizaba las características y aplicaciones de este elegante y útil panel ePaper de M5 Stack. Por si te los perdiste, hago a continuación un breve resume. Si ya estás familiarizado con él, podés saltar esta sección y pasar a la siguiente para saber como conectarse a Home Assistant.
El M5 Paper S3 es un dispositivo compacto y versátil basado en una pantalla de papel electrónico de 4,7 pulgadas, con una resolución de 540 × 960 píxeles, 16 niveles de grises y panel táctil capacitivo. Estas características lo hacen ideal para proyectos donde se necesita mostrar información de forma clara, con buena legibilidad y bajo consumo.
Internamente cuenta con un módulo ESP32-S3R8, conectividad WiFi y Bluetooth, 8 MB de PSRAM, 16 MB de memoria Flash y ranura para tarjeta SD. Además, incorpora una IMU BMI270, un reloj de tiempo real BM8563, zumbador pasivo y una batería LiPo de 1800 mAh, lo que permite desarrollar aplicaciones portátiles e incluso wearables.
Otro punto interesante es su facilidad de montaje: incluye imanes traseros, orificios para tornillos y un gancho para colgarlo. También dispone de un conector de expansión en la parte posterior, que permite conectar sensores o módulos externos mediante dos GPIO disponibles.
Gracias a esta combinación de pantalla ePaper, conectividad inalámbrica, batería integrada y opciones de montaje, el Paper S3 resulta adecuado para construir paneles de información, etiquetas electrónicas, carteles y señalética inteligente, paneles de control para casas inteligentes o sistemas IoT, panel de turnos, calendario, toma de notas y hasta lector de ebooks.
Accediendo a Home Assistant
Home Assistant recolecta datos de los sensores del hogar a través de distintas vías e integraciones, para luego mostrarlos en dashboards o usarlos en automatizaciones para desencadenar alguna acción. Por ejemplo, prender una estufa a través de un enchufe inteligente si la temperatura de la habitación es demasiado baja y apagarla cuando llegó al valor de confort.
En el caso particular de mi sensor SONOFF la comunicación con HA se realiza mediante Zigbee. Sin embargo, independientemente de cómo lleguen los datos a Home Assistant, dentro del sistema la información se organiza en dispositivos y entidades.
Dispositivos y entidades
Cada sensor conectado a HA es un dispositivo. Pero, puede ocurrir que ese dispositivo mida mas de una variable. Por ejemplo, mi sensor SONOFF SNZB-02P mide temperatura y humedad. Entonces, es un único dispositivo pero tiene asociadas dos entidades: una que corresponde con el valor de la temperatura y otra asociada al valor de la humedad.
Para este sensor, las entidades tienen los siguientes identificadores en HA:
- sensor.ewelink_snzb_02p_temperature
- sensor.ewelink_snzb_02p_humidity
El panel visualizador con Paper S3 debe entonces “preguntarle” a Home Assistant por los valores de estas dos entidades. Cuando Home Assistant responda, el panel debe tomar esos datos y mostrarlos en su pantalla.
REST API
Existen varios mecanismos para que un dispositivo externo pueda solicitar información a Home Assistant: REST API, WebSocket API, MQTT, ESPHome y Webhooks. Cada uno tiene sus propias características, ventajas y desventajas.
Para este proyecto elegí utilizar la REST API, porque es un método simple de implementar, fácil de entender y, al mismo tiempo, suficientemente potente para la mayoría de las aplicaciones.
Para acceder a la REST API de Home Assistant debemos conocer su endpoint, que es la dirección o URL a la que debemos hacer las consultas. Revisando la documentación específica de la REST API, vemos que este endpoint tiene el siguiente formato:
http://IP_ADDRESS:8123/api/
Donde IP_ADDRESS es la misma IP que se usa para acceder al panel principal de la instalación de Home Assistant.
A ese endpoint se pueden enviar solicitudes HTTP empleando los métodos GET para consultar por el valor de una entidad, POST para fijar el valor de una entidad y DELETE para borrar una entidad.
Token
Para que el acceso a la REST API sea seguro y no pueda ser usado por otras personas, debemos acompañar las solicitudes con un token, una especie de clave que sirve para autenticarnos.
El token («Long-Lived Access Token» o «Token de acceso de larga duración») se debe crear en la página de perfil del usuario en el panel de administración de Home Assistant (http://IP_ADDRESS:8123/profile/security):
El token así generado debe enviarse en una cabecera «Authorization» junto a las solicitudes HTTP, acompañado del identificador «Bearer», que indica que es una clave de acceso temporal.
Solicitud GET
El formato general de una solicitud GET para obtener el valor de una entidad es, según la documentación de HA:
http://IP_ADDRESS:8123/api/states/<entity_id>
Donde <entity_id> es el nombre de la entidad que nos interesa.
La dirección IP (IP_ADDRESS) podemos obtenerla del panel de Home Assistant y es local a la red donde funciona Home Assistant y por lo tanto no puede ser accedida desde el exterior de esta red.
Veamos un ejemplo completo de una solicitud GET para obtener el valor de una entidad. Una forma sencilla de probar el formato es usando el comando curl de Windows (también puede usarse en Linux).
Para obtener el valor de la entidad sensor.ewelink_snzb_02p_temperature la solicitud tendría la siguiente forma (recuerda reemplazar «—token—» por tu token de larga duración obtenido en el panel de Home Assistant)
curl -H "Authorization: Bearer ---token---" -H "Content-Type: application/json" http://192.168.100.142:8123/api/states/sensor.ewelink_snzb_02p_temperature
Respuesta
Home Assistant responde a las solicitudes HTTP empleando el formato JSON, ampliamente utilizado para la transferencia de información en aplicaciones de IoT y domótica.
Para la solicitud anterior, la respuesta será la siguiente:
De una forma mas clara, la respuesta tiene este formato:
{
"entity_id": "sensor.ewelink_snzb_02p_temperature",
"state": "15.6",
"attributes": {
"state_class": "measurement",
"unit_of_measurement": "°C",
"device_class": "temperature",
"friendly_name": "Sensor temperatura y humedad Temperature"
},
"last_changed": "2026-06-13T15:16:51.164500+00:00",
"last_reported": "2026-06-13T15:16:51.164500+00:00",
"last_updated": "2026-06-13T15:16:51.164500+00:00",
"context": {
"id": "01KV0RX8TW26P47P638MBATP29",
"parent_id": null,
"user_id": null
}
}Esta respuesta tiene mucha información distribuida en distintos campos, como el nombre de la entidad, su valor, la unidad de medida, la última vez que cambió, etc. Para este proyecto tomaremos solamente el campo «state» que contiene el último valor de la entidad y es lo que mostraremos en el panel.
El programa
Está escrito en UIFlow2, la versión mas moderna del lenguaje de programación de bloques de M5 Stack, que es muy fácil de aprender e ideal para aplicaciones sencillas como la del panel.
Este es el programa completo, a continuación te lo explicaré parte por parte.


Interface
La interfaz de usuario (UI) es sencilla ya que el panel sólo muestra los datos que recibe de HA y no hay otra interacción.
Consta de 4 elementos:
- background: Es la imagen de fondo que le da un marco a la información presentada.
- label0: Valor de temperatura
- label1: Valor de humedad
- label2: Hora a la que se actualizaron los valores mostrados
La imagen de fondo fué creada con el auxilio de ChatGPT. Luego la convertí a un BMP de 16 colores con el clásico Paint y para reducir aún mas el tamaño del archivo la guardé en formato PNG.
El archivo correspondiente se debe cargar en la memoria del panel usando UIFlow donde dice Project Files
Para las etiquetas que muestran los valores de temperatura y humedad creé un nuevo font de tamaño 100, que también se guarda como archivo de proyecto en la memoria del panel.
Módulos extra
Además de los módulos que se encuentran por defecto en UIFlow2, agregué el módulo de software HTTP para hacer las solicitudes y el de hardware RTC para llevar correctamente la información de fecha y hora.
La función Setup
Recordemos que esta función corre sólo una vez, cuando el programa se inicia.
Al comienzo tiene la inicialización del hardware, del reloj de tiempo real (RTC) y la definición de la timezone, que es GMT-3 en mi caso pero debes cambiar según tu país.

A continuación se establece el brillo de la pantalla ePaper y los colores de frente y fondo de las label.

Luego se inicializa el WiFi y se intenta la conexión a la red, suministrando el SSID y el password correspondientes.

Si la conexión tuvo éxito, se hace una solicitud HTTP al endpoint de cada entidad, primero a la temperatura y luego al valor de humedad. Cada solicitud incluye el token de autorización dentro del header.
Si el status code devuelto por la solicitud es 200 (que significa que tuvo éxito), se pasa la respuesta en formato JSON a un mapa y se busca en ese mapa la clave state para recuperar el valor del sensor. Ese valor es asignado a la label correspondiente en pantalla.

Luego de actualizar la label, se llama a la función printTime para mostrar la hora de actualización en la parte inferior de la pantalla.
Luego de hacer las dos solicitudes y haber actualizado las dos label, se cierra la conexión con el servidor, se hace un retardo de 10 segundos y se va al modo de bajo consumo por 15 minutos. El retardo es útil para recuperar el control de la placa cuando se quiere cambiar el código, antes de que vaya de nuevo al modo de bajo consumo.

Desde luego puedes cambiar este valor según tus necesidades. En mis pruebas, con este valor de actualización el panel funcionó toda una semana sin recargar la batería.
La función printTime
Esta función imprime en la parte inferior de la pantalla la hora en la que se actualizan los valores del sensor, para saber cuando fué la última actualización.
Primero, recupera los valores de hora y minutos de la hora local. get local time devuelve una tupla en este orden: año, mes, día, dia del mes, hora, minutos, segundos y dia de la semana.

A continuación se hace un pequeño ajuste a los minutos: si su valor es menor a «10» se le añade un cero a la izquierda, para que no aparezca con un sólo digito (por ejemplo 12:08 en vez de 12:8).

Finalmente se concatenan los dos valores en un solo string con el símbolo «:» en el medio, para fijar el valor de la label2.

La función Loop
Al terminar la función setup se ejecuta loop en bucle, pero en este caso ya no queda nada por hacer, así que no contiene ningún bloque.

Conclusiones
En este artículo vimos cómo programar un panel para visualizar los valores de temperatura y humedad medidos por un sensor SONOFF SNZB-02P conectado a Home Assistant, utilizando como interfaz un M5 Paper S3.
Este dispositivo de M5Stack resulta muy adecuado para este tipo de aplicaciones, ya que integra en una sola unidad todo lo necesario para construir un panel autónomo: una pantalla ePaper de bajo consumo, conectividad WiFi y una batería que le permite funcionar durante largos períodos sin depender permanentemente de una fuente externa.
Antes de llegar al desarrollo del panel, repasamos algunos conceptos importantes de Home Assistant, como la diferencia entre dispositivos y entidades, y analizamos distintas formas de acceder a la información desde aplicaciones externas. Luego nos enfocamos en la REST API, viendo cómo realizar solicitudes HTTP mediante el método GET para obtener los valores de las entidades asociadas al sensor.
Finalmente, analizamos el código desarrollado en UIFlow2, revisando bloque por bloque su funcionamiento y cómo cada parte contribuye a obtener los datos desde Home Assistant y mostrarlos en la pantalla del M5 Paper S3.
De esta manera, el proyecto no solo permite construir un panel práctico para consultar la temperatura y la humedad de un ambiente, sino que también sirve como base para crear otras interfaces similares capaces de mostrar información proveniente de distintos sensores o entidades dentro de Home Assistant.
Espero que te haya sido de utilidad y hayas aprendido algo nuevo. Cualquier duda o sugerencia puedes dejarla mas abajo en la sección de comentarios ¡Nos vemos!












