upsd: Powercom (PCM) hardware

Powercom produces a variety of different UPS series and models. So far, only some of Line-Interactive series are supported, and only those which has an RS-232 (serial, COM) connector.

USB models are not supported. The USB "support" in all the series with USB connector consists of a USB-to-Serial converter, so basically the same protocol ("language") can be used to talk with such UPSes, but I know right to nothing about how USB works and hence I can't implement such support. Someone implemented a kernel-level driver for (some) of such series for Linux, -- the driver creates a /dev/ttyUSBn device which works like a COM-port, and with this driver it's possible to use USB models with upsd. Also, in NUT project there are several drivers which works with similar hardware (trivial USB-to-Serial converter in the UPS), but works in userspace. Please email me if you're able and willing to write USB transport for USB-to-Serial converter used in PCM models in userspace (over /dev/hiddevN device in Linux, which is not a true HID).

Only models with suffix "P" are supported - which stands for "PRO". Those models has control connector and cirquit, the rest are control-less in principle.

The models supported all implements the same (modulo several differences) protocol. Host sends a command (one byte plus 1 or 2 bytes argument when appropriate), and UPS either responds with status information (11 or 16 bytes encoded status data) or performs certain actions (shutdown, self-test etc).

Basic status (encoded as bits in two bytes of status reply) is supported for all models with this protocol. It's such things as whenever we're running on battery or online, whenever there's low-battery condition (when running on battery) or not, whenever UPS is over-loaded or just "failed" for whatever reason, if there's a self-test in progress and the like -- in other words, everything which can be said in a single on/off bit.

All models in these series also tells "advanced" information, such as input and output voltage levels and frequencies, UPS load level and battery charge level. But for those, it's near impossible to find the right ways to calculate the values, which depends on the exact model (series, wattage and voltage) and various status bits (for example, output voltage is calculated differently depending on whenever the UPS is running off battery, or whenever it boosts or bucks input - it's in addition to the exact model number and voltage). There's very little information available about ways how to decode all the values, and even their own specs contradicts with each other and with the reality - certain models gives unreal values when calculated using any of the available formulas.

Due to all this, don't expect that your UPS will be supported by upsd in "advanced" mode (basic bits will work). Also due to this, please send me email if you tried your UPS with upsd and whenever it worked and whenever levels looks ok or not. For this, it's best to have complete information - if you have a voltmeter handy and especially if you can change input voltage (to test AVR mode), please run upsd in debug mode (so it will show raw data as read from UPS), and write out a simple table which lists actual input/output voltage, raw values corresponding to those levels, when it starts its AVR things (also input/output voltage and raw data). Try plugging/unplugging something to/from UPS so that load level will change, and also record all the values. Also try turning input power off and wait for some time (again recording values) - the best is up to the point where it will say "low battery" (don't wait longer!) - record this moment (decoded battery level should be 29 at this point) - you will also know how much time your UPS will be able to power your hardware before it will run out of battery.

See also drv_pcm.c file in source tarball for alot more protocol details -- everything which is known so far. Sadly it's difficult to find/get useful information, and even the very brief information Powercom gives (so-called "specifications") is semi-secret (ie, they give you the "specs", probably, but will ask you not to tell anyone else). (I collected this information piece by piece from various sources, mostly public).

Supported PCM series and devices

Warrior (WAR)

No info about this series.

ModelsStatus/CommentsLive examples
WAR-400A WAR-500A WAR-600A unsupported: no controlling port 
WAR-1000A unsupported: no controlling port 
WAR-1000AP unknown: no information 

Imperial (IMP, IMD)

  • IMD is IMP plus digital display.
  • Is there a way to determine if it's IMD or IMP? (displayed as IMP)
  • Decoding should be automatic as all values are ready to use. Byte5 should be 0xff (it is so far), what about byte11? (I want live examples please).

    ModelsStatus/CommentsLive examples
    IMP-425A IMP-525A IMP-625A IMP-825A IMP-1000A
    IMD-425A IMD-525A IMD-625A IMD-825A IMD-1000A
    unsupported: no controlling port 
    IMP-425AP IMP-525AP IMP-625AP IMP-825AP IMP-1000AP
    IMD-425AP IMD-525AP IMD-625AP IMD-825AP IMD-1000AP
    supported: only models with serial connector (no USB) IMD-625AP 220V (UPS) RU b5=0xff
    IMP-1025A IMP-1200A IMP-1500A IMP-2000A
    IMD-1025A IMD-1200A IMD-1500A IMD-2000A
    unsupported: no controlling port 
    IMP-1025AP IMP-1200AP IMP-1500AP IMP-2000AP
    IMD-1025AP IMD-1200AP IMD-1500AP IMD-2000AP
    needinfo: should be the same as for IMP-425AP etc, but I need confirmation whenever model row is ok (gimme please byte12 value for one of these, or just report whenever upsd reports correct model name.)  

    Black Knight (BNT)

    ModelsStatus/CommentsLive examples
    BNT-400A BNT-500A unsupported:no controlling port 
    BNT-400AP BNT-500AP need info/confirmation about other values and other modes BNT-500AP 220V RU b5=0x10 b11=0x42 b12=28 voltages when online seems to be ok, other values untested
    BNT-600A BNT-800A unsupported: no controlling port 
    BNT-600AP BNT-800AP needinfo/untested 
    BNT-1000AP BNT-1200AP BNT-1500AP BNT-2000AP needinfo/untested 

    King (KIN, KSL?, King CS)

    ModelsStatus/CommentsLive examples
    KIN-325A-ART KIN-425A-ART KIN-525A-ART KIN-625A-ART unsupported: no controlling port 
    KIN-425AP-ART KIN-525AP-ART KIN-625AP-ART bogus values KIN-525AP 220V RU b5=0x80 b11=0x4b(KIN) b12=0x38 levels are bogus no matter which formula to use. Note this one is really marked as KIN-525AP, not KIN-525AP-ART.
    KSL-500AP untested 
    KIN-425CS KIN-525CS KIN-625CS KIN-825CS untested 

    King PRO (KIN)

    Seems like those models return 11-byte (short) status data. Since the only example I have (but many of the units!) returns bogus values, and the model series is quite old, and it's short status (thus impossible to tell the voltage and model number automatically), I'm not sure if it's worth to support it...

    ModelsStatus/CommentsLive examples
    KIN-800AP KIN-1000AP KIN-1200AP info needed KIN-1200AP 220V RU 11bytes (short), b5=0x00, gives bogus levels no matter which formula to use for calculation
    KIN-1500AP KIN-2200AP KIN-3000AP info needed 

    King RM (KIN)

    No info. Probably old model.

    ModelsStatus/CommentsLive examples
    KIN-600AP RM KIN-1000AP RM KIN-1200AP RM no info 
    KIN-1500AP RM KIN-2200AP RM KIN-3000AP RM no info 

    King Pro AL (KAL)

    No info. Probably old model.

    ModelsStatus/CommentsLive examples
    KAL-1000AP KAL-2000AP no info 

    King Pro XL (KXL)

    No info. Probably old model.

    ModelsStatus/CommentsLive examples
    KXL-1000AP KXL-2000AP no info 

    Return to UPSD page.