Command Center Help for this page →

These figures are not updating. Last successful update at {{events.liveLastGoodText()}}, {{events.liveStaleMinutes()}} minute(s) ago. Everything below is what the fleet looked like then, not what it looks like now. The page keeps trying by itself. Try now
Reading this event's sectors… This event's sectors could not be read, so a limit cannot be set. Try again, or reload the page. {{model.selectedEntrance ? 'No ticket at ' + model.selectedEntrance + ' names a sector, so there is nothing to limit here.' : 'This event has no sectors on its tickets.'}} {{s}}×
{{model.eventList.length}} event(s) · ended greyed{{model.selectedEventId ? ' · showing #' + model.selectedEventId : ' · showing all'}}
{{model.summary.total != null ? (model.summary.total | number) : '—'}}
Devices
{{model.summary.approved != null ? (model.summary.approved | number) : '—'}}
Approved
{{model.summary.pending != null ? (model.summary.pending | number) : '—'}}
Pending
{{model.summary.inactive != null ? (model.summary.inactive | number) : '—'}}
Inactive
{{model.summary.decommissioned | number}}
Decommissioned
{{model.summary.online != null ? (model.summary.online | number) : '—'}}
Online
{{model.stats.scannedTickets != null ? (model.stats.scannedTickets | number) : '—'}}/{{model.stats.totalTickets != null ? (model.stats.totalTickets | number) : '—'}}
Scanned / valid · {{model.selectedEntrance}}
{{model.stats.totalTickets != null ? (remaining() | number) : '—'}}
Still to come
{{model.stats.cancelledTickets | number}}
Cancelled
{{model.stats.scansPerMinute != null ? model.stats.scansPerMinute : '—'}}
Scans/min today
Scan progress - {{selectedEventTitle()}} (bar is whole event; cards filter to {{model.selectedEntrance}}) {{model.stats.eventScannedTickets || 0 | number}}/{{model.stats.totalTickets | number}} valid ({{progressPct()}}%) · {{remaining() | number}} still to come · {{model.stats.cancelledTickets | number}} cancelled, not counted
Scan progressselect an event above to see its progress
{{model.status.text}}

Devices ↔ widen →← narrow Approve all pending ({{model.summary.pending}})

Find Show within min batt ≤ % {{filterMatchCount()}} / {{model.devices.length}} shown
Device name Status Online? Battery I Event Tickets Scanned Rate Last scan
Actions{{model.refreshing ? 'updating…' : model.countdown + 's'}}
{{d.expanded ? '▾' : '▸'}} {{d.selfName || d.name || '—'}}!{{d.guid || '—'}} {{d.statusLabel}} {{d.isOnline ? 'online' : 'offline'}}
{{d.battery}}%
{{d.integrationId}} {{events.lockIcon(d,'event')}}{{events.assignedValue(d,'event')}}/{{events.lockIcon(d,'entrance')}}{{events.assignedValue(d,'entrance')}}/{{events.lockIcon(d,'sector')}}{{events.assignedValue(d,'sector')}}
{{ticketPct(d)}}%
{{d.reportedCount != null ? (d.reportedCount | number) : 'not reported'}}
{{d.scanned != null ? (d.scanned | number) : '—'}} {{d.scanRate != null ? d.scanRate + '/min' : '—'}} {{d.lastScan ? (d.lastScan | date:'dd.MM HH:mm') : '—'}} Approve Push Refresh Scans Identify
Log operator out Wipe tickets Deactivate Reject Approve to enable actions
Reported telemetry {{reportAge(d.report.lastSeenUtc)}}
Device name (self-reported){{d.report.selfReportedName || '— (use Identify)'}}
GUID{{d.guid}}
Operator{{d.report.operatorUsername || d.operator || '— none logged in'}}
Loaded event / entrance / sector {{events.lockIcon(d,'event')}} {{events.assignedValue(d,'event')}} / {{events.lockIcon(d,'entrance')}} {{events.assignedValue(d,'entrance')}} / {{events.lockIcon(d,'sector')}} {{events.assignedValue(d,'sector')}}
Tickets on this device (its own copy of the set, as it reports it)
Held {{d.reportedCount != null ? (d.reportedCount | number) : 'not reported'}} {{tkNote(d, 'held')}}
Cancelled {{numOrUnknown(d.deviceCancelled)}} {{tkNote(d, 'cancelled')}}
Valid {{numOrUnknown(deviceValid(d))}} {{tkNote(d, 'valid')}}
Already used {{numOrUnknown(d.deviceUsed)}} {{tkNote(d, 'used')}}
Left to scan {{numOrUnknown(deviceRemaining(d))}} {{tkNote(d, 'left')}}
Pending sync {{d.report.pendingSync != null ? (d.report.pendingSync | number) : 'not reported'}} {{tkNote(d, 'pending')}}
Outbox {{d.report.unpublishedActivities != null ? (d.report.unpublishedActivities | number) : 'not reported'}}
Awaiting confirmation {{d.report.unackedActivities != null ? (d.report.unackedActivities | number) : 'not reported'}}
Ticket set {{d.report.ticketSetFingerprint ? d.report.ticketSetFingerprint.substring(0, 12) : 'not reported'}} differs from the other scanners on this event
Battery{{d.report.batteryLevel != null ? d.report.batteryLevel + '%' : '—'}}{{d.report.isCharging ? ' ⚡ charging' : ''}}
Battery optimisationnot exempt
Dozeidle
App version{{d.report.appVersion || '—'}}{{d.report.appBuild ? ' (' + d.report.appBuild + ')' : ''}}
Device model{{d.report.deviceModel || '—'}}
OS{{d.report.osVersion || '—'}}
Network{{d.report.networkType || '—'}}
Last scan{{hasStamp(d.report.lastScanAt) ? (d.report.lastScanAt | date:'dd.MM HH:mm:ss') : '—'}}
Last sync{{hasStamp(d.report.lastSyncAt) ? (d.report.lastSyncAt | date:'dd.MM HH:mm:ss') : '—'}}
Reported at{{hasStamp(d.report.reportedAt) ? (d.report.reportedAt | date:'dd.MM HH:mm:ss') : '—'}}
Last seen (server clock){{hasStamp(d.report.lastSeenUtc) ? (d.report.lastSeenUtc | date:'dd.MM HH:mm:ss') : '—'}}
Presence{{d.isOnline ? 'online' : 'offline'}}{{d.unstable ? ' · ⚠ unstable (flapping)' : ''}}
{{d.journalOpen ? '▾' : '▸'}} What happened to this device its own record, newest first
Reading it…
The journal could not be read. That is this page failing, not the device.
Nothing recorded yet. A handset on a build older than 2026-08-05 does not keep one.
{{j.occurredAt | date:'dd.MM HH:mm:ss'}} {{j.kind}} {{j.detail}} {{j.operatorName || ''}}
No enriched status frame yet. This device hasn't reported detailed telemetry (battery, model, OS, network, GPS, operator, counts…).
It appears here automatically once the updated app sends its status frame. The event/GUID/integration above are still available.
No devices registered yet.
No devices match “{{model.deviceSearch}}” - show all.

Event tools

Operate on the event selected at the top, no device selection needed.

Selected devices ({{selectedCount()}})

Each command applies to every ticked device it's valid for. Tick devices in the list first, offline devices can't be ticked.

A command only reaches a device that is online. {{selectedOfflineCount()}} ticked device(s) are offline right now and will be skipped. They rejoin the selection on their own when they come back. Untick them

Assign
Scans
Status
Session
Operator may change
Event {{events.permLabel('event')}} 🔒Lock 🔓Unlock Entrance {{events.permLabel('entrance')}} 🔒Lock 🔓Unlock Sector {{events.permLabel('sector')}} 🔒Lock 🔓Unlock
Maintenance
Danger

Ticket lookup

The whole code from the QR, exactly as it is, for the selected event. From Adriaticket that includes the purchase prefix; from a custom import it is the bare code.

Found {{model.lookup.result.Id}} ↗ · scanned {{model.lookup.result.ScannedAt | date:'dd.MM HH:mm'}} by {{fn.deviceLabel(model.lookup.result.ScannedBy)}} · not yet scanned
Not found for this event
refreshing… next refresh in {{model.countdown}}s not updating · Refresh now