Summary
The Kramer VP-885 is an 8x8 matrix switcher for audio and video. This spec covers serial (RS-232, RS-485) and Ethernet (TCP/UDP) control using Kramer Protocol 3000 (ASCII, default) and Protocol 2000 (HEX, 9600 baud). Protocol 3000 runs at 115200 baud, 8/N/1. Default Ethernet ports: TCP 5000, UDP 50000.
Transport
protocols:
- serial
- tcp
- udp
serial:
baud_rate: 115200 # Protocol 3000 default
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
addressing:
tcp_port: 5000
udp_port: 50000
auth:
type: none # inferred: no auth procedure in source
Traits
- routable # inferred from AV/VID/AUD switching commands
- queryable # inferred from VID?/AUD?/SIGNAL?/NET-IP? query commands
- levelable # inferred from AUD-LVL commands
Actions
# Help
- id: protocol_handshaking
label: Protocol Handshaking
kind: action
command: "#<CR>"
params: []
notes: "<CR> = Carriage Return (0x0D). Response: ~OK<CRLF>"
# Basic routing (Protocol 3000)
- id: switch_av
label: Switch Audio & Video
kind: action
command: "#AV {in}>{out}<CR>"
params:
- name: in
type: integer
description: Input number (0 disconnects)
- name: out
type: integer
description: Output number (or * for all)
- id: switch_video
label: Switch Video Only
kind: action
command: "#VID {in}>{out}<CR>"
params:
- name: in
type: integer
- name: out
type: integer
notes: "Short form: #V {in}>{out}<CR>"
- id: switch_audio
label: Switch Audio Only
kind: action
command: "#AUD {in}>{out}<CR>"
params:
- name: in
type: integer
- name: out
type: integer
notes: "Short form: #A {in}>{out}<CR>"
# Queries
- id: read_video_connection
label: Read Video Connection
kind: query
command: "#VID? {out}<CR>"
params:
- name: out
type: integer
notes: "Short form: #V? {out}<CR>; or VID? * for all"
- id: read_audio_connection
label: Read Audio Connection
kind: query
command: "#AUD? {out}<CR>"
params:
- name: out
type: integer
notes: "Short form: #A? {out}<CR>; or AUD? * for all"
# Signal status
- id: get_signal_status
label: Get Signal Status
kind: query
command: "#SIGNAL? {input}<CR>"
params:
- name: input
type: integer
description: Input number or * for all
# Presets
- id: store_preset
label: Store Current Connections to Preset
kind: action
command: "#PRST-STO {preset}<CR>"
params:
- name: preset
type: integer
notes: "Short form: #PSTO {preset}<CR>"
- id: recall_preset
label: Recall Saved Preset
kind: action
command: "#PRST-RCL {preset}<CR>"
params:
- name: preset
type: integer
notes: "Short form: #PRCL {preset}<CR>"
- id: delete_preset
label: Delete Saved Preset
kind: action
command: "#PRST-DEL {preset}<CR>"
params:
- name: preset
type: integer
notes: "Short form: #PDEL {preset}<CR>"
- id: read_preset_video
label: Read Video Connections From Saved Preset
kind: query
command: "#PRST-VID? {preset},{out}<CR>"
params:
- name: preset
type: integer
- name: out
type: integer
notes: "Short form: #PVID? {preset},{out}<CR>"
- id: read_preset_audio
label: Read Audio Connections From Saved Preset
kind: query
command: "#PRST-AUD? {preset},{out}<CR>"
params:
- name: preset
type: integer
- name: out
type: integer
notes: "Short form: #PAUD? {preset},{out}<CR>"
- id: read_preset_list
label: Read Saved Presets List
kind: query
command: "#PRST-LST?<CR>"
notes: "Short form: #PLST?<CR>"
# Operation
- id: lock_front_panel
label: Lock Front Panel
kind: action
command: "#LOCK-FP {lock_mode}<CR>"
params:
- name: lock_mode
type: integer
description: 0=off (unlock), 1=on (lock)
notes: "Short form: #LCK {lock_mode}<CR>"
- id: get_lock_state
label: Get Front Panel Locking State
kind: query
command: "#LOCK-FP?<CR>"
- id: reset_device
label: Restart Device
kind: action
command: "#RESET<CR>"
- id: switch_to_protocol_2000
label: Switch to Protocol 2000
kind: action
command: "#P2000<CR>"
# Audio parameters
- id: set_audio_level
label: Set Audio Level
kind: action
command: "#AUD-LVL {stage},{channel},{volume}<CR>"
params:
- name: stage
type: string
description: "In/Out or numeric stage (0=input, 1=pre-amp, 2=amp)"
- name: channel
type: integer
- name: volume
type: string
description: "Kramer units; precede minus for negative; ++ increase; -- decrease"
notes: "Short form: #ADL {stage},{channel},{volume}<CR>"
- id: read_audio_level
label: Read Audio Volume Level
kind: query
command: "#AUD-LVL? {stage},{channel}<CR>"
params:
- name: stage
type: string
- name: channel
type: integer
notes: "Short form: #ADL? {stage},{channel}<CR>"
- id: mute_audio
label: Mute Audio
kind: action
command: "#MUTE {mute_mode}<CR>"
params:
- name: mute_mode
type: integer
description: "1=Mute, 0=Unmute"
# Machine info
- id: read_inouts_count
label: Read In/Outs Count
kind: query
command: "#INFO-IO?<CR>"
- id: read_max_presets_count
label: Read Max Presets Count
kind: query
command: "#INFO-PRST?<CR>"
- id: factory_reset
label: Reset Configuration to Factory Default
kind: action
command: "#FACTORY<CR>"
# Identification
- id: protocol_handshaking_id
label: Protocol Handshaking
kind: action
command: "#<CR>"
notes: "Alias of protocol_handshaking; response ~OK<CRLF>"
- id: read_device_model
label: Read Device Model
kind: query
command: "#MODEL?<CR>"
- id: read_device_serial
label: Read Device Serial Number
kind: query
command: "#SN?<CR>"
- id: read_device_firmware
label: Read Device Firmware Version
kind: query
command: "#VERSION?<CR>"
- id: set_machine_name
label: Set Machine Name
kind: action
command: "#NAME {machine_name}<CR>"
params:
- name: machine_name
type: string
description: Up to 14 alphanumeric chars
- id: read_machine_name
label: Read Machine Name
kind: query
command: "#NAME?<CR>"
- id: reset_machine_name
label: Reset Machine Name to Factory Default
kind: action
command: "#NAME-RST<CR>"
- id: set_machine_id
label: Set Machine ID Number
kind: action
command: "#MACH-NUM {old_number},{new_number}<CR>"
params:
- name: old_number
type: integer
- name: new_number
type: integer
# Network settings
- id: set_ip_address
label: Set IP Address
kind: action
command: "#NET-IP {ip_address}<CR>"
params:
- name: ip_address
type: string
notes: "Short form: #NTIP {ip_address}<CR>"
- id: read_ip_address
label: Read IP Address
kind: query
command: "#NET-IP?<CR>"
notes: "Short form: #NTIP?<CR>"
- id: read_mac_address
label: Read MAC Address
kind: query
command: "#NET-MAC?<CR>"
notes: "Short form: #NTMC?<CR>"
- id: set_subnet_mask
label: Set Subnet Mask
kind: action
command: "#NET-MASK {subnet_mask}<CR>"
params:
- name: subnet_mask
type: string
notes: "Short form: #NTMSK {subnet_mask}<CR>"
- id: read_subnet_mask
label: Read Subnet Mask
kind: query
command: "#NET-MASK?<CR>"
notes: "Short form: #NTMSK?<CR>"
- id: set_gateway
label: Set Gateway Address
kind: action
command: "#NET-GATE {gateway_address}<CR>"
params:
- name: gateway_address
type: string
notes: "Short form: #NTGT {gateway_address}<CR>"
- id: read_gateway
label: Read Gateway Address
kind: query
command: "#NET-GATE?<CR>"
notes: "Short form: #NTGT?<CR>"
- id: set_dhcp_mode
label: Set DHCP Mode
kind: action
command: "#NET-DHCP {dhcp_mode}<CR>"
params:
- name: dhcp_mode
type: integer
description: "0=don't use DHCP; 1=try DHCP, fall back to static"
notes: "Short form: #NTDH {dhcp_mode}<CR>"
- id: read_dhcp_mode
label: Read DHCP Mode
kind: query
command: "#NET-DHCP?<CR>"
notes: "Short form: #NTDH?<CR>"
- id: change_eth_port
label: Change Protocol Ethernet Port
kind: action
command: "#ETH-PORT {protocol},{port}<CR>"
params:
- name: protocol
type: string
description: "TCP or UDP"
- name: port
type: integer
description: "1-65535 user-defined; 0 resets to factory (TCP 5000, UDP 50000)"
notes: "Short form: #ETHP {protocol},{port}<CR>"
- id: read_eth_port
label: Read Protocol Ethernet Port
kind: query
command: "#ETH-PORT? {protocol}<CR>"
params:
- name: protocol
type: string
description: "TCP or UDP"
notes: "Short form: #ETHP? {protocol}<CR>"
# Advanced switching
- id: set_afv_mode
label: Set Audio Follow Video Mode
kind: action
command: "#AFV {afv_mode}<CR>"
params:
- name: afv_mode
type: string
description: '"0"/"afv" = audio-follow-video; "1"/"brk" = breakaway'
- id: read_afv_mode
label: Read Audio Follow Video Mode
kind: query
command: "#AFV?<CR>"
# Protocol 2000 (HEX) switching
- id: switch_video_p2000
label: Switch Video (Protocol 2000)
kind: action
command: "0x01 {in_hex} {out_hex} {machine_hex}"
params:
- name: in_hex
type: string
description: Input number 1-8 (0=disconnect)
- name: out_hex
type: string
description: Output number 1-8 (0=all)
- name: machine_hex
type: string
description: "Machine number with OVR; 0x81 = M1 no override"
notes: "Example: 01 85 88 83 = switch IN5 to OUT8 on M3"
- id: switch_audio_p2000
label: Switch Audio (Protocol 2000)
kind: action
command: "0x02 {in_hex} {out_hex} {machine_hex}"
params:
- name: in_hex
type: string
- name: out_hex
type: string
- name: machine_hex
type: string
notes: "Example: 02 85 88 83 = switch audio IN5 to OUT8 on M3"
- id: switch_to_p3000_from_p2000
label: Switch from Protocol 2000 to Protocol 3000
kind: action
command: "0x38 0x80 0x83 0x81"
notes: "Inverse of P2000 command"
- id: increase_audio_input_gain_p2000
label: Increase Audio Input Gain (Protocol 2000)
kind: action
command: "0x18 {in_hex} 0x86 {machine_hex}"
params:
- name: in_hex
type: string
- name: machine_hex
type: string
notes: "Table 14"
- id: decrease_audio_input_gain_p2000
label: Decrease Audio Input Gain (Protocol 2000)
kind: action
command: "0x18 {in_hex} 0x87 {machine_hex}"
params:
- name: in_hex
type: string
- name: machine_hex
type: string
- id: set_audio_input_gain_p2000
label: Set Audio Input Gain (Protocol 2000)
kind: action
command: "0x2A 0x86 0x80 0x81 0x16 {in_hex} {gain_byte_hex} 0x81"
params:
- name: in_hex
type: string
description: Input number 1-8
- name: gain_byte_hex
type: string
description: "0x80 + gain value (0x00-0x7F); 0x80=Mute, 0xF1=0dB, 0xFF=+14dB max"
notes: "Table 15; the 0x2A 0x86 0x80 0x81 preamble must be sent first"
- id: increase_audio_output_gain_p2000
label: Increase Audio Output Gain (Protocol 2000)
kind: action
command: "0x18 {out_hex} 0x80 {machine_hex}"
params:
- name: out_hex
type: string
- name: machine_hex
type: string
notes: "Table 16"
- id: decrease_audio_output_gain_p2000
label: Decrease Audio Output Gain (Protocol 2000)
kind: action
command: "0x18 {out_hex} 0x81 {machine_hex}"
params:
- name: out_hex
type: string
- name: machine_hex
type: string
- id: set_audio_output_gain_p2000
label: Set Audio Output Gain (Protocol 2000)
kind: action
command: "0x2A 0x87 0x80 0x81 0x16 {out_hex} {gain_byte_hex} 0x81"
params:
- name: out_hex
type: string
description: Output number 1-8
- name: gain_byte_hex
type: string
description: "0x80 + gain value (0x00-0x7F); 0x80=Mute, 0xF1=0dB, 0xFF=+13dB max"
notes: "Table 17; the 0x2A 0x87 0x80 0x81 preamble must be sent first"
Feedbacks
- id: handshaking_ack
type: string
values: ["~OK"]
notes: "Response to Protocol Handshaking (#<CR>)"
- id: command_result_ok
type: string
values: ["OK"]
notes: "Standard trailing result on success"
- id: signal_status
type: enum
values: [on, off]
notes: "Response to SIGNAL? query; '0'/'off' = not present, '1'/'on' = present"
- id: afv_mode
type: enum
values: [afv, brk]
notes: "Response to AFV? query; '0'/'afv' or '1'/'brk'"
- id: lock_state
type: enum
values: [on, off]
notes: "Response to LOCK-FP?; '0'/'off' = unlocked, '1'/'on' = locked"
- id: dhcp_mode
type: enum
values: [0, 1]
notes: "Response to NET-DHCP?; 0=no DHCP, 1=DHCP with fallback"
- id: protocol_error_syntax
type: string
values: ["ERR001"]
notes: "Syntax error"
- id: protocol_error_unavailable
type: string
values: ["ERR002"]
notes: "Command not available for this device"
- id: protocol_error_range
type: string
values: ["ERR003"]
notes: "Parameter out of range"
- id: protocol_error_auth
type: string
values: ["ERR004"]
notes: "Unauthorized access"
Variables
# Settable via Protocol 3000 commands
- id: audio_volume
description: Audio level per stage/channel
settable_command: "#AUD-LVL {stage},{channel},{volume}<CR>"
query_command: "#AUD-LVL? {stage},{channel}<CR>"
notes: "stage: In/Out (or 0/1/2); channel: 1-8; volume in Kramer units, ++/-- for relative"
- id: machine_name
description: Friendly machine name (separate from model)
settable_command: "#NAME {machine_name}<CR>"
query_command: "#NAME?<CR>"
notes: "Up to 14 alphanumeric chars"
- id: ip_address
settable_command: "#NET-IP {ip_address}<CR>"
query_command: "#NET-IP?<CR>"
default: "192.168.1.39"
- id: subnet_mask
settable_command: "#NET-MASK {subnet_mask}<CR>"
query_command: "#NET-MASK?<CR>"
default: "255.255.255.0"
- id: gateway
settable_command: "#NET-GATE {gateway_address}<CR>"
query_command: "#NET-GATE?<CR>"
default: "192.168.1.1"
- id: dhcp_mode
settable_command: "#NET-DHCP {dhcp_mode}<CR>"
query_command: "#NET-DHCP?<CR>"
- id: tcp_port
settable_command: "#ETH-PORT TCP,{port}<CR>"
query_command: "#ETH-PORT? TCP<CR>"
default: 5000
- id: udp_port
settable_command: "#ETH-PORT UDP,{port}<CR>"
query_command: "#ETH-PORT? UDP<CR>"
default: 50000
- id: afv_mode
settable_command: "#AFV {afv_mode}<CR>"
query_command: "#AFV?<CR>"
Events
# Device-initiated messages (Protocol 3000)
- id: start_message
description: Sent at startup
format: "Kramer Electronics LTD., {Device Model} Version {Software Version}"
- id: av_switched_afv
description: Audio-video channel switched (AFV mode)
format: "AV {IN}>{OUT}"
- id: video_switched_breakaway
description: Video channel switched (breakaway mode)
format: "VID {IN}>{OUT}"
- id: audio_switched_breakaway
description: Audio channel switched (breakaway mode)
format: "AUD {IN}>{OUT}"
- id: machine_number_changed
description: After MACH-NUM changes
format: "{NEW_MACHINE_NUMBER}@MACH-NUM {OLD_MACHINE_NUMBER},{NEW_MACHINE_NUMBER} OK"
Macros
# Explicit multi-step sequences from source
- id: protocol_switch_via_serial_p3000_to_p2000
description: Switch from P3000 to P2000
steps:
- command: "#P2000<CR>"
- id: protocol_switch_via_serial_p2000_to_p3000
description: Switch from P2000 to P3000
steps:
- command: "0x38 0x80 0x83 0x81"
- id: chain_multiple_commands
description: Multiple commands in one message using '|' separator
example: "#AV 1>* | V 3>4, 2>2, 82>1, 0>2 | V 82>3 | A 0>1 | V? *<CR>"
notes: "Input string max length 64 chars; separate response sent for each command in chain"
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing requirements
# documented in this protocol excerpt beyond factory-reset behavior.
Notes
- Two protocols coexist: P3000 (ASCII, 115200 baud, default) and P2000 (HEX, 9600 baud). Switch via
#P2000<CR>(P3000→P2000) or0x38 0x80 0x83 0x81(P2000→P3000). Front-panel equivalent: hold OUT1+OUT2 (to P2000) or OUT1+OUT3 (to P3000). - RS-232 pinout: 9-wire straight cable, pin 2↔2, pin 3↔3, pin 5↔5. No null-modem adapter required.
- RS-485 supports up to 16 chained units (machine numbers 1-16); DIP-switches 5-8 set machine number, DIP-switch 1 sets RS-485 termination.
- Default Ethernet: IP 192.168.1.39 / Mask 255.255.255.0 / Gateway 192.168.1.1, TCP 5000, UDP 50000. Default machine name:
KRAMER_XXXX(last 4 digits of serial). - Factory reset (hold FACTORY RESET button on power-up): resets audio/switching/Ethernet to defaults, all switching configuration erased, audio gain 0dB on all I/O, display mode cycles 1-8, audio mode AFV.
- Protocol 3000 command syntax:
#CMD p1,p2,...<CR>(host);~CMD ... CRLF(device). Device long response includes echoing the command:~@CMD [p1,p2,…] result<CRLF>. Multiple commands chained with|. Max input string 64 chars. - Protocol 2000 uses 4-byte frames: byte1 bit7=0, byte2-4 bit7=1; bit7 of byte1 is destination flag (0=to switcher, 1=to PC).
- Audio input gain range: -100dB (mute) to +14dB (max). Audio output gain range: -100dB (mute) to +13dB (max).
- Audio gain setting in P2000: byte3 = 0x80 + gain value (0x00-0x7F); a preamble command (e.g.
2A 86 80 81for inputs,2A 87 80 81for outputs) must be sent before the gain-set frame.
Provenance
source_domains:
- cdn.kramerav.com
source_urls:
- https://cdn.kramerav.com/web/downloads/manuals/vp-885.pdf
retrieved_at: 2026-06-12T02:20:12.227Z
last_checked_at: 2026-06-12T19:25:08.008Z
Verification Summary
verdict: verified
checked_at: 2026-06-12T19:25:08.008Z
matched_actions: 53
action_count: 53
confidence: medium
summary: "All 53 spec actions matched against source commands with correct opcodes, parameters, and transport settings verified. (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "many device features (front-panel labels, video signal types, audio formats) are out of scope for this protocol excerpt; firmware version not stated."
- "no safety warnings, interlock procedures, or power-on sequencing requirements"
- "firmware version compatibility not stated; full HEX code tables for all 8x8 video/audio switch combinations and all 8 input gain levels are referenced by Tables 12-17 but not enumerated as separate actions (the parameterized forms above cover them); no explicit port-forward/auth credential mechanism documented."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0