[insteon] Add ezx10rf x10 transceiver support (#18294)
Signed-off-by: Jeremy Setton <jeremy.setton@gmail.com>pull/14578/merge
parent
664c981c81
commit
c3fa94302d
|
@ -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
|
||||
|
||||
<details>
|
||||
|
|
|
@ -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<String> EXCLUDED_BASE_FEATURES = List.of("NetworkBridge_Hub", "NetworkBridge_PLM",
|
||||
"X10_Dimmer", "X10_Sensor", "X10_Switch");
|
||||
|
||||
private Map<String, DeviceType> deviceTypes = new LinkedHashMap<>();
|
||||
private Map<String, FeatureEntry> 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));
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1028,4 +1028,211 @@
|
|||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event1" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 1</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event2" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 2</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event3" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 3</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event4" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 4</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event5" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 5</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event6" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 6</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event7" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 7</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event8" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 8</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event9" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 9</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event10" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 10</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event11" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 11</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event12" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 12</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event13" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 13</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event14" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 14</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event15" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 15</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="x10-event16" advanced="true">
|
||||
<kind>trigger</kind>
|
||||
<label>X10 Event 16</label>
|
||||
<event>
|
||||
<options>
|
||||
<option value="ON"/>
|
||||
<option value="OFF"/>
|
||||
<option value="BRIGHT"/>
|
||||
<option value="DIM"/>
|
||||
</options>
|
||||
</event>
|
||||
</channel-type>
|
||||
</thing:thing-descriptions>
|
||||
|
|
|
@ -1066,10 +1066,10 @@
|
|||
|
||||
<feature-type name="X10Dimmer">
|
||||
<message-dispatcher>X10Dispatcher</message-dispatcher>
|
||||
<message-handler command="0x02">X10OnHandler</message-handler>
|
||||
<message-handler command="0x03">X10OffHandler</message-handler>
|
||||
<message-handler command="0x05">X10BrightHandler</message-handler>
|
||||
<message-handler command="0x04">X10DimHandler</message-handler>
|
||||
<message-handler command="0x02">X10OnMsgHandler</message-handler>
|
||||
<message-handler command="0x03">X10OffMsgHandler</message-handler>
|
||||
<message-handler command="0x05">X10BrightMsgHandler</message-handler>
|
||||
<message-handler command="0x04">X10DimMsgHandler</message-handler>
|
||||
<message-handler default="true">NoOpMsgHandler</message-handler>
|
||||
<command-handler command="OnOffType">X10OnOffCommandHandler</command-handler>
|
||||
<command-handler command="PercentType">X10PercentCommandHandler</command-handler>
|
||||
|
@ -1078,8 +1078,8 @@
|
|||
</feature-type>
|
||||
<feature-type name="X10Switch">
|
||||
<message-dispatcher>X10Dispatcher</message-dispatcher>
|
||||
<message-handler command="0x02">X10OnHandler</message-handler>
|
||||
<message-handler command="0x03">X10OffHandler</message-handler>
|
||||
<message-handler command="0x02">X10OnMsgHandler</message-handler>
|
||||
<message-handler command="0x03">X10OffMsgHandler</message-handler>
|
||||
<message-handler default="true">NoOpMsgHandler</message-handler>
|
||||
<command-handler command="OnOffType">X10OnOffCommandHandler</command-handler>
|
||||
<command-handler command="PercentType">NoOpCommandHandler</command-handler>
|
||||
|
@ -1088,10 +1088,19 @@
|
|||
</feature-type>
|
||||
<feature-type name="X10Contact">
|
||||
<message-dispatcher>X10Dispatcher</message-dispatcher>
|
||||
<message-handler command="0x02">X10OpenHandler</message-handler>
|
||||
<message-handler command="0x03">X10ClosedHandler</message-handler>
|
||||
<message-handler command="0x02">X10OpenMsgHandler</message-handler>
|
||||
<message-handler command="0x03">X10ClosedMsgHandler</message-handler>
|
||||
<message-handler default="true">NoOpMsgHandler</message-handler>
|
||||
<command-handler default="true">NoOpCommandHandler</command-handler>
|
||||
<poll-handler>NoPollHandler</poll-handler>
|
||||
</feature-type>
|
||||
<feature-type name="X10BridgeEvent" event="true">
|
||||
<message-dispatcher>DefaultDispatcher</message-dispatcher>
|
||||
<message-handler command="0x11" group="1">X10EventMsgHandler</message-handler>
|
||||
<message-handler command="0x13" group="1">X10EventMsgHandler</message-handler>
|
||||
<message-handler command="0x15" group="1">X10EventMsgHandler</message-handler>
|
||||
<message-handler command="0x16" group="1">X10EventMsgHandler</message-handler>
|
||||
<message-handler default="true">NoOpMsgHandler</message-handler>
|
||||
<command-handler default="true">NoOpCommandHandler</command-handler>
|
||||
</feature-type>
|
||||
</xml>
|
||||
|
|
|
@ -968,6 +968,7 @@
|
|||
<description>X10 RF Transceiver</description>
|
||||
<model>EZX10RF</model>
|
||||
<vendor>Compacta</vendor>
|
||||
<device-type>NetworkBridge_X10</device-type>
|
||||
</product>
|
||||
<product devCat="0x03" subCat="0x0E" productKey="0x00002C">
|
||||
<description>X10 Translator</description>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<xml>
|
||||
|
||||
<!-- Base features for all device types except Network Bridge and X10 -->
|
||||
<!-- Base features for all device types except specific Network Bridge and X10 -->
|
||||
|
||||
<base-features>
|
||||
<feature name="insteonEngine">InsteonEngine</feature>
|
||||
|
@ -678,6 +678,25 @@
|
|||
</feature-group>
|
||||
</device-type>
|
||||
|
||||
<device-type name="NetworkBridge_X10">
|
||||
<feature name="x10Event1" group="1">X10BridgeEvent</feature>
|
||||
<feature name="x10Event2" group="2">X10BridgeEvent</feature>
|
||||
<feature name="x10Event3" group="3">X10BridgeEvent</feature>
|
||||
<feature name="x10Event4" group="4">X10BridgeEvent</feature>
|
||||
<feature name="x10Event5" group="5">X10BridgeEvent</feature>
|
||||
<feature name="x10Event6" group="6">X10BridgeEvent</feature>
|
||||
<feature name="x10Event7" group="7">X10BridgeEvent</feature>
|
||||
<feature name="x10Event8" group="8">X10BridgeEvent</feature>
|
||||
<feature name="x10Event9" group="9">X10BridgeEvent</feature>
|
||||
<feature name="x10Event10" group="10">X10BridgeEvent</feature>
|
||||
<feature name="x10Event11" group="11">X10BridgeEvent</feature>
|
||||
<feature name="x10Event12" group="12">X10BridgeEvent</feature>
|
||||
<feature name="x10Event13" group="13">X10BridgeEvent</feature>
|
||||
<feature name="x10Event14" group="14">X10BridgeEvent</feature>
|
||||
<feature name="x10Event15" group="15">X10BridgeEvent</feature>
|
||||
<feature name="x10Event16" group="16">X10BridgeEvent</feature>
|
||||
</device-type>
|
||||
|
||||
<!-- Irrigation Control -->
|
||||
|
||||
<device-type name="IrrigationControl_Sprinkler">
|
||||
|
|
Loading…
Reference in New Issue