I built a small wall panel for my home cinema room: temperatures at a glance, one-tap light control, and a dimmed clock screen that acts as a screensaver. It runs entirely on ESPHome (LVGL) and talks to Home Assistant over the native API, with no cloud and no custom component.
The UI is designed visually in SquareLine Studio and compiled to ESPHome YAML through a short build pipeline, so restyling the screens doesn’t mean hand-editing hundreds of lines of widget config.
Links
- GitHub - full config (MIT)
- Board - Waveshare product page
- 3D-printed enclosure on MakerWorld
- SquareLine to ESPHome converter : GitHub - gpambrozio/SquarelineToEsphome · GitHub
Screenshots
Hardware
- Waveshare ESP32-S3-Touch-LCD-4.3: 800x480 RGB, capacitive touch (GT911), CH422G IO expander, 16 MB flash, octal PSRAM
- Sensirion SHT3x on I2C for local cinema temperature and humidity
- A PIR module wired to the CH422G digital input for presence wake
What it does
- Dashboard screen: outdoor / cinema / dining-room temperatures, plus a 6-tile light grid. Each tile shows live on/off state (icon colour, driven by Home Assistant text sensors) and calls a service on tap. Tile 6 is a red “all off”.
- Screensaver screen: large clock, date and cinema temperature on a near-black background; the temperature colour shifts from blue to green to red with the value. Tap anywhere to go back.
- Presence logic: after 60 s idle it switches to the screensaver, after 80 s the backlight turns off; a touch or a PIR trigger wakes it. Two counters (seconds since boot, seconds at last touch) drive the whole state machine in a 1 s interval.
- Cinema temperature is also published over MQTT for other consumers.
The SquareLine to ESPHome pipeline
1. Design the UI in SquareLine Studio (the .spj file is in the repo).
2. Convert it with SquarelineToEsphome (thanks to gpambrozio).
3. A short post_process.py script patches the result: it removes the top-level lvgl key so the file can be included, restores accented labels, remaps fonts, injects the Material Design Icons glyphs per tile, and adds the clickable and on_click homeassistant.action handlers.
4. esphome run.
A single .bat file, plus a set of VS Code tasks, runs the whole chain.
Notes and open points
- On-screen text and Home Assistant entity names are in French; config comments and docs are in English. The entity IDs in the repo are mine, so adapt the sensor and text_sensor blocks and the actions list in post_process.py to your setup.
- Feedback welcome, especially on the sleep/wake logic and on making the light grid more configurable.


