[RELEASE] All NEW Insteon web socket driver now available!



I'm pleased to share news of the latest Insteon HTTP driver with web socket support by Chris Wilson - @cwwilson08.

This latest driver utilizes an updated version of Scott Kuester's Insteon Server Node.js application, which now supports Web Sockets. This new capability allows the use of Insteon door/window contact sensors, motion sensors and leak sensors, as well as instant device status updates. Insteon 8 button keypads are also now supported, and may be used to trigger HE rules, devices and scenes, in addition to Insteon devices and scenes.


Ramp Rate - The Insteon device hardware Ramp Rates are supported, but user definable Ramp Rates via the driver are not. Therefore, the Duration field in the driver does not serve any purpose and must be left blank. However, by activating and deactivating Insteon Scenes, you can control ramp rate. Insteon scene can be controlled via any Insteon devices, and any device or rule on Hubitat Elevation.

Instant device status

Insteon Scene Control via HTTP Get from Button Controller or Rule Machine

Automated Child device creation and Insteon Device ID capture

Organized Parent/Child device structure

Compatible device types
Dimming Micro Modules
Door/Window contact sensors
In-wall dimmers
In-wall switches
Leak sensors
Motion sensors
On/Off Micro Modules
Plug-in dimmers
Plug-in switches

Minimum requirements

  • Insteon 2245-222 Hub (The previous 2242-222 and the newer 2243-222 HomeKit hubs are untested)
  • Dedicated computer or Raspberry Pi with Node.js installed to run the insteonserver.js and the client.js event listener applications.
  • Insteon devices


Insteon Server Node.js application

The insteon-server has been forked to Chris Wilson's repo, as it was necessary to make some changes to some of the files for HE, and the added features Chris has made possible. Please use the forked repo found here rather than the one from Scott Kuester's GitHub repository.

To install the Insteon Server Node.js application, follow these steps:

  1. Install Node.js (google search can help you with this part)
  2. Download the Insteon Server from here
  3. Click on the green Clone or Download button, then click Download ZIP
  4. Create the directory insteon-server inside the node_modules directory and expand the ZIP archive "insteon-server-master" to the insteon-server directory. The directory path on MacOS is /usr/local/lib/node_modules/insteon-server/ and it should be similar on Raspbian.
  5. Type sudo npm -g install
  6. Once that's done, you need to add required dependencies. Type sudo npm -g install home-controller and then sudo npm -g install express
  7. Copy the config-example.json file and rename it config.json.
  8. Edit the config.json file, removing any devices you do not own. The username and password from your insteon hub must replace [Insteon Hub Username] and [Insteon Hub Password] in the config.json file. Atom Text editor is highly recommended for editing on MacOS, and Nano is a very easy to use editor on the Raspbian OS.
  9. Name the devices the way you would like them to appear in your HE hub.
  10. Replace all the [Insteon Device ID] in the config.json file with the actual device ID numbers from your Insteon mobile app. This is important, as it is how the child devices will be created on the Hubitat Elevation hub. If you do not enter the Insteon Device ID numbers in the config.json file for each of your devices, its corresponding child device will not be created on your HE hub.
  11. For Keypads, the device type should be "scene".

Example: (Scroll in the window below to view the entire config.json example)

    "description": "Hubitat Insteon Integration",
    "accessories": [],
    "platforms": [
        "platform": "InsteonLocal",
        "name": "Insteon Server",
        "user": "Banana6",
        "pass": "45QtSRC4",
        "host": "",
        "port": "25105",
        "model": "2245",
        "server_port": "*3500*",
        "devices": [
            "name": "Kitchen Light",
            "deviceID": "45ED1C",
            "dimmable": "no",
            "deviceType": "lightbulb"
            "name": "Dining Room Light",
            "deviceID": "3DED8F",
            "dimmable": "yes",
            "deviceType": "lightbulb"
            "name": "Front Door Sensor",
            "deviceID": "FG34E7",
            "deviceType": "contact sensor"
            "name": "Keypad",
            "deviceID": "[Insteon Device ID]",
            "dimmable": "yes",
            "deviceType": "scene"

NOTE: There is no need to change the deviceType from "Lightbulb", regardless of whether or not it actually is a lightbulb, dimmer or switch. However, you must set "dimmable": "no" in the config.json file if the device type is a switch, a non-dimmable outlet, ON/OFF Micro Module, or an IOLinc.

  1. Save the config.json file and start the Insteon Server node.js application by typing node insteonserver.js. You should see the following in your shell or terminal window:

Connecting to Insteon Model 2245 Hub...
Initiating websocket...
Connected to Insteon Model 2245 Hub...

  1. Open a second shell window (Raspbian) or terminal window (Mac OS) and type node client.js to start the client event listener. You should see the following in the client.js shell or terminal window:

Connected to Insteon Server

WARNING: If you don't start the client.js application, you won't be able to generate the child devices, get device status updates, or use Insteon motion, contact and leak sensors.

Insteon WS Parent and Child device drivers
Difference between this driver and the previous drivers

• It is no longer necessary to install multiple drivers for your Insteon devices. The Parent driver in HE only occupies one HE device network ID, and the Child devices are automatically generated from the data entered into your config.json file.
• There is no need to enter your device network ID numbers in HE. They will be captured and utilized from the values entered in your config.json file.
• Through the use of web sockets, this new driver will update status immediately, and will capture the status of Insteon input devices such as contact, motion, and leak sensors. Any periodic refresh rules used with the previous driver should be removed.

Adding the Insteon driver code to Hubitat Elevation

  1. Copy the parent driver code from here. Refer to the Hubitat docs for installing devices drivers if you have never done this before.
  2. Copy each of the child device driver code from here. Be sure to click the link for the child driver, then click the RAW button at the top right of the driver code window. This will ensure you have all the correct code, without any missing elements or accidentally included special characters.
  3. Choose Select All on the RAW code window, then Copy and Paste the code into a new driver code window in HE and click SAVE
  4. Repeat until you have added each of the child device drivers from Chris' repo.

Installing the Insteon WS Parent driver

  1. Refer to the Hubitat Elevation device driver documentation if you have never installed a device driver before.
  2. Give your Parent device driver a name, and set the type to Insteon WS Parent
  3. Click the Save Device button
  4. Configure the driver as follows:

  1. Click the Save Preferences button, then scroll down and click Save Device button again.
  2. Click the Initialize button. You should see Connected under the Current States field. If you do not see connected. ensure that both the insteonserver.js application and client.js application have been started on your node.js server.
  3. Your child device ID numbers (Insteon Device ID numbers) should all show up in the State Variables field.
  4. In your HE devices list, you should see the Insteon WS Parent app with the name you gave it, and all of your Insteon devices with the names you assigned to each device in the config.json file.

You may now include your Insteon devices in Hubitat Elevation automations, just as you would any Zigbee or Z-Wave device, but without the need for concern about devices dropping off the network, or a weak mesh. I have personally been running this new driver with all my Insteon devices since the end of June, and it has performed perfectly. Very fast. Zero issues or conflicts of any kind.

Controlling Insteon Scenes

This can be done by sending HTTP request directly to the Insteon hub. With this, you can control the ramp rate of Insteon devices per button, rule action, switch, mode change, etc.


ON group 11 (scene 1)
http://[username]:[password]@[insteon hub IP]:25105/0?1111=I=0
OFF group 11 (scene 1)
http://[username]:[password]@[insteon hub IP]:25105/0?1311=I=0

Once you have the credentials and Insteon hub IP info, it's just copy past from then on. It's only the last four digits before =I=0 that change depending on the state or the scene group ID number. So in the above example, 1111 is ON for Group ID 11 and 1311 is OFF for Group ID 11

We need testers and feedback from users!

Testers are welcome. The following devices are untested. If you own these devices and can offer feedback, there's no promise of added compatibility, but without testing, there is a 100% guarantee of no compatibility support.

Looking for more feedback on Keypads. At present, you cannot select an Insteon scene from the Insteon Keypad driver. But you can send HTTP Get from Button Controller and Rule Machine. So technically you can control an Insteon Scene via the Insteon Keypad, or anything on HE, therefor is it important to have it in the driver, or not that big of a deal to just use the HTTP Get request when needed?

2242-222 Hub
2243-222 Hub (HomeKit Edition)
6 button dimming keypad
6 button on/off keypad
Ceiling fan/light module
Mini remotes 1, 4 & 8 scene
Smoke bridge

Thanks go to Chris Wilson - @cwwilson08 for the tremendous amount of work and dedication to putting this new driver together, and a special thanks to Scott Kuester for creating the Insteon-Server app and adding the support for web sockets.


I'm still learning but kinda lost right now Capture


Welcome to the Hubitat Community!

Looks like you're inside Node.js. You have to install it, but then you need to be at a unix or linux command prompt to install the rest of the bits. Type process.exit()

You may need to install NPM too, depending on your system. What are you installing on?
For example. I'm on a Mac at the moment, and my Insteon server also runs on a Mac, but a Linux computer or a Raspberry Pi running Raspbian OS (a flavor of Debian Linux) will work too.

If you type npm -v and then press enter, what is the result? Here's what I get.


How's your unix skills? Not trying to be snarky, honest. Google is an excellent teacher. I'm OK at Unix, but get rusty and will google how to do things all the time. There's also manual pages, but they might be confusing if you're just learning unix or linux. To get to them, you just type man and the thing you want to know more about how to use. So for example man pwd, will show you the options available to use with pwd. To exit the manual pages, just type q

To install Insteon Server, you need to be at the directory where you expanded the zip file. Type pwd (Print Working Directory) and enter to see your current directory location. cd .. to go back one directory level, and cd / to go to the root directory.

The path may be different on various systems. If you type cd /usr/local/lib/node_modules/insteon-server/, does that return an error, or does it take you to the path you need to be at? Does that directory exist? You need to create it yourself. If it's not there, but if /usr/local/lib/node_modules/ is there, then type cd /usr/local/lib/node_modules to change to that directory, and then at the prompt, type mkdir insteon-server. Next copy the downloaded zip file to that directory, and then at the prompt, type unzip insteon-server-master.zip

Once the files are expanded there, then type sudo npm -g install