New information available
Thanks to Tank (<webmaster@tankstage.co.uk>), far more information is available on this protocol. This page may be updated to reflect this at some point.
This page is known to look bad on most browsers. It will be rewritten to look better some day.
Description
Following the tradition of the earlier APC and Opti-UPS decoding work, here is some knowledge about the newer Belkin UPS protocol. This has all been obtained by prodding a F6C525-SER and their closed-source software, so there will probably be a lot of holes or unknown items.
Beware random queries
During the course of creating the original document, I managed to send a bunch of bogus queries and apparently managed to confuse my original UPS pretty badly. It started acting like a glorified power strip - unable to hold any significant load.
Play it safe: do not send random commands to this hardware. Many of them are aliased and you will uncover things that are merely duplicates of well-documented commands.
In particular, the SDE
sequence seems to be very touchy.
I convinced their software that it had a battery at 0 volts with 0% charge and that it was at 68 degrees F.
The magic values for a F6C525-SER are "160;2650;1932;1030;162
" - whatever that means.
Now that you know how to break things, don’t step into this trap.
Firmware differences
There may be differences in the command strings from one version to the next. Occasionally bugs are fixed, so these notes may diverge from your hardware as time goes by and newer versions come out.
String format
The strings seem to be formatted like this:
~
|
attention character |
||||||||
00
|
unknown |
||||||||
P or S , D or R
|
command type:
|
||||||||
nnn
|
length of data to follow, in bytes (e.g. |
||||||||
xxx
|
3 letter command name (e.g. |
||||||||
zzz
|
optional: data for the command
|
A typical command might look like this:
~00S004BUZ0
That’s a command from the PC (S
), data length is 4
, the command is BUZ
, and the data for the command is 0
.
This command happens to be the one that turns off the buzzer in the UPS.
Commands and variable setting
String | Apparent meaning | Typical value/response |
---|---|---|
|
Turn off UPS buzzer (may be BUZ2 on some hardware) |
n/a |
|
Turn on UPS buzzer |
n/a |
|
Turn on receptacle relay 1, delay 1 second |
n/a |
|
Turn off receptacle relay 1, delay 10 seconds |
n/a |
|
10 second battery test |
n/a |
|
Deep battery test |
n/a |
|
Cancel battery test After using this, the UPS may need to be rebooted before it will start another battery test. |
n/a |
|
Cancel shutdown |
n/a |
|
Unsure: may be "shutdown type" - used for shutdown+restore command |
n/a |
|
Shut down the UPS after 120 seconds NOTE: the only known way to return from this is with the power button! |
n/a |
|
Untested, not seen in logs (only seen in strings) Seen in the binary as " This may have second-level precision since 5 digits allows for values like 86400 - one day worth of seconds. |
n/a |
|
Enable "economic mode" - probably only on higher-end units |
n/a |
|
Set normal sensitivity |
n/a |
|
Set reduced sensitivity |
n/a |
|
Set low sensitivity |
n/a |
|
Set low transfer point to |
n/a |
Status/information polling
String | Apparent meaning | Typical value/response | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Manufacturer |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Model |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Firmware |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Status: battery |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Status: output |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Status: input |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Test result |
Values for
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alarm status |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Available commands Each digit represents whether a given command is available on this hardware. Bit 0 is the rightmost (last character). One interpretation follows:
I assume that older models simply lack the higher bits. |
Unconfirmed decoding:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
UPS ratings |
Remaining data is unavailable |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Unknown - only polled at startup |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Unknown - polled at startup, not supported |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sensitivity |
Values for
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Transfer voltages |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Unknown - may mean "socket 1 offline" |
Seems to be the same as |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Unknown - only in program strings |
|
Other notes
ARB
, BRD
and STP
all return zero length responses.
ATT
returns the same data as STB
.
Upon receiving any command with the ~00S
prefix, the UPS will respond with "~00A
". This may be some kind of ACK response.