We have a small “fleet” of Raspberry Pi 3’s scattered around our offices running Docker containers with most of them currently based on https://github.com/balena-io/resin-electronjs from balena.io
We found that setting up the first few TV’s with PC’s or RPi’s anything goes. But after expanding with a few more it quickly becomes a bit of a job with care and feeding with running around and rebooting, logging in to some of the webpages shown on some of them etc. We wanted it to become boring again, so we started iterating a bit on what we had.
Current features worth mentioning:
Out of the box the Balena cloud web-based app solution gives us the ability to remotely provision software changes, reboot etc. and even login to tinker/debug plus it monitors if the RPi’s are still online or if someone pulled the plug on them.
To overcome the sometimes less-than-stellar quality of the WiFi built into the RPi’s we ended up centrally creating screenshots of the dashboards to
.png files and periodically update them on a server. The RPi’s then
rsync that content. A consequence of this decoupling is that the RPi’s are always able to rotate between whatever last got
rsync'ed to them. Before that sometimes we ended up standing and staring at partially rendered content etc. Another positive effect is that content where login is needed now only need a central login (we show other stuff that isn’t from Metabase, where public dashboards is clearly the easy solution)
Rotation between the screenshots is built with https://github.com/hakimel/reveal.js which is also
rsync'ed along with the screenshots. The
reveal.js based slideshow also allows for local keyboard/clicker navigation at the screens between the different dashboard pages, so you can quickly go back to the dashboard (or other content) you are interested in.
To switch the connected screens on/off through HDMI CEC we have added cron jobs on the RPi’s that use
cec-client see e.g. this SO post.
We can centrally monitor what currently is output on HDMI for all of the RPi’s on our “Dashboard of Dashboards” (DoD). It also allows us to see if either the TV’s are turned off or the HDMI connection was pulled as the RPi’s then switches to a lower-than-full-HDMI resolution. this is simply done by the RPi’s taking screenshots of themselves overlaid with a timestamp which is
rsync'ed back to “DoD” so we can see if something has gone stale.
The solution has just sort of gradually evolved over half a year or so, but if there’s interest we might be able to share the source after sanitizing it a bit