Project Home‎ > ‎Documentation‎ > ‎Interfaces‎ > ‎


Universal Powerline Bus (UPB) is a highly reliable, cost effective, 2-way communications technology similar to Insteon but supports a much higher voltage on the power line which can provide more reliable communications.

Similar to Insteon, Pytomation communicates to switch, lamp and other modules via a computer interface called a PIM, Powerline Interface Module. It is a small plug-in device designed to be the interface between an RS232 or USB port on a computer or dedicated controller and the powerline. At this point in time UPB probably has much the best support in Pytomation vs Insteon.

UPB has the following advantages over say Insteon:

  • Its incredibly simple and based loosely on X10 protocol

  • It sends at 40V which can power through most noise

  • 2 way devices by default

  • PCS is completely open about their protocol.  No SDK fee, no NDA.

  • The protocol in the last 10 years has never changed

  • Light switches can actually decouple the load from the switch.  

  • The switch can control something that isn't the attached load and vice / versa

  • All UPB devices can relay UPB messages.  No one has implemented this yet, but I intend to as I have a problematic switch on the other side of the house.

  • Have never had a UPB device die on a surge suppressed house.  Cant say the same about Insteon.

  • The UPSTART configuration program (free from PCS) can do anything without ever having to physically touch the equipment to configure.


  • Expensive

  • No RF

Below are the model numbers supported.

  • PIM-R – RS232 PowerLine Interface Module

  • PIM-U – USB PowerLine Interface Module

The PIM communicates to wall switches and lamp modules etc. Here is a small list of devices known to work. This is by no means all of the devices that will work. We will provide an updated complete list as time allows.

  • Wall Switch Dimmer - WS1D

  • Wall Switch LED and CFL's - WS1DL

  • Lamp Module - LM1

  • Appliance Module - AM1

Using in an Instance
# Create the interface
upb = UPB(Serial('/dev/ttyS0', 4800))

# Use in a light l_recroom_lamp = Light(address=(49,6), devices=(upb, sl_recroom_lamp, m_recroom), delay={ Attribute.COMMAND: Command.STILL, Attribute.SECS: 60 }, name='Recroom Lamp')