~derf / projects / vrr-infoscreen

vrr-infoscreen (formerly vrr-fakedisplay) shows departures at a public transit stop, serving both as infoscreen / webapp and LED departure monitor look-alike.

It supports most german local transit networks and also some austrian ones.

There's a public vrr-infoscreen service on finalrewind.org. You can also host your own instance, see the Setup notes below.


png infoscreen efa on a r0ket app/infoscreen

png mode


  • perl ≥ 5.10
  • Cache::File (part of the Cache module)
  • DateTime
  • DateTime::Format::Strptime
  • File::ShareDir
  • GD
  • Mojolicious
  • Travel::Status::DE::EFA ≥ 1.15
  • Travel::Status::DE::HAFAS ≥ 2.03
  • Travel::Status::DE::URA ≥ 2.01


First, build App::VRR::Fakedisplay which is required for the LED frontend:

  • perl Build.PL
  • ./Build
  • ./Build manifest
  • sudo ./Build install

vrr-infoscreen is configured via environment variables:

Variable Default Description
VRRFAKEDISPLAY_LISTEN IP and Port for web service
VRRFAKEDISPLAY_STATS None File in which the total count of (non-cached) backend API requests is written
VRRFAKEDISPLAY_CACHE /tmp/vrr-fakedisplay Cache directory
VRRFAKEDISPLAY_WORKERS 2 Number of concurrent worker processes

Set these as needed, create templates/imprint.html.ep (imprint) and templates/privacy.html.ep (privacy policy), and configure your web server to pass requests for vrr-infoscreen to the appropriate port.

You can run the app using a Mojo::Server of your choice, e.g. perl index.pl daemon -m production (quick&dirty, does not respect all variables) or hypnotad (recommended).