I got a XIAO 7.5" ePaper Panel (early build) while it was on a flash sale from Seeed Studio. This is something you can make yourself, but I took the lazy route.
After playing with it for a little bit, I’ve got a nice battery powered eink display that shows a bunch of Home Assistant entities. I think it looks good and it replaces several of those LCD displays that come with temp probes.
When I first got it I thought I was going to have to build what’s displayed using YAML in ESPHome Builder, but then I read about the Puppet add-on and decided to give that a try instead. Much easier! You just have to create a dashboard in Home Assistant and get it to look right on the 800x480 B&W display. That was the hardest part; getting it to display nicely in B&W. After a bunch of card_mod changes, I got it to look pretty good. I’m still tweaking it, but I’m happy with what I have now.
The big unknown is battery life. They say it’ll last 3 months if you refresh every 6 hours. I’m refreshing every 30 mins, so I’m curious to see how long it last. The one draw back to this product is that there’s currently no way to see the battery status. From some reading, I’m pretty sure I can mod it to so battery status is available, but I’ll hold off on that for now. Hopefully the release version has battery status (it sounds like a fairly easy change).
I also changed the icons in the weather card to black and white icons. The default ones work, but sometimes multiple colors blend. I got the icons from icons8.com
Well done!, Looks great!
We all agree on the battery monitoring thing, and there are a few mod posters so, that’s good. I don’t see My “pirates” on the Baseball schedule though they don’t want that heat yet!
I’m hoping they do a color unit, that would be sweet, and PLEASE keep us posted on the battery consumption…
Sorry if this is a dumb question but it’s my first time working with ESPHome. You have posted two scripts. I know the first one goes in the YAML for the display. Where does the other one go? I assume it’s not the same place since you separated the scripts.
Are you using Home Assistant? One goes into ESPHome Builder (add-on) and is converted and loaded onto the display. The other is my Home Assistant dashboard YAML. The ESPHome YAML points to the URL for the dashboard in Home Assistant and renders the webpage to display on the device using Puppet.
If you don’t have any dashboards setup, go to Settings → Dashboards and select Add Dashboard. Then just click New dashboard from scratch. Give it a name and it’ll select show in side bar. You’ll now have the blank dashboard you created in the sidebar. Select it and then select the pencil on the right to edit it. Hit the pencil on the Home tab and then the Menu in the right corner. Select Edit in YAML and paste the YAML in. it Save. You’ll need to play with the dashboard to get the entities correct for your configuration.
You can also just build your own dashboard with the GUI tools provided or just edit the one I created after you paste in the YAML.
Duh. You put it in a dashboard. Sorry for being dense.
What are you using to screenshot the dashboard? I’m using hass-lovelace-screenshotter and it is producing a 600-448 image, whereas it looks like you set everything up for 800 x 480. There are parameters RENDERING_SCREEN_HEIGHT and RENDERING_SCREEN_WIDTH but when I change these I get the same size image as before.
Finally I see there is commented-out code for battery status. Does that work or is it still under development?
The device unfortunately does not allow battery tracking. The commented code was just a try, but the device lacks the hardware needed. It should be hackable to add, but I haven’t done it yet.
I’m having trouble with me Seeed Studio panel. Unforatunately, they have discontinued it so if it’s defective it’s back to the drawing board. Meanwhile I am working on the dashboard and almost everything is working except the sun icon is not showing up in the forecast. The other icons are, just not that one. I have ensured that it is in the folder. It has the same name as in the YAML section below. Any idea how to troubleshoot it?
Yes, it does. Weird. When I click that icon in file manager it appears so I don’t think the file is corrupt. But I got a similar sun icon from google images and it works
Everything is working now. Thanks for all your comebacks. Just one more question about the device YAML, if you don’t mind. I currently have the “deep sleep” section of the code commented out. If I uncomment it, does this mean the display will update once every 30 min? Shouldn’t this match the 300s/5 min update interval of the image? Or does the image update even if it’s in deep sleep?
I’m not sure what image you’re referring to that is 300s/5min?
If you don’t use the deep sleep, it will be constantly running and refreshing at the interval you specify in the “online_image” selection. My code is set to 20 secs. This would run down the battery pretty quick. I have it set to wake up every 30 mins (the deep_sleep section) and this seems to last about 1 month on battery.
I though there was a 5 mi refresh in there somewhere. Anyway, I uncommented the deep sleep code and reflashed it, and the image hasn’t updated since. It also looks like on my RPi5 its taking more than 20 sec between image refreshes. I guess I need to disable the deep sleep and see how long the update takes, and make sure the awake interval is long enough. Now I have to catch it when it’s awake.
Is anyone getting errors when accessing the image from Puppet? The screen was working for me during testing, and now I have tried to move it over to use a Lovelace Kindle Screensaver image it will not load any image. I have reverted back to Puppet but still it does not load.
[20:32:24][I][safe_mode:042]: Boot seems successful; resetting boot loop counter
[20:32:24][D][esp32.preferences:142]: Writing 1 items: 0 cached, 1 written, 0 failed
[20:33:44][I][online_image:109]: Updating image http://192.168.1.222:10000/f1-e-ink/0?viewport=800x480&eink=1
[20:33:48][D][online_image:175]: Starting download
[20:33:48][D][online_image:194]: Allocating PNG decoder
[20:33:48][I][online_image:212]: Downloading image (Size: 5536)
[20:33:48][W][component:407]: online_image took a long time for an operation (4689 ms)
[20:33:48][W][component:408]: Components should block for at most 30 ms
[20:33:48][W][component:407]: wifi took a long time for an operation (4694 ms)
[20:33:48][W][component:408]: Components should block for at most 30 ms
[20:33:48][D][online_image:089]: Allocating new buffer of 48000 bytes
[20:33:48][E][online_image:092]: allocation of 48000 bytes failed. Biggest block in heap: 31744 Bytes
[20:33:48][E][online_image.png:086]: Error decoding image: Incorrect PNG signature
[20:33:48][E][online_image:250]: Error when decoding image.
Strangely, I set the buffer to 30000 as per the example code in the OP, but it says it is allocating a new buffer. When I download the referenced image from the URL, it is 6kB in size.
Also when I use the Lovelace Kindle Screensaver addon I get a different set of errors. The image is already created in the background on my server, the XIAO display should just be accessing the image.
[20:41:58][I][safe_mode:042]: Boot seems successful; resetting boot loop counter
[20:41:58][D][esp32.preferences:142]: Writing 1 items: 0 cached, 1 written, 0 failed
[20:42:09][I][online_image:109]: Updating image http://192.168.1.216:5000
[20:42:19][D][esp-idf:000]: E (81219) esp-tls: [sock=58] select() timeout
[20:42:19][D][esp-idf:000]: E (81221) transport_base: Failed to open a new connection: 32774
[20:42:19][D][esp-idf:000]: E (81224) HTTP_CLIENT: Connection failed, sock < 0
[20:42:19][E][component:286]: http_request set Error flag: unspecified
[20:42:19][E][http_request.idf:127]: HTTP Request failed: ESP_ERR_HTTP_CONNECT
[20:42:19][E][online_image:154]: Download failed.
[20:42:19][W][component:407]: online_image took a long time for an operation (10022 ms)
[20:42:19][W][component:408]: Components should block for at most 30 ms
[20:42:19][W][component:407]: wifi took a long time for an operation (10027 ms)
[20:42:19][W][component:408]: Components should block for at most 30 ms
[20:42:20][E][component:313]: http_request cleared Error flag
The display did work initially, I have no idea what changed.