High-reliability TCP/IP client that connects to an Avigilon Control Center (ACC) Point of Sale (POS) transaction listener and streams formatted transaction text data in real time.
NOTE — Avigilon Control Center POS Integration
Avigilon Control Center (ACC) allows video surveillance streams to be linked with POS transaction logs. Cash registers, cash counters, or automated payment terminals connect via raw TCP/IP sockets to ACC's POS transaction source. As lines of text are streamed to the listener, ACC displays the text overlaid onto live camera footage, logs transaction data, and indexes receipts for text-based forensic video search.
2. Technical Architecture
The Avigilon POS plugin establishes an outbound raw TCP socket connection to the Avigilon Control Center POS listener. It manages automatic connection supervision, evaluates dynamic text templates against configured Input Points, and emits structured event notifications to the Uniflow Rule Engine.
System Interaction
VISUAL ARCHITECTURE FLOW DIAGRAM
Rendering Flow Architecture Diagram...
Connection Supervisor & Auto-Reconnection Loop
The adapter runs an active background connection supervisor:
Socket Health Monitoring: Continuously monitors connection integrity and socket responsiveness to detect unexpected connection drops immediately.
Automatic Reconnection: If the connection drops or the remote Avigilon server restarts, the supervisor automatically attempts reconnection according to the configured Reconnect Delay (ms).
Active Inbound Reader: Maintains an active read loop on the connected network stream, enabling instant detection of remote host terminations while receiving incoming ACKs or echoes from the listener.
3. Configuration Parameters
The following settings are configured in the Uniflow Source Editor:
Setting
Type
Default
Description
Friendly Name
String
Avigilon POS
Descriptive name identifying this POS integration terminal.
Enabled
Boolean
true
Enables or disables the source adapter.
Target Host / IP Address
String
127.0.0.1
Network IP address or hostname where the Avigilon POS listener is hosted.
Port
Integer
24000
Target TCP port on which the Avigilon Control Center POS listener accepts incoming connections (1–65535).
Connect Timeout (ms)
Integer
3000
Maximum wait duration in milliseconds before timing out an initial socket connection attempt.
Reconnect Delay (ms)
Integer
5000
Delay in milliseconds before attempting to reconnect after a dropped connection.
Begin Transaction
String
@
Character or string prepended to the start of transactions.
End Transaction
String
#\r\n
Character or string sent as a separate message to close the transaction.
Transaction Text Template
String
*(Bundled default)*
The text template containing {binding_id} placeholder variables and CRLF line terminators.
Input Points
List
*(2 Bundled)*
Table of configured input points exposed as writable routes.
4. Input Points & Data Binding
Input Points represent discrete data parameters accepted by the plugin (comparable to Data Points in the Modbus plugin).
Input Point Model
Each Input Point consists of:
Id (Guid): Hidden unique identifier that uniquely identifies the point across the system.
Friendly Name (string): Display label used in UI dialogs and the Rule Editor (e.g. COUNT_RESULT).
Data Binding ID (string): Unique lowercase alphanumeric identifier matching template placeholders (e.g. count_result).
Data Type (enum): Data type for typing and parsing:
String
Bool
Double
Int
Bundled Default Input Points
When the plugin is installed, new source instances automatically include two persistent bundled Input Points:
Friendly Name
Data Binding ID
Data Type
Static Persistent GUID
COUNT_RESULTcount_result
↳
Double
e4c8d190-67a3-4e8b-87b4-3a9d2c1f0101
CURRENCY_CODEcurrency_code
↳
String
f5d9e201-78b4-4f9c-98c5-4b0e3d2a0202
NOTE — Deterministic GUID Persistence
The GUIDs for COUNT_RESULT and CURRENCY_CODE are static constants. They remain 100% deterministic and persistent across different software builds, plugin updates, and service restarts.
5. Template Engine & Placeholder Syntax
The plugin includes a dynamic text templating engine:
Template Syntax
Placeholders are enclosed in curly braces: {<data_binding_id>}.
Placeholders are matched case-insensitively against configured Input Point binding IDs.
Double and floating-point values are rendered with invariant culture formatting (0.##).
Literal escape sequences entered into the text template are automatically unescaped before transmission:
\r\n ➔ Carriage Return + Line Feed (0x0D 0x0A)
\n ➔ Line Feed (0x0A)
\r ➔ Carriage Return (0x0D)
\t ➔ Horizontal Tab (0x09)
Bundled Default Template
TEXT
TOTAL: {count_result} {currency_code} \r\n
Transaction Framing (Begin & End Transaction)
In Avigilon Control Center, POS transactions follow a framed lifecycle:
Begin Transaction (@): When a transaction is dispatched, the configured Begin Transaction character is prepended to the rendered payload (e.g. @TOTAL: 123.45 EUR\r\n), signaling to the ACC listener that a new transaction has started.
End Transaction (#\r\n): Following the transaction payload, the configured End Transaction message is sent as an independent, separate TCP message to close the transaction in ACC. This ensures the live video overlay in ACC displays the transaction and subsequently finalizes the record.
Interactive "Send Test Message"
The Source Editor features a dedicated Send Test Message button located directly beneath the template input area:
Connection Validation: When clicked, the editor verifies that the source is active and in the Connected state. If disconnected, an alert directs the user to check network connectivity.
Dynamic Placeholders Dialog: When connected, a modal dialog presents input fields for all {binding_id} placeholders detected in the template. Configured Input Points show their friendly names and data types, pre-filled with test values. A live message preview shows the exact rendered payload in real time, including the Begin Transaction prefix and separate closing transaction message.
Transmission & Confirmation: Clicking the Send Message button at the bottom of the dialog transmits the rendered payload over the live TCP socket (and schedules the separate closing transaction message). The transmission finishes with a modal confirmation dialog titled "Message Was Sent" (or "Error") with an OK button to close.
6. Exposed Routes & Rule Graph Integration
This plugin exposes catalog fields across the following rule graph nodes:
Event Input
The Event Input node subscribes to real-time transmission notifications and execution status events emitted by the Avigilon POS adapter.
Human-Readable Event Name
Event Type Identifier
Event Category
Data Type
Exposed Schema Ports & Data Types
Description
Data SentDataSent
↳
Events
Event Object
status (Bool)
message (String)
error (String)
Timestamp (DateTime)
Emitted upon every transaction transmission attempt over the TCP socket.
Output Target
The Output Target node acts as an action sink node to format and transmit transactions to the Avigilon Control Center POS listener.
Target Name
Data Type
Associated Parameters
Parameter Data Type
Required
Description
Send TransactionJson
↳
COUNT_RESULT (count_result)
Double
False
Bundled default input point for numeric count or transaction amount.
↳
CURRENCY_CODE (currency_code)
String
False
Bundled default input point for currency symbol or code.
NOTE — Extensibility with Additional Input Points
Additional Input Points configured in the Source Editor (such as cashier names, terminal identifiers, or receipt line items) are automatically exposed as additional input parameters on the Send Transaction output target node.
7. Usage Examples
Scenario A: Kisan Cash Machine Streams Banknote Count to Avigilon POS Video Overlay
Workflow Overview:
When a Kisan cash handling machine (e.g. Kisan Newton / K2 / K5 currency sorter) finishes counting a cash deposit, the Kisan CM plugin emits a Count Transaction Event (kisancm.count_completed) containing the transaction amount (Total) and active currency (CurrencyCode).
Uniflow intercepts this event in the Visual Rule Engine and routes the values directly into the Avigilon POS plugin via its Send Transaction output target:
Total is wired to the COUNT_RESULT input port.
CurrencyCode is wired to the CURRENCY_CODE input port.
The Avigilon POS adapter automatically renders the configured text template:
TEXT
TOTAL: {count_result} {currency_code} \r\n
prepends the Begin Transaction delimiter (@), transmits the formatted transaction over raw TCP to the Avigilon Control Center POS listener, and follows with the separate End Transaction message (#\r\n). ACC displays the receipt text overlay directly onto the teller's surveillance video stream in real time and indexes the transaction text for instant forensic search.