Avigilon
uniflow.plugin.avigilon
•
Category: Security & Video
•
Version: v1.7.0
•
Min Uniflow Version: Uniflow ≥ v1.4.0
Avigilon Plugin Reference Manual
1. Overview
Plugin Name: Avigilon
Type: Security & Video
Identifier: uniflow.plugin.avigilon
Description
Integration with Avigilon Control Center via Web Endpoint API.
2. Technical Architecture
The Avigilon plugin connects to Avigilon Control Center (ACC) instances via the ACC Web Endpoint REST API over HTTP/HTTPS. It implements secure token authentication, nonce/user key generation, dynamic discovery polling loops for sites, servers, cameras, and alarms, and optionally hosts a local HTTP Webhook endpoint for receiving real-time push event notifications from ACC.
System Interaction & Exposed Catalog Routes
The Avigilon ACC plugin establishes a secure HTTPS REST and WebSocket session with Avigilon Control Center (ACC) Web Endpoint Service. It subscribes to real-time video analytics alarms, motion detection events, and camera status changes, while exposing actions to acknowledge alarms, retrieve video clips, and insert/update video bookmarks.
Catalog Routes & Node Integration
Input Event Triggers (Input Nodes):
ALARM_TRIGGERED, ALARM_ACKNOWLEDGED, ALARM_ASSIGNED, ALARM_UNASSIGNED, ALARM_PURGED, ALARM_RECORD_START, ALARM_RECORD_ENDDEVICE_MOTION_START, DEVICE_MOTION_STOP, DEVICE_ANALYTICS_START, DEVICE_ANALYTICS_STOP, DEVICE_TAMPERING, DEVICE_UNUSUAL_STARTED, DEVICE_UNUSUAL_STOPPED, DEVICE_ANOMALY_START, DEVICE_ANOMALY_STOP, DEVICE_PRESENCE_STARTED, DEVICE_PRESENCE_STOPPED, DEVICE_RECORDING_STARTED, DEVICE_RECORDING_STOPPED, DEVICE_VIDEO_SIGNAL_LOST, DEVICE_VIDEO_SIGNAL_RESTOREDDEVICE_LPR_MATCH, DEVICE_LPR_PLATE_FOUND, DEVICE_LPR_PLATE_LOST, DEVICE_LPR_PLATE_UPDATE, DEVICE_FACE_MATCH_START, DEVICE_FACE_MATCH_STOPACCESS_CONTROL_DOOR_ACCESS_GRANTED, ACCESS_CONTROL_DOOR_ACCESS_DENIED, ACCESS_CONTROL_DOOR_FORCED, ACCESS_CONTROL_DURESS, ACCESS_CONTROL_REX, ACCESS_CONTROL_DOOR_HELD_OPEN, ACCESS_CONTROL_DOOR_OPENED, ACCESS_CONTROL_DOOR_CLOSED, ACCESS_CONTROL_CONNECTED, ACCESS_CONTROL_DISCONNECTED, ACCESS_CONTROL_INPUT_ACTIVATED, ACCESS_CONTROL_INPUT_DEACTIVATEDDEVICE_CONNECTED, DEVICE_DISCONNECTED, DEVICE_COMMUNICATION_LOST, DEVICE_COMMUNICATION_RESTORED, DEVICE_CONNECTION_ERROR, DEVICE_DIGITAL_INPUT_ON, DEVICE_DIGITAL_INPUT_OFFUSER_LOGIN, USER_LOGOUT, STORAGE_LOW_DISK_SPACE, SYSTEM_NETWORK_ERROR, APPLICATION_SERVER_START, APPLICATION_SERVER_STOPMediaDownloaded (MEDIA_DOWNLOAD) - Fired when media clip export completes downloading and saving to disk (SavePath + FileName) or encounters an error. Carries status ("Success" or "Failed"), filename, path, payload, cameraId, format, contentType, fileSizeBytes, error, and timestamp.Executable Actions (Action Nodes):
avigilon.acknowledge_alarm - Acknowledges an active ACC alarm.avigilon.create_bookmark / avigilon:bookmark:insert - Creates a video bookmark with camera list, time interval, name, description, and protection status.avigilon:bookmark:update - Updates an existing video bookmark in Avigilon Control Center.avigilon.manual_record / avigilon:camera:record:manual - Manually starts or stops recording on selected camera IDs for up to 24 hours.avigilon.trigger_digital_output / avigilon:trigger_digital_output - Triggers a specific digital output entity (EntityId) or all digital outputs linked to a camera (Id). Accepts EntityId (helper validation with Entities collection; priority) or Id (helper validation with Cameras collection) and IsToggle.avigilon.start_ptz_preset / avigilon:camera:commands:preset - Triggers a specific PTZ preset (PresetId converted to integer) on a target camera (Id). Configured via a 2-column Camera + PTZ Preset selection helper in the Rule Editor.avigilon.ptz_home / avigilon:camera:commands:preset:home - Commands a camera (Id) to return to its configured PTZ home position.avigilon.get_media - Dispatches an asynchronous video/media request to ACC Web Endpoint (/mt/getMedia) without blocking the rule gate. Downloads and saves the file to disk (SavePath + FileName) in the background, emitting a MediaDownloaded event with file details, request status, and the forwarded user Payload.Architecture Diagram
3. Configuration Parameters
The following configuration fields are available in the User Interface for this plugin:
| Configuration Setting | Description |
|---|---|
| Base URL | Specifies the base url. |
| Username | Specifies the username. |
| Password | Specifies the password (secure). |
| Client Name | Specifies the client name. |
| Site Name Filter | Specifies the site name filter. |
| User Nonce | Specifies the user nonce. |
| User Key | Specifies the user key. |
| Connect Timeout (ms) | Numeric value specifying the connect timeout (ms). |
| Reconnect Interval (ms) | Numeric value specifying the reconnect interval (ms). |
| Reconnect Delay (ms) | Specifies the reconnect delay (ms). |
| Webhook URL | Specifies the webhook url. |
| Local Webhook Server Port | Numeric value specifying the local webhook server port. |
| PFX Certificate Path | Specifies the pfx certificate path. |
| Certificate Password | Specifies the certificate password (secure). |
| Poll Sites | Specifies the poll sites. |
| Poll Servers | Specifies the poll servers. |
| Poll Cameras | Specifies the poll cameras. |
| Poll Alarms | Specifies the poll alarms. |
| Poll Events | Specifies the poll events. |
| Poll Bookmarks | Enables or disables periodic polling of video bookmarks. |
| Bookmarks Poll Interval (ms) | Interval in milliseconds for polling bookmarks. |
| Poll Entities | Enables or disables periodic polling of generic/RTSP entities. |
| Entities Poll Interval (ms) | Interval in milliseconds for polling entities. |
| Enable SSL (HTTPS) | Toggle to enable or disable enable ssl (https). |
3.1 Helper Windows & Catalog Explorers
A. Source Row Catalog Helper Window (SourceHelperWindow)
Clicking the Helper button (🔍) on the Avigilon source row in the Sources list table opens the host's Source Catalog Helper Window:
Level 1 to Level 5), lifecycle states, and notes.ANALYTICS_OBJECT_DETECTED, LPR_PLATE_READ), and payload schemas.Copy JSON).B. Source Editor Topics Dialog (AvigilonTopicsConfigurationDialog)
Inside the Avigilon source settings editor, clicking Configure Topics... opens the Avigilon Topics Configuration Dialog:
DEVICE, APPLICATION, STORAGE, SYSTEM, USER, ALARM, ACCESS_CONTROL).DEVICE_CONNECTED, ALARM_TRIGGERED, ACCESS_CONTROL_DOOR_FORCED).SourceDto.Settings["avigilon.topics"] and SourceDto.Settings["avigilon.subtopics"] with normalized CSV strings.4. Exposed Routes & Data Types
This plugin exposes catalog fields across the following rule graph nodes:
Input Source
The Input Source node reads system health, camera online status, and active alarm metrics.
| Human-Readable Field Name | Data Type | Description |
|---|---|---|
| Connected Camera Count Int32 | ||
| ↳ | Total count of cameras currently connected and streaming to Avigilon Control Center server. | |
| Active Alarm Count Int32 | ||
| ↳ | Number of unacknowledged active alarms currently in alarm queue. | |
| Server Connection State Bool | ||
| ↳ | System status flag indicating whether the Avigilon Web Endpoint session is connected (True). | |
Event Input
The Event Input node discovers and subscribes dynamically to ACC Web Endpoint native event streams, Socket.IO topic catalog updates, and custom plugin notifications.
| Event Type Identifier | Event Category | Data Type | Exposed Schema Ports & Data Types | Description |
|---|---|---|---|---|
ALARM_TRIGGERED Alarm | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Priority (Int32)Timestamp (DateTime)Notes (String) | Real-time event triggered when an ACC alarm is raised or sensor alarm activates. | |
ALARM_ACKNOWLEDGED Alarm | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Priority (Int32)Timestamp (DateTime)Notes (String) | Real-time event triggered when an operator acknowledges an active ACC alarm. | |
ALARM_ASSIGNED / ALARM_UNASSIGNED Alarm | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Priority (Int32)Timestamp (DateTime)Notes (String) | Real-time event triggered when an alarm is assigned to or unassigned from an operator. | |
ALARM_PURGED / ALARM_RECORD_START / END Alarm | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)Timestamp (DateTime) | Alarm lifecycle state changes and recording boundary events. | |
DEVICE_MOTION_START / DEVICE_MOTION_STOP Motion | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Timestamp (DateTime) | Triggered when VMD pixel motion starts or stops on a camera channel. | |
DEVICE_ANALYTICS_START / DEVICE_ANALYTICS_STOP Analytics | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Timestamp (DateTime) | Triggered when an ACC video analytics rule match starts or stops. | |
DEVICE_TAMPERING / DEVICE_UNUSUAL_STARTED Analytics | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Timestamp (DateTime) | Triggered on camera occlusion, scene change, or unusual activity detection. | |
DEVICE_LPR_MATCH LPR | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)Plate (String)Confidence (Double)Timestamp (DateTime) | Triggered when a license plate recognition match occurs against watchlists. | |
DEVICE_FACE_MATCH_START / STOP Facial Recognition | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)CameraId (String)PersonId (String)Confidence (Double)Timestamp (DateTime) | Triggered when facial recognition detects a watchlist match. | |
ACCESS_CONTROL_DOOR_ACCESS_GRANTED / DENIED Access Control | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)DoorId (String)CardId (String)PersonName (String)Timestamp (DateTime) | Triggered on ACM door credential access granted or denied events. | |
ACCESS_CONTROL_DOOR_FORCED / HELD_OPEN Access Control | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)DoorId (String)Timestamp (DateTime) | Triggered on door forced entry or door held open alarm events. | |
DEVICE_CONNECTED / DEVICE_DISCONNECTED Connectivity | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)DeviceId (String)Timestamp (DateTime) | Triggered when an IP camera or encoder connects or loses network connection. | |
DEVICE_DIGITAL_INPUT_ON / OFF Hardware I/O | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)InputId (String)Timestamp (DateTime) | Triggered when camera dry contact input state changes (on/off). | |
USER_LOGIN / USER_LOGOUT System Audit | ||||
| ↳ | Event Object | ID (String)Name (String)State (String)Username (String)ClientIp (String)Timestamp (DateTime) | Audit event logged when an ACC user logs into or out of the system. | |
HELLO / HEARTBEAT / SLOW_HEARTBEAT System Health | ||||
| ↳ | Event Object | Timestamp (DateTime)Status (String) | Socket.IO connection keepalive and system health heartbeats. | |
MediaDownloaded / MEDIA_DOWNLOAD Video Export | ||||
| ↳ | Event Object | status (String)filename (String)path (String)payload (String)cameraId (String)format (String)contentType (String)fileSizeBytes (Int)error (String)timestamp (String) | Triggered when a video clip or media export completes downloading and is saved to disk (or fails) following an avigilon.get_media request. | |
Data Source
The Data Source node queries structured collections of VMS assets, security alarms, hardware nodes, and historical event records.
| Human-Readable Collection Name | Data Type | Exposed Fields & Data Types | Description |
|---|---|---|---|
| Cameras Json` (`collection`) | |||
| ↳ | Id (String)ServerId (String)LogicalId (Int64)Name (String)Serial (String)Active (Bool)Connected (Bool)ConnectionState (String)Location (String) | Full list of connected IP video cameras, stream status, hardware serial numbers, and channel locations. | |
| Alarms Json` (`collection`) | |||
| ↳ | Id (String)Name (String)State (String)Type (String)IsAssignedToCurrentUser (Bool)AssociatedCameras (String[])Cameras (List<CameraModel>)IsNoteRequired (Bool)TimeOfMostRecentActivation (String)MissedTriggers (Int32) | Complete list of registered ACC alarms, active states, assigned users, associated camera channels, and activation metrics. | |
| Sites Json` (`collection`) | |||
| ↳ | Id (String)Name (String)Reachable (String) | List of configured Avigilon site clusters and network reachability status. | |
| Servers Json` (`collection`) | |||
| ↳ | Id (String)Name (String) | List of ACC Management Server instances in the site cluster hierarchy. | |
| Events Json` (`collection`) | |||
| ↳ | thisId (String)type (String)rootType (String)siteId (String)cameraId (String)cameraIds (List<String>)entityIds (List<String>)originatingServerId (String)originatingServerName (String)location (String)timestamp (String)licensePlate (String)confidence (Float)rebootReason (Int32) | Complete historical log of system telemetry, video analytics detections, door events, and hardware alerts. | |
| Bookmarks Json` (`collection`) | |||
| ↳ | Id (String)Name (String)Description (String)CameraIds (String[])CreationTime (String)StartTime (String)EndTime (String)IsProtected (Bool) | Complete list of video bookmarks created in Avigilon Control Center. | |
Output Target
The Output Target node acts as an action sink node to execute alarm management, bookmark management, and video export operations on Avigilon ACC.
| Target Name | Data Type | Associated Parameters | Parameter Data Type | Required | Description |
|---|---|---|---|---|---|
| Alarms Json | |||||
| ↳ | AlarmId (AlarmId) | String | True | Target Avigilon alarm identifier GUID. | |
| ↳ | Notes (Notes) | String | True | Note or audit log comment text to attach to alarm action. | |
| ↳ | Action (Action) | String | True | Alarm lifecycle operation (TRIGGER, ACKNOWLEDGE, CLAIM, UNCLAIM, PURGE). | |
| Insert Bookmark Json | |||||
| ↳ | Name (Name) | String | True | Bookmark name/title string. | |
| ↳ | Description (Description) | String | False | Optional bookmark detail or event notes string. | |
| ↳ | CameraIds (Camera IDs) | String | True | Comma-separated list of target camera ID GUIDs. | |
| ↳ | StartTime (Start Time) | String | True | ISO 8601 bookmark start timestamp. | |
| ↳ | EndTime (End Time) | String | True | ISO 8601 bookmark end timestamp. | |
| ↳ | IsProtected (Is Protected) | Bool | False | Flag to protect bookmark from automatic retention purge (true/false). | |
| Update Bookmark Json | |||||
| ↳ | Id (Bookmark ID) | String | True | Unique identifier GUID of existing bookmark to update. | |
| ↳ | Name (Name) | String | True | Updated bookmark name/title string. | |
| ↳ | Description (Description) | String | False | Updated bookmark detail or event notes string. | |
| ↳ | CameraIds (Camera IDs) | String | True | Comma-separated list of target camera ID GUIDs. | |
| ↳ | StartTime (Start Time) | String | True | Updated ISO 8601 bookmark start timestamp. | |
| ↳ | EndTime (End Time) | String | True | Updated ISO 8601 bookmark end timestamp. | |
| ↳ | IsProtected (Is Protected) | Bool | False | Flag to protect bookmark from automatic retention purge (true/false). | |
| Manual Record Json | |||||
| ↳ | CameraIds (Camera IDs) | String | True | Comma-separated list of target camera ID GUIDs selected via multi-select helper. | |
| ↳ | Action (Action) | String | True | Manual recording action dropdown (START or STOP). | |
| ↳ | MaxDurationSec (Max Duration (sec)) | Int32 | False | Maximum recording duration in seconds for START action (minimum 15s up to 86400 / 24 hours, default 15s; automatically omitted for STOP action). | |
| Trigger Digital Output Json | |||||
| ↳ | EntityId (Entity ID) | String | False | Specific digital output entity ID GUID (helper validation with Entities collection; takes priority over Camera ID). | |
| ↳ | Id (Camera ID) | String | False | Camera ID GUID linked to digital output entities (helper validation with Cameras collection). | |
| ↳ | IsToggle (Is Toggle) | Bool | False | Flag to toggle digital output state (true/false, default true). | |
| Start PTZ Preset Json | |||||
| ↳ | Id (Camera ID) | String | True | Target camera ID GUID (selected via 2-column PTZ Preset helper). | |
| ↳ | PresetId (Preset ID) | Int32 | True | Integer ID of the PTZ preset to start (selected via 2-column PTZ Preset helper). | |
| PTZ Home Json | |||||
| ↳ | Id (Camera ID) | String | True | Target camera ID GUID (selected via Camera collection helper). | |
| Get Media Json | |||||
| ↳ | CameraId (Camera ID) | String | True | Target camera identifier. Note: this sink node dispatches the request to the API asynchronously without blocking the rule gate. | |
| ↳ | Format (Format) | String | False | Media output format (mp4, avi, mkv, jpeg, png, ave, native). | |
| ↳ | ContentType (Response Content Type) | String | False | HTTP Accept response content type (Auto (From Format), video/mp4, image/jpeg, etc.). | |
| ↳ | SavePath (Save Path) | String | True | Folder path on disk where media will be saved, e.g. C:\Exports. | |
| ↳ | FileName (File Name) | String | True | Output file name template, e.g. video_cam1.mp4. Supports {camera} and {timestamp}. | |
| ↳ | Payload (Payload / User Data) | String | False | Custom user payload string passed through to the MediaDownloaded event. | |
| ↳ | Media (Media Stream) | String | False | Stream channels (video, audio, video,audio). | |
| ↳ | Quality (Quality) | String | False | Stream quality level (high, medium, low, original). | |
| ↳ | Range (Time Range) | String | False | ISO 8601 time interval string (e.g. 2026-08-15T12:00:00Z/2026-08-15T12:05:00Z). | |
| ↳ | T (Start Time) | String | False | Start timestamp (ISO 8601 or UNIX epoch). | |
| ↳ | Frames (Frames Filter) | String | False | Frame subsampling filter (all, key, 1, 5, 10, 15, 30). | |
| ↳ | Burnin (Burn In Overlay) | String | False | Burn timestamp and camera overlays into video (false, true). | |
| ↳ | Rotate (Rotate Video) | String | False | Rotate video frame (false, true). | |
| ↳ | Size (Resolution Size) | String | False | Video resolution size (original, 1920x1080, 1280x720, 640x480). | |
| ↳ | VCoding (Video Codec) | String | False | Video codec encoding (copy, h264, h265, mjpeg). | |
5. Usage Examples
Scenario A: Modbus TCP Fire Alarm Input Triggers ACC Camera Alarm
Workflow Overview:
When a physical Modbus TCP field I/O module detects a discrete input state change from a ceiling fire detector (DiscreteInput[101] == True), Uniflow evaluates the rule and immediately issues an ACC alarm trigger command via the Avigilon Output Target node. This raises a high-priority security alarm (AlarmId: 1042-FIRE-ZONE-1) linked to the corresponding ceiling camera (CamId: CAM-04-NORTH-WING) in Avigilon Control Center, alerting security dispatchers and initiating local ACC recording.
Rule Node Configuration:
1. Input Source Node: Modbus TCP Field I/O
DiscreteInput_101 (Boolean)2. Logic Condition Node: IsTrue
DiscreteInput_101 == True3. Output Target Node: Avigilon ACC
Alarms (avigilon:alarm)AlarmId: 1042-FIRE-ZONE-1Action: TRIGGERNotes: Automatic fire alarm trigger from Modbus input 101 (North Wing Smoke Detector)Logic Flow Diagram:
Scenario B: Hexagon LiDAR IntrusionDetections Trigger ACC Alarm & Capture Snapshot (Get Media)
Workflow Overview:
When a Hexagon 3D LiDAR perimeter sensor detects target motion or intrusion within designated security zone "Zone A" (Zone == "Zone A" & Status == "INTRUSION"), Uniflow triggers a two-fold automated response:
1. Triggers an active ACC alarm (AlarmId: 201-LIDAR-ZONE-A, Action: TRIGGER) via the Avigilon Output Target node to alert control room staff.
2. Simultaneously invokes avigilon.get_media to request a high-resolution JPEG snapshot from the PTZ camera aimed at Zone A (CameraId: CAM-01-PERIMETER-PTZ, Format: jpeg, SavePath: C:\Uniflow\Snapshots). Once downloaded, the media exporter publishes a MEDIA_DOWNLOAD event with file metadata for downstream auditing.
Rule Node Configuration:
1. Event Input Node: Hexagon LiDAR Sensor
Zone (String), Status (String), Timestamp (DateTime)2. Logic Filter Node: And Condition
Zone == "Zone A" AND Status == "INTRUSION"3. Output Target Node A: Avigilon ACC Alarm
Alarms (avigilon:alarm)AlarmId: 201-LIDAR-ZONE-AAction: TRIGGERNotes: LiDAR intrusion detection in Zone A4. Output Target Node B: Avigilon Media Exporter
Get Media (avigilon.get_media)CameraId: CAM-01-PERIMETER-PTZFormat: jpegSavePath: C:\Uniflow\SnapshotsFileName: lidar_zone_a_{timestamp}.jpgPayload: lidar_intrusion_event_201Logic Flow Diagram:
Scenario C: Create Protected Video Bookmark on License Plate (LPR) Match
Workflow Overview:
When an Avigilon camera detects a blacklisted license plate (DEVICE_LPR_MATCH), Uniflow automatically inserts a protected video bookmark into Avigilon Control Center spanning 2 minutes before and after the detection timestamp.
Rule Node Configuration:
1. Event Input Node: Avigilon LPR Event (DEVICE_LPR_MATCH)
CameraId (String), Plate (String), Timestamp (DateTime)2. Output Target Node: Insert Bookmark (avigilon:bookmark:insert)
Name: Blacklist LPR Match - {Plate}Description: Automatic bookmark generated for license plate match {Plate}CameraIds: {CameraId}StartTime: {Timestamp - 2m}EndTime: {Timestamp + 2m}IsProtected: True