PyWeather 3(.5)
PyWeather 3 is the successor to PyWeather 2, an experiment to make an e-ink weather display. It displays current conditions in detail, indoor environmental monitoring data, along with hourly and daily forecast data.
PyWeather 3 has been running for over 5 years, usually hanging out by my front door, mounted on a Raspberry Pi 3A. In 2025, MBTA arrival times were added to the screen in place of a next-hour forecast. In 2026, PyWeather 3 was upgraded to 3.5 with the introduction of the larger Inky Impression 7.3 inch screen, allowing for more data to be shown & a longer hourly/daily forecast row.
Every day (or adventure) usually starts by checking PyWeather 3 before I get dressed so I can figure out what to wear. It’s a habit now, and this screen is here to stay for the long run!
—
Timeframe: January 2021 - present
This is the present UI of PyWeather 3.5. The rest of this page will have screenshots showing the UI iterations of PyWeather 3 as the years went on.
From the top left: current conditions show the temperature, feels like, sunrise/sunset times, and when the screen was last refreshed. This data is fed by Beacon Hill Weather, but falls back to Apple WeatherKit if the station is down.
Next to that is the first column of extra data, showing wind speed, precip chance, cloud cover, and rainfall chance.
The next column is sourced from Beacon Hill Weather: UV Index, Dew Point, AQI, and today’s rainfall/snowfall. This column is hidden when data is being fetched from WeatherKit.
Next is the indoor data fetched from the How Hot API - indoor temp, dew point, humidity, pressure, and AQI.
Below that is the hourly summary and the next 3 departures in either direction from Charles/MGH. Icons show if a train is new or has 4 cars, and will show how many stops away the train is if it is stopped.
The bottom two rows are dedicated to hour-by-hour and day-by-day forecasts. The hourly row shows temp, wind speed, and precip chance. Temperatures are offset by the current temperature from Beacon Hill Weather, as WK and BWH often diverge in readings by a few degrees.
The daily row shows the high & low for the day, precip chance for the whole day, and if the precip chance is above 25%, the forecasted precipitation for the day. On days with a lower precipitation chance, this is replaced with the wind speed averaged for the day.
And this is what PyWeather 3 looked like, running on the older Inky Impression 5.7 screen. You can see that PyWeather 3.5 is really just a scaled-up UI of PyWeather 3 (thus the .5 moniker) with more information to get the most out of the extra screen space.
PyWeather 3.5’s screen has a resolution of 800×480, PyWeather 3 has a resolution of 600×448 - a pretty easy upgrade, given you can Ctrl+C and Ctrl+V more hourly/daily columns horizontally and add always-on rainfall chance data to fill the remaining 32 vertical pixels. And the second Beacon Hill Weather data column, which is nice.
The extra room also makes it so the current condition will show the rainfall rate if BWH is reporting it (i.e. Light Rain @ 0.13”/hr), although I could probably do it on PyWeather 3 to be honest.
And you can see how the screen faded over 5 years of continuous use…although I think some of that has to do with me dropping the screen once (that’s where the little vertical bars at the top come from!)
This is the earliest iteration of the UI design for PyWeather 3 from 2021. While mostly the same, there are a few notable differences. A one-hour forecast occupied the spot where MBTA departures live, showing 15-minute increments sourced from Climacell data.
Indoor readings included light information, and you can see the BH1750 light sensor on the right of the photo. Rather than using the How Hot API like it does today, PyWeather 3 had the sensors on it and would report data to How Hot. You can see the I2C wires coming off the top of the e-ink screen if you look closely.
When weather alerts are active - the area dedicated for detailed indoor sensor data is replaced with what the alert is, and when it expires. Indoor temperature is visible at all times.
This is what the UI looked like in 2023 with PyWeather 3 in my off-campus college apartment, showing largely the same UI. The indoor conditions were tweaked to show dew point (but in a different order than today) and the icons were horribly misaligned!
You can also see that the indoor sensors were no longer placed on PyWeather 3, a separate ESP32/Pi has been in charge of collecting that data for a while now.
The Pimoroni Inky Impression 7.3 and 5.7 both have 4 side buttons. At some point in PyWeather 3 development, I wanted to make it so clicking one of the four buttons expanded details for each section (because coincidentally there’s four sections on the display that literally line up with the buttons), but that never happened.
A side profile of PyWeather 3, lovingly mounted with command strips, still to this day.
At some point between 2022 and 2024, I switched the base Pi out from a Pi 3B/3B+ (one of the two were used) with a 3A, as it has a smaller physical footprint and this display does not need more than 512 MB of RAM. This photo shows a 3B/3B+ being used.