Nice project. I am also using OpenMeteo for one of my projects. They have a good API and the data is usually of high quality (except the aggregated weather-codes for hour/day, but you don’t use them so you don’t have to care).
One thing you could change: OpenMeteo internally updates their data every 15 minutes and there is a field in the response that tells you when this happened. So you could dynamically calculate the next time you call updated_weather().
I’m doing something similar with mine. I cycle through text messages with day, date, time, temp, etc. Mine is displaying indoor values via a BME280, and has an RV3028 for the date and time. I have a separate Interstate75 setup that shows indoor and outdoor. Different strokes for different folks. I do really like your setup though. Well done. =)
I’m tempted to add in scrolling weather via switch C & D.
Didn’t like the constant scrolling was a bit too distracting for my liking.
Having the larger interstar for indoor and outdoor seems like a really good use.