Linux Home

(Last updated: Saturday September 8, 2007)

The Linux Insteon support page

This page is is page to provide support for Linux users who have purchased Smarthome's Insteon products. Insteon is not a sponsor of this page and the programs provided are not supported by them. It's not that they haven't been helpful, they have. It's that this has been written outside their support but is supported by the Open Source community.


Insteon is a product and protocol from Smarthome which is comparable to X10 (you can find the developers forum at the Insteon Developers Forums). Insteon has several features that make it's protocol more reliable. One of which is that it adds feedback for Insteon commands. The Power Line Controller (PLC) can speak X10 and Insteon so both protocols can exist in the same setup.

There are, currently, three Power line interfaces that support the Insteon protocol:

There has been quite a bit of confusion as to which is best to use and which is best for development. My current opinion is that the PLM is best for future development (though it would be nice if Insteon gave us some kind of roadmap). As to what Power Line interface you'll need, well that depends on the software you are using.


There are several programs listed on this page and there is some confusion as to what program is for what purpose. Here is my explaination of each program:

  • Misterhouse with Insteon. This page should give you enough information to use Insteon with Misterhouse. Misterhouse supports the use of the PLM (the USB and Serial PLC interface support has been removed).

  • iplcd - The Insteon PLC Daemon. It's a Unix daemon adapted from Dan Lanciani's X10D code. It allows you to type in simple X10 commands such as A1AOFF and have the A1 device turn off. At this time it does not support Insteon commands. To use this with a serial port no other device driver is needed. To use this with the USB PLC the iplc driver (below) is needed. the only command that works with the USB PLC is the "!c" command. The A1AOFF command will not work properly with the USB PLC. This program is not needed by Mr. House. This software works with the Serial PLC (not the PLM).
  • iplc (USB) and compile instructions - This is the device driver to communicate with the PLC. You still need to understand the Insteon packet structure to communicate with the PLC. Iplcd doesn't work with this driver. Well iplcd kind of does in that you can use the "!c" command to manually format the commands to be sent to the PLC. This software is used by the USB PLC (not the PLM).
  • iplc_serial_pl.gz - sample perl code to talk to the serial PLC. This does not need iplcd nor Mr. House. This software uses the Serial PLC (not the PLM).
  • iplc_usb_pl.gz - sample perl code to talk to the USB PLC. This does not need iplcd nor Mr. House but it does need the USB iplc driver. This software uses the USB PLC (not the PLM) and requires the iplc driver above.
  • Bruce Peren has been kind enough to share his libusb Ion code with us. Instead of using my USB driver to talk to the USB PLC it communicates via the HID driver. In short no need to blacklist devices or recompile the kernel (yeah). This software requires the use of the USB PLC (not the PLM) and does not require the iplc driver.
  • iLink INSTEON scene management software. This is Bob Pwwer's Insteon software. He's done a great job and has provided several way to talk to the Insteon PLC's (serial or USB PLC but not the PLM). Bob has 4 versions of the low level communciation code included:
    • idrv.c - interfaces to the iplc kernel driver.
    • iusb.c - interfaces via libusb library api.
    • ihid.c - interfaces via libhid library api.
    • iser.c - interfaces via tty port to serial PLC.
    Not all are used in the current code so read the directions to find out further details. In addition he has added one very important little program called detach. It allows the user to detach a device from the HID. This will keep you from having to recompile the kernel to blacklist and/or remove the HID modules. I'm maintaining a separate copy of detach as I've modified it to support command line arguements.I've created a separate detach page to further explain detach. I've also included Bob's libilib library Readme file. It's a good reference to accessing the various functions he's written.
  • Ryan Hoagland wrote a package of perl libraries and utilities to control an EZBridge TCP to X10/Insteon controller. These utilities include Rain8 Irrigation control and RCS X10 HVAC control.
  • Matt Randolph has create plmtools, it's on Source forge but doesn't have a web page yet (it's using the project page). Plmtools are command line tools that interface to the Insteon PLM. Here's Matt's description: "I've written a few tools for the Insteon PLM for linux. I call them plmtools. They include":
    • plmsend - takes ASCII hexadecimal parameter and sends it to the PLM, waits for a reply from the target device, or times out.
    • plmcat - reads data from the PLM and displays it as ASCII hex
    • plmtty - an interactive PLM communication program for debugging
    I also included a couple of shell scripts:
    • insteon - A wrapper to plmsend (eg. insteon kitchen on 33). This is useful in cron jobs.
    • x10toinst - An example of how plmcat and plmsend can be used to convert x10 messages into insteon messages so that they will be repeated by insteon devices. Allows x10 remotes to control insteon devices more reliably.

    The use of shell scripts with these programs should make it possible to do all sorts of neat tricks. I can imagine things like:

    • create X10 scenes or hybrid X10/Insteon scenes.
    • control a program on a PC using X10 or Insteon like a media player.
    • control more than 16 devices with an X10 remote through multi-key sequences.
    • most anything else you can imagine.

    This driver requires the use of the Insteon PLM (not the Serial or USB PLC).

This is where the Insteon stuff will go. So far I have no format for the page so it's a really dull looking page. Later I'll add more links here. It is my intention to replace X10 with Insteon in my home. I can keep my X10 devices as the Insteon PowerLinc can control both.

What is Insteon?

Insteon is a hybrid (wireless and powerline) home-control networking technology invented by SmartLabs Technology - a subsidiary of SmartLabs Inc. INSTEON was developed specifically for home control and automation applications. It can co-exist with the X10 protocol and most Insteon devices can send and receive X10 in addition to Insteon commands. Network devices will "repeat" the Insteon signal based on message settings. X10 commands will not be repeated.

Most INSTEON devices are powerline-only devices which repeat powerline messages in real-time to avoid signal loss. To achieve its dual-mesh nature, an INSTEON network requires at least two wireless bridges which essentially act as phase couplers, broadcasting powerline commands into the RF channel and vice-versa.

  • Smarthome - were you can purchase the Insteon products.
  • Insteon - More information about Insteon and the Insteon developer forums.

Insteon has release the updated development documentation (PDF).

  • Here are 2 Perl scripts for sending X10 commands to the PowerLinc V2 the First is for the Serial port verion. The Second is for the USB version (these files will be shown as text so save them without the .gz ending). I was unable to use the Device::SerialPort module for the USB because my iplc USB driver doesn't support the correct ioctl calls. I'm not sure what I'm going to do about that yet. I've been conntemplating using LibUSB so that Mr. House use it and it won't care if it's under Unux or Windows (or MAC?). At least that's the theory. Oh, the Misterhouse related files are GPL (in case I forgot to add that into the files).
  • Bob Cusey was kind enough to let me borrow a USB PLC and I've been able to figure out what I need to do to communicate with it. At this time I don't have support in iplcd to use the USB plc but I think I have an idea as to how I'll be able to do it.
  • Spoke with Bob Cusey at Insteon and he has no problem with my program other than the name. So I've changed it to iplcd and I'm going forward with that. So that's taken care of now onto that book.
  • iplcd - I've modeled my Insteon daemon (for Insteon's PLC) after Dan Lanciani's x10d (for the CM11A). And since I'm using some of his code from x10d I'll be using Dan's License. Right now it's a alpha code but I think it's usable. It only supports the serial port plc at this time (the USB version will come later). I really want to thank Jennifer Pinkham, she purchased the dev kit for me to write the software. :-) To untar the file use the command: tar jxvf iplcd-20051203-1.tbz.
  • Experimental iplc driver for the USB Insteon PowerLinc V2. I don't have one and I don't know if it works. I've added a usb option to iplcd to skip the setup of the serial port so users can experiment with this.


The issue with the USB boils down to this:

To write the command 02 48 (hex) to the RS232 device you simply send:

S=> 0x02 0x48

You get back

R<= 0x02 0x48 0x00 0xf0 0x25 0x04 0x00 0x29 0x06

For USB you send:

S=> 0x02 0x02 0x48

which you send via iplcd like this:

!c 02 02 48

spaces are optional. This Which translates into 2 bytes (0x02 0x48). And get back

R<= 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00
R<= 0x01 0x02 0x00 0x00 0x00 0x00 0x00 0x00
R<= 0x04 0x48 0x00 0xf0 0x25 0x00 0x00 0x00
R<= 0x04 0x04 0x00 0x29 0x06 0x00 0x00 0x00

The USB sends back 8 byte 'packets'. The first byte is the number of bytes in the 8 byte packet (I think the first nibble is a status nibble). You're supposed to wait for the 0x80 packet, the next packet has 1 byte (0x02), the next packet 4 bytes ( 0x48 0x00 0xd0 x0c5) ... The important data looks like this:

0x02 0x48 0x00 0xf0 0x25 0x04 0x00 0x29 0x06

Translated it say this is a response to the 0x48 command (Get version) the Insteon address of this controller is 00.f0.25 Type: 0x04, subtype 0x00, version 2.9.

I either take care of this in the driver or I take care of this in the read/write routines of the iplcd. At this time I haven't figured out which is better. I know I prefer to change the driver so we'll see what happens.


  • 2007/09/27 - Started updating the page to correct the the iplc/iplcs issues. I have 3 different methods for accessing Mr. House. I need to remove this confusion.
  • 2006/12/30 - Started the clean up work on this page. Hopefully I've corrected the link issues and made the page a bit more understadable, As always further work needs to be done.
  • 2005/09/18 - Insteon's Bob Cusey was kind enough to lend me a USB PLC. I have been able to communicate with it using my code (the iplc driver and the unmodified iplcd). To properly communicate with it I will need to rewrite the read and write routines to take advantage of the device.
  • Dan Lanciani has pointed out that his code from x10d exists in iplcd (it's also in hcsd, cm15d & cm19d) and none of his license and Copyright exist in the code. He is correct and this is my fault. The 2 licenses are not quite compatible so I've corrected the license and adopted Dan's License (see the License file for more details).
  • 2005/09/11 - Added a man page, TODO and History files. Corrected bugs in the options handling and port number handling.
  • 2005/08 - See the History file.

If you have questions about Home Automation and/or Linux you may email me at This email address is not for unsolicited email (if I didn't opt-in then it's unsolicited).