ISY994i Plugin Ver 8.0

Version 8_7 beta 7/30/2023
Isy994i-v8_7.plugin (70.9 KB)

Redid the Subscription service to not process any data until all subscription data is received.
Please make a backup of your setup/script as I have not had time to fully test this. For those that have customized this script, all I have done is added var subscriptionEvents = “”; to the top just bellow var needSubscribe = true; and then redid function onPoll() all the rest of the script is the same as ver 8_6.

Version 8_6 beta 3/28/2021
Isy994i-v8_6.plugin (58.6 KB)
Added Status devices for multibuttoned switches. These are the secondary buttons that can not be controlled remotely. Some users still used the status of these buttons for their remote so I added them back in as status only devices. They use a custom xaml file linked below to display status.
ISYStatusTile.xaml (2.3 KB)

I am releasing Version 8_5 beta as I am still in the process of figuring out ZWAVE devices. This has several fixes and upgrades.
-removed weather
-separated state and integer variables
-added support for zwave thermostats
-am adding xaml files since this release is in plugin format not hrp
-Changed data checks for new isy firmware.
-added a couple error catching lines to help with user error causing plugin not to work.
-removed device creation of all muti button devices, only the main button is added and controllable using network commands.
-updated all device icons to use Homeremotes standard icon set.

Beta 8_5:
Isy994i-v8_5.plugin (53.1 KB)

xaml files for ISY custom Devices:
ISYIntegerVariableTile.xaml (1.6 KB) ISYProgramTile.xaml (2.7 KB) ISYStateVariableTile.xaml (2.8 KB)

Isy Device list plugin:
This plugin will list all your devices and types to help others add devices to the plugin that I dont own. This is only for those that wish to modify the plugin and is not needed for normal users just using the plugin to control standard insteon devices. To use just open Homeremote then select File, New. the type of handset does not matter just click ok. Once Home Remote creates the new UI just right click devices and import plugin using a file. Select this plugin file. Once it loads it will ask for your username and password. These are not encoded just type them in as if logging into your isy. Make sure your IP address is changed to your isy ip address. Once you click ok it will synch and list all your devices and unique device types that are in your ISY in the LOG. I usually click LOG then unpin it and drag it off to the side to view all the data.

Isy994iDeviceFinder.plugin (3.3 KB)

ISY994i Ver 8.0 12/1/2020

Builder Ver 3.0+

My ISY Firmware 5.0.15A

For Reference of Ver 7
Complete redo of parsing from script based to app based XML. Simplified many script parts to utilize Ver3.0 options. I recommend Making a backup of your setup. Then start by deleteing all devices and re-synchronize to make sure all devices are the latest version. The way Devices are named has been changed to prvent issues with Ver 3.0 HomeRemote so some of your labels and scripts may need to be updated to the new names. Some devices have added support for new ISY firmware and new HomeRemote options. Fixed Thermostat issues and added support for FanModes(Auto,On). Added Support for Motion Sensor II extra variables([“Status”, “BatteryPowered”, “BatteryLevel”, “Temperature”, “Luminance”]).

ISYRequest Device has the following abilities:

“lastPing”,“updateVariables”, “updatePrograms”, “updateDevices”, “updateWeather”, “customCommand”

lastPing value is the date and time of the last ping sent from your ISY. Should change about every 120 seconds.

For “updateVariables”, “updatePrograms”, “updateDevices”, “updateWeather” just need to call these by changing to any value. Just calling this in a trigger will request ISY to send all new updated info. Think of it like a refresh button. You should never need these as HomeRemote creates a subscription from the start so any changes should reflect in HomeRemote as they happen.


Program Folders have been added. I dont use them so I have not tested them. But they should work. If not please let me know.

Device Folders may show up as Unknown_FolderName. You can simply delete these or use them for reference in creating groups inside HomeRemote. If the option becomes avail to create groups from a plugin during synchronize I will update to make that happen. So all devices in your ISY folders would be auto added to Group folders in HomeRemote.

Any Device that I have not anticipated may show up as Unknown_Device name. You can still use these just they may not work with updates to values. If you find a lot of ISY Devices show up as these please let me know so I can look into it. This goes for Insteon Devices. I have no X10 or Zigbee Devices so I cant add support if they dont work with this plugin.

If there is an issue with synchronizing a Device it will show up as Error_DeviceName. This is usually an indication that the data sent from ISY had issues.

Dont Forget to Add your Encoded Username:Password, Username,Password and update Ip address and Port of your ISY. Programs,Weather, and Variables are disabled by default. Just type Yes into the options in the Isy994i Device settings. You have to add both Encoded combo and regular Username and Password. I went this route as I didnt want to send a request to the internet to encode them for you as I dont feel like that a good plugin design relying on Active internet and sending your info to a 3rd party to encode. These setting stay in the plugin only.

Ver 8.0 updates
Bill fixed a memory leak issue and converted it to the new plugin format. I have not updated my home UI to utilize any new changes with home remote so once I get some free time I will update this Plugin to reflect the newer changes in Home Remote. Also there have been several changes in the ISY firmware that I have not fully researched and will adjust as needed.
Also note I have not removed the weather functions from this yet. They are disabled by default just leave them that way since ISY no longer supports the weather plugin.

Isy994i-v8_0.plugin (54.7 KB)

1 Like

@Jimk72 I’m having an issue with variables. I have a label set to be visible if an ISY variable = 1. If the project is running and the variable changes from 0 to 1, the label will appear and all works well. However, if the variable is 1 and then I load the project, the label is not visible. If I change the variable to 0 and then to 1, the label will appear.

I added the line


in the onConnect function and it’s working.

@Jimk72 I found an issue today with Lights. The if statement at line 116 was preventing the the Level from updating. I essentially just removed that condition & now it works as expected. Attached is the file.

Isy994i-v8_1.plugin (54.4 KB)

@gregkinney I did not include your fix in that update I just posted. There’s already some code in there that should be calling that function on “firstrun”. It’ll probably be better to figure out why that code isn’t working.

You have to make sure you have variables enabled in the plug-in settings. And it has to be Yes or YES. Case sensitive. The option for a checkbox would be nice for plug-in settings if it hasn’t already been added.

I keep trying to set up time to update everything but this past 6 months have been crazy busy.

There are still some issues with this plugin that I have fixed in my version.

a) Temperature set points and readings are incorrect, at least for my Z-Wave thermostats for which I use Centrigrade readings. This is fixed by removing the /2 division in lines 237 & 240 and the *2 multiplier in lines 293 & 299. This could be due to hardware types or settings.

b) I have multiple Z-Wave devices which James does not use so I added the following sections inserted at line 990

                case "4.":
                    //All ZWave
                    //Added by CA to accommodate ZWave T'stat (4.8.x.x) and Motion Detector (4.7.x.x)
                    pluginDevice = new Device();
                    pluginDevice.Id = curadd;
                    pluginDevice.DisplayName = nodename;
                    if (nodetype.substring(0, 4) == "4.8.") {
                        pluginDevice.Icon = "Thermometer";
                        pluginDevice.DeviceType = "Thermostat";
                        pluginDevice.TileTemplate = "ThermostatTile.xaml";
                        pluginDevice.DetailsTemplate = "";
                        pluginDevice.Capabilities = ["TemperatureMeasurement", "ThermostatCoolingSetpoint", "ThermostatFanMode", "ThermostatHeatingSetpoint", "ThermostatMode", "RelativeHumidityMeasurement"];
                        pluginDevice.Attributes = ["Status"];
                    plugin.Devices[pluginDevice.Id] = pluginDevice;
                    if (nodetype.substring(0, 4) == "4.7.") {
                        pluginDevice.Icon = "Sensor";
                        pluginDevice.TileTemplate = "MotionSensorTile.xaml";
						pluginDevice.DetailsTemplate = "";
                        pluginDevice.DeviceType = "MotionSensor";
                        pluginDevice.Capabilities = ["MotionSensor"];
                        pluginDevice.Attributes = ["Status"];

As far as I can tell most Z-Wave and Zigbee devices are added into device range 4.x.x.x by the ISY controller. You can find the exact device number in the ISY admin console.

c) There is a problem with ISY variables registration. For example I use only integer variables in my schema, no state variables. If the plugin settings are set to Yes or YES the plugin will crash. I got around this by commenting out the very last section of the plugin that applies to state variables - Line 1215. It needs a bit of Javascript to check for what variables are in use.

Please note that all line references are based on Bill’s V8_1 of this plugin.

I hope this helps anyone who is confused by how the plugin works or can’t get it to work. It is a stellar and complex piece of programming by James so kudos to him for what is a lot of work.

That is the way Insteon Thermostats send data. For any other Thermostat you will have to do a custom conversion. As for variable I could change it to allow enabling them individually. I am waiting on changes with new updates to Isy to upload a new version. Once I confirm changes I will upload a new version.

Had time to research this and it was supposed to be SwitchLevel

 case "Light":
                        if (value > 0) {
                            curDevice.Switch = "On";
                        } else {
                            curDevice.Switch = "Off";
  if (curDevice.SwitchLevel != null) {
                            if (value == "0") {
                                curDevice.SwitchLevel = value;
                            } else {
                                var adjuster = Math.round(Number(value) / 2.55);
                                curDevice.SwitchLevel = adjuster;

Not all lights have SwitchLevel variable(On/Off Only lights).

The change you made:

case "Light":
                        if (value > 0) {
                            curDevice.Switch = "On";
                            curDevice.Level = Math.round(Number(value) / 2.55);
                        } else {
                            curDevice.Switch = "Off";
                            curDevice.Level = 0;

should give and error as On/Off Light devices that are created when initializing does not have that variable:

  if (curadd.substring(curadd.length - 1, curadd.length) == "1") {
                                pluginDevice.Capabilities = ["Switch", "SwitchLevel"];
                            } else {
                                pluginDevice.Capabilities = ["Switch"];

If it is a dimmable device it gets booth else it just gets Switch.

Maybe based on the type of device Home remote assigns the level attribute?

That’s not going to work. The capability is SwitchLevel but the Attribute is actually Level. That’s not the only issue with your new proposal though. The other issue with your code is that when the plugin first loads, the Level is null. That’s normal. Even for devices that have the attribute. So your code only works after you set the Level in onChangeRequest. After that, then it’s no longer null & can receive updates. We don’t want these status updates dependent on an initial onChangeRequest action. We’d like to receive updates even when we physically increase the dimming level.

I understand your concerns. Maybe a better fix would be to check the actual capabilties.

if (curDevice.Capabilities.indexOf("SwitchLevel") != -1) {
    if (value > 0) {
        curDevice.Level = Math.round(Number(value) / 2.55);
    } else {
        curDevice.Level = 0;

Ah thats why it was just Level. its starting to come back to me. I can also just add level to all switches. Most switches are dimmers now days and storing a single number wont have an impact vs checking every switch to see if it contains the level value. That would simplify code when adding switches and when updating.

I will add this to the next full release version. I will prob rename DeviceType to ZThermostat that way I can keep Insteon thermostat formula and then add new section for Zwave Thermostats.

Am removing weather option and add separate enables for the 2 types of variables.

Do any of you guys use Polisy (Polyglot nodes)? Am considering getting one to test out and add functionality for the nodes. This in theory would allow ISY users to have several systems all controllable and get status from through ISY alone instead of several devices being interfaced with Homeremote. Would be more efficient and less network ports/Communication protocols running at same time from within Homeremote.

Sounds good. Yeah, that’ll work.

I found the issue with variables not updating. UD changed the last few lines of data sent when you subscribe. The older version sent control “_11” and action “100” the new version sends control “_23” and action “1” to show that the end has been reached. Which then updates all the variables and programs if enabled.

If the plugin doesn’t see the end of the subscribe data, it still works fine processing all data that is received but will never automatically update variable or programs. These can be called manually using the IsyRequest device that is created when synching.
“lastPing”,“updateVariables”, “updatePrograms”, “updateDevices”, “customCommand”
these can be called at anytime in your UI.

1 Like

Do any of you guys use Polisy (Polyglot nodes)? Am considering getting one to test out and add functionality for the nodes. This in theory would allow ISY users to have several systems all controllable and get status from through ISY alone instead of several devices being interfaced with Homeremote. Would be more efficient and less network ports/Communication protocols running at same time from within Homeremote.

Yes, I use Polyglot. I loaded it on a Raspberry Pi ($50 vs $329). I try to offload as many things as possible to my RPi (Polyglot or not). Polyglot is fantastic, I highly recommend.

Ok I think I have a few gen 3 pi’s laying around I’ll give them a try before buying UD device.

Hi all, thanks for the ISY plugin. This was the one thing missing that I really needed for my Home Theater Remote.

I apologize in advance if this should be a separate topic, but thought I would start in this thread. I can control ISY scenes and switches just fine, but I am having trouble having programs run. I see in the bindings that there is a PCommand which I have tried to set to either On or Off, but that does not work. Any help on how to make programs run in Home Remote? Thanks.

I can look into it. There are several changes that were made to the rest api. I will take a look and see if that was one of them.
What firmware ver are you running on your ISY?

I’m running 4.9.0, just upgraded.

The avail commands to go with PCommand are as follows:

  • run
  • runThen
  • runElse
  • stop
  • enable
  • disable
  • enableRunAtStartup
  • disableRunAtStartup

Instead of On and Off you have to use these depending on what you are wanting to do.