Watching the fog on an e-ink display


The fog is an ever-present, distinctive, and fascinating part of life in San Francisco, especially during the summertime. Like the waves of some ethereal lake in the sky, lapping at an invisible shoreline, the fog ebbs and flows, changing from hour to hour and day to day. It may be bright and sunny where we live near Mission Dolores, but in the Sunset on the other side of the city the weather could be gray and moody. Or often, I leave home under a blanket of clouds but arrive at the office in Burlingame to find clear blue skies.

Sutro Tower stands above a blanket of fog. Seen from Corona Heights during an afternoon run.

One of my favorite and most frequently-visited websites is Fog Today. It’s a cool project by one Logan Williams that displays a satellite image of the San Francisco Bay Area, updated every five minutes, so you can see where the fog is. It’s an indispensable tool for deciding whether it’s a good afternoon to go picnic in the park, but the images of the fog and clouds are also just pretty to look at.

Last month, I rescued an e-ink display from the trash bin at the office. It’s a Visionect Place & Play 13” digital sign that we used a couple years ago for a demo. After the demo was done, it stayed on the wall, battery empty and screen blank, until finally the office was renovated and it was removed from the wall and tossed in the trash where I found it.

The natural thing to do was bring the display home and set it up to show Fog Today, as a piece of art both pretty and functional, static and dynamic. This was a fun little project that filled up a few weekday evenings.

Setting up the display server

The Visionect display is a thin client, meaning that the display itself does minimal computation in order to maximize its battery life. Instead, there’s some accompanying software that runs on a server which handles most device management and pushes images to the display.

The server software (Visionect Software Suite, or VSS) is well documented and available to download and run as a Docker image. Conveniently, I have a headless late 2012 Mac mini which I bought cheap for backing up my photos and to host stuff like this. I’m definitely not an expert with Docker or local networking, but it was pretty easy to get VSS up and running.

Subscription pricing?

Visionect seems to have switched to a subscription-based pricing model sometime during the last year. (I don’t think this was the case when my work bought the display back in 2021.) Their software page seems to indicate that you now need to pay a $72 annual fee in order to use the display at all, even if you’re not using their managed cloud hosting services. Fortunately, I found that I was able to run the display and software locally without a license. I hope that Visionect does not change this in the future—it seems wrong that one could buy this (rather expensive) display before the company implemented the subscription model, and then later be forced to pay the subscription in order to use the display.

Getting stuck

I didn’t have too much trouble setting up VSS or getting the display to talk to the server, but then I spent a long time stuck when VSS seemed unable to send any images to the display.

Screenshot of VSS apparently unable to show or send any images to the display

I tried almost everything I could think of, including running VSS on a different machine and trying different versions of both VSS and the display firmware. I had just about given up, but then I unplugged the display from my computer (I wanted to go watch a YouTube video while eating dinner) and the display suddenly jumped to life!

I think the display just doesn’t accept any images when it is plugged into a computer. So simple.

Code for pushing images

I wrote a pretty simple Python script to grab the latest image from Fog Today and push it to the display via VSS. You can find my code on Github here.

I know I’m pretty late on the bandwagon, but this was one of my first projects using ChatGPT to help me write the code quickly. I found that it’s impressively helpful for simple stuff like this (web scraping and basic image manipulation in Python)—the kind of coding task that’s very well-documented, but would still take me a bit of time to cobble together just because I haven’t done it before and would need to read a bunch of docs and StackOverflow threads. Of course, I didn’t just blindly trust the ChatGPT output, but it was helpful for writing big chunks of the script.

I then set up a cron job on my Mac mini server to run the script every 10 minutes from 6 AM to 11 PM.


I’m pretty happy with how this turned out! The Fog Today image looks great on the e-ink display. Now I just need to find a place to hang it up in the apartment. I’m not sure how long the battery on the display will last; maybe I’ll update this post in the future with findings.