Blackout: taking the kiosk out of service
Blackout means "this kiosk is shut". While active, Unreal ends any conversation in progress and refuses to start another — from the tablet, a second tablet, the spacebar, or anything else. This state survives level changes. Turning it off does not start a conversation; it simply allows one again.
The second of the two switches below — the kiosk taking itself out of service when its self-diagnostics fail — is fully documented in Taking itself out of service. That page covers the tuning settings and what clients see while latched.
Two switches, not one
Understand this first, because everything else follows: there are two independent switches, and the kiosk is shut while either is on.
| Manual | Automatic | |
|---|---|---|
Who turns it on |
a person, or your code |
the kiosk itself |
Why |
you decided to shut the kiosk |
it worked out that it cannot do its job |
How it goes on |
admin menu toggle · |
it fails to reach the backend for half a minute · a check you registered is failing |
How it goes off |
only manually — the same toggle, node or command. It will never clear itself |
only by itself — the moment the problem goes away. You cannot clear it from the tablet |
Survives a restart |
yes. Somebody shut the kiosk on purpose; a crash at 3 a.m. does not undo that decision |
no, and it does not need to — the kiosk re-checks within seconds of starting and re-shuts if the problem is still there |
The state key to read |
|
(no separate key — see below) |
The tablet fog reads blackout, which simply means "either switch is on". Your toggle button,
however, must read blackoutManual. Otherwise, it lights up whenever the kiosk shuts itself, inviting
an operator to press a button that will not help.
They cannot cancel each other, in either direction. This is deliberate, and answers a common question:
-
Your staff shut the kiosk, then the internet fails. Staff press the toggle to reopen. The toggle works — their switch goes off — but the kiosk stays shut because the automatic switch now holds it. Nothing is stuck or needs forcing; it opens when the internet returns.
-
Reverse the order, same answer. The internet fails, then staff shut the kiosk manually. When the internet returns, the automatic switch releases, but the kiosk stays shut until somebody clears the manual switch.
-
The order genuinely does not matter. Each switch only responds to its owner, and the kiosk is open only when both are off.
One asymmetry is worth knowing: there is no tablet route out of an automatic blackout. A box
reporting it cannot work should not be coaxed into serving visitors from a touchscreen. If a probe
misjudges a locked-down network, the solutions are fixing the probe target, the ini, or relaunching
with -NoPromethistHealth — all requiring physical access to the machine.
When each one gets used
| Situation | Which switch | How |
|---|---|---|
A loud event in the room — the microphone will not work, so nobody should try |
manual |
staff press the toggle on the tablet, and press it again afterwards |
Cleaning, maintenance, a VIP walkthrough, the exhibition is closed |
manual |
same |
The internet or our backend is down |
automatic |
nothing to do — it shuts and reopens on its own |
Your computer vision / presence sensor / queue system has died |
automatic, via |
your project reports the fault; the kiosk shuts, and reopens when you report it fixed |
Your own operations team wants to shut it remotely |
manual, via a WebSocket client sending |
your service holds it shut, then releases |
Set Blackout or Report Health? — the two Blueprint nodes
Both shut the kiosk, so it is easy to pick the wrong one. The difference is simple:
Set Blackout |
Report Health |
|
|---|---|---|
What it is |
"shut the kiosk, because I say so" |
"this piece of equipment is broken" |
Which switch |
the manual one — exactly the same switch as the tablet toggle |
the automatic one |
Use it when |
you want to shut the kiosk from Unreal instead of from the tablet — a scheduled closing time, a button somewhere else, your own operations system |
something you own has actually stopped working — a camera, a sensor, a queue system |
Who can undo it |
anybody, from the tablet |
only your own code, by reporting the same check healthy again |
Set Blackout is just the tablet toggle, reachable from a graph. It carries no meaning beyond
"closed"; it is a decision, not a diagnosis.
Report Health is a diagnosis, which is why staff cannot clear it. If your camera dies and an
operator presses the tablet toggle, you do not want the kiosk to reopen — the camera is still dead.
Report Health makes that impossible. It also names the fault on the tablet, so whoever is standing
there sees "vision" rather than a mysteriously shut kiosk.
The rule of thumb: if a human decided, use Set Blackout. If a machine detected, use Report
Health.
Report Health — telling the kiosk about your own equipment
One Blueprint node on the PromethistLink component allows anything in your installation to participate in the kiosk’s out-of-service decision:
Report Health (Check = "vision", Healthy = false, Detail = "the camera process stopped answering")
Three things to know:
-
You name the check. Use any name, one per watched item. Two reporters sharing a name overwrite each other.
-
You must report the recovery. Nothing expires: a bad check stays bad until the same reporter declares it healthy again. Reporting from a timer makes the "is it still broken" question answer itself.
-
The failing names are shown. They reach the tablet, letting the operator see what is wrong instead of a shut kiosk. The sample tablet formats them into a sentence in
tablet.ts.
Anything can call it — a Blueprint, or an external process reaching over the tablet’s control channel.
How the kiosk checks itself
The problem: because no connection remains open between visitors, an idle kiosk cannot distinguish a working backend from a dead one. It only notices issues when a visitor is standing there.
So it asks on a timer, on by default — requiring zero configuration. While idle, the kiosk fetches a URL every 10 seconds. Three failures spanning at least half a minute shut the kiosk; the very first success reopens it, without a visitor present. It also asks immediately after anything suspicious — a failed connect, a dropped session, or a network cable moving — rather than waiting for the next tick.
Four properties make it safe to leave on:
-
It never runs during a conversation, preventing interruptions. Answers arriving after a visitor presses Start are discarded.
-
Slow to shut, instant to reopen. One bad answer proves nothing; half a minute of them does. A fifteen-second router reboot between visitors will not close your installation.
-
It works from a cold boot, before anyone starts a session — which is the case that matters, because a kiosk restarted remotely into a broken network lacks visitors to test it.
-
Any answer at all counts as working — a 404, a 401, even a server error. See the honest caveat below.
Set ProbeUrl if your backend is not ours. Until the kiosk reaches a backend, the probe targets
ours — meaning a box that never contacts our host would judge itself by our uptime. Place this under
[PromethistLinkHealth] in Saved/PromethistLinkConfig.ini, alongside the interval and failure
count. The README contains the full list; nothing here requires a rebuild.
Whose outage is it? When a failure is confirmed, the kiosk queries a neutral third-party address
(Google’s generate_204 by default) purely to word the message: our backend is down versus this
building has no internet. This directs you to the right person. It changes only the sentence, never
the verdict. Set ProbeNeutralUrl= to empty to prevent third-party contact. On a locked-down kiosk
LAN that blocks everything but our backend, a blocked Google would report every backend outage as "no
internet".
|
The honest limit of this check. Any reply counts as healthy, proving only that the kiosk can reach the backend, not that the backend is behaving. A server that is up but broken reads fine here, and the kiosk will keep accepting visitors it cannot actually serve. This trade is deliberate: somebody else’s routine deploy returning a 502 for thirty seconds must not close your installation, and a simple fetch cannot tell that apart from a real fault. Closing this gap properly means checking something meaningful, which is on our list. If a piece of your infrastructure needs stricter monitoring—an API whose failure would lose data, say—do not wait for us. Poll it from your own Blueprint on a timer and feed the answer to |
What you have to build: the out-of-service screen
Unreal decides when to stop serving visitors. It never decides what they see instead — that part is always yours.
On Blackout Changed (bBlackedOut) -> show your out-of-service content
It fires before the conversation is torn down, so your visuals are already up before the avatar goes idle. The other order shows a frame or two of a live-looking avatar with nothing behind it.
Do not just show an error. An out-of-service kiosk is still a screen in a public space. A short loop about the building, exhibition, or company — a showreel, opening hours, anything — is better than an apology. It turns a broken backend into a lost feature instead of a dead installation.
If you are streaming (D and E), some of this is done for you. Those shapes lack an Unreal-rendered big screen to draw on — the big screen is a browser showing video — so the plugin talks directly to that browser. A viewer already watching learns the kiosk is out of service and returns to the player’s landing page. A viewer arriving while shut is turned away at the Connect button, avoiding a loading bar timeout. Both behaviours live in our build of the player, so keep that branch if you fork it.
What is automatic, and what is yours
| What happens | Automatic? | |
|---|---|---|
The tablet cannot reach Unreal |
the tablet fogs, its controls grey out, a spinner shows |
yes, always |
Unreal cannot reach the backend |
the kiosk shuts, and reopens by itself |
yes, always |
Something else in your installation broke |
nothing, until you |
no — only you can tell |
The big screen’s out-of-service content |
whatever |
no — always yours |
-NoPromethistHealth on the command line entirely disables self-checking — including the automatic
switch — for the day it gets something wrong on a box you cannot rebuild.