I have multiple dashboards around my apartment and they display different information depending on the context. Since this is placed near the front door, it contains concise information for what’s outside with a homey style to match the rest of the wall.
Home Assistant running on a Raspberry Pi as a remote server
Installation
No soldering is required since the e-Paper driver board was integrated into the ESP32 board. All I needed to do was to connect the e-Paper screen to the driver board, and then connect the driver board to the USB socket on my light switch.
Copy /fonts, /images, and weatherman.yaml to your /.config/esphome folder.
Integrate the content of sensor.yaml to your Home Assistant template configuration YAML file.
Install HA-GTFS-RT to your Home Assistant using HACS.
Once booted, flash weatherman.yaml the ESP32 board using ESPHome.
On yet another look, I just realized it is only one e-ink screen. My initial thoughts were that there were 4 e-ink screens there since you have them all in matching frames. duh. It looks nice having that stuff in frames. Good job!
This is amazing! Very nicely done. I had planed to do something similar with a 10" touch display, but your solution is much less invasive - and would be better accepted by my wife.
Thank you very much! Matching interior decors is always a +1 for me.
Please note that Waveshare Paper support on ESPHome maxes out at 7.8" displays. After that the resolution is too high unfortunately for ESP chips to handle.
Does this screen allow for partial refresh? Every time it refreshes, it keeps blinking the whole display.
This is a fantastic project and great inspiration, thanks for sharing.
I have just finished building mine with some minor changes through trial and error. The main difference is that it relies on data from custom weather entity which combines information from Met Office and Aqara Temperature Sensor (temp, humidity, pressure) fitted inside 3D printed Stevenson Screen attached to my fence. Here is my finished build:
This looks beautiful! I’m glad that you like the project and made it even better!
Looks like this will refresh every minute for the clock, correct? Let me know if the display stays ok after a few weeks. I suspect that my display has burn-ins because I was making it white on black instead of black on white like what you did.
Thank you. So far, I am not experiencing any problems with the display, but that was my concern, so I decided to invert it.
There are two more things I am planning to add to it as conditionals, warnings about strong wind and frost, last one based on thermal comfort component (very useful for gardeners).
Overall It is really cool and very useful project.
I build such display as well, very good WAF . Unfortunately got a very grainy picture. After trying different modes i decided to buy an additional epaper + driver (from dutch store tinytronics.nl where it was even cheaper than aliexpress) to figure out that the esp32 driverboards from china had a weak 3v3 powersupply. Connected a different esp32 board to the epd driver board and now all is well now i have to make a second display somewhere else
I added temperature & pressure trend, air transparency (visibility), UV Index, wind strength & wind direction, moon phase with moon rise and moon set, two conditional warning icons (frost, strong wind just beside Celsius). Lastly, the display now shows Wi-Fi connection strength for the esp32 and battery level of Aqara sensor located outside.
I was so hyped by this project that I ordered an e-paper display right away
After some french translation and changes of the original template, there is my finished build :
I added my plants water level, with a warning icon when the percentage is below 10%.
I also bought stuff online to build a DIY weather station, so I plan to add detailed weather data on a second page and use a zigbee button to switch between pages.
The two major issues that I encountered is that you can’t easily print multi-line text (I wanted to display news title from a custom RSS feed), and that in the display lambda function, you can’t iterate over a homeassistant sensor returning an array of values.
Overall it’s an awesome project, thank you for sharing it !
Hello theggz! This looks amazing and I’m glad you like it!
We found a major problem with e-ink screens. If you have the display using white on black instead of black on white, please reduce the refresh interval down to every few hours to preserve the screen quality.
Change the line
update_interval: 5min
to something like 3h since the information displayed on your screen does not need to be updated so frequently.
Not a problem, the code might need some clean-up though, but it works. The only issue I have is that I cannot compile the yaml if I am using secrets. ESPHome returns error, just change whatever needs to be changed to suit your needs. Oh, you would need to edit “weatherman” config to swap entitity names with yours.
UV index sensor comes with MET Office integration. I also need to change source for the wind speed . I just noticed Met Office provides separate sensors in its integration, but if I remember correctly these are disabled by default. You can easily be change the identity name in the code once activated.
Lastly, frost risk is based on your current temperature, frost point and absolute humidit, quite reliable. Easily available through Thermal Comfort custom integration (HACS):
If I missed something, let me know. Hope it works without any issues.
This is awesome, I actually picked up the hardware months ago and am just now getting round to doing the build.
I’m pretty new to this level of ESPHome, What I want to do is get calendars lists to display. essentially to do lists. But I’m not getting anything showing up yet.
Is this enough to just get the titles of two of the lists to display?
I get no errors in the logs, but im not even getting
WAITING FOR DATA
Should the screen flash or anything on boot?
globals:
- id: data_updated
type: bool
restore_value: no
initial_value: 'false'
- id: initial_data_received
type: bool
restore_value: no
initial_value: 'false'
# Include custom fonts
font:
- file: 'fonts/GothamRnd-Book.ttf'
id: font_small_book
size: 18
- file: 'fonts/GothamRnd-Bold.ttf'
id: font_large_bold
size: 108
glyphs: [' ', '°', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'C']
- file: 'fonts/GothamRnd-Bold.ttf'
id: font_title
size: 54
glyphs: ['W', 'E', 'A', 'T', 'H', 'R', 'L', 'I', 'N', ' ']
- file: 'fonts/GothamRnd-Bold.ttf'
id: font_medium_bold
size: 30
# glyphs: [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'M', 'I', 'N']
- file: 'fonts/GothamRnd-Bold.ttf'
id: font_small_bold
size: 18
# glyphs: ['°', '0', '1', +'2', '3', '4', '5', '6', '7', '8', '9', 'C', 'M', 'I', 'N']
# Check whether the display needs to be refreshed every minute,
# based on whether new data is received or motion is detected. (Thanks @paviro!)
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: 0
minutes: /1
then:
- if:
condition:
lambda: 'return id(data_updated) == true;'
then:
- lambda: 'id(initial_data_received) = true;'
- if:
condition:
binary_sensor.is_on: motion_detected
then:
- logger.log: "Sensor data updated and activity in home detected: Refreshing display..."
- component.update: eink_display
- lambda: 'id(data_updated) = false;'
else:
- logger.log: "Sensor data updated but no activity in home - skipping display refresh."
# Check if motion is detected in the bathroom.
binary_sensor:
- platform: homeassistant
entity_id: binary_sensor.bathroom_motion_sensor
id: motion_detected
# Call calender sensors from HA.
sensor:
- platform: homeassistant
entity_id: calendar.home_assistant_tasks
id: home_assistant_tasks
on_value:
then:
- lambda: 'id(data_updated) = true;'
- platform: homeassistant
entity_id: calendar.alexa_to_do_list
id: alexa_to_do_list
on_value:
then:
- lambda: 'id(data_updated) = true;'
- platform: homeassistant
entity_id: calendar.alexa_shopping_list
id: alexa_shopping_list
on_value:
then:
- lambda: 'id(data_updated) = true;'
# Define colors
# This design is white on black so this is necessary.
color:
- id: color_bg
red: 0%
green: 0%
blue: 0%
white: 0%
- id: color_text
red: 0%
green: 0%
blue: 0%
white: 100%
# Pins for Waveshare ePaper ESP Board
spi:
clk_pin: GPIO13
mosi_pin: GPIO14
# Now render everything on the ePaper screen.
display:
- platform: waveshare_epaper
id: eink_display
cs_pin: GPIO15
dc_pin: GPIO27
busy_pin: GPIO25
reset_pin: GPIO26
reset_duration: 2ms
model: 7.50inV2
update_interval: never
rotation: 90°
lambda: |-
// Fill background.
// it.fill(color_bg);
// Show loading screen before data is received.
if (id(initial_data_received) == false) {
it.printf(240, 390, id(font_small_bold), color_text, TextAlign::TOP_CENTER, "WAITING FOR DATA...");
} else {
// To Do List
it.printf(240, 84, id(font_title), color_text, TextAlign::TOP_CENTER, "To Do");
// Shopping List Section
it.printf(240, 408, id(font_title), color_text, TextAlign::TOP_CENTER, "Shopping List");
}
captive_portal: