Obligatory WeatherFlow e-ink Display

Very nice! I was originally just running the script via crontab and every so often I would find that the screen was not updating. Setting it up as a service has been [knock on wood] extremely reliable. I’m super happy it all worked out for you! It’s cool to see other people enjoying the display :slight_smile:

Hopefully going forward I’ll have some new options to be able to toggle between meme mode and a standard mode. I’ve started writing it, just need the time to finish it - currently working on an e-ink AQI display so my free time is pretty thin. The github will be updated with v1.4 once I get it all done, I’d hope by the end of summer.

1 Like

I eventually switched my variant to running from cron every 5 minutes. That better handles cases where the network etc. fails to respond, as well as places where I didn’t handle errors or missing data well enough. Basically if it crashes, I get a blank screen til it runs again in 5 minutes. While there have been cases where the pi zerow hangs, I just unplug/plug the power in and it self-heals.

And yes I stashed a copy of /home/pi just.in.case. doing so eventually corrupts the SD card :slight_smile:

Here’s a sneak peek at the AQI screen!

After a lot of thought, I decided that I was going to combine weather and AQI into a single screen. That introduced a challenge as there just isn’t a lot of real estate on the 7.5" standard definition screen. For the 2.0 combined screen I settled on the 1200x825, 9.7inch E-Ink display from Waveshare. Much of the things I have been wanting to do with the original screen I have baked into the new.

A true Meme Mode is coded in to easily enable or disable memes based on preference. This includes IT HECKIN WIMDY, a vectored Ron Paul “IT’S HAPPENING” for Thundersnow, the Angry Sun from Mario Bros 3 world 2 when it’s miserably hot out, and a simple, yet straight forward skull and crossbones for dewpoints 76+ with a condition report of “Death”. In this global settings area, I have also simplified tokens and URL entries.

The error screen has been completely rebuilt from the ground up to be more fun. Sure, I could make that a Meme Mode item, but ideally you shouldn’t see it very often.

More importantly, there is more data. I’m a sucker for that. I now have solar metrics, 2 days of forecasts, AQI, and pollution counts (waiting on the CO2, that’s why it reads 0). Lightning, rainfall, and NWS alerts work the same as they did previously.

Without further ado :slight_smile:

I will have this on GitHub once it’s done. I’m close, just not 100%. I’m still sorting out ways to get more data from NWS - looking specifically into the SPC. Hope you guys approve!

3 Likes

Excellent, those are some great improvements!

I’m a little sad though, I was very nearly wrapping up my project when I somehow snapped the SD card. I lost everything, all the changes and tweaks are not recoverable.

So I’m rebuilding again and, of course, I’m having all sorts of new problems because I didn’t write all my steps down that I took the first time. So now, for some reason, the ‘pillow requests’ aren’t working because the program can’t find the PIL module.

I suspect I’ve gone wrong somewhere in the order in which I created the virtual environment for Python modules. I think I was meant to have this whole program run in the Virtual folder, but I can’t remember now. :persevering_face:

I’ve got the new version completed for the 7.5" screen. I’ve been running it for about a month to make sure I don’t run into any unforeseen issues. The new one will have a lot of the lessons learned from the 9.7" screen build integrated. Mainly, I’ve fixed quite a few logic items, the T-Rex error screen makes an appearance, easy toggle of meme-mode, and a much more clear setup at the top of the script.

If you get stuck rebuilding, DM me and I’ll do my best to get you up and running. Most of the things required are in the Waveshare documentation, just a handful of tweaks after that to be pretty solid.

I think I’m going to re-flash the Raspberry Pi OS, and do just that. I suspect I picked up some extra steps along the way in my fussing and basically got lucky that it worked. Thank you for the offer to take a DM from me, I may need the help a bit later.

Did you even have to do anything with the virtual environment business? I can’t say I completely understand it apart from being a way to keep custom Python modules from interfering with the OS modules.

I do have virtual environments to separate python on other devices, but for the weather display I just run stock python with the OS. Going into the virtual environment, running pip, all that is way too much overhead for a small project like this. Basically you’d create the virtual environment from a directory using the venv command. Once it’s all configured, you’d need to activate/deactivate the virtual environment in order to manage it.

I had a hunch I was over-complicating things.

I published the new build last night for the 7.5” screen so if you rebuild you can grab the newest version :+1:

1 Like

I got the virtual environment warning when trying to install Pillow and Requests. It could have created this environment as I did last time and it might have worked, but I ended up using this command and it seems to install okay and doesn’t require breaking anything.

sudo apt install python3-pil python3-requests

Looks good. All you should need to install is in the documentation for the screen https://www.waveshare.com/wiki/7.5inch_e-Paper_HAT_(B)_Manual#Working_With_Raspberry_Pi

Check out the python section - should be quick and easy :grinning_face:

I don’t know how I missed that, but I got it to work. I’m tempted to restart my process, but I think I’ll keep moving forward. I only missed two libraries that I can easily add now.

I guess at least I understand how to install Python modules for the system now. So I’ve got that going for me.

One note, I got this message when I ran the program manually.
DeprecationWarning: textsize is deprecated and will be removed in Pillow 10 (2023-07-01). Use textbbox or textlength instead.

Yeah I’ve been working on that. Most of the text centering has been replaced with text box, however, rain and NWS notices are not updated. I’m using the text width to shift the icons dynamically based on what’s on screen. I’ll eventually get those 2 resolved with newer methods, the icon is what is complicating it for me.

Well, thanks to an uncanny sense of how to screw up even the easiest task, clumsy hands, and a touch of perseverance, it’s now working. I feel like I should take an ISO of the SD card, but I did take much better notes this time.


This was the latest build as of July 21, 2025. At least this is what downloaded.

I’d share my enclosure design, but it’s overly complicated, difficult to assemble, and maybe most importantly, it uses a custom frame which I wish I hadn’t gone with.

2 Likes

Looks great!

I did find an annoyance in the new code that should probably be commented out or removed. If the feels like differential there is code that triggers a fire icon, snowflake icon, or skull and crossbones. Well that skull and crossbones is not tied to meme mode and if meme mode is enabled it is a duplicate of the condition of dew point >=76. I’ll update the code tonight on Git, just wanted to give you a heads up that I found that. I’ll write it in a way that it only triggers that if meme mode is off, if on it will not display.

1 Like

I’ll take a look at the code when you’re done and can easily update it on-the-fly. I’ll keep a local copy too for safe-keeping.

It was way easier to address than removing it. Line 339 just needs to add “memes = 0 and” in the elif statement. I made this change to Git already.

This is one of those deprecated text width statements. I’ll figure something out with those, maybe I’ll have some free time in the next couple weeks again.

1 Like

Oh that’s seems super easy. I’ll make that change today and it’ll get picked up on the next restart.

I’m an idiot.. That line should read memes == 0. You’ll get a failure otherwise. Fixing that on Git now.

The good news is I’m on board with the Meme mode. :grinning_face_with_smiling_eyes:

1 Like