Every alarm arrives
as one thread, not
four loose records.
FusionX is a control-room platform for help points, intercoms, cameras, public address and access control. It answers the call, shows the operator where it came from, opens the camera that sees it, runs the procedure, tells the right people, and keeps one ordered history of what the system actually did — under one login, on one screen.
The interfaces on this page are rendered replicas of the live console, built from the product's own design tokens and typeface — not photographs. Figures shown in them are illustrative sample data.
One alarm, from the field to the closed report
A fence sensor on Platform 2 at Southgate Depot trips at 21:41. Nobody configures this run — it is what the standing rules already say to do. Elapsed time runs down the left.
The exchange raises the alarm
An ICX frame arrives at the agent and becomes an alarm instance and a queue row in the same pass. The receive loop never waits on anything downstream — it writes one event row and moves on.
An incident opens and takes ownership of the story
Policy decides this event is worth an incident and opens one at HIGH. From here every notification, camera grab, announcement and operator action attaches to that single row, in order, append-only.
The map says where, before anyone asks
The alarm point carries its placed position, so Maps zooms to the pin and lights the level. The operator reads a location, not a device ID.
The camera that sees it opens itself
The alarm point is bound to a camera, so the ACTIVE monitor fills with that view — routed over the site LAN where the operator is local to it, and over the gateway tunnel where they are not.
Priority puts it at the top of the queue
Call type and tier are configuration, not code. A fence alarm outranks a routine help-point call and sorts above it, in the colour the site chose.
The announcement plays to the right zone
A stored message goes to the Platform 2 zone. The zone is expanded when the rule runs, so adding a speaker last week takes effect tonight without re-editing a rule.
The people who need to know are told
One notification row per recipient — so each operator dismisses their own copy and "who has actually seen this" stays answerable. Supervisors get theirs by webhook.
An operator acknowledges, and owns it
Acknowledgement is a real desk frame to the exchange, not a local flag. The incident moves to ACKNOWLEDGED with a name on it, and every later step is attributed.
Voice, video and words are captured together
The talk leg records on its own channel; the camera records alongside it. The transcript is produced per channel, so caller and operator are separated because they were on separate channels — not guessed from pauses.
Resolved, closed, and answerable
The rule stands down on the acknowledgement, its notifications close themselves, the strobe it latched switches off. What is left is one incident with a timeline, a reason, an owner and the evidence attached.
How the modules connect
Devices produce events. Events go on a durable queue. A worker drains the queue and runs whatever rules match. Nothing in automation can slow down, or break, the path that carries a live call.
Automation degrades to nothing
If the rule engine, the incident layer or a webhook endpoint fails, the alarm still reaches the queue and the operator still sees it. Every automation call is wrapped.
A filter that cannot match, does not
A rule filtered on a field the event does not carry never fires. A rule is rejected at save time if it references a placeholder its trigger cannot supply.
Per-step audit, not a log line
Each run records every step: what was asked, what the device answered, how long it took, and whether the next step continued anyway.
Dashboard
One screen an operator can work an entire shift from: the queue, the two monitors, the call controls, the reason capture and the day's history.
| Number | Description | Site | Wait | Status | Type | Operator |
|---|---|---|---|---|---|---|
| DAD5 | Fence — Platform 2 West | Southgate Depot | 00:14 | Alarm | Fence | — |
| 1042 | Help point — P2 North stair | Southgate Depot | 00:06 | Ringing | Help point | — |
| 1017 | Lift car 3 intercom | Harbour West | 01:52 | In call | Lift | K. Osei |
| 3308 | Gate 4 — vehicle entry | Northline Yard | 00:00 | On hold | Access | M. Rowe |
What the operator gets
- One queue for calls, alarms and events. They compete for the same attention, so they sort in the same list, in the priority the site configured.
- Two monitors, filled automatically. PREVIEW follows the ringing call; ACTIVE follows the answered one. Audio and video recording state show on the tile itself. When there is no picture — nothing happening, a station without a camera, a camera still connecting — the monitor shows a security-camera symbol rather than a sentence, and the first real frame replaces it. It is the same symbol on every monitor in the product — Dashboard and Maps, the surveillance walls, the incident workspace, the station preview in administration — drawn once and shared, so an empty pane means the same thing wherever the operator meets it.
- Keyboard-first. Enter acknowledges the row marked NEXT; D releases a door; M opens the map at the caller. The console tells you when a key is refused rather than ignoring it.
- Reason capture that survives. The comment is written against the event, not the queue row, so an operator-ended call keeps its reason.
- Calls survive navigation. An invisible shell page holds the voice session, so moving to Maps or Surveillance mid-call does not drop it.
- The site is a link. A site name in the queue or the history opens that site’s information — levels, plans, rates, apps — in its own window, on alarm rows too. It opens on the press, so a queue that refreshes every second cannot swallow the click.
Live figures on the tiles
- Waiting · Total today · Average response · Average duration · Answered % · Active · Alarms active · Incidents active · Unacknowledged · Automation failures
- Scoped per operator: what a desk sees is what its queues and permissions allow.
- The row folds away on the Dashboard and on Maps, into a single line that still carries every number in its colour — so a folded row never hides a waiting call. The choice is kept per operator, so two people sharing a desk each keep their own.
Maps & location
An alarm's first question is always where. Maps answers it before the operator has finished reading the row.
| Point | DAD5 · FENCE-P2W |
| Level | Level 1 · Platform 2 |
| Camera | Fence West (2117) |
| Priority | 1 · Critical |
Placement is engineering, not code
- Drag the pin, and it stays. Alarm points, help points and cameras are placed onto the site plan by an engineer in the browser. The position travels with the event from then on.
- Country → State → Site → Level. One directory shared by Maps, Surveillance and Announcements, so the same tree means the same thing everywhere. Each level carries a code, a name and a description, and an operator sees the description on the level itself.
- Floor plans and street maps. Indoor levels sit on uploaded plans; sites sit on a real map so a remote depot is a place, not a row.
- Camera on the pin. An alarm carries the camera bound to its point, so ACTIVE and PREVIEW fill from the map without the operator hunting the tree.
- Scoped visibility. Operators see the sites they are responsible for; a supervisor sees the estate.
- A status that means something. An intercom exchange reports a station’s line FAULT and nothing else, so a station is shown red on a fault and, the rest of the time, with the last moment it provably worked — “last heard 2 h ago” — rather than a green dot nothing stands behind.
A plan that belongs on the console
- Whatever was uploaded, in the console's colours. A floor plan is whatever the site had — a white CAD sheet, a bright render, a photograph — and on a dark control-room screen it was the brightest thing there. By default it is now redrawn in two theme colours: the sheet becomes the console background and the lines are drawn in its blue. Measured on the reference plan, the sheet lands on exactly the stage colour.
- Four styles, chosen per level. Blueprint for drawings, Tint for photos and renders (one colour, light and dark kept where they were), Dimmed for a plan whose own colours mean something, or the original. With a strength. An administrator sets it; operators see it and cannot change it. The same level looks the same on Maps and on Announcements.
- Only the picture changes. The style is applied to the plan image alone, so pins, zones and every click sit above it exactly as before. Zone boundaries are white dashes, which read clearly on any of the styles.
- Flat, or laid back in 3D. The plan can be tilted into a ground plane and walked round, with every pin standing upright on it and still answering a click. An administrator saves the angle a level opens at. Placing devices is always done on the flat plan, because on a tilted one the point you click is not the point that would be saved.
The tab gives way to the plan
- The plan has a floor. Every pane on this tab used to size itself against the window alone, none aware of the others, and on a 1366×768 screen the plan was what gave — pins still drawn, on a stage a few dozen pixels tall. The plan now keeps a minimum size and the statistics row, queue band, event history, tree and monitors yield around it, each down to its own drag minimum, with the operator's saved sizes returning the moment there is room for them.
- One job per tab. Zones, stored messages and Broadcast have left Maps — they are the Announcements tab's work, and here they were squeezing the plan and painting over Event History. The two monitors now fill that column and share it on a divider of their own.
- Answer from the map, and it is a real answer. A call taken on the map picks up in the browser first, exactly as it does on the Dashboard, so the operator has audio and the call is recorded — wherever on the console it was answered.
Surveillance wall
A video wall built for a control room on a link it does not own: shared upstreams, one decode per camera, and an honest badge saying how each picture got here.
Built for the link you actually have
- One upstream per camera, not per viewer. Six operators on the same camera pull one stream; the frame cache serves them all. A wall of thirty-six tiles does not become thirty-six pulls.
- LAN first, tunnel second. Each tile says how it got here —
LANdirect, orGWthrough the site gateway — so a slow tile has a visible reason instead of a shrug. - A stall is not a shrug. A watchdog notices a frozen picture and reconnects with backoff; a stream that 404s is treated as broken, not retried forever.
- Named layouts assigned to operators. Night shift gets its wall, days get theirs. An operator can remove a tile from their own wall and get it back from the camera tree.
- Any camera source. ONVIF/RTSP, MJPEG with Digest auth, local USB, an uploaded file, or a YouTube live stream re-resolved on reconnect.
- Pan, tilt and zoom from the sidebar. An eight-way pad, zoom, speed and presets under the camera tree, naming the camera it drives. Hold to move, release to stop — and the server stops the camera itself after two and a half seconds whatever the browser does, so a dropped link cannot leave a camera turning. Moving a camera is its own permission. Axis, Dahua and Hikvision are built in, with a URL template for anything else.
- Health you can see. Per-camera FPS badge, credentials and resolution checks, staggered wall start so the box is not hit by all tiles at once.
- Online means video is arriving. A camera the recorder or a live view is receiving frames from is online, and is not knocked on at all — the extra connection is what made busy cameras look dead. Only without that evidence is the camera asked directly, and one failed answer is a strike, not a verdict: offline takes two in a row.
Human & object detection
An operator watching sixteen tiles cannot watch sixteen tiles. A box drawn around a person is the cheapest possible way to say this one, now — and a box around a bag that was not there a minute ago says something a person cannot.
| Cameras under detection | Rate each | Inference cost | Total |
|---|---|---|---|
| 1 | 1.00 fps | 244 ms | 0.24 core |
| 4 | 0.25 fps | 244 ms | 0.98 core |
| 8 | 0.12 fps | 244 ms | 0.98 core |
| + firearm pass, if enabled | same frame | +62 ms | +0.06 core |
A person is a presence. An object is an arrival.
- People are boxed while they are in shot. That is what an operator watching a corridor wants.
- Objects are boxed when they turn up, and then they stop. A car park holds forty cars all day and a concourse holds a bin, a bench and a bicycle rack — boxing all of them permanently is not an alert, it is wallpaper, and an operator who sees forty boxes every time they look stops seeing any of them. The bag that was not there a minute ago gets a box; the forty cars do not.
- Which means the server knows what was already there. Each object is followed frame to frame, by overlap where it is still and by where it could plausibly have moved to where it is not — so a bag being carried stays one arrival instead of becoming a fresh one every second.
- Three colours, so the wall can be read across a room. Green for a person, amber for something that has just arrived, red for a threat.
- And the colour of the thing itself. “A bag” is not a description anybody can act on; “a red bag” is. Each arrival records the dominant colour of what was boxed, read from the middle of the box so the floor behind it does not count, and the log can be filtered by it.
What counts as worth a box is the site's decision
- A watch list, per site. Knives, bags, phones, vehicles, and anything else the loaded model can recognise. The list offers only class names the model actually knows — a name it has never heard of matches nothing, silently, which on a watch list is indistinguishable from “none seen today”.
- Per camera, not per wall. Detection is switched on for the cameras that matter. An unflagged tile is never even asked about.
Firearms: measured, and switched off until a model earns it
- The everyday model cannot do it. It recognises eighty ordinary things — a knife and a pair of scissors among them, but no gun. No threshold and no longer list produces one; it takes a model trained for firearms, which FusionX can load alongside as a second pass on the same frame.
- The one tried here did not earn its place. Over 189 consecutive frames of office footage containing no gun, it flagged a gun in 8 of them — one false alarm every twenty-odd seconds while anybody was in shot — at 62–72% confidence, and on live cameras it reached 85%, once on a blank wall. A threshold cannot fix a model that sure of nothing, so firearms are off the watch list on the reference install and the second model does not load at all. A false firearm on a control-room wall is not a cosmetic error.
- Still the site's decision, now an informed one. The class is offered in the watch list marked unreliable, with that measurement beside it, rather than hidden or quietly left on. A better model can be dropped in and measured the same way.
- A threat stays boxed while it is there. The one exception to the arrival rule, for a knife today: an operator who looks away for fifteen seconds must not come back to a tile with no box on a threat still in shot. Only the arrival raises the event.
Every box, logged — and judged
- A detection log. Every object the wall has boxed: when, which camera, what, what colour, how confident, whether it raised an incident. Filter by time, camera, object, threats only, or review state.
- Half a minute of video on every row, a third of it before. An arrival is the moment something is already there, so the useful seconds are the ones leading up to it. Nothing is cut or copied: the player is handed the recording and an offset, so a clip costs no disk.
- An administrator says whether it was real. A confidence is what the network believes, not whether anything was there. The false-alarm rate is reported out of the detections actually reviewed, and not at all until something has been — “0% false” on a log nobody has checked would read as a model that works.
Analytics that cannot eat the box
- It never opens a camera. Detection reads a frame that is already flowing because somebody is watching that tile. An idle wall costs nothing, and analytics can never become the reason a tunnelled site starts paying for bandwidth.
- One inference per camera, shared. Six operators watching the same view get the same boxes; the model runs once, and people and objects ride the same pass.
- The CPU is the constant, the rate gives way. Ask for more cameras and each one's rate drops so the total work stays around one core — measured, not guessed.
- Detection is an event, not just a box. A person arriving where nobody was
raises
detection.human; an object turning up raisesdetection.objectwith the object's name and whether it is a threat. Both fire once per arrival, not once per frame, so a rule can act on them without drowning. - The models live in the analytics service, not in the web process, so the console never shares memory with them.
Recording, playback & audio-to-text
Voice and video captured against the call, then transcribed per channel — so the caller and the operator are separated because they really were separate, not because a pause was guessed at.
Capture
- Audio and video, per station. Recording is switched on per station and per call type; the console shows a live mic and camera badge so the operator knows what is being captured.
- Recording starts at ring, not at answer — the seconds before someone picks up are usually the ones that matter.
- A replay belongs to one call. A recording is matched to the call whose own ring-to-answer moment it started in, not to whatever overlapped it, so two calls on the same station minutes apart cannot borrow each other's audio and a call back plays its own recording rather than the one before it.
- Storage that stops before the disk does. A configurable cap with automatic purge, measured on the real volume.
Audio to text
- Speakers are read, not guessed. Transcription runs per audio channel, so "caller" and "operator" are facts. Older recordings whose speakers were inferred can be re-transcribed in place.
- Language detected automatically, with the confidence and detected language recorded alongside the text.
- Intent detection. Configurable phrase sets classify what a call was actually about — medical, abuse, trespass, fault — and surface it on the transcript and in reporting.
- Searchable evidence. The transcript is attached to the call, the incident and the report, so an event is findable by what was said.
Alarms
Alarm types, points, colours and priorities are configuration. Acknowledgement is a real frame to the exchange — not a flag the console sets and hopes about.
| Name | ID mask | Priority | Colour | Reset event | Points |
|---|---|---|---|---|---|
| Fence | DAD* | 1 | alarm.acknowledged | 14 | |
| Fire | F1** | 1 | alarm.cleared | 31 | |
| Door forced | DR** | 2 | alarm.acknowledged | 62 | |
| Tamper | TM** | 2 | manual reset | 9 | |
| Line fault | LF** | 3 | alarm.cleared | — |
| Raised | Alarm | Point | Site | Acknowledged | By | Cleared |
|---|---|---|---|---|---|---|
| 21:41:07 | Fence | DAD5 | Southgate | 21:41:21 | J. Vance | — |
| 18:02:44 | Door forced | DR12 | Harbour West | 18:02:59 | K. Osei | 18:07:10 |
| 14:26:31 | Tamper | TM04 | Northline | 14:27:12 | M. Rowe | 14:41:02 |
Configured, not compiled
- Alarm types are rows. Name, ID mask, priority tier, queue colour and reset behaviour are edited in the browser and take effect without a release.
- Points carry identity. Each physical input is a named point with a site, a level, a map position and a camera — so an alarm arrives as a place, not a code.
- Acknowledgement is authoritative. FusionX sends the acknowledgement frame that names the alarm being acknowledged, and shows a pending state until the exchange confirms it. It never claims an ack it did not get.
- Raise and clear cannot cross. Each occurrence carries a key, so a clear that arrives during a raise cannot close the wrong one, and duplicate notifications are impossible by construction.
- Nothing is left standing. A reaper closes alarms whose clear never arrived, so an old alarm cannot sit lit on the wall for a week.
- Isolated from call handling. A bad alarm configuration cannot break the code path that carries a live call.
Incidents & responsibility
One alarm produces an alarm row, a queue row, an automation run and a notification per recipient. The incident is the object that joins them: one owner, one ordered history, and an honest record of what the system asked for against what came back.
| Source | alarm · DAD1 |
| Severity | High |
| Owner | Operator2 |
| Acknowledged | Operator2 · 14.2s |
| Verified | Operator2 · patrol sent |
| Source state | Still active |
| Automation | Completed |
| camera.snapshot | Confirmed |
| notify.operator | 3/3 sent |
| webhook.post | Timeout |
| 06:14:02 | Alarm | Alarm received — Car Break Alarm DAD1 |
| 06:14:02 | System | Policy "Security and life-safety" applied — severity HIGH |
| 06:14:02 | Automation | Rule "Perimeter night" ok — 4 sent, 1 failed |
| 06:14:07 | Fault | Automation step failed — webhook.post: the device did not answer |
| 06:28:03 | Operator | Operator2 took ownership |
| 06:28:26 | Operator | Verified by Operator2 — patrol sent |
The workspace answers one question
- Where, what, and what was done — side by side. The plan fills its pane and centres on the alarm point, the camera bound to that point is already open, and the details column carries owner, severity and the state of the source. Where there is no camera to show, the pane says so in the incident's own terms — an incident opened by hand has no alarm point to blame.
- The owner has a face. The incident list carries the owner's photo between the title and the severity — their initials in their own colour if they have no photo, an empty ring while no one has taken it. It is the same face the timeline draws, so one glance down the list says who holds what.
- Thirty seconds before the alarm. One button replays the recorded video from just before it fired, with the wall-clock time on the picture and a marker at the exact moment of the alarm — because the useful question is what happened in the run-up, and the live view cannot answer it.
- An append-only timeline carrying device events, policy decisions, automation results and every operator action, in one order, each attributed.
Six states, and only forward
OPEN→ACKNOWLEDGED→IN_PROGRESS→RESOLVING→RESOLVED→CLOSED, each stamped with who did it. A closed incident cannot be quietly reopened and edited.- Which alarms become incidents is a setting, not a rule of the software. Every alarm type carries a Create an incident switch: fire and duress on, station faults off. An alarm-only type still queues, sounds, acknowledges at the exchange and fires rules — it simply never becomes tracked work.
- An operator can overrule it. Raise incident on the alarm row promotes the one that turns out to matter. It reuses the engine's own correlation key, so it cannot produce a second incident for a point that already has one, and the timeline records that a person chose it.
- Or open one by hand. For what no device raised — seen on a camera, phoned in, walked up to the desk — New incident takes a title, a type (security, suspicious activity, fire, medical, access, welfare and more), a severity, the site and level. The reference is assigned in the same sequence as every other incident, the timeline says a person opened it, and a double-click is still one incident.
- Truthful automation status — requested, sent, confirmed, failed, timed out. "Sent" and "confirmed" are different words on purpose.
- It owns nothing and executes nothing. If the incident layer fails entirely, the alarm still reaches the operator.
Why a device state and a unit of work are kept apart, the four gates that decide when an alarm becomes an incident, every case where you get an alarm and no incident, and how PSIM, alarm receiving centres, ISA-18.2 and ITIL each draw the same line.
Read the brief →Rules — event → filter → ordered steps
The module that makes the other modules one system. Every id in a rule is picked from a list of what the system actually has, so a rule that looks configured really is.
| # | Action | Target | On error | Last run |
|---|---|---|---|---|
| 1 | Take a snapshot | {station} | Continue | 1.1s |
| 2 | Show a tab on the console | maps | Continue | 0.2s |
| 3 | Play announcement | zone: Platform 2 | Continue | 2.4s |
| 4 | Switch an output on | strobe P2W | Stop | 0.3s |
| 5 | Notify operators | desk 1017, 1035, 9099 | Continue | 0.1s |
| 6 | Call a webhook | POST cad.internal/incident | Continue | timeout |
Nine things that can fire a rule
alarm.raised·alarm.acknowledged·alarm.clearedcall.ringing·call.answered·call.endedcall.door_opened— the exchange confirming a door moved, not FusionX confirming it asked.call.unwatched— a call ringing or an alarm standing with nobody watching the queue. The one trigger about something that goes on being true.detection.human— a person arriving in a camera's view.detection.object— an object arriving in a camera's view, with its name and whether it is a threat.access.granted·access.denied·door.forced·door.held_openand twelve more door, lockdown, reader and controller events from the access control system — with steps to open a door for a moment or change its mode, confirmed only when the door reports it.
Design decisions worth knowing
- Nothing arms itself. New rules are created in dry-run. There is a Test run button, and nothing reaches a device until someone deliberately arms it.
- No branching. A rule engine that can branch is a rule engine somebody has to debug at 3am. Two rules with different filters say the same thing and can be read at a glance.
- Rules latch and stand down. A rule that switched a strobe on holds it until its reset event arrives — or an admin presses Reset — and its own notifications close themselves at the same moment.
- Rules can call rules, to a hard depth limit, so a shared procedure is written once.
- Steps run in order, or all at once — whichever the procedure is.
| Action | What it does |
|---|---|
pa.announce | Play a stored message to a zone; the zone expands when the rule runs, so adding a speaker needs no rule edit. |
camera.snapshot | Capture a JPEG from the station's camera and attach it to the run and the incident. |
video.record | Record N seconds of a station's camera. |
output.pulse | Strobe or relay: on, wait, off. |
output.set | Switch an output on or off and hold it until the rule is reset. |
notify.operator | Put a message on named operators' consoles — one row each, so "who has seen it" is answerable. |
notify.close | Close the notifications this rule raised, when it stands down. |
console.switch_tab | Bring the right tab up on the operator's screen — the map, the camera — without them navigating. |
webhook.post | POST the event to an external system, with the event's fields substituted in. |
icx.send | Send one exchange frame, for the integration nobody anticipated. |
rule.run / rule.reset | Run another rule, or stand one down. |
wait / audit.note | Pause between steps; write a line into the run log that proves the rule matched. |
Access control
Doors from the site's own access control system appear on the console, on the map and in the rules: who was let in, who was refused, which door is forced or held. FusionX supervises and commands doors. It never decides who may pass and never holds a card.
| Name | Kind | Site | Status | Doors |
|---|---|---|---|---|
| Head office | Gallagher Command Centre | Sydney | ok | 48 |
| Depot | Inner Range Inception | Parramatta | ok | 12 |
| Plant entrances | ONVIF (Profile A/C, any vendor) | Port Botany | down 2 min | 6 |
| Door | State | Lock | Camera | Intercom |
|---|---|---|---|---|
| Main Entrance | closed | locked | Lobby PTZ | 1035 |
| Loading Dock | forced | locked | Dock 2 | 1041 |
| Plant Room | held open | unlocked | Plant cam | — |
Supervise and command, never decide
- The access system stays in charge. Cards, PINs, schedules and access rights live in the access control system. FusionX stores no credential, and an event that carries a card number has it dropped before it is stored.
- One vocabulary for every brand. Access granted and denied (with the reason: unknown card, expired, out of hours, anti-passback, wrong PIN), door opened, closed, forced, held open, locked, unlocked, mode changes and lockdown, reader and controller health, all arriving as the same events whatever the brand.
- Doors on the map. A door sits on the floor plan with its live state, its camera and its intercom. Its card shows recent events and the door controls. A door not yet placed is offered by its name, ready to drop onto the plan.
- The DOOR button knows the door. When the calling intercom is bound to a door, the operator's door release goes to the access control system, and the console shows whether the door actually opened.
- Confirmed, not assumed. A command is sent, acknowledged by the access system, then confirmed only when the door itself reports the change. A command past its deadline is never sent, and every command is written to a tamper-evident, hash-chained log.
- Rules and incidents. Door and access events trigger rules: open a camera, page a supervisor, unlock a door for a moment, change a door's mode. A forced or held door raises an incident tied to that door.
- The customer's off switch. Each access system has a switch that stops all door commands from FusionX while events keep flowing. Operators see only the sites they are assigned.
- Proved on site. "Test connection" checks the address, the login, the doors and the event feed without sending a single command.
Connects to
Gallagher Command Centre (REST API), Inner Range Inception, Verkada (cloud, Australian region), Axis A1001 / A1210 / A1601 / A1610 door controllers, TANlock electronic rack and cabinet locks, and any ONVIF Profile A / C door controller: the open standard implemented by Axis, Hikvision, Dahua, Suprema, ZKTeco and others.
Checked against the published API
Each connector is tested against the vendor's own published specification, pinned in the product, and fails its build if a field it relies on disappears. On site, the built-in connection test confirms the real system before it goes live.
Next connectors
Inner Range Integriti, Genetec Security Center, LenelS2, Brivo and Avigilon Alta follow through the vendors' partner programmes. Lockdown from FusionX is reserved for a two-person release; until then lockdown is started in the access system and shown in FusionX.
Its own licence and its own service
Access control is a licensed feature. It runs in its own service beside the console, so a slow or unreachable access system never holds up a call or an alarm.
Public address
Zones, stored messages, text-to-speech, a scheduler and live push-to-talk — driven by an operator or by a rule, over the same path either way.
| Evacuate — proceed to nearest exit | 0:14 | Emergency |
| Area closing in ten minutes | 0:09 | Routine |
| Security to Platform 2 (TTS) | 0:06 | Generated |
| Weekdays 06:00 | Depot opening | Armed |
| Daily 22:30 | Closing notice | Armed |
| 1st of month | Alarm test tone | Paused |
Announce the way operators think
- Zones are the unit. "Announce to the East platform", not a list of device numbers. Speakers can still be added individually for the odd case.
- Stored messages and text-to-speech. Type a line, get an announcement — with a chime prepended and loudness normalised so every message lands at the same level.
- Live push-to-talk from the browser to the zone, no handset required.
- A scheduler with real recurrence. Weekday openings, monthly test tones, one-offs — armed, paused, or run now.
- Import and export. Zones, speakers and messages move by spreadsheet, with a dry run that shows what would change before anything is written.
- Rules announce over the same path an operator does, so an automated evacuation sounds exactly like a manual one.
- Only what belongs here. Each stored message can be shown to operators or kept out of their list with one click, so nobody picks from announcements meant for another site. Hidden is not deleted: schedules and presets still use it.
Notifications
Telling the right person is a product, not a side effect — and knowing whether they saw it is the point.
| When | Notification | Source | Recipients | Seen |
|---|---|---|---|---|
| 21:41:10 | Fence alarm — Platform 2 West | rule | 3 | 1 of 3 |
| 20:12:44 | Camera Dock 2 unreachable for 5 min | health | 2 | 2 of 2 |
| 19:58:02 | Queue unwatched for 90s | rule | 4 | 4 of 4 |
| 18:30:00 | Shift handover — night team on duty | schedule | 6 | 6 of 6 |
One copy each
- Per-recipient rows. Dismissing yours does not clear anyone else's, and the system can answer "who has actually seen this".
- Toast, sound and badge on the console, with a mute control the operator owns — and a visible notice when the browser has not yet allowed sound.
- They close themselves. When the rule that raised a notification stands down, its notifications close with it. No stale card left on a screen at 4am.
- Notifications are history. A rule whose only step is a notification still fills Event History — the record does not depend on someone also configuring an audit note.
- Outward too. The same event can go to an external system by webhook in the same run.
Call management
Intercom and help-point calls from the exchange or over SIP, answered in the browser, with the queue behaviour set by the site rather than by the software.
| Type | Tier | Queue colour | Emergency | Auto-record | Camera |
|---|---|---|---|---|---|
| Fire | 1 | Yes | Audio + video | Bound | |
| Help point | 2 | No | Audio + video | Bound | |
| Lift | 2 | Yes | Audio | Bound | |
| Access / gate | 3 | No | Audio | Bound | |
| Service | 4 | No | Off | — |
| Desk | Queues | Presence |
|---|---|---|
| 1017 | 9009, 9033 | Online |
| 1035 | 9009 | Online |
| 9099 | pilot | Unmanned |
| Exchange (ICX) | Connected |
| SIP registrations | 6 of 6 |
| Media relay (TURN) | Two-way audio |
| Answer latency | 85 ms |
The queue is yours to shape
- Call types, tiers and colours are data. A site decides what outranks what, and what colour it wears in the queue, without a software change.
- Multi-queue operators. A desk subscribes to any number of queues; the pilot queue is derived from live subscriptions rather than hard-coded.
- Answer in the browser. WebRTC audio with a media relay for the sites that need one — no softphone to install, no handset to maintain.
- Two call sources, one queue. Exchange calls and SIP-only calls appear side by side, each badged with where it came from.
- Each operator works the way the site does. User Management sets every operator's type: a FusionX FreeSWITCH user answers SIP calls in the browser with no exchange at all; a VirtuoSIS SIP user answers in the browser through their own SIP line on VirtuoSIS, with call data over ICX; a VirtuoSIS desk answers on the Commend handset, with call data over ICX.
- Direction is recorded, not assumed. Incoming and operator-initiated call-backs are distinguished, and both reach call history.
- Controls that mean something. Answer, cancel, hold, mute and door release — and the door release reports whether the door actually moved.
- A call back that cannot connect says why. An exchange will not deliver a call back to a desk whose line is already ringing, and that used to be a call that simply stayed silent. Now the console names the call ringing the line and offers to clear it and call back in the same moment; it auto-answers only the call back’s own leg, never whatever else happens to ring.
SIP devices & trunks
Intercoms, speakers and phones register to FusionX itself, with no exchange in between. Queues, operator calls, door release and announcements run on FusionX's own SIP server, beside a VirtuoSIS exchange or without one.
| Ext | Name | Type | Way in | Video | Status |
|---|---|---|---|---|---|
| 2001 | Gate 1 intercom | Intercom | Site gateway | SIP H.264 | Registered |
| 2002 | Car park help point | Intercom | Site gateway | Camera 14 | Registered |
| 2003 | Lobby speaker | Speaker | Site VM | — | Registered |
| 2004 | Remote kiosk | Intercom | Internet (TLS) | SIP H.264 | Registered |
| 2005 | Workshop phone | Phone | Site gateway | — | Offline |
| Number | Mode | Overflow |
|---|---|---|
| 9100 | Pick | 9200 after 60 s |
| 9200 | Distribute | — |
| Building PBX | Registered |
| Carrier (IP trunk) | Trusted |
| Inbound 02 9000 1234 | → 9100 |
| Outbound prefix | 0 |
FusionX's own SIP server
- Devices register to FusionX directly. Each SIP intercom, speaker or phone has its own extension and a password FusionX generates and stores encrypted. Add one, add a numbered range in one step, or import a spreadsheet with a dry run first.
- A setup sheet for every device. Everything to enter on the device itself: server, port, extension, password and codecs (Opus, G.722, G.711).
- The right address for every way in. A device on a site's LAN registers to that site's gateway or site VM. A device with no gateway connects over the internet with TLS and encrypted (SRTP) audio. Several sites and several gateways each get their own address, so calls and audio always find the way back.
- Live status. The device list shows which devices are registered right now, from which address and which device, whichever way in they use.
- Queues with two behaviours. Pick: every subscribed operator sees the call and whoever answers takes it. Distribute: FusionX rings the free operators one at a time, longest idle first. The caller hears ringback while waiting; a call waiting too long goes to an overflow queue or extension.
- Same console, same controls. SIP calls appear in the operator queue beside exchange calls, badged by source. Answer, hold, mute and door release work the same, and an operator can call a device from the console.
- Video from the device or a camera. A device shows its own SIP video (H.264), or any camera bound to it.
- SIP trunks to other systems. Connect a PBX, a carrier or another system, registering with a username and password or trusted by address. Incoming numbers route to a queue or extension, each number on its own if needed; operators and devices dial out with a prefix, presenting the caller ID you set.
- Announcements reach them too. Public address plays to SIP devices, trunk numbers and exchange zones in one announcement.
- Side by side with VirtuoSIS. A site can run exchange stations and SIP devices together, or SIP alone with no exchange at all. Trunks and devices each have their own port, so neither touches the exchange connection.
Sites & remote sites
One directory — country, state, site, level — shared by maps, cameras, announcements and reporting, so a site means the same thing in every module.
| Site | Region | Link | Stations | Cameras | Speakers | Levels | State |
|---|---|---|---|---|---|---|---|
| Southgate Depot | AU · NSW | LAN | 42 | 18 | 29 | 3 | Healthy |
| Harbour West | AU · NSW | Gateway | 26 | 12 | 14 | 2 | Healthy |
| Northline Yard | AU · VIC | Gateway | 17 | 9 | 6 | 1 | 1 camera down |
| Kestrel Interchange | AU · QLD | Gateway | 31 | 14 | 22 | 4 | Healthy |
| Old Mill Substation | AU · VIC | No handshake | 6 | 3 | 2 | 1 | Offline 4m |
An estate, not a list
- One tree, everywhere. The same Country → State → Site → Level hierarchy drives the camera tree, the PA zone tree, the map and every report filter.
- Floor plans per level, with devices dragged onto them and remembered.
- Remote desktop and web tools at the site. Launch a VNC or RDP session to site equipment, or embed a site's own web tool as a console tab — checked at save time so a page that refuses to be embedded is caught then, not at 2am.
- Import and export. Stations, cameras and speakers move by spreadsheet with a transactional dry run.
Site gateways
A small appliance at each remote site brings its intercoms, cameras and speakers onto one encrypted network — and tells the truth about whether it is actually up.
| Gateway | Site | Tunnel IP | LAN routes | Last handshake | State |
|---|---|---|---|---|---|
| gw-harbour-01 | Harbour West | 10.100.1.1 | 192.168.10.0/24 | 12s ago | Online |
| gw-northline-01 | Northline Yard | 10.100.2.1 | 192.168.22.0/24 | 9s ago | Online |
| gw-kestrel-01 | Kestrel Interchange | 10.100.3.1 | 10.42.0.0/23 | 21s ago | Online |
| gw-oldmill-01 | Old Mill Substation | 10.100.4.1 | 192.168.44.0/24 | 4m 12s ago | No handshake |
| + add | 10.42.2.0/24 → gw-kestrel-01 | new camera VLAN |
| − remove | 192.168.44.8/32 → gw-oldmill-01 | decommissioned |
Honest liveness
- Up means the tunnel handshook. Gateway state is read from the encrypted link itself, not from a heartbeat the gateway sends about itself — a box that has lost its key cannot report itself healthy.
- Routes are derived from the site record. The LAN subnets you enter against a site become the tunnel's routes. Nothing is hand-edited on the appliance.
- Preview, apply, and roll back. Every routing change is shown as a diff, backed up before it is written, and rolled back automatically if the tunnel does not come back.
- Media, not just management. The gateway carries camera video, intercom audio and remote-desktop sessions for its site, so a remote depot behaves like a local one.
Webhooks & API — both directions
FusionX is rarely the only system in the room. It tells your dispatch, PSIM, building and security systems what happened, and those systems report back into FusionX, where rules, alarms and incidents handle them like anything else.
POST https://cad.example.com/api/events Authentication: auto (Basic or Digest) Verify TLS: yes { "source": "FusionX", "type": "alarm", "alarm": "{alarm_name}", "point": "{label}", "site": "{site}", "station": "{call}" } ── on the incident timeline ───────────────────────── 21:41:07 ✓ webhook cad.example.com 200 184 ms
Available today. One step in a rule, written once. The {placeholders} fill from each event, and a rule is refused when it saves if its trigger can't supply them.
POST /api/v1/alarms Authorization: Bearer fxk_live_7Q… scope: alarms:control { "point": "Gate 4 forced", "site": "Southgate Depot", "severity": "high" } 202 Accepted { "action_id": "act_01J…", "state": "pending" } ── the real outcome, not just "sent" ────────────────── GET /api/v1/actions/act_01J… → "completed" or the action.completed event to your endpoint
On the roadmap. Each integration gets its own key, limited to what it needs. Doors, outputs, live PA and alarm reset need an extra life-safety approval. Illustrative request: the final contract publishes with its spec.
Webhook on any event
Any of the 28 triggers can call your CAD, ticketing, BMS or SIEM as one step in a rule. The result is recorded on the incident, including a timeout.
Raw exchange frames
Where a third-party panel speaks the exchange's own protocol, a rule can send it a frame directly, with placeholders filled from the event.
Field systems report through the exchange
Alarm inputs, door contacts and help points wired to the intercom exchange arrive as alarms and calls, and rules can act on them. Cameras report analytics and their own health.
Access control systems
Gallagher, Inner Range Inception, Verkada, Axis, TANlock rack locks and any ONVIF Profile A / C door controller report access and door events, and take door commands from the console and from rules. See Access control.
REST API v1 with scoped keys
Read calls, alarms, incidents, cameras, recordings and PA. Raise or acknowledge alarms, open incidents, play stored messages, move cameras. Each key has its own scopes, sites, expiry and audit trail.
Signed event subscriptions
Subscribe a URL to the events it needs, each delivery signed, retried and logged. Alarm and incident events have their own queue, so a slow endpoint never delays an alarm.
Devices and video, without an SDK
Station names come from the exchange, not retyped. ONVIF and RTSP cameras, and MJPEG with Basic or Digest authentication: no proprietary recorder required.
Statistics & reporting
Live figures for the shift running now, and answerable history for the meeting on Monday.
| Operator | Answered | Avg response | Avg talk | Alarms acked | Incidents closed |
|---|---|---|---|---|---|
| J. Vance | 312 | 5.1s | 1m 44s | 22 | 14 |
| K. Osei | 288 | 6.8s | 2m 02s | 18 | 11 |
| M. Rowe | 241 | 7.4s | 1m 58s | 15 | 9 |
| A. Duarte | 202 | 6.2s | 1m 51s | 9 | 4 |
Ask a real question
- Filter by anything the estate knows: date range, site, region, level, call type, alarm type, operator, desk, queue.
- Response and handling times measured from the ring, not from the moment a record happened to be written.
- Per-operator activity for supervision, with the same scoping rules the console uses — an operator sees their own figures, a supervisor sees the team.
- Evidence attached. A row in a report leads to the recording, the transcript, the snapshot and the incident timeline behind it.
- Export to CSV or a branded PDF carrying the site's own logo.
- Incidents are statistics too — how many, how fast they were acknowledged and resolved, how often a point has done this before — as a band on the incident list and a report you can export.
- Medians and 90th percentiles, never an average as the headline. On the reference install the mean time to acknowledge a fence alarm was 35 minutes, although most were answered inside one: a handful left over a shift change outweighs everything else. The median says what usually happens; the 90th says how bad the bad ones are.
- Live view for the shift running right now: who is on which desk, what is waiting, what is standing unacknowledged. It sits beside the reports under the one Statistics tab — Statistics | Live stats — so the figures for now and the figures for Monday are one click apart.
Administration
The parts that are boring until the day they matter.
Roles & permissions
Around two hundred routes are permission-gated, edited on one grid, with every change written to the audit trail. Five roles ship as a starting point; make your own. A supervisor or manager signs in to an admin panel trimmed to their role, and moves between it and the operator console from the profile menu, both ways.
You cannot lock everyone out
The last administrator standing cannot be disabled, demoted or deleted — enforced at the user level and the role level, on both edit paths.
Two-factor and session control
TOTP enrolment per user or enforced estate-wide, idle timeout with a countdown, and a disabled account's live sessions ended rather than left running.
Operator readiness
A new operator needs a role, a desk, a queue and a voice endpoint. The readiness panel shows all four at once, because three of them used to fail silently.
Backup, restore & version history
Scheduled backups, restore from the browser, and a record of what version was running when — plus an off-box copy for the day the box is the problem.
Multiple systems, one install
Build, save and switch whole configured systems — a commissioning project, a training system, the live one — with one active at a time and no cross-contamination.
Audit & event history
Who changed what, when, and from where; alongside an event history that covers calls, alarms, announcements and notifications in one searchable list.
System monitor & logs
CPU, memory and disk on the console itself, service health, and a log viewer — so the first question after an odd night has an answer in the browser.
Your brand, not ours
Upload a logo and set the accent colour; it carries through the console, the login page and exported reports.
The cloud platform — one tenant per customer
Hosted FusionX is not one shared system with a customer column. Each customer gets a tenant of their own: their own console, database, voice relay, web address, site tunnels and backups, held to their own share of the host so that no neighbour can starve them.
Isolated by construction
- Own share of the host. Each tenant runs inside its own memory and CPU ceiling. The alarm path is weighted above recording, so a busy camera wall never delays an alarm.
- Own voice relay and address. Each customer reaches their own console at their own web address, and their audio goes through a relay of their own.
- Own tunnels. A site's gateway connects only to its own customer's tenant.
- Own backups. Nightly, sealed with the tenant's own key and shipped off-site. The control plane is backed up the same way.
Run by the supplier, visible to you
- A staging copy first. Any tenant can be cloned to a staging copy that takes each release before the live system does.
- Support by consent. The supplier opens a customer's console only if that customer allows it, and every action in the portal is audited.
- Room before it's needed. The portal tracks each host's capacity. A new tenant, or a copy, is refused when the host has no room, rather than squeezing in.
- Cloud to site. A hosted tenant exports to a single file that runs on a site VM.
The FusionX site VM — from download to first call
For a site that keeps everything in its own building, FusionX ships as a ready virtual machine. The VMware and Hyper-V images carry every part of the platform on the disk, so they install on a network with no internet at all.
Download
A private link, valid for 48 hours, with the checksum of every file beside it.
Install
Import into VMware, or double-click the Hyper-V installer. It checks the disk and builds the VM.
First boot
The VM's console asks four things: network, admin password, site name, first web admin.
Operate
Browse to the address it prints and sign in. The 60-day trial is already running.
VMware
One file to import. Settings, disk and network adapter come with it.
Hyper-V
Double-click. It copies and checks the disk, picks the switch and starts the VM, with or without Secure Boot.
Your own Ubuntu server
For any other hypervisor: unzip on a fresh Ubuntu 22.04 or 24.04 VM and run one script. This route fetches Ubuntu's own packages.
FusionX first-time setup ======================== == 1/4 Network eth0: 192.168.251.251/24 Keep these network settings? [Y/n] n Static address for this VM. Example: 192.168.1.50/24 Address/prefix: 10.20.4.15/24 Gateway (blank for none): 10.20.4.1 DNS servers, space separated (blank for none): 10.20.4.1 == 2/4 The fusionx admin account (the admin menu, nothing else) New password for fusionx (10+ characters): Again: == 3/4 FusionX Site or customer name: Southgate Depot == 4/4 The first web admin First admin user name: control First admin email: control@southgate.example First admin password: Done. Browse to https://10.20.4.15/ For the admin menu, log in as fusionx.
Set up from the VM's own console. It starts on a fixed address, 192.168.251.251, with DHCP off, so nothing on the site network is surprised by it.
FusionX on fusionx-site 10.20.4.15/24 Trial: free trial: 47 days left 1) Status 9) Image history 2) Services running 10) Roll back to an earlier version 3) Network settings 11) Apply an update 4) Set a static address 12) Licence 5) Use DHCP 13) Restart FusionX 6) Site name 14) Restart the VM 7) View logs 15) Shut the VM down 8) Back up now / list backups 16) Disk space 17) Change my password 0) Log out Choose:
Everything a site needs, nothing it doesn't. The site's own administrator gets this menu, over SSH or on the console. It is not a shell.
Secure by default
- Two accounts, two jobs. The site's
fusionxlogin can look after the host: address, site name, logs, services, backups, updates, licence, restart. It has no root rights. Root stays with the supplier. - A network change can't strand the VM. New settings revert on their own unless they are confirmed within two minutes.
- The disk takes space as it fills. Make the virtual disk bigger and the VM grows into the space. If the disk passes 92% full, recording pauses until it is back under 88%. Calls and alarms carry on.
- Logs can't fill the disk. Every service's log is capped in size.
Updates without the internet
- An update is a file. Bring it on a USB stick, or the VM fetches it with its customer's own update token. Apply it from the menu.
- Every version is kept. Image history lists what ran when. Rolling back to an earlier version is one menu item.
- Back up now, and prove it. Each backup is test-restored as it is taken.
A lapsed licence never silences an alarm
Without activation, from day 61 the administration pages lock and licensed extras pause. Operators keep answering calls and alarms, and keep the console and maps.
Terms set for each customer
The supplier sets features, users, cameras and end date per site. The key is made for that one installation, and works offline.
New hardware is noticed
Moved to different virtual hardware, the VM gives a week's notice, then asks to be activated again. The supplier sees every request.
Ports & firewall
What has to be open, and against which source. Anything not listed here does not need a rule.
| Service | Port | Proto | Allow from | Purpose |
|---|---|---|---|---|
| Console — operators & admin | 443 | TCP | Operator workstations | The entire web console, including the WebRTC voice leg, which is multiplexed over this one port. |
| HTTP redirect | 80 | TCP | Operator workstations | Redirects to HTTPS. Also used by the certificate authority if you auto-renew a public certificate. |
| Console over plain HTTP | 8000 | TCP | Operator workstations | Non-TLS access for a closed LAN. Close it if you use 443. |
| SIP signalling | 5060 | UDP | Intercom exchange, SIP endpoints | Call setup between the exchange and FusionX. |
| SIP devices | 5070 | UDP + TCP | SIP intercoms, speakers, phones | Devices that register to FusionX directly. Behind a site gateway, devices use the gateway's address and the gateway forwards to FusionX through its tunnel. |
| SIP trunks | 5080 | UDP | PBX, carrier, other SIP systems | Calls in and out over a SIP trunk, on their own port apart from the exchange and the devices. |
| RTP voice media | 10000–20000 | UDP | Intercom exchange, SIP endpoints | Two-way audio. The range is configurable; size it to concurrent calls, not to endpoints. |
| Call recording media | 6000–6100 | UDP | Intercom exchange | The recorder's own receive legs, separate from live call media. |
| STUN / TURN | 3478 | TCP + UDP | Operator workstations | Lets a browser find a media path when the direct one is blocked. |
| TURN relay media | 49160–49200 | UDP | Operator workstations | Carries relayed audio when TURN is actually used. |
| Administration (SSH) | 22 | TCP | Admin jump host only | Maintenance. Should never be reachable from a general user VLAN. |
| Target | Port | Proto | Purpose |
|---|---|---|---|
| Intercom exchange — event link | 18000 | TCP | Calls, alarms and door events. The agent holds one session; its send socket binds locally to 19000. |
| Intercom exchange — SIP / RTP | 5060 · 10000–20000 | UDP | Signalling and audio to the exchange and its endpoints. |
| Cameras — RTSP | 554 | TCP | Live video from ONVIF and RTSP cameras. |
| Cameras — HTTP / MJPEG / ONVIF | 80 · 443 · 8000 | TCP | Snapshots, MJPEG streams and ONVIF device queries. Digest authentication is supported. |
| Site equipment — remote desktop | 3389 · 5900 | TCP | Only if you launch RDP or VNC sessions to site equipment from the console. |
| DNS · NTP | 53 · 123 | UDP | Name resolution and clock. Both can point at internal servers. |
| Component | Port | Note |
|---|---|---|
| Database | 3306 | Bound to localhost. Never expose it. |
| Session store | 6379 | Bound to localhost. |
| Video analytics service | 8001 | Detection runs here, in its own process, on the local machine. |
| Remote-desktop broker & bridge | 8080 · 6080 · 5901 | Reached only through the console on 443. |
| Voice engine — control & secure WebSocket | 8021 · 7443 · 5065 · 5066 | Internal interfaces; the browser reaches the voice leg through 443. |
What needs the internet
These are the only features that reach beyond your network. Everything else — including speech-to-text, announcement voice synthesis and person and vehicle detection — runs entirely on the server, with no external service involved.
| Feature | Reaches | Port | With no internet |
|---|---|---|---|
| Street map backdrop | Map tile provider | 443 TCP out | The Maps tab still works: site pins, levels, uploaded floor plans and alarm placement are all local. Only the street basemap behind them is blank. |
| Live stream as a camera source | The streaming platform | 443 TCP out | That one source type is unavailable. Every other camera type is unaffected. |
| Public TLS certificate renewal | Certificate authority | 443 out · 80 in | Issue certificates from your internal CA instead, or run the console on the plain-HTTP LAN port. |
| Configuration backup off the box | Your hosted repository | 443 TCP out | Back up to local disk or a network share on a schedule. Restore from the browser works either way. |
| Webhooks to an internet-hosted system | Whatever you point them at | 443 TCP out | Webhooks to systems on your own network need no internet. Only an off-site target does. |
| Clock synchronisation | Public time servers | 123 UDP out | Point at an internal time source. Accurate time matters here — it timestamps evidence. |
| Installation and updates | Software and model sources | 443 TCP out | Stage the installer and the speech and detection models offline. Once installed, none of it phones home at run time. |
FusionX makes no call to Claude, ChatGPT or any other hosted AI service — there is no such integration anywhere in the product, and no API key to buy or keep alive. The features people most often assume are cloud-powered are the ones below, and every one of them runs on your own server.
| Feature | Verdict | How it actually works |
|---|---|---|
| Person & vehicle detection | Local | A YOLO model loaded by the analytics service on the same machine. Nothing leaves the box — not the frame, not the result. |
| Video analytics | Local | The same service. In FusionX, "video analytics" is the detection engine — there is no separate cloud tier behind it. |
| Speech-to-text transcription | Local | A Whisper model running on the server's CPU, per audio channel. Call audio is never uploaded anywhere. |
| Intent detection on transcripts | Local | Keyword and phrase sets you configure in the database. Deterministic, editable, and auditable — not a model's opinion. |
| Announcement voice (text-to-speech) | Local | An on-box neural voice engine in its own worker. Voices are files on disk. |
| Device & call history, event history | Local | Your own database on the same server. History, search and 30-day lookups never touch the internet. |
| Incidents, timeline and audit | Local | Same database. Nothing is mirrored off-box unless you switch on backup to a repository. |
| Statistics and reporting | Local | Queries against your own data, rendered on the server. Exports are generated on the box. |
Server & workstation sizing
What to buy for a busy ten-operator control room, and what changes when analytics, detection and video recording are switched on.
| Component | CPU | Memory | Basis |
|---|---|---|---|
| Console, API and database 10 operators, polling and live queue | ~1 core | ~700 MB | Measured resident: web 245 MB, database 206 MB, session store 13 MB, plus working headroom. |
| Exchange link and voice 10 concurrent calls | ~0.5 core | ~350 MB | Measured: event agent 136 MB, voice engine 61 MB, observers and workers. |
| Camera hub 16 distinct streams | ~0.5–1 core | ~300 MB | Relay and frame cache only — frames are not re-encoded. |
| Person & vehicle detection | ~1 core hard-capped | ~400 MB | Measured: 367 MB resident; one frame costs 244 ms. The engine lowers each camera's rate to hold the total near one core, whatever the camera count. |
| Speech-to-text | ~1 core while running | ~1 GB once loaded | Runs on a background queue, not in the call path. The model stays resident after the first transcription. |
| Continuous video recording per camera | ~0.05 core | small | 320×240 at 1 fps, 50 kbps — deliberately cheap, because it runs all day on every camera. |
| Event video recording per camera, while active | ~0.2 core | small | 1280×720 at 15 fps, 2 Mbps — only while an event is being recorded. |
| Profile | vCPU | RAM | System disk | Notes |
|---|---|---|---|---|
| Calls, alarms, live camera viewing no analytics, no video recording |
4 | 8 GB | 100 GB | The shape the reference system runs today, with the whole stack on it. |
| + person & vehicle detection up to 16 cameras under detection |
6 | 12 GB | 100 GB | Detection self-caps near one core, so this step is predictable however many cameras you point at it. |
| + continuous video recording 32 cameras |
8 | 16 GB | 100 GB + recording volume |
Recording is the variable that grows. Put it on its own volume from day one. |
| Large site 64+ cameras, detection, recording |
12–16 | 24–32 GB | 100 GB + recording volume |
At this size, move video recording to its own host and leave the console server to operators. |
Add 2 vCPU and 2 GB if you transcribe every call rather than selected ones — the model holds about a gigabyte resident and takes roughly a core while it works through the queue. Use SSD, not spinning disk, for the database and the recording volume alike.
| What | Rate | Per camera, 30 days | Note |
|---|---|---|---|
| Continuous video | 50 kbps | ~16 GB | Runs all day on every enabled camera. This is the number that sizes your volume. |
| Event video | 2 Mbps ≈ 900 MB/hour | event-driven | Only while an event records. Budget from your alarm and call rate, not from clock time. |
| Call audio | ~0.5 MB per minute | — | Stored in the codec it arrived in, with no re-encoding. 150 calls a day at 3 minutes is about 7 GB a month. |
| Transcripts, incidents, history | kilobytes | — | Text against the database. Negligible beside video. |
Worked example. 32 cameras recording continuously for 30 days is about 510 GB, plus event clips and call audio — so a 1 TB recording volume holds roughly two months. A storage cap and automatic purge are built in, so the disk stops before it fills rather than after.
| Path | How to size it | 16-camera wall, 10 operators |
|---|---|---|
| Cameras → server | Distinct cameras being watched × stream bitrate. 720p H.264 is roughly 1–2 Mbps; 1080p 2–4 Mbps; MJPEG considerably more. | ~32 Mbps |
| Server → each operator | Tiles on screen × the rate each tile is served at. | ~16 Mbps each |
| Server → all operators | The above × operators. On a switched LAN this is unremarkable; across a WAN it is the whole design question. | ~160 Mbps |
| Server ↔ exchange | Voice only. Roughly 80 kbps per concurrent call. | < 1 Mbps |
Gigabit to the server and gigabit to each operator desk covers this comfortably on-premise. The figure that matters for a cloud deployment is the middle row: every operator's wall crosses the link.
| Item | Minimum | Recommended | Why |
|---|---|---|---|
| CPU | Dual core | Quad core | Decoding a wall of tiles is client-side work. A 16-tile wall is real load on a thin machine. |
| RAM | 4 GB | 8 GB | The console holds a live voice session and several video tiles in one browser. |
| Browser | A current Chrome or Edge | WebRTC voice and the camera tiles both depend on it. Keep it updated. | |
| Display | 1920×1080 | Two × 1920×1080 | Queue and call controls on one screen, wall or map on the other — the layout is built for it. |
| Network | 100 Mbps | 1 Gbps | See the middle row above: the wall is the traffic, not the calls. |
| Audio | USB headset with a microphone | Answering happens in the browser. There is no softphone to install. | |
| Permissions | Microphone allowed for the console's address | A blocked microphone lets the operator log in and register, then kills every call the moment it connects. Grant it by policy rather than leaving it to each operator. | |
On-premise or cloud
The same product either way. What changes is where the server sits and, as a result, what has to cross a boundary.
| On-premise · site VM | Cloud-hosted · tenant | |
|---|---|---|
| Internet required | No — a fully disconnected site is supported. | Yes — it is the path to the server. |
| Where the server sits | Your rack, on the same network as the exchange and cameras. | A hosted instance you reach over the public internet. |
| Operators connect via | LAN, on 443 or the plain-HTTP port. | HTTPS on 443 across the internet. |
| Cameras and intercoms | Reached directly on the LAN — the shortest possible media path. | Reached through the site link, so video and audio leave and re-enter the site. |
| Voice media path | Stays on the LAN. TURN relay is rarely needed. | Crosses the internet. Budget for TURN and open its relay range. |
| Bandwidth to plan for | Effectively none at the perimeter. | Every watched camera tile is a stream over the uplink. Size it for the wall, not the camera count. |
| Perimeter exposure | Nothing needs to face the internet. | 443 published, ideally behind your own gateway or allow-list. Each customer has its own address and voice relay. |
| TLS certificate | Internal CA, or a public certificate if the box can reach out. | Public certificate, renewed automatically. |
| Street map backdrop | Blank without internet. Floor plans and pins still work. | Available. |
| Backups | Local, each backup test-restored as it is taken; off-box copy optional. | Nightly, sealed with your own key and shipped off-site. |
| Updates | An update file, from a USB stick or fetched with your own update token, applied from the menu. One step to roll back. | Rolled out in rings, a staging copy first. A failure halts the release. |
| Delivered as | A ready VM for VMware or Hyper-V, set up from its own console in minutes. | A tenant of your own: console, database, voice relay, web address and backups. |
| Licence | 60-day free trial, then an activation key that works offline. | Managed by the supplier and pushed to the tenant, signed. |
| Changing your mind | Start here, or arrive from the cloud: a hosted tenant exports to a site VM. | Start here and move on-site later with one exported file. |
| Data residency | Recordings, transcripts and incidents never leave your building. | Determined by where the instance is hosted. |
| Survives a WAN outage | Yes — the control room keeps working. | No — operators lose the console. |
Specification
| Operator console | Dashboard · Statistics · Surveillance · Maps · Alarms · Incidents · Announcements · Notifications · Web — nine tabs, one voice session that survives moving between them. |
|---|---|
| Administration | Statistics (reports and live stats), stations, alarms, rules, public address, sites, recording, surveillance, settings — with gateways, SIP, audit, events, projects, roles and users beneath settings. Reachable from the operator console by every role that signs in to it. |
| Voice | Intercom exchange integration and SIP. FusionX's own SIP server: SIP devices registering directly (site gateway, site VM, or the internet over TLS + SRTP), pick and distribute queues with overflow, SIP trunks with registration or IP trust, inbound number routes and outbound prefixes, SIP video (H.264). Browser-based answering over WebRTC with media relay. Three operator types (FusionX FreeSWITCH user, VirtuoSIS SIP user, VirtuoSIS desk). Multi-queue desks. |
| Video | ONVIF / RTSP / MJPEG (Basic and Digest) / local / file / live stream. Shared upstream per camera, frame cache, stall watchdog, status from the video itself (frames first; two failed checks before a camera is called offline), named wall layouts, one shared empty-monitor symbol across console, walls and administration. Pan-tilt-zoom control (Axis, Dahua, Hikvision, custom URL) with server-side stop and its own permission. |
| Analytics | Person and object detection on the shared frame, CPU-budgeted: people boxed while present, objects when they arrive, threats in red, the colour of each arrival recorded. A per-site watch list, a detection log with a half-minute clip and an administrator verdict, and events the rule engine can act on. Firearm detection available as a second model, off where measured unreliable. |
| Recording | Audio and video per station and call type, starting at ring. Storage cap with automatic purge. Playback in the browser, each replay matched to the call that owns it. |
| Transcription | Per-channel speech to text with true speaker separation, automatic language detection, configurable intent classification, re-transcription in place. |
| Automation | 28 triggers · 16 actions · AND/OR filters · ordered or parallel steps · latch and reset · dry run and test · per-step audit · rules calling rules. |
| Incidents | 6 states, 5 severities, ownership and escalation, append-only timeline, truthful action status, links to alarms, calls, recordings and runs, export with redaction. Per-alarm-type on/off switch, operator escalation from the queue, incidents opened by hand with type, site, level and severity, owner photos in the list, and replay of the recorded video from before the alarm. |
| Public address | Zones and speakers, stored messages and text-to-speech, chime, loudness normalisation, live push-to-talk, recurrence scheduler, spreadsheet import/export, per-message visibility in the operator list. |
| Estate | Country → State → Site → Level directory with level descriptions, floor plans with placed devices shown in the console’s colours (four styles, per level) and in 2D or 3D, station status from exchange faults and when each was last heard, WireGuard site gateways with handshake-authoritative liveness and rollback-protected routing. |
| Access control | Gallagher Command Centre, Inner Range Inception, Verkada, Axis door controllers, TANlock rack locks and any ONVIF Profile A / C device. Access granted and denied with reasons, door state, forced and held-open alarms, reader and controller health; door commands confirmed by the door itself, with deadlines, a hash-chained command log and a per-system off switch. Stores no credentials. Licensed, in its own service. |
| Integration | Outbound webhooks and raw exchange frames from any rule; permission-gated REST for queue, alarms, incidents, cameras, PA and statistics; station synchronisation from the exchange. Roadmap: a keyed REST API (v1) for third-party systems to read and report in, and signed event subscriptions. |
| Security | Role-based access across ~200 routes, TOTP two-factor, session idle timeout, last-administrator guard, full audit trail. |
| Operations | Multiple isolated systems in one install, scheduled backup and restore, version history, system monitor and log viewer, size-bounded voice-gateway logs, per-tenant branding. |
| Delivery | A hosted tenant per customer, or a site VM: VMware (.ova), Hyper-V (one-click installer, Secure Boot on or off), or an existing Ubuntu server. Offline install, first-boot setup on the console, a restricted admin menu with no root rights, offline updates with per-customer tokens, image history and roll back, a self-growing disk with a recording guard, and a 60-day trial followed by offline activation. |
| Cloud platform | Control-plane portal. Per tenant: memory and CPU ceilings, voice relay, web address, site tunnels, nightly sealed off-site backups and staging copies. Release rings (canary, 1, 2, 3) with soak periods and automatic halt. Signed licences. Support access only with the customer's consent. |