Posts Tagged ‘PC capture’

I guess at the time of this writing Insteon there really isn’t a economical Insteon motion sensor out there, But after reading that the PLC and send and receive X10. I started to investigate further. And using inexpensive X10 devices I capture them and send out Insteon commands. 🙂

Just like with the insteon data you just have to phrase the information coming in.

As for hardware,  if you are using Motion sensors you NEED a X10 transceiver, this device is what will convert the signals sent from you motion sensor to X10 power lines signals that your PLC will pick up. Just go to Ebay and search for X10 Transceivers you will find them very cheap, I bought the one below for $10 with s & H!

Each transceivers will capture only 1 house code and up to 16 devices.
Here is a picture of my transceiver piggy back on top of my PLC. Since the motion sensors take 2 unit addresses, the more devices you will find you will need to add
in more but under another house code.

For the motion sensors, the same thing, go look for X10 motion sensor (The Eagle) are very inexpensive and great!!)
The go for about $5-6 each, and their weather proof!

Here is one I have outside the entrance (Painted with same color)

You can even have 2 eagle sensor with the same code to cover a big area like in my case my hall way which is in a “L” shape
so it will turn on the lights when ever it detects people in either direction. 🙂


Before we start, I recommend reading the previous threads here so you know how to setup and ‘capture’ the PLC text using VB 2005.  If you new to X10 and just started reading from here, please check out my first blog related to the X10 house code / unit code, found here

Like all my code, IM SURE there is many other ways but I just found it the easiest way for me. 🙂

Unlike Insteon, for some reason (I could be wrong) I cant seam to get all the information from one line, so I have to capture first the device that is talking, store the device in a variable then look further and see what its doing (on,off, etc)

For starters I use the same event for the ‘OnText’ event, Below is a sample text of a device that has been turned on which is read line by line from the OnText event

6/21/2008 4:16:46 PM eventraw=08   –  Means a X10 code was received
6/21/2008 4:16:46 PM receiveX10raw=00 EE  – The HEX value of the device (We wont use this)
6/21/2008 4:16:46 PM receiveX10=B2 – The device that is sending the code this can be A-G (House code) and 1-16 (Unit code)
6/21/2008 4:16:47 PM eventraw=08 –  Means another X10 code was received
6/21/2008 4:16:47 PM receiveX10raw=01 E2 – The HEX value for ON/OFf depending on device I use this to see if its on many time it can be 22/23 or E2/E3.
6/21/2008 4:16:47 PM receiveX10=B On – If the device was turned on, or off

Here is my code below (I’ve removed all Insteon and only left the x10 statements),  This is the main X10 routine I use to capture ALL devices and convert them to Insteon, for example remotes, key chains, motion detectors etc.etc.etc.

‘– I define a public variable called LastX10 this will hold the last HouseCode, Unit # in a variable that isnt lost when we leave the function.

‘- Somewhere in the start of your code,

Public Lastx10 As String

‘—– In the SM (SDM previously defined) OnText event.

 Public Sub sm_OnText(ByVal strInsteonStatus As String) Handles Sm.OnText

      Dim var As System.Array
      var = Split(strInsteonStatus, "=")

        Select Case LCase(var(0))

                    ' -------------- GET DEVICE WHICH IS TRANSMITTING
            Case "receivex10"
                Dim variant1, variant2
                variant1 = Split(strInsteonStatus, "=")

                If (variant1(0) = "receiveX10") Then
                    Lastx10 = variant1(1)  '--------- Here I will store the X10 HouseCode and UnitNumber like (B2)
                End If

                '---------------------------------- SEARCH X10 CODES
            Case "receivex10raw"
                Dim variant1, variant2, strhousecode, strnumber
                variant1 = Split(strInsteonStatus, "=")

                If (variant1(0) = "receiveX10raw") Then
                    variant2 = Split(variant1(1), " ")
                    strhousecode = variant2(0)
                    strnumber = variant2(1)

                    If strhousecode <> 0 Then Checkx10codes(strhousecode, strnumber) '-------- Here I send the next commands to check all three LastX10,Strhousecode,strnumber)
                End If

Here is a example of the Checkx10codes which is called; Notice the strnumber variable changes when its on/off. Only way to find them for me is to test the device and capture

it, sometimes comes back as other numbers but the combination of the three variables is what makes it unique.

Public Function Checkx10codes(ByVal housecode As String, ByVal strnumber As String) As Boolean

  '------------- TURN ON/OFF HOUSE LIGHTS  --------------- C2
        If housecode = "01" And strnumber = "22" And Lastx10 = "C2" Then
            SendtoLog("*-- Keychain pressed to turn on house")
            StartofDay() ' - Some other function to turn on the lights
            Lastx10 = ""
        End If

        If housecode = "01" And strnumber = "23" And Lastx10 = "C2" Then
            SendtoLog("*-- Keychain pressed to turn off house with not activate")
            TurnOffHouse() ' - Another function to turn off all the house
            Lastx10 = ""
            Exit Function
        End If

End Function

Here are some more pictures of other X10 devices im using,

This 5 in 1 remote cost me $9 off Ebay. I have all my devices programmed in it, also

has EXCELLENT range to the x10 transceiver on the other side of the house! There is no DVD button but I programmed the
SAT button, and works great with my Brighthouse Digital box including the interactive guide!

See the device in action here controlling my living room fan / TV / light.

A couple of key chains, the one of the LEFT, keep away from it, the range is horrible, its a cool device for its
size and the fact is has 4 sets of buttons but, horrible range. I dont use it all.

The one on the right is EXCELLENT, highly recommended, you can get a set of 3 for like $12!!

Back side of one of my smaller remote, this one controls the light of the entrance which can be dimmed if I wanted to. So at the tip of my finger tips
I can dim both the garage and entrance lights of the whole outside house. Neat...

Backside of larger remote, Clear see though labels seem to stick
better than regular labels.  And by capturing each one of the button presses and the code above you can
then send out Insteon commands to the devices you want.  :)

For example on the main remote I have a button to call my children. Basically the program does the following,

For this to work each PC needs to have the Messenger service running which by default is off
Then from your code shell out to DOS, example below,


Here is what the batch file contains,

NET SEND * "Hi Girls, Your presence is requested in the living room.  THANK YOU"

I also blink the Living room lights with the following command (Basically four Insteon commands with a second delay between each)
For the example;  InD(16).MacSP="11 22 BB" which is the device address.

            Sm.SendINSTEONRaw("00 00 00 " + InD(16).MacSP + " 05 12 FF", 3)   - ON
            Sm.SendINSTEONRaw("00 00 00 " + InD(16).MacSP + " 05 13 00", 3) - OFF
            Sm.SendINSTEONRaw("00 00 00 " + InD(16).MacSP + " 05 12 FF", 3) - ON
            Sm.SendINSTEONRaw("00 00 00 " + InD(16).MacSP + " 05 13 00", 3) - OFF