Semaphor blog
Blog: Semaphor

info-rpi - An Ansible-managed info screen

Our new project, named info-rpi, aims to replace proprietary and expensive info screen solutions. Everything needed in order to get started is a Raspberry Pi.

Receiving several demands and requests for an open source alternative to pricy and proprietary information screens, we have decided to polish and publish our current info screen setup used at Semaphor.

Info screens are often located in receptions, foyers or meeting rooms. Occasionally larger facilities and workplaces even include them in hallways and bathrooms. At Semaphor, we have an info screen running in the background with statistical information such as hours worked, current jobs and an overview of warnings from our server room; should there be any. The setup is simple and hosted on a Raspberry Pi 3. The management of the Raspberry Pi is done through Ansible and allows us to update multiple of them with only one command. We actually never have to leave our desks once the Pi is configured and plugged into a screen. With the Pi powered with PoE (Power over Ethernet) and a small cable leading to the HDMI port of the screen, the cabling is neat and tidy and only exposes the information to the cabled internal network.

Why a Raspberry Pi?

The Raspberry Pi is a compact and full functioning computer running on an ARM processor. The Raspberry Pi 4 has dual 4K monitor support and comes at just $35 for the cheapest model.
The Raspberry Pi' is also dead silent as the ARM processor and motherboard requires no fans to run. This means that it can be packed up and hidden away behind a monitor or TV. The "harddisk" of the Pi consists of a micro SD and can easily be removed and reformatted. If additional storage is required, an external drive could be mounted to one of the several USB ports. And if you decide to scrap the project of which you bought the Raspbery Pi for, just reuse it for something else. So why not use one?

The Project

The repository, info-rpi, can be found on our Github page and doesn't require anything but a Raspberry Pi to get started. The setup process may seem a bit tedious and could do with some more automation in the early phase of preparing each new Pi. But when managing just a few info screens like we do at Semaphor, I'd say it's endurable. It's our intention to further automate the proces at some point, we just need the spare time :-) If anyone else wants to fork and refine the project, feel free. It's released under the GPL-3 license.

Ideally, a dedicated info screen-image existed, flash-ready and accompanied by an install script, defining variables to suit the users infrastructure. But for now, the info screen Pi works impeccably at cycling through tabs in a Chromium browser. And apart from the vintage TV and a bit of dust, the solution, along with some Grafana-magic, is quite OK.

The repository includes a readme document to get you started managing your own info screens.

To get and try out the project for yourself, clone it with the following command or browse the files on Semaphor's Github page.
git clone

The real beauty of using Ansible to manage the info screens comes with the option of creating seperate groups and still updating/configuring them with one command. Say for example a facility has six info screens in total. Two are located in the reception, two in the hallways and two in the cafeteria. The screens would then be managed by including them in the hosts file, usually referred to as the inventory. In the hosts file, each of the Pi's can be included under specific groups, declared in brackets. Remember, both domains and ip adresses can be used in the inventory file.

Given the example above, the hosts file could look something like this:
With the Pi's defined in the hosts file, url's to browse can be set for each group by creating a .yml in the group_vars directory. By default, the project comes with an all.yml file, which automatically applies to all Pi's included in the hosts file.

If, for example, the Pi's were to display weekly menus on the ones located in the cafeteria, and the meeting scedule on the Pi's in the hallway, a file named cafeteria.yml and hallway.yml could be placed in the group_vars directory with the following contents (with made up url's).

Cafeteria Pi's

- "hxxps://company.local/cafeteria/menu?vegan=true"
- "hxxps://company.local/cafeteria/menu?vegan=false"

Hallway Pi's

- "hxxps://company.local/schedule/meetings?room=011"
- "hxxps://company.local/schedule/meetings?room=012"
- "hxxps://company.local/schedule/meetings?room=013"

To update and reboot the cafeteria Pi's with the new settings, simply run the following command from the root directory of the project:
ansible-playbook cafeteria inforpi.yml

Or only the hallway Pi's:
ansible-playbook hallway inforpi.yml

Or roll out changes to all Pi's with:
ansible-playbook inforpi.yml

- Johannes

09-03-2021 12:29


Add comment

It may take a moment untill your comment is published.