Over the past couple years I've set up a bunch of Grafana dashboards to help me keep an eye on everything from weather to server stats to how much mail is waiting for me at the post office.
Of course if I'm sitting near a computer, it's easy to log in and click through a few of them, but I wanted to keep an eye on things while I was working around the house.
My TVs have long had some flavor of Roku streaming device attached. I looked into the capabilities of custom channels and they aren't really set up to display a webpage. However, images and videos are fair game of course. Turns out there's a plugin for Grafana called Grafana Image Renderer that runs on the server and can produce an image of a dashboard. Perfect!
So to make this all work, I wrote two small programs:
The first is a very simple server component. The server part provides a couple of pieces of information when the channel loads so I don't have to try to do configuration of the list of images on the Roku and allows me to update the image list without touching the channel. It also can pull other images from general webservers, like public price graphs, sky charts, and webcams. This part also uses ImageMagick to scale the image from an arbitrary size for correct display. Yeah, this whole component is probably overkill and could definitely be done many different ways. This whole thing has evolved quite a bit from how I originally did it, so it's just what's working at the moment for me.
The screensaver is also fairly basic but has a little bit more to it — it gets the number of images and their descriptions from the server, then requests them as a result of navigation. There are also a few nice UI features: by default, it auto-advances every 5 seconds, so as a screensaver it'll loop through the various images. If you run it as a channel directly you can interact with it, scrolling to a specific image, seeing a list of the image titles, and auto-refreshing a specific image every 30 seconds.
If you want to try it out, you can grab both pieces from GitHub. Instructions for each part are over there as well!
Roku screensaver that grabs a list of image descriptions from a server, then requests and displays them. Has auto-advanced, auto-refresh, list of images, etc.
Server component to pair with roku-imgserver-screensaver.