From c3fa94302d72e787ea5f5f6f001e84390c542458 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 20 Feb 2025 04:50:11 -0500 Subject: [PATCH] [insteon] Add ezx10rf x10 transceiver support (#18294) Signed-off-by: Jeremy Setton --- bundles/org.openhab.binding.insteon/README.md | 29 ++- .../internal/device/DeviceTypeRegistry.java | 7 +- .../device/database/LinkDBReader.java | 18 +- .../internal/device/feature/FeatureEnums.java | 26 +++ .../device/feature/MessageHandler.java | 65 ++++-- .../resources/OH-INF/i18n/insteon.properties | 167 ++++++++++++++ .../main/resources/OH-INF/thing/channels.xml | 207 ++++++++++++++++++ .../src/main/resources/device-features.xml | 25 ++- .../src/main/resources/device-products.xml | 1 + .../src/main/resources/device-types.xml | 21 +- 10 files changed, 536 insertions(+), 30 deletions(-) diff --git a/bundles/org.openhab.binding.insteon/README.md b/bundles/org.openhab.binding.insteon/README.md index dd811e3ab78..a3d61ff23d6 100644 --- a/bundles/org.openhab.binding.insteon/README.md +++ b/bundles/org.openhab.binding.insteon/README.md @@ -351,8 +351,24 @@ In order to determine which channels a device supports, check the device in the | event-button-bottom | Event Button Bottom | | event-button-top | Event Button Top | | im-event-button | Event Button | +| x10-event1 | X10 Event 1 | +| x10-event2 | X10 Event 2 | +| x10-event3 | X10 Event 3 | +| x10-event4 | X10 Event 4 | +| x10-event5 | X10 Event 5 | +| x10-event6 | X10 Event 6 | +| x10-event7 | X10 Event 7 | +| x10-event8 | X10 Event 8 | +| x10-event9 | X10 Event 9 | +| x10-event10 | X10 Event 10 | +| x10-event11 | X10 Event 11 | +| x10-event12 | X10 Event 12 | +| x10-event13 | X10 Event 13 | +| x10-event14 | X10 Event 14 | +| x10-event15 | X10 Event 15 | +| x10-event16 | X10 Event 16 | -The supported triggered events for Insteon Device things: +The button events for supported Insteon devices: | Event | Description | | -------------------- | ------------------------------------- | @@ -364,7 +380,7 @@ The supported triggered events for Insteon Device things: | `HELD_DOWN` | Button Held Down (Manual Change Down) | | `RELEASED` | Button Released (Manual Change Stop) | -And for Insteon Hub and PLM things: +And for Insteon Hubs and PLMs: | Event | Description | | ---------- | --------------- | @@ -372,6 +388,15 @@ And for Insteon Hub and PLM things: | `HELD` | Button Held | | `RELEASED` | Button Released | +The events for the Insteon X10 RF Transceiver (EZX10RF): + +| Event | Description | +| -------- | ----------- | +| `ON` | On | +| `OFF` | Off | +| `BRIGHT` | Bright | +| `DIM` | Dim | + ### Legacy Channels
diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceTypeRegistry.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceTypeRegistry.java index 416613ee702..90cc3dff8e1 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceTypeRegistry.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceTypeRegistry.java @@ -39,6 +39,9 @@ public class DeviceTypeRegistry extends InsteonResourceLoader { private static final DeviceTypeRegistry DEVICE_TYPE_REGISTRY = new DeviceTypeRegistry(); private static final String RESOURCE_NAME = "/device-types.xml"; + private static final List EXCLUDED_BASE_FEATURES = List.of("NetworkBridge_Hub", "NetworkBridge_PLM", + "X10_Dimmer", "X10_Sensor", "X10_Switch"); + private Map deviceTypes = new LinkedHashMap<>(); private Map baseFeatures = new LinkedHashMap<>(); @@ -135,8 +138,8 @@ public class DeviceTypeRegistry extends InsteonResourceLoader { } } } - // add base features if device type not network brige or x10 categories - if (!name.startsWith("NetworkBridge") && !name.startsWith("X10")) { + // add base features if device type not in excluded list + if (!EXCLUDED_BASE_FEATURES.contains(name)) { baseFeatures.forEach(features::putIfAbsent); } deviceTypes.put(name, new DeviceType(name, flags, features, links)); diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBReader.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBReader.java index 0c257719c1c..628c8f42651 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBReader.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBReader.java @@ -44,9 +44,11 @@ public class LinkDBReader implements PortListener { private @Nullable ScheduledFuture job; private ByteArrayOutputStream stream = new ByteArrayOutputStream(); private boolean done = true; + private boolean standardMode = true; private long lastMsgReceived; private int location; private int lastMSB; + private int recordCount; public LinkDBReader(InsteonModem modem, ScheduledExecutorService scheduler) { this.modem = modem; @@ -66,8 +68,14 @@ public class LinkDBReader implements PortListener { job = scheduler.scheduleWithFixedDelay(() -> { if (System.currentTimeMillis() - lastMsgReceived > DatabaseManager.MESSAGE_TIMEOUT) { - logger.debug("link database reader timed out for {}, aborting", device.getAddress()); - done(); + if (standardMode && recordCount == 0 && device.isAwake()) { + logger.debug("all link database request timed out for {}, trying peek method instead", + device.getAddress()); + getPeekRecords(); + } else { + logger.debug("link database reader timed out for {}, aborting", device.getAddress()); + done(); + } } }, 0, 1000, TimeUnit.MILLISECONDS); } @@ -75,6 +83,8 @@ public class LinkDBReader implements PortListener { private void getAllRecords() { lastMsgReceived = System.currentTimeMillis(); done = false; + standardMode = true; + recordCount = 0; modem.getPort().registerListener(this); @@ -111,6 +121,8 @@ public class LinkDBReader implements PortListener { } private void getPeekRecords() { + standardMode = false; + lastMsgReceived = System.currentTimeMillis(); location = device.getLinkDB().getFirstRecordLocation(); lastMSB = -1; getNextPeekRecord(); @@ -216,7 +228,7 @@ public class LinkDBReader implements PortListener { return; } - logger.trace("got link db record #{} for {}", device.getLinkDB().size(), device.getAddress()); + logger.trace("got link db record #{} for {}", ++recordCount, device.getAddress()); if (record.isLast()) { logger.trace("got last link db record for {}", device.getAddress()); diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/FeatureEnums.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/FeatureEnums.java index beae6764c9d..6004a27851a 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/FeatureEnums.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/FeatureEnums.java @@ -478,6 +478,32 @@ public class FeatureEnums { } } + public static enum X10Event { + ON, + OFF, + BRIGHT, + DIM; + + public static X10Event valueOf(int cmd) throws IllegalArgumentException { + switch (cmd) { + case 0x02: + case 0x11: + return X10Event.ON; + case 0x03: + case 0x13: + return X10Event.OFF; + case 0x05: + case 0x15: + return X10Event.BRIGHT; + case 0x04: + case 0x16: + return X10Event.DIM; + default: + throw new IllegalArgumentException("unexpected x10 event"); + } + } + } + public interface DeviceTypeRenamer { String getNewDeviceType(String deviceType); } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/MessageHandler.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/MessageHandler.java index 3ae3f6cfb7e..f12dc8d130b 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/MessageHandler.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/feature/MessageHandler.java @@ -49,6 +49,7 @@ import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.Thermost import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.ThermostatTemperatureScale; import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.ThermostatTimeFormat; import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.VenstarSystemMode; +import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.X10Event; import org.openhab.binding.insteon.internal.transport.message.FieldException; import org.openhab.binding.insteon.internal.transport.message.Msg; import org.openhab.binding.insteon.internal.utils.BinaryUtils; @@ -1850,11 +1851,10 @@ public abstract class MessageHandler extends BaseFeatureHandler { } /** - * Process X10 messages that are generated when another controller - * changes the state of an X10 device. + * X10 on message handler */ - public static class X10OnHandler extends MessageHandler { - X10OnHandler(DeviceFeature feature) { + public static class X10OnMsgHandler extends MessageHandler { + X10OnMsgHandler(DeviceFeature feature) { super(feature); } @@ -1865,8 +1865,11 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } - public static class X10OffHandler extends MessageHandler { - X10OffHandler(DeviceFeature feature) { + /** + * X10 off message handler + */ + public static class X10OffMsgHandler extends MessageHandler { + X10OffMsgHandler(DeviceFeature feature) { super(feature); } @@ -1877,8 +1880,11 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } - public static class X10BrightHandler extends MessageHandler { - X10BrightHandler(DeviceFeature feature) { + /** + * X10 brighten message handler + */ + public static class X10BrightMsgHandler extends MessageHandler { + X10BrightMsgHandler(DeviceFeature feature) { super(feature); } @@ -1888,8 +1894,11 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } - public static class X10DimHandler extends MessageHandler { - X10DimHandler(DeviceFeature feature) { + /** + * X10 dim message handler + */ + public static class X10DimMsgHandler extends MessageHandler { + X10DimMsgHandler(DeviceFeature feature) { super(feature); } @@ -1899,8 +1908,11 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } - public static class X10OpenHandler extends MessageHandler { - X10OpenHandler(DeviceFeature feature) { + /** + * X10 open message handler + */ + public static class X10OpenMsgHandler extends MessageHandler { + X10OpenMsgHandler(DeviceFeature feature) { super(feature); } @@ -1911,8 +1923,11 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } - public static class X10ClosedHandler extends MessageHandler { - X10ClosedHandler(DeviceFeature feature) { + /** + * X10 closed message handler + */ + public static class X10ClosedMsgHandler extends MessageHandler { + X10ClosedMsgHandler(DeviceFeature feature) { super(feature); } @@ -1923,6 +1938,28 @@ public abstract class MessageHandler extends BaseFeatureHandler { } } + /** + * X10 event message handler + */ + public static class X10EventMsgHandler extends MessageHandler { + X10EventMsgHandler(DeviceFeature feature) { + super(feature); + } + + @Override + public void handleMessage(byte cmd1, Msg msg) { + try { + X10Event event = X10Event.valueOf(cmd1); + logger.debug("{}: device {} {} received event {}", nm(), getDevice().getAddress(), feature.getName(), + event); + feature.triggerEvent(event.toString()); + feature.pollRelatedDevices(0L); + } catch (IllegalArgumentException e) { + logger.warn("{}: got unexpected x10 event: {}", nm(), HexUtils.getHexString(cmd1)); + } + } + } + /** * Factory method for dermining if a message handler command supports group * diff --git a/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/i18n/insteon.properties b/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/i18n/insteon.properties index 4288c388653..d7485368323 100644 --- a/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/i18n/insteon.properties +++ b/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/i18n/insteon.properties @@ -372,18 +372,185 @@ channel-type.insteon.valve7.label = Valve 7 channel-type.insteon.valve8.label = Valve 8 channel-type.insteon.event-button.label = Event Button +channel-type.insteon.event-button.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button.event.option.HELD_UP = Held Up +channel-type.insteon.event-button.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button.event.option.RELEASED = Released channel-type.insteon.event-button-a.label = Event Button A +channel-type.insteon.event-button-a.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-a.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-a.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-a.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-a.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-a.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-a.event.option.RELEASED = Released channel-type.insteon.event-button-b.label = Event Button B +channel-type.insteon.event-button-b.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-b.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-b.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-b.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-b.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-b.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-b.event.option.RELEASED = Released channel-type.insteon.event-button-c.label = Event Button C +channel-type.insteon.event-button-c.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-c.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-c.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-c.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-c.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-c.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-c.event.option.RELEASED = Released channel-type.insteon.event-button-d.label = Event Button D +channel-type.insteon.event-button-d.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-d.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-d.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-d.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-d.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-d.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-d.event.option.RELEASED = Released channel-type.insteon.event-button-e.label = Event Button E +channel-type.insteon.event-button-e.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-e.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-e.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-e.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-e.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-e.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-e.event.option.RELEASED = Released channel-type.insteon.event-button-f.label = Event Button F +channel-type.insteon.event-button-f.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-f.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-f.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-f.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-f.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-f.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-f.event.option.RELEASED = Released channel-type.insteon.event-button-g.label = Event Button G +channel-type.insteon.event-button-g.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-g.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-g.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-g.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-g.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-g.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-g.event.option.RELEASED = Released channel-type.insteon.event-button-h.label = Event Button H +channel-type.insteon.event-button-h.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-h.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-h.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-h.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-h.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-h.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-h.event.option.RELEASED = Released channel-type.insteon.event-button-main.label = Event Button Main +channel-type.insteon.event-button-main.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-main.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-main.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-main.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-main.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-main.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-main.event.option.RELEASED = Released channel-type.insteon.event-button-bottom.label = Event Button Bottom +channel-type.insteon.event-button-bottom.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-bottom.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-bottom.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-bottom.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-bottom.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-bottom.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-bottom.event.option.RELEASED = Released channel-type.insteon.event-button-top.label = Event Button Top +channel-type.insteon.event-button-top.event.option.PRESSED_ON = Pressed On +channel-type.insteon.event-button-top.event.option.PRESSED_OFF = Pressed Off +channel-type.insteon.event-button-top.event.option.DOUBLE_PRESSED_ON = Double Pressed On +channel-type.insteon.event-button-top.event.option.DOUBLE_PRESSED_OFF = Double Pressed Off +channel-type.insteon.event-button-top.event.option.HELD_UP = Held Up +channel-type.insteon.event-button-top.event.option.HELD_DOWN = Held Down +channel-type.insteon.event-button-top.event.option.RELEASED = Released channel-type.insteon.im-event-button.label = Event Button +channel-type.insteon.im-event-button.event.option.PRESSED = Pressed +channel-type.insteon.im-event-button.event.option.HELD = Held +channel-type.insteon.im-event-button.event.option.RELEASED = Released +channel-type.insteon.x10-event1.label = X10 Event 1 +channel-type.insteon.x10-event1.event.option.ON = On +channel-type.insteon.x10-event1.event.option.OFF = Off +channel-type.insteon.x10-event1.event.option.BRIGHT = Bright +channel-type.insteon.x10-event1.event.option.DIM = Dim +channel-type.insteon.x10-event2.label = X10 Event 2 +channel-type.insteon.x10-event2.event.option.ON = On +channel-type.insteon.x10-event2.event.option.OFF = Off +channel-type.insteon.x10-event2.event.option.BRIGHT = Bright +channel-type.insteon.x10-event2.event.option.DIM = Dim +channel-type.insteon.x10-event3.label = X10 Event 3 +channel-type.insteon.x10-event3.event.option.ON = On +channel-type.insteon.x10-event3.event.option.OFF = Off +channel-type.insteon.x10-event3.event.option.BRIGHT = Bright +channel-type.insteon.x10-event3.event.option.DIM = Dim +channel-type.insteon.x10-event4.label = X10 Event 4 +channel-type.insteon.x10-event4.event.option.ON = On +channel-type.insteon.x10-event4.event.option.OFF = Off +channel-type.insteon.x10-event4.event.option.BRIGHT = Bright +channel-type.insteon.x10-event4.event.option.DIM = Dim +channel-type.insteon.x10-event5.label = X10 Event 5 +channel-type.insteon.x10-event5.event.option.ON = On +channel-type.insteon.x10-event5.event.option.OFF = Off +channel-type.insteon.x10-event5.event.option.BRIGHT = Bright +channel-type.insteon.x10-event5.event.option.DIM = Dim +channel-type.insteon.x10-event6.label = X10 Event 6 +channel-type.insteon.x10-event6.event.option.ON = On +channel-type.insteon.x10-event6.event.option.OFF = Off +channel-type.insteon.x10-event6.event.option.BRIGHT = Bright +channel-type.insteon.x10-event6.event.option.DIM = Dim +channel-type.insteon.x10-event7.label = X10 Event 7 +channel-type.insteon.x10-event7.event.option.ON = On +channel-type.insteon.x10-event7.event.option.OFF = Off +channel-type.insteon.x10-event7.event.option.BRIGHT = Bright +channel-type.insteon.x10-event7.event.option.DIM = Dim +channel-type.insteon.x10-event8.label = X10 Event 8 +channel-type.insteon.x10-event8.event.option.ON = On +channel-type.insteon.x10-event8.event.option.OFF = Off +channel-type.insteon.x10-event8.event.option.BRIGHT = Bright +channel-type.insteon.x10-event8.event.option.DIM = Dim +channel-type.insteon.x10-event9.label = X10 Event 9 +channel-type.insteon.x10-event9.event.option.ON = On +channel-type.insteon.x10-event9.event.option.OFF = Off +channel-type.insteon.x10-event9.event.option.BRIGHT = Bright +channel-type.insteon.x10-event9.event.option.DIM = Dim +channel-type.insteon.x10-event10.label = X10 Event 10 +channel-type.insteon.x10-event10.event.option.ON = On +channel-type.insteon.x10-event10.event.option.OFF = Off +channel-type.insteon.x10-event10.event.option.BRIGHT = Bright +channel-type.insteon.x10-event10.event.option.DIM = Dim +channel-type.insteon.x10-event11.label = X10 Event 11 +channel-type.insteon.x10-event11.event.option.ON = On +channel-type.insteon.x10-event11.event.option.OFF = Off +channel-type.insteon.x10-event11.event.option.BRIGHT = Bright +channel-type.insteon.x10-event11.event.option.DIM = Dim +channel-type.insteon.x10-event12.label = X10 Event 12 +channel-type.insteon.x10-event12.event.option.ON = On +channel-type.insteon.x10-event12.event.option.OFF = Off +channel-type.insteon.x10-event12.event.option.BRIGHT = Bright +channel-type.insteon.x10-event12.event.option.DIM = Dim +channel-type.insteon.x10-event13.label = X10 Event 13 +channel-type.insteon.x10-event13.event.option.ON = On +channel-type.insteon.x10-event13.event.option.OFF = Off +channel-type.insteon.x10-event13.event.option.BRIGHT = Bright +channel-type.insteon.x10-event13.event.option.DIM = Dim +channel-type.insteon.x10-event14.label = X10 Event 14 +channel-type.insteon.x10-event14.event.option.ON = On +channel-type.insteon.x10-event14.event.option.OFF = Off +channel-type.insteon.x10-event14.event.option.BRIGHT = Bright +channel-type.insteon.x10-event14.event.option.DIM = Dim +channel-type.insteon.x10-event15.label = X10 Event 15 +channel-type.insteon.x10-event15.event.option.ON = On +channel-type.insteon.x10-event15.event.option.OFF = Off +channel-type.insteon.x10-event15.event.option.BRIGHT = Bright +channel-type.insteon.x10-event15.event.option.DIM = Dim +channel-type.insteon.x10-event16.label = X10 Event 16 +channel-type.insteon.x10-event16.event.option.ON = On +channel-type.insteon.x10-event16.event.option.OFF = Off +channel-type.insteon.x10-event16.event.option.BRIGHT = Bright +channel-type.insteon.x10-event16.event.option.DIM = Dim channel-type.insteon.legacyAcDelay.label = AC Delay channel-type.insteon.legacyBacklightDuration.label = Back Light Duration diff --git a/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/thing/channels.xml b/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/thing/channels.xml index a46a745d4b1..59f42e254c9 100644 --- a/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/thing/channels.xml +++ b/bundles/org.openhab.binding.insteon/src/main/resources/OH-INF/thing/channels.xml @@ -1028,4 +1028,211 @@ + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + + + + trigger + + + + + + diff --git a/bundles/org.openhab.binding.insteon/src/main/resources/device-features.xml b/bundles/org.openhab.binding.insteon/src/main/resources/device-features.xml index 42f33c34d68..cb2c6a3bde2 100644 --- a/bundles/org.openhab.binding.insteon/src/main/resources/device-features.xml +++ b/bundles/org.openhab.binding.insteon/src/main/resources/device-features.xml @@ -1066,10 +1066,10 @@ X10Dispatcher - X10OnHandler - X10OffHandler - X10BrightHandler - X10DimHandler + X10OnMsgHandler + X10OffMsgHandler + X10BrightMsgHandler + X10DimMsgHandler NoOpMsgHandler X10OnOffCommandHandler X10PercentCommandHandler @@ -1078,8 +1078,8 @@ X10Dispatcher - X10OnHandler - X10OffHandler + X10OnMsgHandler + X10OffMsgHandler NoOpMsgHandler X10OnOffCommandHandler NoOpCommandHandler @@ -1088,10 +1088,19 @@ X10Dispatcher - X10OpenHandler - X10ClosedHandler + X10OpenMsgHandler + X10ClosedMsgHandler NoOpMsgHandler NoOpCommandHandler NoPollHandler + + DefaultDispatcher + X10EventMsgHandler + X10EventMsgHandler + X10EventMsgHandler + X10EventMsgHandler + NoOpMsgHandler + NoOpCommandHandler + diff --git a/bundles/org.openhab.binding.insteon/src/main/resources/device-products.xml b/bundles/org.openhab.binding.insteon/src/main/resources/device-products.xml index 39eabde3668..9ea137388e1 100644 --- a/bundles/org.openhab.binding.insteon/src/main/resources/device-products.xml +++ b/bundles/org.openhab.binding.insteon/src/main/resources/device-products.xml @@ -968,6 +968,7 @@ X10 RF Transceiver EZX10RF Compacta + NetworkBridge_X10 X10 Translator diff --git a/bundles/org.openhab.binding.insteon/src/main/resources/device-types.xml b/bundles/org.openhab.binding.insteon/src/main/resources/device-types.xml index bccec4aff92..5530acfc9de 100644 --- a/bundles/org.openhab.binding.insteon/src/main/resources/device-types.xml +++ b/bundles/org.openhab.binding.insteon/src/main/resources/device-types.xml @@ -1,6 +1,6 @@ - + InsteonEngine @@ -678,6 +678,25 @@ + + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + X10BridgeEvent + +