Summary
The APC AP8931 is a NetShelter Switched Rack PDU providing eight NEMA 5-15 outlets with individual switching, current monitoring, and remote management. This spec covers the CLI command interface, which is accessible via Telnet, SSH (v1 or v2), or serial connection at 9600 baud. Authenticated users can switch outlets on/off, reboot them, query status and power readings, manage local user accounts, and configure alarm thresholds.
Transport
protocols:
- tcp # Telnet and SSH v1/v2
- serial # RS-232 console
# UNRESOLVED: Telnet and SSH TCP port numbers not stated in source
addressing:
port: null # UNRESOLVED: port number not stated in source
serial:
baud_rate: 9600
# UNRESOLVED: data_bits, parity, stop_bits, flow_control not stated in source
auth:
type: password # source requires user name and password at log-on
prompt:
user: "User Name"
password: "Password"
notes: "Append space + -c to password when not using a KVM. Three failed attempts lock further log-on for two minutes. Default inactivity logout 3 minutes (configurable 1-10)."
Traits
- powerable # on/off/reboot commands per outlet
- routable # outlet status query, outlet group listing
- queryable # current, power, status, ver queries
Actions
- id: adduser
label: Add Outlet User
kind: action
command: "adduser {user_name}"
params:
- name: user_name
type: string
description: 1-10 printable ASCII characters
access: Administrator
notes: Prompts for password interactively; returns `OK Password: _password_ Re-enter password: _password_ User name and password set for user _user_name_.`
- id: assign
label: Assign Outlets to User
kind: action
command: "assign {outlet_or_range}[,{outlet_or_range} ...] {user_name}"
params:
- name: outlet_or_range
type: string
description: Outlet number, name, or hyphen-separated range (e.g. 1-3,5,7)
- name: user_name
type: string
description: Outlet user configured in local database
access: Administrator
- id: deluser
label: Delete Outlet User
kind: action
command: "deluser {user_name}"
params:
- name: user_name
type: string
description: 1-10 printable ASCII characters
access: Administrator
- id: passwd
label: Change Password
kind: action
command: "passwd [{user_name}]"
params:
- name: user_name
type: string
description: Optional. Omit to change own password; admin only may specify other user
access: All account types (self) / Administrator (other)
notes: Prompts interactively for new password; 1-10 printable ASCII characters.
- id: unassign
label: Unassign Outlets from User
kind: action
command: "unassign {outlet_or_range}[,{outlet_or_range} ...] {user_name}"
params:
- name: outlet_or_range
type: string
description: Outlet number, name, or hyphen-separated range
- name: user_name
type: string
description: Outlet user configured in local database
access: Administrator
- id: whoami
label: Who Am I
kind: query
command: "whoami"
params: []
- id: off
label: Turn Outlet(s) Off
kind: action
command: "off {all|outlet_or_range}[,{outlet_or_range} ...]"
params:
- name: target
type: string
description: '`all` or outlet number/name/range (e.g. 1,5-7 or "Web Server")'
access: Outlet user with assigned outlets
- id: on
label: Turn Outlet(s) On
kind: action
command: "on {all|outlet_or_range}[,{outlet_or_range} ...]"
params:
- name: target
type: string
description: '`all` or outlet number/name/range (e.g. 1,5-7 or "Web Server")'
access: Outlet user with assigned outlets
- id: outletgroups
label: List Outlet Sync Groups
kind: query
command: "outletgroups"
params: []
- id: poweroffdelay_read
label: Read Power-Off Delay
kind: query
command: "poweroffdelay [{outlet_or_range}[,{outlet_or_range} ...]]"
params:
- name: target
type: string
description: Optional. Outlet number/name/range; omit to read all accessible outlets.
- id: poweroffdelay_set
label: Set Power-Off Delay
kind: action
command: "poweroffdelay {outlet_or_range}[,{outlet_or_range} ...] {time|never}"
params:
- name: target
type: string
description: Outlet number/name/range
- name: time
type: string
description: Delay in seconds, or `never` to keep outlet on
access: Outlet user with assigned outlets
- id: powerondelay_read
label: Read Power-On Delay
kind: query
command: "powerondelay [{outlet_or_range}[,{outlet_or_range} ...]]"
params:
- name: target
type: string
description: Optional. Outlet number/name/range; omit to read all accessible outlets.
- id: powerondelay_set
label: Set Power-On Delay
kind: action
command: "powerondelay {outlet_or_range}[,{outlet_or_range} ...] {time|never}"
params:
- name: target
type: string
description: Outlet number/name/range
- name: time
type: string
description: Delay in seconds, or `never` to keep outlet off
access: Outlet user with assigned outlets
- id: reboot
label: Reboot Outlet(s)
kind: action
command: "reboot {all|outlet_or_range}[,{outlet_or_range} ...]"
params:
- name: target
type: string
description: '`all` or outlet number/name/range'
access: Outlet user with assigned outlets
notes: Removes then restores power. CLI does not wait for completion.
- id: rebootduration_read
label: Read Reboot Duration
kind: query
command: "rebootduration [{outlet_or_range}[,{outlet_or_range} ...]]"
params:
- name: target
type: string
description: Optional. Outlet number/name/range; omit to read all accessible outlets.
- id: rebootduration_set
label: Set Reboot Duration
kind: action
command: "rebootduration {outlet_or_range}[,{outlet_or_range} ...]: {time}"
params:
- name: target
type: string
description: Outlet number/name/range, colon-separated from time
- name: time
type: integer
description: Seconds the outlet remains off before restarting
access: Outlet user with assigned outlets
- id: status
label: Outlet Status
kind: query
command: "status {outlet_or_range}[,{outlet_or_range} ...]"
params:
- name: target
type: string
description: Outlet number/name/range
notes: Output line format `_outlet_number_ : _outlet_status_ : _outlet_name_`. Trailing `*` on status indicates pending control action.
- id: current
label: Total Current Draw
kind: query
command: "current"
params: []
notes: Single-phase/banked PDU output: `_current_ A`. 3-phase PDU output: `T1: _current_ A / T2: _current_ A / T3: _current_ A`. Source notes "the Switched Rack PDU does not track its total current draw" - command may not be supported on this model.
- id: list
label: List Users and Outlet Assignments
kind: query
command: "list"
params: []
access: Administrator, device manager, outlet user
- id: lowloadwarning_read
label: Read Low-Load Warning Threshold
kind: query
command: "lowloadwarning [{phase_number}]"
params:
- name: phase_number
type: integer
description: Optional. 1, 2, or 3. Default 1.
- id: lowloadwarning_set
label: Set Low-Load Warning Threshold
kind: action
command: "lowloadwarning {phase_number} {current}"
params:
- name: phase_number
type: integer
description: 1, 2, or 3
- name: current
type: number
description: Threshold in amps
access: Administrator or device manager
- id: name
label: Assign Name to Outlet or PDU
kind: action
command: "name {outlet|master} {new_name}"
params:
- name: target
type: string
description: 'Outlet number, or the string `master` to set the PDU system name'
- name: new_name
type: string
description: Up to 23 printable ASCII characters; quote if contains spaces
access: Administrator or device manager
- id: nearoverloadwarning_read
label: Read Near-Overload Warning Threshold
kind: query
command: "nearoverloadwarning [{phase_number}]"
params:
- name: phase_number
type: integer
description: Optional. 1, 2, or 3. Default 1.
- id: nearoverloadwarning_set
label: Set Near-Overload Warning Threshold
kind: action
command: "nearoverloadwarning {phase_number} {current}"
params:
- name: phase_number
type: integer
description: 1, 2, or 3
- name: current
type: number
description: Threshold in amps
access: Administrator or device manager
- id: overloadalarm_read
label: Read Overload Alarm Threshold
kind: query
command: "overloadalarm [{phase_number}]"
params:
- name: phase_number
type: integer
description: Optional. 1, 2, or 3. Default 1.
- id: overloadalarm_set
label: Set Overload Alarm Threshold
kind: action
command: "overloadalarm {phase_number} {current}"
params:
- name: phase_number
type: integer
description: 1, 2, or 3
- name: current
type: number
description: Threshold in amps
access: Administrator or device manager
- id: overloadrestriction_read
label: Read Overload Restriction
kind: query
command: "overloadrestriction [{phase_number}]"
params:
- name: phase_number
type: integer
description: Optional. 1, 2, or 3. Default 1.
- id: overloadrestriction_set
label: Set Overload Restriction
kind: action
command: "overloadrestriction {phase_number} {setting}"
params:
- name: phase_number
type: integer
description: 1, 2, or 3
- name: setting
type: string
description: '`on` or `off` (not case-sensitive). When `on`, prevents outlets from turning on while overload threshold is violated.'
access: Administrator or device manager
- id: pducoldstartdelay_read
label: Read PDU Cold-Start Delay
kind: query
command: "pducoldstartdelay"
params: []
- id: pducoldstartdelay_set
label: Set PDU Cold-Start Delay
kind: action
command: "pducoldstartdelay {time|never}"
params:
- name: time
type: string
description: Seconds (0-300), or `never` to keep outlets off until explicit `on` command
access: Administrator or device manager
- id: power
label: Total Power Usage
kind: query
command: "power"
params: []
notes: Output `_power_in_volt-amps_ VA _power_in_watts_ W`.
- id: exit
label: Exit CLI
kind: action
command: "{exit|logout|logoff|quit|bye}"
params: []
- id: help
label: CLI Help
kind: query
command: "help|? [{command}]"
params:
- name: command
type: string
description: Optional. Command name; omit to list all available commands.
- id: reset_defaults_pdu
label: Reset PDU Defaults
kind: action
command: "reset_defaults_pdu"
params: []
access: Administrator
notes: Resets only PDU and outlet configuration to defaults.
- id: uploadini
label: Upload INI via XMODEM
kind: action
command: "uploadini"
params: []
access: Administrator or device manager
notes: Serial-only. XMODEM-CRC transfer. Offered baud rates: 2400, 9600, 19200, 38400. After upload with non-default baud, reset PDU baud to default 9600.
- id: ver
label: Device Version Info
kind: query
command: "ver"
params: []
notes: Output `APC OS _AOS_firmware_version_ Switched Rack PDU _PDU_firmware_version_ Model: _model_number_ Outlets: _number_of_outlets_ Max Current: _maximum_load_current_ A Input Type: _phase_configuration_`.
Feedbacks
- id: outlet_status
type: enum
values: [on, off, "on*", "off*"]
description: From `status` command. Trailing `*` indicates a control action is pending.
source_line: "1:ON:Database Server"
- id: outlet_status_lines
type: object
fields:
- outlet_number
- outlet_status
- outlet_name
description: One line per outlet from `status` query.
- id: current_draw
type: object
description: Total current draw from `current` command. Single-phase/banked: `_current_ A`. 3-phase: `T1`, `T2`, `T3` per-phase amps.
- id: power_usage
type: string
description: From `power` command. Format: `_power_in_volt-amps_ VA _power_in_watts_ W`.
- id: whoami_user
type: string
description: Active user name from `whoami` command.
- id: version_info
type: object
fields:
- aos_firmware_version
- pdu_firmware_version
- model_number
- number_of_outlets
- maximum_load_current
- phase_configuration
description: From `ver` command. phase_configuration is `Single`, `Banked`, or `3 Phase`.
- id: command_error
type: object
fields:
- code
- message
description: Format `E[0-9][0-9][0-9]: Error message`. Known codes: E100 (command does not exist), E101 (invalid command arguments), E102 (user already exists), E103 (user does not exist), E104 (user does not have access), E200 (input error / 3-minute input timeout).
- id: command_ok
type: string
description: Successful command response: `OK` followed by command output.
- id: outlet_groups
type: string
description: From `outletgroups` command. Format `_group_name_ : _IP_address_of_local_PDU_ Outlets: _number_, _number... IP_address_of_remote_PDU_ Outlets: _number_, _number...`.
- id: power_on_delay
type: object
description: From `powerondelay` query. Format `_outlet_number_ : _outlet_name_ : Power on delay is _time_ seconds.`
- id: power_off_delay
type: object
description: From `poweroffdelay` query. Format `_outlet_number_ : _outlet_name_ : Power off delay is _time_ seconds.`
- id: reboot_duration
type: object
description: From `rebootduration` query. Format `_outlet_number_ : _outlet_name_ : Reboot duration is _time_ seconds.`
- id: coldstart_delay
type: object
description: From `pducoldstartdelay` query. Format `_PDU_name_: PDU coldstart delay is _time_ seconds.`
- id: low_load_warning_threshold
type: object
description: From `lowloadwarning` query. Format `Low load warning threshold is _current_ A.`
- id: near_overload_warning_threshold
type: object
description: From `nearoverloadwarning` query. Format `Near overload warning threshold is _current_ A.`
- id: overload_alarm_threshold
type: object
description: From `overloadalarm` query. Format `Overload alarm threshold for _phase_number_ is _current_ A.`
- id: overload_restriction
type: object
description: From `overloadrestriction` query. Format `Overload restriction is _setting_ for _phase_number_.`
- id: user_listing
type: object
description: From `list` command. Format `OK Local: _user_: _outlet_number_, _outlet_number_ ...` and `OK Radius: _user_: _outlet_number_, _outlet_number_ ...`.
Variables
- id: power_on_delay_seconds
type: integer
description: Seconds the PDU waits after a command before restoring power to an outlet. Set per outlet via `powerondelay`.
settable_via: powerondelay_set
- id: power_off_delay_seconds
type: integer
description: Seconds the PDU waits after a command before removing power from an outlet. Set per outlet via `poweroffdelay`.
settable_via: poweroffdelay_set
- id: reboot_duration_seconds
type: integer
description: Seconds an outlet remains off during a reboot cycle.
settable_via: rebootduration_set
- id: pdu_cold_start_delay_seconds
type: integer
description: Seconds the PDU delays applying power to outlets after AC power is applied. Allowed 0-300.
settable_via: pducoldstartdelay_set
- id: low_load_warning_threshold_amps
type: number
description: Low-load warning threshold per phase.
settable_via: lowloadwarning_set
- id: near_overload_warning_threshold_amps
type: number
description: Near-overload warning threshold per phase.
settable_via: nearoverloadwarning_set
- id: overload_alarm_threshold_amps
type: number
description: Overload alarm threshold per phase.
settable_via: overloadalarm_set
- id: overload_restriction
type: enum
values: [on, off]
description: When `on`, prevents outlets from turning on while overload alarm threshold is violated.
settable_via: overloadrestriction_set
- id: outlet_name
type: string
description: Per-outlet label, up to 23 printable ASCII characters.
settable_via: name
- id: pdu_system_name
type: string
description: System name for the PDU, set via `name master {new_name}`.
settable_via: name
- id: inactivity_logout_minutes
type: integer
description: Inactivity logout time. Default 3 minutes, configurable 1-10. UNRESOLVED: no CLI command shown in source to read or set this value; presumably configured via web UI.
Events
# UNRESOLVED: source does not describe unsolicited notifications the PDU sends.
# Inactivity logout, overload alarm, and cold-start events may exist but are not
# documented in the refined CLI excerpt.
Macros
# UNRESOLVED: source does not describe multi-step macro sequences. The CLI
# itself does not include a macro language in the refined excerpt. Synchronized
# outlet groups exist (see `outletgroups`) but are configured elsewhere.
Safety
confirmation_required_for:
- reset_defaults_pdu # Resets PDU and outlet configuration to defaults
interlocks:
- id: overload_restriction
description: When overload restriction is `on`, the PDU prevents outlets from turning on while the overload alarm threshold is violated. Source: `overloadrestriction` command description.
- id: application_init
description: While application firmware is initializing, CLI commands are rejected with `The Switched Rack PDU is still initializing. Please try again later.`
- id: logon_lockout
description: Three consecutive unsuccessful log-on attempts lock further attempts for two minutes. Source: log-on responses section.
# UNRESOLVED: voltage/current/power specifications not stated in source. No
# explicit safety warnings in the refined excerpt beyond the lockouts and
# interlock procedures above.
Notes
- The refined source explicitly notes "the Switched Rack PDU does not track its total current draw" — the
currentcommand is documented but likely unsupported on this model class. - Log-off command accepts five aliases:
exit,logout,logoff,quit,bye. uploadiniis serial-only and uses XMODEM-CRC. Transfer baud can be 2400, 9600, 19200, or 38400. After a non-default transfer baud, restore PDU baud to default 9600 to re-establish communication.- Trailing
*on astatusoutput indicates a control action is pending (in-flight on/off/reboot). -csuffix on password: append a space then-cto the password when not using a KVM, per source log-on procedure.- Commands are case-insensitive for command keywords, case-sensitive for arguments unless noted.
- The CLI uses single ASCII 0x20 space as delimiter; extra spaces are ignored.
- Quoted strings: if a string value starts/ends with space or contains commas/semicolons, enclose in quotation marks. Reverse slant (
\) is the only escape character.
Provenance
source_domains:
- usermanual.wiki
- iportal.se.com
- manuals.zedt.eu
- manualmachine.com
- mouser.com
source_urls:
- https://usermanual.wiki/Apc/ApcCommandLineInterfaceUsersManual470947.999847818.pdf
- https://iportal.se.com/Contents/docs/UPS-PMAR-9LLM9N_R1_EN.PDF
- http://manuals.zedt.eu/apc-sua-ups/UPS-Link_Protocol_Specification.pdf
- https://manualmachine.com/apc/ap8941/392271-user-manual/
- https://www.mouser.com/datasheet/3/187/8/AP8931_document.pdf
retrieved_at: 2026-05-14T10:59:22.676Z
last_checked_at: 2026-06-02T21:39:44.869Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:39:44.869Z
matched_actions: 36
action_count: 36
confidence: medium
summary: "All 36 spec actions matched literally in source; transport parameters verified; complete bidirectional coverage. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "TCP port numbers for Telnet/SSH not stated in source. Serial data bits / parity / stop bits / flow control not stated."
- "Telnet and SSH TCP port numbers not stated in source"
- "port number not stated in source"
- "data_bits, parity, stop_bits, flow_control not stated in source"
- "no CLI command shown in source to read or set this value; presumably configured via web UI."
- "source does not describe unsolicited notifications the PDU sends."
- "source does not describe multi-step macro sequences. The CLI"
- "voltage/current/power specifications not stated in source. No"
- "TCP port numbers for Telnet/SSH not stated in source (do not assume 22/23). Serial data bits, parity, stop bits, flow control not stated (do not assume 8N1). Firmware version compatibility range not stated. Source does not document unsolicited event notifications or macro scripting. The `current` command may be unsupported on AP8931 per source note."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0