diff --git a/src/main/java/org/openhab/binding/zwave/internal/protocol/ZWaveNode.java b/src/main/java/org/openhab/binding/zwave/internal/protocol/ZWaveNode.java index d48f1b473..b00406617 100644 --- a/src/main/java/org/openhab/binding/zwave/internal/protocol/ZWaveNode.java +++ b/src/main/java/org/openhab/binding/zwave/internal/protocol/ZWaveNode.java @@ -1282,12 +1282,15 @@ public List processCommand(ZWaveCommandClassPayload pa } // Check that the length is long enough for the encapsulated command to be included - if (payload.getCommandClassCommand() == 6 && payload.getPayloadLength() > 4) { + if (payload.getCommandClassCommand() == 6 && payload.getPayloadLength() > 4 + && !hasMultiInstanceAsMultiChannelQuirk()) { // MULTI_INSTANCE_ENCAP endpointNumber = payload.getPayloadByte(2); payload = new ZWaveCommandClassPayload(payload, 3); - } else if (payload.getCommandClassCommand() == 13 && payload.getPayloadLength() > 5) { + } else if ((payload.getCommandClassCommand() == 13 + || payload.getCommandClassCommand() == 6 && hasMultiInstanceAsMultiChannelQuirk()) + && payload.getPayloadLength() > 5) { // MULTI_CHANNEL_ENCAP endpointNumber = multichannelCommandClass.getSourceEndpoint(payload); payload = new ZWaveCommandClassPayload(payload, 4); @@ -1541,4 +1544,9 @@ private synchronized void resetSleepTimer() { } timerTask = null; } + + // The IRIS Radio Thermostat CT-101 has a bug where it sends an incorrect command class code. + private boolean hasMultiInstanceAsMultiChannelQuirk() { + return manufacturer == 0x98 && deviceType == 0x6501 && deviceId == 0xc; + } }