Skip to content
Fresh AV Labs

PLUGIN MANUAL / v2.1.0

WattBox IP Control

Q-SYS user plugin for SnapAV WattBox IP power controllers. Per-outlet switching and metering, UPS telemetry, auto-reboot configuration, and faceplate control over the WattBox Integration Protocol.

01.Introduction

WattBox IP Control connects a Q-SYS Core to a SnapAV WattBox IP power controller over TCP, using the WattBox Integration Protocol. It switches and resets outlets, reads power and UPS values, and sets the WattBox's auto reboot. Every control on its panel is also a pin.

The Model property sizes the plugin, from one outlet on a WB-150 to 24 outlets on a Custom model.

Per-Outlet Control

On, Off, Toggle and a timed Reset for each outlet, with its state and its name.

Power Readings

System power, current and voltage, a safe-voltage check, and per-outlet readings.

UPS Status

Charge, load, runtime, health and power-lost state of a UPS on the WattBox.

Auto Reboot

Set the WattBox's own auto reboot timing from Q-SYS.

02.Requirements

ComponentRequirement
Q-SYS DesignerTested with Q-SYS Designer 10.4
WattBoxA model listed under Model in Plugin Properties, or Custom with 1 to 24 outlets
NetworkA TCP path from the Core to the WattBox on Port, default 23. See Connection Setup
LicenseOne activation code per Core. See Licensing

03.Installation

The WattBox IP Control package contains one plugin file:

FilePurposeLicense
WattBox_IP_Control.qplugxThe WattBox controllerLicensed

Copy the plugin files

Copy each .qplugx file into Documents\QSC\Q-Sys Designer\Plugins\. A subfolder works; Designer scans the folder recursively. Double-clicking a file also installs it, into the Plugins folder itself. The plugin appears in Schematic Elements under Plugins, Fresh AV Labs.

Add it to the design

Drag the plugin from Schematic Elements into the design.

04.Quick Start

Set the model

Add WattBox IP Control to the design and select the block. Set Model to the WattBox model. For a model not in the list, set Model to Custom and set Custom_Outlet_Count. The Outlets page shows one card per outlet.

Push the design

Push the design to the Core. The LICENSE box counts down, or reads ACTIVATED. Without a code the plugin runs a 10-minute demo, see Licensing. The status bar shows Fault - Missing: IP Address, Username, Password.

Enter the connection details

On the Status page, in the CONNECTION card, enter IP Address, Username and Password. Leave Port at 23 unless the WattBox uses another port. The status bar shows Initializing - Connecting..., then Initializing - Authenticating....

Confirm the connection

Look at the header and the SYSTEM INFO card. The Connected LED lights and the status bar reads OK. SYSTEM INFO shows the hostname, model, firmware and service tag.

Check the outlets

Open the Outlets page. The Status LED on each outlet card is lit when that outlet is on.

The most common support call is a WattBox with its IP control (Telnet) service turned off, see Connection Setup.

05.Plugin Properties

The connection details are controls on the Status page, not properties, see Connection Setup.

PropertyRange / ChoicesDefaultDescription
Activation_CodeTextblankThe activation code for this Core's Locking ID. Leave blank to run the demo. See Licensing.
Activation_Code_BackupTextblankThe code for the other Core of a redundant pair. Leave blank on a single Core.
Show_Locking_IDNo / YesNoWhen Yes, shows the LOCKING ID box in the header and gives its pin the License~Locking ID name. See Control Pins.
ModelWB-150-IPW-1 (1 outlet), WB-250-IPW-2 (2), WB-300-IP-3 (3), WB-700-IPV-12 (12), WB-800-IPVM-6 (6), WB-800-IPVM-12 (12), WB-800-IPVM-18 (18), Custom (Custom_Outlet_Count)WB-800-IPVM-12Sets the outlet count of the panel and the pins. The count for each model is beside its name.
Custom_Outlet_Count1 - 2412Shown when Model is Custom. The outlet count of the Custom model.
Poll_Rate1 - 6015Seconds between polls. Each poll sends the next step of a six-step cycle, see How It Works.
Debug_LevelStandard / VerboseStandardVerbose adds each command sent and each block of data received to the plugin's debug window. The plugin does not write the password there.

06.Connection Setup

The plugin opens a TCP connection to the WattBox and logs in with Username and Password. The WattBox's IP control (Telnet) service must be on. That is a setting on the WattBox, not in the plugin.

ControlRangeDefaultDescription
IP AddressTextblankThe WattBox's IP address.
PortText23The WattBox's integration protocol port. Text that is not a number connects to 23.
UsernameTextblankThe login username.
PasswordTextblankThe login password. The field shows ****** after you enter it.

The plugin keeps the password you entered and logs in with it, while the field shows ******. To change the password, type the new one over the mask. To clear it, clear the field. Entering ****** itself leaves the kept password unchanged.

Two settings limit access to the credential this plugin stores:

  • In Core Manager, under Access Management, turn on Access Control.
  • If no external control system reads or drives this block, set its Script Access to Script.

Connection behavior

  • Start. One second after the design starts, the plugin connects if all four fields are filled.
  • Field changes. While the plugin is not logged in, it connects as soon as all four fields are filled.
  • Retry. After a closed connection, an error, a failed connect or a login timeout, the plugin tries again every 10 seconds.
  • Login timeout. If the login does not complete 15 seconds after the connection opens, the plugin retries.
  • Login failure. When the WattBox rejects the login, retries stop. Correct Username or Password, or press Connect, to try again.
  • Disconnect. Disconnect closes the connection and stops retries until you press Connect.

Connection status

The status bar under the header shows a state and a message. Q-SYS puts the state word in front of the message, so the bar reads, for example, Fault - Login Failed - Check Credentials. At demo expiry it shows the expiry message instead, see License status.

StateMessageCauseRemedy
Initializing(none)The design is starting.None.
FaultMissing: <fields>A connect was attempted with a field empty. <fields> names each empty one, in the order IP Address, Port, Username, Password.Fill the named fields.
InitializingConnecting...The connection is opening.None.
FaultConnect failed: <error>The connection could not start. Reconnecting in 10s... normally replaces it.Check IP Address and Port.
InitializingAuthenticating...The connection is open and the plugin is logging in.None.
OK(none)Logged in.None.
FaultLogin Failed - Check CredentialsThe WattBox rejected the login. Retries stop.Correct Username or Password.
FaultLogin timeout - retryingThe login did not complete in 15 seconds. Reconnecting in 10s... normally replaces it.None. The plugin retries.
InitializingReconnecting in 10s...The plugin is waiting to retry.None.
InitializingReconnecting...The connection dropped and is reopening.None.
FaultConnection ClosedThe connection closed. Reconnecting in 10s... normally replaces it.Check the WattBox and the network.
FaultError: <error>The connection reported an error. Reconnecting in 10s... normally replaces it.Check the WattBox and the network.
FaultDisconnectedDisconnect was pressed. Retries stop.Press Connect.
InitializingRebooting device...Reboot WattBox was pressed. See System card.None. The plugin reconnects.

07.Licensing

The plugin reads Activation_Code and Activation_Code_Backup when the design starts.

What demo expiry stops

The licensed product is the connection to the WattBox. At expiry the plugin closes the connection, stops polling and stops retrying, and the Connected LED goes off. Connect greys out, and so does every button and setting on the Outlets page and on the GLOBAL, AUTO REBOOT and SYSTEM cards. A press from a pin sends nothing. Disconnect and Refresh stay enabled, but there is no connection for them to act on. The readouts keep their last values and stop updating.

Activate

Read the Core's Locking ID

Set Show_Locking_ID to Yes and push the design. The Locking ID appears in the LOCKING ID box. Core Manager also shows it under Licensing, for any Core, with no design change. The Designer emulator reports EMULATOR or *100000000000000. The plugin marks it as not a Core ID. No code can be made for it.

Get a code for that Locking ID

Buy or request an activation code at freshavlabs.com, quoting the Locking ID exactly.

Enter the code and push the design

Paste the code into Activation_Code and push the design. The LICENSE box reads ACTIVATED. The plugin compares only the digits of the code, so punctuation and spaces do not matter. A code entered on a running design applies at the next design start.

License status

Q-SYS prefixes the LICENSE box text with its own status word, so the box reads OK - ACTIVATED or Compromised - DEMO: 9:59 remaining.

StatusColorMeaning
ACTIVATEDGreenA code validated against this Core. No time limit.
DEMO: M:SS remainingYellowNo code entered. Counting down.
DEMO (invalid code): M:SS remainingYellowA code was entered and did not validate against this Core's Locking ID.
DEMO EXPIRED - Activation RequiredRedThe demo ran out. "What demo expiry stops" above says what the plugin still does.

At expiry the plugin's Status control also reads Fault - License required - demo expired, so a Status Combiner sees the fault.

08.Status Page

The Status page holds seven cards: CONNECTION, SYSTEM INFO and SYSTEM POWER on the left, and UPS STATUS, GLOBAL, AUTO REBOOT and SYSTEM on the right.

The header and the status bar are on both pages. The LOCKING ID and LICENSE boxes are at the top right of the header, LOCKING ID above LICENSE. LOCKING ID shows only when Show_Locking_ID is Yes. Below LICENSE are Refresh and the Connected LED. The status bar messages are in Connection status.

Refresh sends the login queries again. The SYSTEM INFO card, the outlet names and states, the power and UPS values and the auto reboot state then update. Without a login it sends nothing.

Connection card

The CONNECTION card holds IP Address, Port, Username, Password, Connect and Disconnect, see Connection Setup.

System Info card

ControlRangeDescription
Hostname (SystemName)TextThe hostname the WattBox reports.
ModelTextThe model the WattBox reports.
Model Mismatch indicator (ModelMismatch)OK / FaultAt the end of the Model row. Shows a Fault when the reported model differs from the Model property, ignoring case and hyphens. Never a Fault when Model is Custom. Its pin carries Fault - Mismatch: <reported model>.
Firmware (FirmwareVersion)TextThe firmware version the WattBox reports.
Service Tag (ServiceTag)TextThe service tag the WattBox reports.
Outlets (OutletCountFB)TextThe outlet count the WattBox reports. The Outlets page follows the Model property instead.

The card updates at login and on Refresh.

System Power card

ControlRangeDescription
Power (SystemPower)<n.nn> WSystem power.
Current (SystemCurrent)<n.nn> ASystem current.
Voltage (SystemVoltage)<n.nn> VSystem voltage, for example 120.00 V.
Safe Voltage (SafeVoltage)OK or Fault - Warning - <v>VOK when the voltage is 100 V to 130 V, or when the WattBox reports it as safe. Otherwise a Fault with the voltage to one decimal, for example Fault - Warning - 92.4V.

The plugin sends no power queries when the WattBox reports a WB-150 or WB-250 model. Until the WattBox reports its model, the Model property decides. Without power queries this card and the outlet readouts do not update.

UPS Status card

ControlRangeDescription
Connected (UPSConnected)LEDOn when the WattBox reports a UPS.
Pwr Lost (UPSPowerLost)LEDOn when the UPS reports that power is lost.
Alarm (UPSAlarmEnabled)LEDOn when the UPS alarm is enabled.
Muted (UPSAlarmMuted)LEDOn when the UPS alarm is muted.
Charge (UPSCharge)<n>%Battery charge.
Load (UPSLoad)<n>%UPS load.
Runtime (UPSRuntime)<n> minRuntime in minutes.
Health (UPSHealth)OK - Good or Fault - BadBattery health, as the WattBox sends it. Any word other than Good shows as a Fault.

The plugin reads Connected at login and on Refresh, and polls the other values only while Connected is on. The values keep their last reading when the UPS goes away. Wire UPS~Power Lost to an alarm or a notification.

Global card

ControlRangeDescription
All On (AllOn)TriggerTurns on every outlet the WattBox reports.
All Off (AllOff)TriggerTurns off every outlet the WattBox reports.
Reset Delay (s) (ResetAllDelay)1 to 600, default 3The delay, in seconds, that Reset All sends.
Reset All (ResetAll)TriggerSends a reset with Reset Delay (s) to every outlet the WattBox reports.

Auto Reboot card

Auto reboot is a WattBox feature. The WattBox times out a host and reboots after a count of time-outs. The plugin sets the timing and has no control for the host.

ControlRangeDescription
Enabled (AutoRebootEnabled)On / offA press turns auto reboot on or off on the WattBox. Green (#16A34A) when on, #F9FAFB when off. Shows the WattBox's state as read at login and on Refresh.
Timeout (AutoRebootTimeout)1 to 60, default 5Seconds the WattBox waits before it times out the host.
Count (AutoRebootCount)1 to 10, default 3Consecutive time-outs before an auto reboot.
Ping Dly (AutoRebootPingDelay)1 to 30, default 5Minutes the WattBox waits before it tests again after an auto reboot.
Attempts (AutoRebootAttempts)0 to 10Reboot attempts. 0 is unlimited.
Apply Settings (SetAutoRebootSettings)TriggerSends Timeout, Count, Ping Dly and Attempts to the WattBox.

The plugin never reads Timeout, Count, Ping Dly or Attempts from the WattBox. The fields show what Q-SYS last held, not what the WattBox holds.

System card

ControlRangeDescription
Reboot WattBox (RebootSystem)TriggerReboots the WattBox itself, not an outlet. The status bar shows Initializing - Rebooting device..., and the plugin reconnects after the WattBox acknowledges.
Faceplate (FaceplatePresent)LEDOn when the WattBox reports a faceplate.
LED Level (FaceplateLedLevel)0 to 65535Faceplate LED brightness. 0 is dimmest. Read from the WattBox.
Set (SetFaceplateLedLevel)TriggerSends LED Level to the WattBox.

Faceplate control needs WattBox firmware 2.3.0.2 or later. Below it, Faceplate stays off and Set does nothing. The plugin checks the firmware at login and on Refresh.

09.Outlets Page

The Outlets page has one card per outlet, two per row, outlet 1 at the top left. The Model property sets the number of cards.

Outlet card

ControlRangeDescription
Status (OutletStatus)LEDBeside the outlet number. On, green (#16A34A), when the outlet is on.
Name (OutletName)TextThe outlet's name on the WattBox. Underscores show as spaces.
Set (UpdateOutletName)TriggerSends Name to the WattBox. Commas and line breaks are removed, spaces become underscores, and the name is cut to 31 characters.
On (OutletOn)TriggerTurns the outlet on.
Off (OutletOff)TriggerTurns the outlet off.
Toggle (OutletToggle)On / offFollows the outlet: white (#FFFFFF) when on, grey (#6B7280) when off. A press sends on or off for the new state.
Reset (OutletReset)TriggerSends a reset with Delay (s).
Delay (s) (OutletResetDelay)1 to 600, default 3The delay, in seconds, that Reset sends.
V:, W:, A: (OutletVolts, OutletWatts, OutletAmps)Numbers, no unitOutlet voltage with one decimal, power with two and current with three, for example 116.5, 1.01, 0.020. See System Power card for the models that send none.

Status and Toggle update when the WattBox sends an outlet status message, and when the plugin polls outlet state. That poll comes once every six polls: 90 seconds at the default Poll_Rate of 15.

Pin-only outlet settings

These controls have no widget. Each is a pin per outlet, and the plugin never reads its value back from the WattBox.

PinRangeDescription
Outlet N~Power On Delay (OutletPowerOnDelay)1 to 600The WattBox's power-on delay for the outlet. No default.
Outlet N~Set Power On Delay (SetOutletPowerOnDelay)TriggerSends Power On Delay to the WattBox.
Outlet N~Mode (OutletMode)Textdisabled sets Disabled and reset only sets Reset Only, in any case. Any other text sets Enabled.
Outlet N~Set Mode (SetOutletMode)TriggerSends Mode to the WattBox.

10.Control Pins

Every control on the panel is also a pin. Outlet pins read Outlet N~<name>, where N is the outlet number. In a control script an outlet control carries the number in its name, such as OutletOn 3. On a one-outlet model the name has no number, OutletOn.

Connection and license pins

PinTypeDirection
Connection~StatusStatusOutput
Connection~ConnectedLEDOutput
Connection~IP AddressTextBoth
Connection~PortTextBoth
Connection~UsernameTextBoth
Connection~PasswordTextBoth, reads ******
Connection~ConnectTriggerBoth
Connection~DisconnectTriggerBoth
Connection~RefreshTriggerInput
License~StatusStatusOutput
License~Locking IDTextOutput

License~Locking ID has that name only when Show_Locking_ID is Yes.

System pins

PinTypeDirection
System~HostnameTextOutput
System~ModelTextOutput
System~Model MismatchStatusOutput
System~FirmwareTextOutput
System~Service TagTextOutput
System~Outlet CountTextOutput
System~RebootTriggerInput

Power pins

PinTypeDirection
Power~System PowerTextOutput
Power~CurrentTextOutput
Power~VoltageTextOutput
Power~Safe VoltageStatusOutput

UPS pins

PinTypeDirection
UPS~ConnectedLEDOutput
UPS~ChargeTextOutput
UPS~LoadTextOutput
UPS~RuntimeTextOutput
UPS~HealthStatusOutput
UPS~Power LostLEDOutput
UPS~Alarm EnabledLEDOutput
UPS~Alarm MutedLEDOutput

Global and auto reboot pins

PinTypeDirection
Global~All OnTriggerInput
Global~All OffTriggerInput
Global~Reset AllTriggerInput
Global~Reset DelayIntegerBoth
AutoReboot~EnabledToggleBoth
AutoReboot~TimeoutIntegerBoth
AutoReboot~CountIntegerBoth
AutoReboot~Ping DelayIntegerBoth
AutoReboot~AttemptsIntegerBoth
AutoReboot~ApplyTriggerInput

Outlet pins

PinTypeDirection
Outlet N~StatusLEDOutput
Outlet N~NameTextBoth
Outlet N~Update NameTriggerInput
Outlet N~OnTriggerInput
Outlet N~OffTriggerInput
Outlet N~ToggleToggleBoth
Outlet N~ResetTriggerInput
Outlet N~Reset DelayIntegerBoth
Outlet N~VoltsTextOutput
Outlet N~WattsTextOutput
Outlet N~AmpsTextOutput
Outlet N~Power On DelayIntegerBoth
Outlet N~Set Power On DelayTriggerInput
Outlet N~ModeTextBoth
Outlet N~Set ModeTriggerInput

Faceplate and network pins

PinTypeDirection
Faceplate~PresentLEDOutput
Faceplate~LED LevelIntegerBoth
Faceplate~Set LEDTriggerInput
Network~HostnameTextBoth
Network~DHCPLEDOutput
Network~IPTextOutput
Network~SubnetTextOutput
Network~GatewayTextOutput
Network~DNS1TextOutput
Network~DNS2TextOutput

The Network~ pins have no widget, and they fill only on WattBox firmware 2.3.0.8 or later. A value written to Network~Hostname is not sent to the WattBox.

11.Troubleshooting

The plugin never connects

  • Read the status bar message in Connection status.
  • Verify the Core can reach the WattBox IP on TCP 23, or on the port set in Port.
  • Confirm the WattBox's IP control (Telnet) service is on, see Connection Setup.

The plugin stopped retrying

Buttons are greyed out

The outlet count is wrong

  • The Outlets page follows the Model property. If the Model Mismatch indicator in SYSTEM INFO shows a Fault, correct Model and push the design. See System Info card.

Power readings do not update

Faceplate controls do nothing, or the network pins are empty

The auto reboot fields do not match the WattBox

Reading the debug output

  • Set Debug_Level to Verbose, see Plugin Properties, and open the plugin's debug window.

12.How It Works

The plugin holds one TCP connection to the WattBox and speaks the SnapAV WattBox Integration Protocol. Queries start with ?, commands start with !, and the WattBox also sends unsolicited ~OutletStatus messages. The protocol document states that the WattBox accepts 10 connections at a time.

Login

The plugin sends Username at a Username: or login: prompt and the password at a Password: prompt. A line with Successfully Logged In or Login successful completes the login. A line with Login incorrect, Invalid or denied fails it.

Half a second after login the plugin sends ?OutletCount, ?Model, ?Firmware, ?ServiceTag, ?Hostname, ?OutletStatus, ?OutletName, ?PowerStatus, ?UPSConnection and ?AutoReboot. Two seconds after login it sends ?OutletPowerStatus=<n> for each outlet. The two power queries go only where power queries are sent. Refresh sends the same queries, plus ?NetworkGet where the firmware supports the network pins.

Polling

Each Poll_Rate tick sends the next step of this cycle:

  1. ?OutletStatus
  2. ?PowerStatus, where power queries are sent
  3. ?UPSStatus, while the UPS Connected LED is on
  4. ?OutletPowerStatus=<n> for the next outlet, where power queries are sent
  5. The same as step 4
  6. ?NetworkGet, where the firmware supports the network pins, see Faceplate and network pins

The model, firmware, service tag, hostname, outlet names and auto reboot state are not polled.

Commands

CommandSent by
!OutletSet=<n>,ON and !OutletSet=<n>,OFFOn, Off, Toggle, All On, All Off
!OutletSet=<n>,RESET,<delay>Reset, Reset All
!OutletNameSet=<n>,<name>Set on an outlet card
!OutletPowerOnDelaySet=<n>,<delay>Outlet N~Set Power On Delay
!OutletModeSet=<n>,<mode>Outlet N~Set Mode, with 0 Enabled, 1 Disabled, 2 Reset Only
!AutoReboot=1 and !AutoReboot=0Enabled
!AutoRebootTimeoutSet=<timeout>,<count>,<ping delay>,<attempts>Apply Settings
!FaceplateLedLevelSet=<level>Set in the SYSTEM card
!RebootReboot WattBox
!ExitDisconnect, while logged in

13.Support

Include with a request:

  • Q-SYS Designer version
  • WattBox model and firmware version, shown in the SYSTEM INFO card
  • Plugin version, shown under the plugin name in the header
  • The Locking ID, for a license question
  • Debug output captured with Debug_Level set to Verbose