Insteon Programming · PLM Basics · X10 · PLM Receiving · Insteon Commands · Ramp Rates · Devices· i2cs · Deus Ex Machina

The i2cs Protocol

In March 2012, Smarthome began shipping new devices using the i2cs protocol. Like the previous upgrade from i1 to i2, the devices remained compatible (i.e. you can still manually link a device of any protocol with any other protocol) but there were changes in how they need to be handled for programming purposes. The "cs" in the name refers to checksums, which are now used to ensure accurate reception of extended messages. However there are a number of other changes. The details have not been officially released but here is what I have put together so far:

Linking

You can still programmatically link an i2cs that isn't already linked. This is necessary because of the second point above.

First put the PLM into linking mode:

02 64 [type] [group]

Where [type] = 00 if the PLM will be the responder, 01 if the PLM will be the controller, or 03 if the first device to go into linking mode will be the controller. [group] is the group number for the link.

Then send the command "Enter Linking Mode" to the recipient device as an extended message:

02 62 [address] 3F 09 [group] 00 00 00 00 00 00 00 00 00 00 00 00 00 [checksum]

Checksums

To send extended commands to i2cs devices, it is now necessary to compute a checksum and place it in D14 of the extended command. The checksum is based on the twos complement of the sum of cmd1 through D13. In VB2005 you can compute it as:

((Not(sum of cmd1..d13)) + 1) and 255

(This may appear to have more parentheses than necessary, but there seems to be an order of operations bug that caused it to be incorrect without the extras.)

Here are some example of extended commands with checksums which you can use as a check to make sure you are calculating them correctly:
02 62 1B C5 E4 1F                  2E 00 01 00 00 00 00 00 00 00 00 00 00 00 00 D1
02 62 1C 06 23 1F                   2F 00 00 00 0F FF 01 00 00 00 00 00 00 00 00 C2
02 51 1C 06 23 19 70 1A 11     2F 00 01 01 0F FF 00 A2 00 19 70 1A FF 1F 01 5D
02 62 1C 06 23 1F                   2F 00 00 00 0F F7 01 00 00 00 00 00 00 00 00 CA
02 51 1C 06 23 19 70 1A 11     2F 00 01 01 0F F7 00 E2 01 19 70 1A FF 1F 01 24
02 62 1C 06 23 1F                   2F 00 00 00 0F EF 01 00 00 00 00 00 00 00 00 D2
02 51 1C 06 23 19 70 1A 11     2F 00 01 01 0F EF 00 00 00 00 00 00 00 00 00 D1