Caves • Legends • Adventure

Screens help guide

Everything you need to keep the TVs around Wookey Hole showing the right thing at the right time.

The basics

Wookey Hole Screens is our own digital signage system. You manage it from the dashboard, on a computer or your phone, and every TV picks up your changes within a minute.

Show something now

The big yellow button. Put a message, poster or playlist on any screens, for as long as you like. It switches itself off.

Schedules

Regular changes, like the café menu at lunchtime or Halloween posters for the season.

Playlists

A loop of slides, such as the Welcome loop. Each zone has a default playlist.

Zones

Groups of screens in the same area: Entrance, Caves, Papermill, Café.

What decides what a screen shows?
  1. Show something now beats everything. Emergency messages beat everything else.
  2. Then schedules. If two clash, the more specific one wins: one for a season or certain dates beats an all-year one; one for a single screen beats a whole zone; a shorter time slot beats a longer one.
  3. Otherwise the screen plays its default playlist, or its zone's.
There are no priority numbers to set. The dashboard warns you about clashes before you save.

Show something now

For anything happening today: an area closed, a delay, sold out, a quick promotion.

  1. Click Show something now at the top of any page. Or click Change on a screen card, or Show something now next to a zone, and it starts with those screens already chosen.
  2. Where? All screens, a zone, or tap individual screens.
  3. What? A message (start from Closed, Delayed, Sold out, Last entry or Weather, then edit the words), a poster, or a playlist.
  4. For how long? 30 minutes, an hour, until closing, until midnight, until a date, or until you end it.
  5. Click Show it now. The screens switch over within a minute, straight away rather than waiting for the next slide.

While it's on, a yellow banner across the top of the dashboard shows what's running, with +30 min, +1 hour and End now buttons. When the time is up, the screens go back to normal by themselves.

Emergency: the pink Emergency button puts a message on every screen, on top of everything else, until someone ends it. Use it for site closures, severe weather or anything urgent.

Posters

The quickest way: drag it onto a screen

On the Screens page, drag an image or video from your computer straight onto a screen's card, or onto a zone. Then choose:

Posters that take themselves down

Give a poster a Stop showing after date, when you drop it or later on the Media page. After that date it drops out of every playlist by itself, so the Halloween posters disappear after half term without anyone touching them. Expired posters stay in Media, marked Expired, in case you want them next year.

The longer way

  1. Open the Media tab and drag your image or video onto the purple dotted box.
  2. Open the Playlists tab, pick the playlist, choose your poster under "Add slide" and click Add slide.
  3. Use the arrows to move it into place, then click Save playlist.
Best results: make images 1920 × 1080 (or 1080 × 1920 for portrait screens). Save videos as MP4 and keep files under 100 MB.

For quick notices like "Last cave tour 4:30pm", there's no need to design a poster: use Text slide on the Media page, or a message in Show something now.

To change how long a slide shows, type the seconds next to it in the playlist. Leave it blank for the slide's normal time. A video set to 0 plays all the way through.

Schedules

Use a schedule for things that repeat, such as the café menu at lunchtime or Halloween posters for the season.

See the week

The Schedules page shows a week calendar for whichever zone or screen you pick. Coloured blocks are schedules. Striped yellow blocks are "show something now". A faded block is hidden by something more important at that time; hover over it to see why.

Add a schedule

  1. Drag on the calendar over the day and times you want, or click Add schedule.
  2. Fill in the sentence: "Show Café lunch on the Café screens every day at lunchtime all year round". Each part is a simple choice, with "certain days", "certain times" and "certain dates" when you need them.
  3. If it clashes with another schedule, a yellow note explains which one will show and why, before you save.

Seasons and holidays

Set up dates you use again and again, like half terms or Christmas, once under Seasons and holidays. Then choose "during Halloween season" in any schedule. Change the season's dates next year and every schedule using it moves too.

Opening hours

Set the opening and closing times on the Schedules page. They're used by "Until closing" and "in opening hours".

All times are UK time, and the clocks changing is handled for you. A schedule whose end time is earlier than its start carries on past midnight.

Screens

What's on, and what's next

Click any screen on the Screens page to see what it's showing now, what's next and what's later today, with pictures. From there you can change it, preview it, see its week, refresh it or change its settings.

Add a screen

  1. In Screens, click Add screen, give it a name, and choose its zone, layout and orientation.
  2. It gets a 6-letter code shown in yellow on its card.
  3. Ask IT to set up the Raspberry Pi with that code (see below), or type the code on the TV's pairing screen with a keyboard.
  4. When the yellow lamp on its card lights up, it's online.

Click Preview on any screen card to see exactly what that TV is showing, at its real shape, in a new browser tab.

Refresh a screen

Changes normally reach the TVs by themselves within a minute. If a screen looks stuck, or IT has updated the system, you can make it reload:

The card says Refresh pending until the TV picks it up, which is usually within a minute. The screen goes blank for a few seconds while it reloads.

TVs on and off

The TVs switch themselves on in the morning and off at night, so nobody has to walk round with a remote.

Screen hours

Set when the TVs are on under Schedules → Opening hours and screen hours. They start at 09:30 to 17:30, half an hour either side of opening, and there's a link to match them to opening hours. A zone, such as the Café, or a single screen can have its own hours, or be always on, in its settings.

The TVs also come on by themselves for any schedule running outside screen hours (a late Halloween evening, say), and for any Show something now or Emergency message. On days marked as closed under Seasons and holidays, they stay off.

See and change it

Changes reach the TV within a minute or two. While a TV is meant to be off, its Pi shows plain black, so nothing gets burned into the screen even if the TV ignores the off command.

How it works

The Pi switches the TV through the HDMI cable using HDMI-CEC, the same way a games console wakes a TV. For that to work:

If something's wrong

What you seeWhat to do
The lamp on a screen card is greyThe Pi hasn't checked in for a few minutes. Check that it's switched on and connected to Wi-Fi. It keeps playing its last content in the meantime.
A small pink dot in the top corner of a TVThat screen has lost its connection and is playing what it saved. It catches up by itself once it reconnects.
A web page slide is blankSome websites refuse to be shown inside another page. That's the website, not you. Use a screenshot as an image instead.
My change isn't showingMake sure you clicked Save playlist. Screens update within a minute, at the next slide change. Click the screen to see what it's showing and why: a "show something now" or a schedule may be on top.
A poster has disappearedIt may have passed its Stop showing after date. Look for Expired on the Media page and change or clear the date.
A screen looks frozen or out of dateClick Refresh on its card. If it still shows Refresh pending after a few minutes, the Pi is offline: switch it off and on again.
A card says TV not answeringThe TV isn't responding to on/off commands. Turn on HDMI-CEC in the TV's settings (see TVs on and off) and check the Pi is plugged straight into the TV. Until then the Pi shows black when the TV should be off.
A TV didn't come on in the morningCheck it's switched on at the wall, and click the screen to see why it's off (screen hours, a closed day, or turned off by hand). Use Turn on for 1 hour to wake it now.
The TV shows "Pair this screen"Its code was changed or the screen was deleted. Type the code from its card on the Screens page.

On a TV with a keyboard plugged in: i shows screen info, and Shift + R unpairs it.

For IT: setting up

The system runs on Cloudflare: a Worker for the website and API, D1 for the database and R2 for images and videos. You'll need Node.js 18 or newer and the Wookey Hole Cloudflare account.

npm install
npx wrangler login
npx wrangler d1 create wookey-signage        # copy the database_id into wrangler.toml
npx wrangler r2 bucket create wookey-signage-media
npm run db:init
npx wrangler secret put ADMIN_TOKEN          # the dashboard password
npm run deploy

It's already set up at screens.wookey.team. To publish changes, run npm run deploy.

Strongly recommended: put Cloudflare Access (Zero Trust) in front of the site so staff sign in with their Wookey Hole email. Add a Bypass policy for the paths the TVs need: /player, /sw.js, /api/player/*, /api/weather, /media/* and /pi-setup.sh.

Setting up a Raspberry Pi

  1. Flash the SD card with Raspberry Pi OS (64-bit, with desktop) using Raspberry Pi Imager. In its settings, set a username and the Wi-Fi, and turn on SSH.
  2. On the Pi, run the line below, swapping in the screen's code. The Pi installs everything, then restarts and shows the screen.
curl -fsSL https://screens.wookey.team/pi-setup.sh | bash -s -- ABC123

Pis restart themselves every night at 04:30 to stay fresh. A Pi 4 handles 1080p video comfortably; on a Pi 3, use 720p video.

The setup also installs the TV power helper, which checks every minute whether the TV should be on and switches it over HDMI-CEC. It needs the screen code on the setup line. If a screen is given a new code, run the setup again with the new code. To see what it's doing, run journalctl -t wookey-power on the Pi.