I Created an ePaper Home Assistant Touch Dashboard, and It’s Better Than Any Tablet

I recently built a 10 inch e-paper dashboard for my 3D printer using the new reTerminal E1003 from Seeed Studioand I was surprised at how much I loved it for what it was. It sat next to the printer, told me what I needed to know at a glance, and was otherwise an easy piece of technology to overlook. I liked it so much that I started thinking about other places where an always-on panel like this could earn its place, and the answer was obvious: a smart home. So I rebuilt the dashboard from scratch, pointing to Home Assistant instead.

The end result is a screen with lights, a media player, ambient temperatures, power monitoring, a wake-on-LAN button for my PC, and yes, the Bambu printer is still there, because I couldn’t bring myself to remove it. It has the same quirks with my ESPHome implementation, and the refresh rate won’t win any awards, but it works. Additionally, a wall shelf glows, dims, sleeps, wakes up and the brightness can be annoying. However, it does the exact opposite. It looks like real paper, consumes no power when idle, and no annoying glow or light comes out. The information is there, but it is there in the same way as a clock on the wall, and not in a way that gets in the way.

The smartest hardware for the home look at like smart home hardware. We’re talking plastic frames, status LEDs, glossy screens; the typical visual language of consumer electronics. The reTerminal E1003 I’m using here sits in an aluminum frame, with its matte e-paper panel that looks more like a picture frame or print than real technology. Seeed cites up to six months of battery life for these panels at low update intervals, and with its internal battery it’s likely can continue for several months if you simply update the display every two hours. Since this screen also supports touch, you can also use it as a deep sleep wake-up pin.

9/10

Brand

Seed Studio

Storage

32 MB

Processor

ESP32-S3

Memory

8 MB PSRAM memory

The reTerminal E1003 is a 10.3-inch ePaper display with 16 grayscale, ESP32-S3, temperature and humidity sensors, buzzer, microphone and optional aluminum frame. It’s powerful, really useful and looks fantastic.


Single panel, most controls I actually use

Lights, music, sensors and 3D printer

reTerminal E1003 showing smart home dashboard badge in footer

The dashboard is arranged in five rows on the E1003 1872×1404 panel of the reTerminal, and it is a plot of pixels to work with. The top of the screen is a header with a water leak indicator that I hope I never see go off. Below that is the media player row, with a placeholder where the album art should be, track and artist printed next to it, as well as three buttons for previous, play/pause and next. Below that is a row of three light buttons for bedroom, desk and bedside lamp, each inverts when the light is on so I can see the status at a glance.

The middle of the screen is reserved for sensors. Ambient temperature and humidity for the living room and bedroom on the left, then power consumption of my PC, network equipment and Proxmox server on the right, with total power in watts. The bottom row is the printer status block that I carried over from the original version, with the progress bar, status text, time remaining, and nozzle and bed temperatures. On the right is a wake on LAN button that allows me to start my computer without accessing it, connected to my computer. OPNsense.

Touch is handled by the GT911 controller, and when you press a transport button it triggers the corresponding Home Assistant action followed by a bounce-free redraw a second later. The reason for this delay is that Home Assistant takes between 100 and 500 milliseconds to return the new state to the panel, and the full refresh is incredibly slow with this driver. Redrawing inline would paint the old state for a split second or block the next click behind a refresh that hadn’t yet finished, while debounce allows the state to stabilize, groups all other sensor updates made into the same window, and only then triggers a refresh that displays everything correctly. It refreshes on a schedule, but it also only refreshes when you press a button.

The compromises are there, but they suit me

Refresh rate, color and input cost

reTerminal E1003 with touch controls, printer options and more

A full refresh of the E1003’s IT8951 controller currently takes about 15 seconds with the custom component I’m using; once it starts refreshing, this part is quick, but you’ll be waiting quite a while before it gets picked up in the first place. This is not a fault of the panel, but rather of the driver, and it is much faster with Seeed’s own firmware.

Color is the other obvious limitation. The E1003 is monochrome, and while there are now color e-paper options, they are quite slow, some are muted, and they are expensive. I really like that this display is monochrome, because you can use contrast and typography to handle most colors, and it also simplifies UI design.

On this point of cost, that’s one of the real limitations here. A 10-inch e-paper panel with a controller and bezel costs more per inch than an LCD, and it’s not really close either. The reTerminal E1003 will cost you around $160 for the screen alone, and the aluminum frame will cost you another $20. You’re paying extra for hardware, battery life, and looks, so if that’s right for you, then a setup like this makes sense for you.

You can also build one

It does not have to be the reTerminal E1003

XDA site displayed on reTerminal E1002
Credit:

The whole setup is a ESPHome YAML file, plus the same community component for the it8951_reterminal_e1003 driver that I used in the original version of the printer. The Home Assistant side is nothing exotic, just Bambu Lab integration for the printer, official Spotify integration for the media player, a Zooz Z-Wave device and Tuya sockets readable by ESPHome for the sensors. Unfortunately, the only thing I couldn’t work on was the album cover.

The plan was to uncover whatever was playing on Spotify via Home Assistant’s media_player_proxy endpoint, decode it into a one-bit frame buffer in PSRAM, and draw it alongside the track information. The online_image component of ESPHome is supposed to handle exactly this, and it must have enough free RAM to hold the image. However, the image was too large for ESPHome’s online_image component, which defaults to a maximum length of 64 KB. The solution is almost certainly to do the resizing on the Home Assistant side and provide the panel with a small pre-decoded image that it can swallow whole, but that’s a job for me in the future. So far, the media row reads the song and artist just fine, and there is a placeholder for where the cover should be.

I’ve published the YAML on GitHub if you want to check it out for yourself. It is designed specifically for and assumes the layout of the reTerminal E1003, but the template would translate to any ePaper panel supported by ESPHome. This includes the smaller E1001 if you want to use it on a smaller device, but you’ll need to remove the touch component. Either way, the whole point of automating your home is that you shouldn’t have to look at it, and this is the kind of technology that allows me to do just that.