Summary
ETC ParaArcConPro (Paradigm Processor, "P ACP") is an architectural lighting control processor controlled via its local RS-232 serial port and Ethernet interface using the Unison Paradigm Serial Access Protocol (PSAP v6.0.0). This spec covers PSAP serial/UDP commands for channels, groups, presets, sequences, spaces, walls, macros, and overrides, plus status queries and trigger-based updates. Configuration (baud rate, UDP port, handlers) is performed in ETC LightDesigner.
Transport
protocols:
- serial
- udp
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: null # UNRESOLVED: flow control not stated in source
addressing:
port: 0 # default per source ("Input UDP Port defaults to 0"); ETC recommends configuring in range 4703-4727
auth:
type: none # inferred: no auth procedure in source
Notes on transport:
- Default end-of-message terminator: ASCII carriage return (CR = 13 decimal = 0D hex). CR+LF or LF also supported.
- Ethernet packets recommended ≤ 512 bytes.
- ACN Serial Config also supported (default ACN Name "ETC P ACP"); not represented in protocols enum above.
Traits
- levelable # inferred from int/ras/low/master level-setting command examples
- queryable # inferred from get-status command examples
Actions
# All commands terminated by default CR (0D hex). Names are case-sensitive and must
# match LightDesigner object names. Level values: 0-255 or 0-100%. Priority values: 1-200.
# fadetime format: x.y seconds (tenths supported). spacename required when fadetime used.
# --- Help / discovery ---
- id: help
label: List Available Commands
kind: query
command: "?"
params: []
- id: help_alias
label: List Available Commands (help alias)
kind: query
command: "help"
params: []
# --- Channel commands ---
- id: chan_int
label: Set Channel Intensity
kind: action
command: "chan int:{level} {channame}[, {spacename}][, {fadetime}]"
params:
- name: level
type: string
description: Target level, 0-255 or 0-100% (use trailing %)
- name: channame
type: string
description: Channel name (case-sensitive, must match LightDesigner)
- name: spacename
type: string
description: Optional space name
- name: fadetime
type: string
description: Optional fade time in x.y seconds
- id: chan_ras
label: Raise Channel Intensity
kind: action
command: "chan ras:{amount} {channame}[, {spacename}][, {fadetime}]"
params:
- name: amount
type: string
description: Raise amount, 0-255 or 0-100%
- name: channame
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: chan_low
label: Lower Channel Intensity
kind: action
command: "chan low:{amount} {channame}[, {spacename}][, {fadetime}]"
params:
- name: amount
type: string
- name: channame
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: chan_tog
label: Toggle Channel Intensity
kind: action
command: "chan tog {channame}[, {spacename}][, {fadetime}]"
params:
- name: channame
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: chan_min
label: Set Channel Minimum Level
kind: action
command: "chan min:{level} {channame}[, {spacename}]"
params:
- name: level
type: string
- name: channame
type: string
- name: spacename
type: string
- id: chan_max
label: Set Channel Maximum Level
kind: action
command: "chan max:{level} {channame}[, {spacename}]"
params:
- name: level
type: string
- name: channame
type: string
- name: spacename
type: string
# --- Group commands ---
- id: grp_int
label: Set Group Intensity
kind: action
command: "grp int:{level} {grpname}[, {spacename}][, {fadetime}]"
params:
- name: level
type: string
- name: grpname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: grp_ras
label: Raise Group Intensity
kind: action
command: "grp ras:{amount} {grpname}[, {spacename}][, {fadetime}]"
params:
- name: amount
type: string
- name: grpname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: grp_low
label: Lower Group Intensity
kind: action
command: "grp low:{amount} {grpname}[, {spacename}][, {fadetime}]"
params:
- name: amount
type: string
- name: grpname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: grp_tog
label: Toggle Group Intensity
kind: action
command: "grp tog {grpname}[, {spacename}][, {fadetime}]"
params:
- name: grpname
type: string
- name: spacename
type: string
- name: fadetime
type: string
# --- Preset commands (LTP playback) ---
- id: pst_act
label: Activate Preset (LTP)
kind: action
command: "pst act[:{priority}] {presetname}[, {spacename}][, {fadetime}]"
params:
- name: priority
type: integer
description: Optional priority 1-200
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: pst_dact
label: Deactivate Preset (LTP)
kind: action
command: "pst dact {presetname}[, {spacename}][, {fadetime}]"
params:
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: pst_tog
label: Toggle Preset State (LTP)
kind: action
command: "pst tog[:{priority}] {presetname}[, {spacename}][, {fadetime}]"
params:
- name: priority
type: integer
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
# --- Preset commands (HTP playback) ---
- id: pst_acth
label: Activate Preset (HTP)
kind: action
command: "pst acth[:{priority}] {presetname}[, {spacename}][, {fadetime}]"
params:
- name: priority
type: integer
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: pst_dacth
label: Deactivate Preset (HTP)
kind: action
command: "pst dacth {presetname}[, {spacename}][, {fadetime}]"
params:
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: pst_togh
label: Toggle Preset State (HTP)
kind: action
command: "pst togh[:{priority}] {presetname}[, {spacename}][, {fadetime}]"
params:
- name: priority
type: integer
- name: presetname
type: string
- name: spacename
type: string
- name: fadetime
type: string
# --- Preset recording ---
- id: pst_rec
label: Record Preset
kind: action
command: "pst rec {presetname}[, {spacename}]"
params:
- name: presetname
type: string
- name: spacename
type: string
# --- Sequence commands ---
- id: seq_start
label: Start Sequence
kind: action
command: "seq start[:{priority}] {sequencename}[, {spacename}]"
params:
- name: priority
type: integer
- name: sequencename
type: string
- name: spacename
type: string
- id: seq_stop
label: Stop Sequence
kind: action
command: "seq stop {sequencename}[, {spacename}]"
params:
- name: sequencename
type: string
- name: spacename
type: string
- id: seq_pause
label: Pause Sequence
kind: action
command: "seq pause {sequencename}"
params:
- name: sequencename
type: string
- id: seq_resume
label: Resume Sequence
kind: action
command: "seq resume {sequencename}"
params:
- name: sequencename
type: string
- id: seq_ras
label: Raise Sequence
kind: action
command: "seq ras:{amount} {sequencename}"
params:
- name: amount
type: string
description: Raise amount (requires active Sequence)
- name: sequencename
type: string
- id: seq_low
label: Lower Sequence
kind: action
command: "seq low:{amount} {sequencename}"
params:
- name: amount
type: string
- name: sequencename
type: string
- id: seq_rate
label: Set Sequence Rate
kind: action
command: "seq rate:{faderate} {sequencename}"
params:
- name: faderate
type: string
description: Playback speed multiplier (1 = default timing)
- name: sequencename
type: string
# --- Space commands ---
- id: spc_off
label: Space Off
kind: action
command: "spc off {spacename}[, {fadetime}]"
params:
- name: spacename
type: string
- name: fadetime
type: string
- id: spc_ras
label: Raise Space
kind: action
command: "spc ras:{amount} {spacename}[, {fadetime}]"
params:
- name: amount
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: spc_low
label: Lower Space
kind: action
command: "spc low:{amount} {spacename}[, {fadetime}]"
params:
- name: amount
type: string
- name: spacename
type: string
- name: fadetime
type: string
- id: spc_master
label: Set Space Master Level
kind: action
command: "spc master:{level} {spacename}[, {fadetime}]"
params:
- name: level
type: string
- name: spacename
type: string
- name: fadetime
type: string
# --- Wall commands ---
- id: wall_open
label: Open Wall
kind: action
command: "wall open {wallname}[, {spacename}]"
params:
- name: wallname
type: string
description: Wall name; spacename must be parent space containing the wall
- name: spacename
type: string
- id: wall_close
label: Close Wall
kind: action
command: "wall close {wallname}[, {spacename}]"
params:
- name: wallname
type: string
- name: spacename
type: string
- id: wall_tog
label: Toggle Wall State
kind: action
command: "wall tog {wallname}[, {spacename}]"
params:
- name: wallname
type: string
- name: spacename
type: string
# --- Macro commands ---
- id: macro_on
label: Macro On
kind: action
command: "macro on {macroname}"
params:
- name: macroname
type: string
- id: macro_off
label: Macro Off
kind: action
command: "macro off {macroname}"
params:
- name: macroname
type: string
- id: macro_tog
label: Toggle Macro State
kind: action
command: "macro tog {macroname}"
params:
- name: macroname
type: string
- id: macro_cancel
label: Cancel Macro
kind: action
command: "macro cancel {macroname}"
params:
- name: macroname
type: string
# --- Override commands ---
- id: ovr_enab
label: Enable Override
kind: action
command: "ovr enab {overridename}"
params:
- name: overridename
type: string
- id: ovr_disab
label: Disable Override
kind: action
command: "ovr disab {overridename}"
params:
- name: overridename
type: string
- id: ovr_tog
label: Toggle Override State
kind: action
command: "ovr tog {overridename}"
params:
- name: overridename
type: string
# --- Status query commands ---
- id: chan_get
label: Query Channel Status
kind: query
command: "chan get {channame}[, {spacename}]"
params:
- name: channame
type: string
- name: spacename
type: string
- id: grp_get
label: Query Group Status
kind: query
command: "grp get {groupname}[, {spacename}]"
params:
- name: groupname
type: string
- name: spacename
type: string
- id: pst_get
label: Query Preset Status (LTP)
kind: query
command: "pst get {presetname}[, {spacename}]"
params:
- name: presetname
type: string
- name: spacename
type: string
- id: pst_geth
label: Query Preset Status (HTP)
kind: query
command: "pst geth {presetname}[, {spacename}]"
params:
- name: presetname
type: string
- name: spacename
type: string
- id: macro_get
label: Query Macro Status
kind: query
command: "macro get {macroname}"
params:
- name: macroname
type: string
- id: wall_get
label: Query Wall Status
kind: query
command: "wall get {wallname}[, {spacename}]"
params:
- name: wallname
type: string
- name: spacename
type: string
- id: seq_get
label: Query Sequence Status
kind: query
command: "seq get {sequencename}[, {spacename}]"
params:
- name: sequencename
type: string
- name: spacename
type: string
- id: ovr_get
label: Query Override Status
kind: query
command: "ovr get {overridename}"
params:
- name: overridename
type: string
Feedbacks
- id: channel_state
type: string
description: Returned as "chan int:{level} {channame}, {spacename}" (level always 0-255)
- id: group_state
type: string
description: Returned as "grp int:{level}, {grpname}, {spacename}"
- id: preset_state_ltp
type: enum
values: [act, dact, alt]
description: One of "pst act|dact|alt {presetname}, {spacename}" indicating activated/deactivated/altered (LTP)
- id: preset_state_htp
type: enum
values: [acth, dacth, alth]
description: One of "pst acth|dacth|alth {presetname}, {spacename}" indicating activated/deactivated/altered (HTP)
- id: macro_state
type: enum
values: [on, off, running]
description: Returned as "Macro on|off|running {macroname}"
- id: wall_state
type: enum
values: [open, close]
description: Returned as "Wall open|close {wallname}, {spacename}"
- id: sequence_state
type: enum
values: [start, stop, pause]
description: Returned as "seq start|stop|pause {sequencename}, {spacename}"
- id: override_state
type: enum
values: [enab, disab]
description: Returned as "ovr enab|disab {overridename}"
Variables
# No standalone settable variables documented; all settable parameters are carried
# as inline params of the action commands above (level, amount, priority, fadetime, faderate).
Events
# PSAP Triggers: when configured (LightDesigner "Advanced" access), Paradigm pushes
# PSAP-formatted serial updates to specified objects as changes occur. Each object
# requires its own trigger. Returned string format matches the corresponding "get"
# response for that object type (see Feedbacks above).
- id: trigger_channel
type: string
description: Unsolicited channel update (same format as channel_state)
- id: trigger_group
type: string
description: Unsolicited group update (same format as group_state)
- id: trigger_preset
type: string
description: Unsolicited preset update (same format as preset_state_ltp/htp)
- id: trigger_macro
type: enum
description: Unsolicited macro update (same format as macro_state)
- id: trigger_wall
type: enum
description: Unsolicited wall update (same format as wall_state)
- id: trigger_sequence
type: enum
description: Unsolicited sequence update (same format as sequence_state)
- id: trigger_override
type: enum
description: Unsolicited override update (same format as override_state)
# UNRESOLVED: full trigger function naming taxonomy not enumerated in source
Macros
# No multi-step control sequences documented in source. The PSAP "macro on|off|tog|cancel"
# commands invoke device-defined macros configured in LightDesigner; those macro
# definitions are not part of this protocol spec.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or
# power-on sequencing requirements.
Notes
- Device is referred to in source as "Paradigm Processor (P ACP)"; the model token "ParaArcConPro" is taken from the entity/family identifier and may be an abbreviation (Paradigm Architectural Configuration Processor). Confirm exact model name against ETC catalog.
- All command/object names are case-sensitive and must match LightDesigner exactly. Avoid commas
,and colons:in object names — these are delimiter characters in PSAP parsing. - Level values accept two formats: 0–255 integer or 0–100% (trailing
%required for percentage). - Priority values 1–200; supplying priority on preset/sequence activation makes the action persist beneath higher-priority actions.
- fadetime format is
x.yseconds with tenths support; spacename must be specified when fadetime is used on group/preset commands. - Commands are not processed until the terminating character (default CR, 0D hex) is received; responses also terminate with the same character.
?orhelp+ terminator returns the list of available commands.- PSAP reflects software/handler version 6.0.0 and later. Input Handler is set to "PSAP 6.0.0" in LightDesigner.
- UDP: response is sent back to the sender's source output UDP port automatically. ETC recommends ≤ 512 bytes per Ethernet packet.
- ACN Serial Config: devices matching ACN Name (default "ETC P ACP") form a broadcast domain and exchange PSAP messages over ACN. Multiple comma-separated ACN Names supported; handler responds to all matching.
Spec built. 47 actions across chan/grp/pst(LTP+HTP)/seq/spc/wall/macro/ovr + 8 get-queries + help. Transport serial+udp (ACN noted, no enum token). Feedbacks, events (triggers) populated. Safety/flow_control/firmware marked UNRESOLVED.
## Provenance
```yaml
source_domains:
- etcconnect.com
source_urls:
- "https://www.etcconnect.com/WorkArea/DownloadAsset.aspx?id=10737521406"
- "https://www.etcconnect.com/WorkArea/DownloadAsset.aspx?id=10737519244"
- https://www.etcconnect.com/Products/Architectural-Systems/Paradigm/Control-and-Dimming/Architectural-Controls/Documentation.aspx
- https://www.etcconnect.com/Docs/Paradigm-Processor-Mk2/
- "https://www.etcconnect.com/WorkArea/DownloadAsset.aspx?id=10737521387"
retrieved_at: 2026-07-06T06:08:44.460Z
last_checked_at: 2026-07-07T11:36:52.399Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-07T11:36:52.399Z
matched_actions: 48
action_count: 48
confidence: medium
summary: "All 48 spec actions matched literals in source; transport values verified; full bidirectional coverage achieved. (9 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "Exact ParaArcConPro model name not found in ETC public catalog; source describes \"Paradigm Processor (P ACP)\". ACN Serial Config transport is described but not represented in the protocols enum (no ACN/E1.17 token)."
- "flow control not stated in source"
- "full trigger function naming taxonomy not enumerated in source"
- "source contains no safety warnings, interlock procedures, or"
- "Exact \"ParaArcConPro\" model designation not confirmed against ETC product catalog."
- "Serial flow_control not stated in source."
- "PSAP protocol version compatibility range across firmware not stated (source references v6.0.0 only)."
- "ACN Serial transport has no equivalent token in the protocols enum; represented as serial+udp only."
- "Complete trigger-function naming taxonomy not enumerated in source."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0