New binding: Isy

I was wrong about the TriggerLinc device (10.02). It shouldn’t be a GARAGEDOORKIT_THING_TYPE. It should be a new type with 3 channels - OPENED, CLOSED, and HEARTBEAT. Below is the response from the REST API when retrieving info on a TriggerLinc node. Let me know if you need more info.

<node flag="128">
<address>36 E6 EC 1</address>
<name>Master Exteror Door-Opened</name>
<parent type="3">64593</parent>
<type>16.2.67.0</type>
<enabled>true</enabled>
<deviceClass>0</deviceClass>
<wattage>0</wattage>
<dcPeriod>0</dcPeriod>
<startDelay>0</startDelay>
<endDelay>0</endDelay>
<pnode>36 E6 EC 1</pnode>
<ELK_ID>G15</ELK_ID>
<property id="ST" value="0" formatted="Off" uom="on/off"/>
</node>
<node flag="0">
<address>36 E6 EC 2</address>
<name>Master Exteror Door-Closed</name>
<parent type="1">36 E6 EC 1</parent>
<type>16.2.67.0</type>
<enabled>true</enabled>
<deviceClass>0</deviceClass>
<wattage>0</wattage>
<dcPeriod>0</dcPeriod>
<startDelay>0</startDelay>
<endDelay>0</endDelay>
<pnode>36 E6 EC 1</pnode>
<ELK_ID>G16</ELK_ID>
<property id="ST" value=" " formatted=" " uom="on/off"/>
</node>
<node flag="0">
<address>36 E6 EC 4</address>
<name>Master Exteror Door-Heartbeat</name>
<parent type="1">36 E6 EC 1</parent>
<type>16.2.67.0</type>
<enabled>true</enabled>
<deviceClass>0</deviceClass>
<wattage>0</wattage>
<dcPeriod>0</dcPeriod>
<startDelay>0</startDelay>
<endDelay>0</endDelay>
<pnode>36 E6 EC 1</pnode>
<ELK_ID>H01</ELK_ID>
<property id="ST" value="0" formatted="Off" uom="on/off"/>
</node>

Do you think it should only have two channels. status (open or closed) and heartbeat? or is it more like the leak sensors that do have all three ? they have a dry contact, wet contact, and heartbeat. You could try manually creating that item as a leak detector and let me know. I would presumably still create a new thing type to reduce confusion after.

thanks

No, there should be 3 channels - open, closed, and heartbeat. I set it up like a leak detector and it worked perfectly.

I have changed the keeling 8 to match the id #s you are seeing. I have to double check, but on my keylinc 5 or 6 or remotelinc 8 I was seeing those different id #s.

I don’t have the keylinc 8

ok, triggerlinc should be good to go with latest build.

so if you have a dimmable load connected to say B, would it should 25% in the current state box?

No, buttons B-H never show a percent status. They will only show On or Off in the current state box. Button A does show a percent in the current state box. I think Button A should be a dimmer and the other 7 buttons should be switches.

FYI,I’ve switched over to using your ISY binding completely in my OH installation. So far things are working well. The few small issues I’ve had were all problems with my rules or setup. The binding seems to be solid.

I’ll test out the updated jar tonight. Thanks for all the work!

that seems to jive with what I remember reading about the multi-button devices back when I was originally installing, that there was only 1 load dimmer.

that’s good to hear you are finding the binding reliable. It has been reliable for me as well.

This works very well. Just wanted to report in a device ID that I have that is not being recognized:
isy:unrecognized:b381e065:DiningRoom:loadlevel
Increase/decrease the load level

This is a 2474DWH. I believe everything works properly. Amazing!

Hi Ben,

Glad to hear it is working for you.

Could you look in the paper ui/configurations/things and look for the device I’d attribute for that unrecognized thing and report back
to me? Then u can add proper support.

Thanks,
Craig

Did you mean ThingImpl@c86cd99f ? The Insteon ID is 21.12

Yes. Thanks. I’ll let you know when that is added.

@craigh

The KeypadLinc8 is working great! I’m still facing issues with the TriggerLinc. I was able to add a Thing for the TriggerLinc and I linked items to the 3 channels. Unfortunately, none of the items are ever updated When I open/close the door, I see the status updating in ISY but nothing changes in OH. I don’t see any errors in the OH log so I’m not sure why it isn’t working.

I did got into the ISY logs and found this:

Kitchen / Kitchen Door-Opened	Status	100%	Tue 2017/02/28 05:05:49 PM	System	Log	
Kitchen / Kitchen Door-Opened	Status	0%	Tue 2017/02/28 05:06:12 PM	System	Log	
Kitchen / Kitchen Door-Opened	Status	100%	Tue 2017/02/28 05:06:15 PM	System	Log	
Kitchen / Kitchen Door-Opened	Status	0%	Tue 2017/02/28 05:06:18 PM	System	Log	

I was expecting to see DFON and DFOF being sent as the status. Instead, it looks like ISY sends a percentage value - 100 for open and 0 for closed. Is the binding setup to handle a percentage value for the TriggerLinc?

Let me know if you need me to pull any other logs or do more tests to help debug the issue.

could you grab the latest build. I have added some more logging which should help figure out the problem.

make sure log level is set to DEBUG for this binding.

Then open/close the door, and watch for lines which look like this, and in particular when it matches the insteon address of the triggerlinc

2017-02-28 14:24:13.237 [DEBUG] [.b.i.h.IsyInsteonDeviceHandler:64   ] - handleUpdate called, parameters: DON:0:1F 5 6F 1:

Below are the debug logs. Let me know if you need more

12:00:42.336 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: DON, Action: 1, Node: 36 E9 79 1
12:00:42.337 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - find thing handler for address: 36 E9 79 1
12:00:42.337 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - address: 36 E9 79
12:00:42.337 [DEBUG] [.isy.handler.IsyInsteonDeviceHandler] - handleUpdate called, parameters: DON:1:36 E9 79 1:
12:00:42.340 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: ST, Action: 255, Node: 36 E9 79 1
12:00:42.340 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - find thing handler for address: 36 E9 79 1
12:00:42.340 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - address: 36 E9 79
12:00:42.340 [DEBUG] [.isy.handler.IsyInsteonDeviceHandler] - handleUpdate called, parameters: ST:255:36 E9 79 1:
12:00:42.344 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: _1, Action: 3, Node:
12:00:42.348 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: _1, Action: 3, Node:
12:00:44.575 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: _0, Action: 120, Node:
12:00:45.885 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: DOF, Action: 1, Node: 36 E9 79 1
12:00:45.885 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - find thing handler for address: 36 E9 79 1
12:00:45.885 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - address: 36 E9 79
12:00:45.885 [DEBUG] [.isy.handler.IsyInsteonDeviceHandler] - handleUpdate called, parameters: DOF:1:36 E9 79 1:
12:00:45.889 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: ST, Action: 0, Node: 36 E9 79 1
12:00:45.889 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - find thing handler for address: 36 E9 79 1
12:00:45.889 [DEBUG] [binding.isy.handler.IsyBridgeHandler] - address: 36 E9 79
12:00:45.889 [DEBUG] [.isy.handler.IsyInsteonDeviceHandler] - handleUpdate called, parameters: ST:0:36 E9 79 1:
12:00:45.893 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: _1, Action: 3, Node:
12:00:45.896 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Control: _1, Action: 3, Node:

could you try the latest build and see if that resolves the issue.

Now if status as reported by ISY is 0 or 255, those are converted to OFF, ON.

You won’t have to create the thing for the triggerlinc.

Craig,
Awesome binding. I’ve been using OpenHAB1 w/ my ISY since 2015. I recently started fresh with OpenHAB2 and your ISY binding v20170316.
I added the bridge and switches in a things file and added the items file.
Alexa, Siri, and the panel all control the ISY through OpenHAB.

2 issues.

  1. Every 3 minutes, there is an error (and warning) on the openhab.log file saying that there is a problem with the web socket connection. The error and warning are posted below.
  2. Manually switching the light switch does not change the status in OpenHAB (most likely a result of issue #1)

I did notice you committed another change today, I will download the latest jar file and start w/ a fresh openhabian. I will also try discovering the bridge and items instead of manually creating them from the thing file.

If anyone has an insight to the cause of this error, please let me know.

2017-03-18 07:18:52.586 [ERROR] [sy.internal.IsyWebSocketSubscription] - Error with websocket communication
org.eclipse.jetty.websocket.api.WebSocketException: java.lang.NullPointerException
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:280)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[72:org.eclipse.jetty.io:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]
Caused by: java.lang.NullPointerException
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:259)[182:org.openhab.binding.isy:2.1.0.201703161952]
        ... 6 more
2017-03-18 07:18:52.590 [WARN ] [ommon.io.AbstractWebSocketConnection] -
org.eclipse.jetty.websocket.api.WebSocketException: java.lang.NullPointerException
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:280)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)[182:org.openhab.binding.isy:2.1.0.201703161952]
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[72:org.eclipse.jetty.io:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]
Caused by: java.lang.NullPointerException
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:259)[182:org.openhab.binding.isy:2.1.0.201703161952]
        ... 6 more
2017-03-18 07:18:52.617 [DEBUG] [sy.internal.IsyWebSocketSubscription] - Socket Closed: [1006] java.lang.NullPointerException

Again, awesome binding.
-Bri

Ya, let’s try not using the things file so we can rule out a config issue there. To use Alexa you will need to create an items file as described in the documentation for the hue emulator.

Discovery of the bridge(ISY) is not implemented. You will have to go to inbox, click add, then select isy binding. from there click manually add, and select the bridge. then enter ip, user, pass.

from there you should be able to go back to inbox and click add, isy and then your devices, programs, scenes, and variables will show up in the inbox.

Craig,
I followed the following steps:

  1. Formatted the SD card
  2. Flashed a fresh copy of Openhabian/Start up 45 min/Update/UI Standard Setup/Turned on 1.x bindings/Lang&Country in Locale/Preferences UI-English
  3. Copied your latest snapshot (7pm last night) to /usr/share/openhab2/addons
  4. Verified your isy binding showed up in Paper UI Configuration --> Bindings
  5. Went to Configuration --> Things manually added “ISY IP Access Point” added my IP:Port, UserID, P/W.
  6. I have not added any any other things (Although they have automatically shown up in my inbox)
    I have not added any items via paper or a text file. Also, no other bindings yet. 1 binding (ISY) 1 thing (IP Access Point)
  7. I checked the logs and the same websockets error shows up every 3 seconds.

Let me know if you see anything with the below error message or if I missed something from the above steps.

2017-03-18 22:04:16.253 [WARN ] [sy.internal.IsyWebSocketSubscription] - Unhandled Error (closing connection)
java.lang.ArrayIndexOutOfBoundsException: 1
        at org.openhab.binding.isy.internal.InsteonAddress.stripDeviceId(InsteonAddress.java:58)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler.getThingHandler(IsyBridgeHandler.java:108)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler.access$1(IsyBridgeHandler.java:106)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler$1.onModelChanged(IsyBridgeHandler.java:72)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.internal.IsyWebSocketSubscription.parseXml(IsyWebSocketSubscription.java:148)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.internal.IsyWebSocketSubscription.onWebSocketText(IsyWebSocketSubscription.java:111)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:308)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[72:org.eclipse.jetty.io:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]
2017-03-18 22:04:16.258 [ERROR] [sy.internal.IsyWebSocketSubscription] - Error with websocket communication
java.lang.ArrayIndexOutOfBoundsException: 1
        at org.openhab.binding.isy.internal.InsteonAddress.stripDeviceId(InsteonAddress.java:58)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler.getThingHandler(IsyBridgeHandler.java:108)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler.access$1(IsyBridgeHandler.java:106)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.handler.IsyBridgeHandler$1.onModelChanged(IsyBridgeHandler.java:72)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.internal.IsyWebSocketSubscription.parseXml(IsyWebSocketSubscription.java:148)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.openhab.binding.isy.internal.IsyWebSocketSubscription.onWebSocketText(IsyWebSocketSubscription.java:111)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:308)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)[181:org.openhab.binding.isy:2.1.0.201703172158]
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[72:org.eclipse.jetty.io:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.19.v20160908]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]
2017-03-18 22:04:19.333 [INFO ] [sy.internal.IsyWebSocketSubscription] - Reconnecting via Websocket to Isy.

Could you adjust the log levels for the binding? If you log into Karaf, you would type:

log:level DEBUG org.openhab.binding.isy

After the log level is increased, you should see this line in the logs, right before the warn message:

logger.debug("find thing handler for address: " + address);

The binding is trying to parse a string into an insteon address, but it isn’t one.