Summary
Networked power distribution unit (PDU) controllable over TCP. Protocol uses ASCII text commands terminated with \n, with login authentication required. Source describes both Telnet (port 23) and SSH (port 22) transports; this spec captures the command protocol shared between them.
Transport
protocols:
- tcp
addressing:
port: 23 # primary Telnet port; SSH also available on port 22
serial:
baud_rate: 9600 # UNRESOLVED: baud rate not applicable / not stated; this is a TCP device. Kept here only as a placeholder. Remove if not needed.
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: password # source requires username + password login
username_required: true
password_required: true
# UNRESOLVED: default username not stated; 13-character password limit applies only to SSH
Traits
- powerable # inferred from outlet on/off/reset commands
- queryable # inferred from extensive ?-prefixed query commands
Actions
- id: firmware_query
label: Firmware Version Query
kind: query
command: "?Firmware\n"
params: []
- id: hostname_query
label: Hostname Query
kind: query
command: "?Hostname\n"
params: []
- id: service_tag_query
label: Service Tag Query
kind: query
command: "?ServiceTag\n"
params: []
- id: model_query
label: Model Number Query
kind: query
command: "?Model\n"
params: []
- id: outlet_count_query
label: Outlet Count Query
kind: query
command: "?OutletCount\n"
params: []
- id: outlet_status_query
label: Outlet States Query
kind: query
command: "?OutletStatus\n"
params: []
- id: outlet_power_status_query
label: Outlet Power Status Query
kind: query
command: "?OutletPowerStatus={outlet}\n"
params:
- name: outlet
type: integer
description: Outlet number (1-based)
notes: "Not supported on WB150/250. Response: ?OutletPowerStatus=1,1.01,0.02,116.50 (index, watts, amps, volts)"
- id: power_status_query
label: System Power Status Query
kind: query
command: "?PowerStatus\n"
params: []
notes: "Not supported on WB150/250. Response: ?PowerStatus=60.00,600.00,110.00,1 (amps, watts, volts, safe_voltage)"
- id: auto_reboot_query
label: Auto Reboot Status Query
kind: query
command: "?AutoReboot\n"
params: []
- id: outlet_name_query
label: Outlet Names Query
kind: query
command: "?OutletName\n"
params: []
- id: ups_status_query
label: UPS Status Query
kind: query
command: "?UPSStatus\n"
params: []
notes: "Only meaningful when UPS attached. Response: charge%,load%,health,power_lost,runtime_min,alarm_enabled,alarm_muted"
- id: ups_connection_query
label: UPS Connection Query
kind: query
command: "?UPSConnection\n"
params: []
- id: outlet_name_set
label: Set Outlet Name
kind: action
command: "!OutletNameSet={outlet},{name}\n"
params:
- name: outlet
type: integer
description: Outlet number (1-based)
- name: name
type: string
description: New outlet name
- id: outlet_name_set_all
label: Set All Outlet Names
kind: action
command: "!OutletNameSetAll={name1},{name2},...\n"
params:
- name: names
type: string
description: Bracketed, comma-delimited list of names in outlet order
- id: outlet_set
label: Set Outlet State
kind: action
command: "!OutletSet={outlet},{action},{delay}\n"
params:
- name: outlet
type: integer
description: Outlet number (1-based); 0 + RESET resets ALL outlets
- name: action
type: enum
values: [ON, OFF, TOGGLE, RESET]
- name: delay
type: integer
description: Optional reset delay in seconds (1-600); only used with RESET
- id: outlet_power_on_delay_set
label: Set Outlet Power-On Delay
kind: action
command: "!OutletPowerOnDelaySet={outlet},{delay}\n"
params:
- name: outlet
type: integer
description: Outlet number (1-based)
- name: delay
type: integer
description: Delay in seconds (1-600)
- id: outlet_mode_set
label: Set Outlet Operating Mode
kind: action
command: "!OutletModeSet={outlet},{mode}\n"
params:
- name: outlet
type: integer
description: Outlet number (1-based)
- name: mode
type: enum
values: [0, 1, 2]
description: "0=Enabled, 1=Disabled, 2=Reset Only"
- id: outlet_reboot_set
label: Set Outlet Reboot Operation
kind: action
command: "!OutletRebootSet={op1},{op2},...\n"
params:
- name: ops
type: string
description: Comma-delimited list of 12+ reboot ops (0=OR/any, 1=AND/all)
- id: auto_reboot_set
label: Set Auto Reboot State
kind: action
command: "!AutoReboot={state}\n"
params:
- name: state
type: enum
values: [0, 1]
description: "0=Disabled, 1=Enabled"
- id: auto_reboot_timeout_set
label: Set Auto Reboot Timeout
kind: action
command: "!AutoRebootTimeoutSet={timeout},{count},{ping_delay},{reboot_attempts}\n"
params:
- name: timeout
type: integer
description: Host timeout in seconds (1-60)
- name: count
type: integer
description: Consecutive timeouts before reboot (1-10)
- name: ping_delay
type: integer
description: Retest delay in minutes (1-30)
- name: reboot_attempts
type: integer
description: "Number of reboot attempts (0=unlimited, 1-10)"
- id: firmware_update
label: Firmware Update
kind: action
command: "!FirmwareUpdate={url}\n"
params:
- name: url
type: string
description: Full path to upgrade file
notes: "Device returns OK then drops connection until reboot complete."
- id: reboot
label: Reboot Device
kind: action
command: "!Reboot\n"
params: []
notes: "Drops connection until device returns online."
- id: account_set
label: Change Login Credentials
kind: action
command: "!AccountSet={user},{pass}\n"
params:
- name: user
type: string
description: Username
- name: pass
type: string
description: Password (13-char limit for SSH credentials)
notes: "Drops connection on success; requires reconnect to log in again."
- id: network_set
label: Set Network Configuration
kind: action
command: "!NetworkSet={host},{ip},{subnet},{gateway},{dns1},{dns2}\n"
params:
- name: host
type: string
description: Hostname
- name: ip
type: string
description: Static IP (omit for DHCP)
- name: subnet
type: string
description: Subnet (omit for DHCP)
- name: gateway
type: string
description: Gateway (omit for DHCP)
- name: dns1
type: string
description: Primary DNS (omit for DHCP)
- name: dns2
type: string
description: Secondary DNS (optional; defaults to 8.8.8.8)
notes: "Device reboots on apply; may return at different IP."
- id: schedule_add
label: Add Schedule
kind: action
command: "!ScheduleAdd={name},{outlets},{action},{freq},{days_or_date},{time}\n"
params:
- name: name
type: string
description: Schedule name
- name: outlets
type: string
description: Bracketed array of outlet numbers, e.g. {1,2,3}
- name: action
type: enum
values: [0, 1, 2]
description: "0=Off, 1=On, 2=Reset"
- name: freq
type: enum
values: [0, 1]
description: "0=Once, 1=Recurring"
- name: days_or_date
type: string
description: "For recurring: {0,1,0,1,0,1,0} (s,m,t,w,t,f,s). For once: {yyyy/mm/dd}"
- name: time
type: string
description: "24-hour time hh:mm, e.g. 13:30"
- id: host_add
label: Add Monitored Host
kind: action
command: "!HostAdd={name},{ip},{outlets}\n"
params:
- name: name
type: string
description: Host name
- name: ip
type: string
description: IP or website URL to test
- name: outlets
type: string
description: Bracketed array of outlet numbers tied to this host
- id: set_telnet
label: Enable/Disable Telnet
kind: action
command: "!SetTelnet={mode}\n"
params:
- name: mode
type: enum
values: [0, 1]
description: "0=Disabled, 1=Enabled"
notes: "Reboot required for change to take effect."
- id: web_server_set
label: Enable/Disable Web Server
kind: action
command: "!WebServerSet={mode}\n"
params:
- name: mode
type: enum
values: [0, 1]
description: "0=Disabled, 1=Enabled"
notes: "Reboot required. Requires firmware 2.0+."
- id: set_sddp
label: Enable/Disable SDDP Broadcast
kind: action
command: "!SetSDDP={mode}\n"
params:
- name: mode
type: enum
values: [0, 1]
description: "0=Disabled, 1=Enabled"
notes: "Requires firmware 2.0+."
- id: exit_session
label: Exit Session
kind: action
command: "!Exit\n"
params: []
notes: "Closes session gracefully."
Feedbacks
- id: firmware_version
type: string
description: Response to ?Firmware, e.g. "1.0.0.0"
- id: hostname
type: string
description: Response to ?Hostname, e.g. "Wattbox"
- id: service_tag
type: string
description: Response to ?ServiceTag, e.g. "ST191500681E8422"
- id: model_number
type: string
description: Response to ?Model, e.g. "WB-800-IPVM-6"
- id: outlet_count
type: integer
description: Response to ?OutletCount (e.g. 12, 16 depending on model)
- id: outlet_status
type: string
description: Response to ?OutletStatus, comma-delimited 0/1 per outlet (0=off, 1=on)
- id: outlet_power_status
type: string
description: Response to ?OutletPowerStatus=index,watts,amps,volts. Not supported on WB150/250.
- id: system_power_status
type: string
description: Response to ?PowerStatus=amps,watts,volts,safe_voltage_flag. Not supported on WB150/250.
- id: auto_reboot_state
type: enum
values: [0, 1]
description: "0=Disabled, 1=Enabled"
- id: outlet_names
type: string
description: Comma-delimited outlet names wrapped in {} per outlet
- id: ups_status
type: string
description: Response to ?UPSStatus=charge_pct,load_pct,health,power_lost,runtime_min,alarm_enabled,alarm_muted
- id: ups_connection
type: enum
values: [0, 1]
description: "0=Disconnected, 1=Connected"
- id: command_ack
type: string
description: Generic "OK" acknowledgement for control commands
- id: error
type: string
description: "#Error message sent for invalid commands or internal errors"
Variables
# Per-outlet settings; modeled as actions already. Listed here for completeness as observable/settable state.
- id: outlet_mode
type: enum
values: [0, 1, 2]
description: "Per-outlet operating mode (0=Enabled, 1=Disabled, 2=Reset Only)"
- id: outlet_power_on_delay
type: integer
description: "Per-outlet power-on delay in seconds (1-600)"
Events
# UNRESOLVED: source mentions ~ prefix for unsolicited messages but no examples provided in the integration protocol doc.
Macros
# UNRESOLVED: source does not describe device-side macro sequences.
Safety
confirmation_required_for:
- firmware_update
- reboot
- network_set
- account_set
- outlet_set # when action=RESET
interlocks: []
# UNRESOLVED: no explicit safety warnings in source. Listed confirmation_required based on commands that drop the connection or change persistent state.
Notes
- Message framing: ASCII text,
\n(0x0A) terminates every command. Prefix?= request,!= control,#= error,~= unsolicited. - Telnet: port 23. SSH: port 22 (requires firmware 1.3.0.4+; 13-char password limit for SSH).
- Max 10 simultaneous connections.
- Login required before any other command; failures prompt re-login.
- WB150/250 do NOT support
?OutletPowerStatusor?PowerStatus. !OutletSet=0,RESETresets all outlets. RESET honors configured power-on delay unless overridden by optional delay param (1-600 s).!Reboot,!FirmwareUpdate,!NetworkSet,!AccountSetdrop the connection on success.- Model-specific outlet count varies (examples show 12 and 16); query with
?OutletCount.
## Provenance
```yaml
source_domains:
- snapav.com
source_urls:
- https://www.snapav.com/wcsstore/ExtendedSitesCatalogAssetStore/attachments/documents/PowerManagement/ProtocolsAndDrivers/SnapAV_Wattbox_API_V2.4.pdf
retrieved_at: 2026-04-30T04:26:11.547Z
last_checked_at: 2026-06-02T07:06:55.503Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T07:06:55.503Z
matched_actions: 30
action_count: 30
confidence: medium
summary: "All 30 spec actions matched verbatim to source protocol table; transport parameters (port 23, TCP, password auth) confirmed; complete bidirectional coverage. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "command protocol is identical for all WB models except ?OutletPowerStatus and ?PowerStatus are explicitly NOT supported on WB150/250. Outlet count varies by model (response example shows 12 or 16 outlets). Firmware version not stated in source."
- "baud rate not applicable / not stated; this is a TCP device. Kept here only as a placeholder. Remove if not needed."
- "default username not stated; 13-character password limit applies only to SSH"
- "source mentions ~ prefix for unsolicited messages but no examples provided in the integration protocol doc."
- "source does not describe device-side macro sequences."
- "no explicit safety warnings in source. Listed confirmation_required based on commands that drop the connection or change persistent state."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0