Controlling Devices via the PLM
The PLM uses a serial port connection to your computer, so the first
step is to add a SerialPort control to your form. Set the
parameters as:
BaudRate = 19200
DataBits = 8
Handshake = None
Parity = None
PortName = whatever Com port you are using (e.g. "COM1")
StopBits = 1
I called mine "SerialPLM"
These examples assume the Insteon address of the device to be
controlled is in a
string called Address, in the format "0E.A2.10".
To turn an Insteon device on:
Dim data(7) as Byte
Dim a() as String
data(0) = 2 ' all commands start with 2
data(1) = 98 ' 0x062 = the PLM command to send an Insteon standard or
extended message
a() = Address.Split(".")
data(2) = Convert.ToInt32(a(0), 16) ' three byte
address of device
data(3) = Convert.ToInt32(a(1), 16)
data(4) = Convert.ToInt32(a(2), 16)
data(5) = 15 ' flags
data(6) = 17 ' 0x011 = the Insteon command for "On"
data(7) = 255 ' 0xFF = 100% -- to change the level
up or down, just replace this value
SerialPLM.Write(data, 0, 8)
To turn an Insteon device off:
Dim data(7) as Byte
Dim ia() as String
data(0) = 2 ' all commands start with 2
data(1) = 98 ' 0x062 = send an Insteon standard or extended message
ia() = Address.Split(".")
data(2) = Convert.ToInt32(a(0), 16) ' three byte
address of device
data(3) = Convert.ToInt32(a(1), 16)
data(4) = Convert.ToInt32(a(2), 16)
data(5) = 15 ' flags
data(6) = 19 ' 0x013 = the Insteon command for "Off "
data(7) = 0 ' 0x00 = 0% the level is always 0 for Off
SerialPLM.Write(data, 0, 8)
To send any other Insteon command:
Just use the above code, except that
data(5) = flags (see below)
data(6) = command1 (click here for
a reference list)
data(7) = command2
The flags byte most often will be 15, which means it is a direct
message to the addressed device, and should be retransmitted by other
devices along the way 3 times. The breakdown of the flags byte in
detail is:
Bit Position |
Flag |
Meaning |
Bit 7 (128) |
Broadcast/NAK |
100 = Broadcast
Message
000 = Direct Message
001 = ACK of Direct Message
101 = NAK of Direct Message
110 = Group Broadcast Message
010 = Group Cleanup Direct Message
011 = ACK of Group Cleanup Direct Message
111 = NAK of Group Cleanup Direct Message |
Bit 6 (64) |
Group |
Bit 5 (32) |
Acknowledge |
Bit 4 (16) |
Extended |
1 = Extended Message
0 = Standard Message |
Bit 3 (8) |
Hops left |
00 = 0 message
retransmissions remaining
01 = 1 message retransmissions remaining
10 = 2 message retransmissions remaining
11 = 3 message retransmissions remaining |
Bit 2 (4) |
Bit 1 (2) |
Max hops |
00 = do not
retransmit
01 = retransmit this message 1 time maximum
10 = retransmit this message 2 times maximum
11 = retransmit this message 3 times maximum |
Bit 0 (1) |
For example:
Direct Message, Standard length, 3 message retransmissions remaining
out of 3
00001111 binary = 15
Broadcast Message, Standard length, 3 message retransmissions remaining
out of 3
10001111 binary = 143