From 3f3acb068e2667f9430a8148167760ca660a1b64 Mon Sep 17 00:00:00 2001 From: Jeremy Setton Date: Sun, 29 Dec 2024 23:20:48 -0500 Subject: [PATCH] [insteon] Fix missing links implementation Signed-off-by: Jeremy Setton --- .../internal/InsteonBindingConstants.java | 1 + .../internal/command/DeviceCommand.java | 35 ++++---- .../insteon/internal/device/DefaultLink.java | 17 +--- .../internal/device/DeviceFeature.java | 8 +- .../insteon/internal/device/DeviceType.java | 62 -------------- .../internal/device/DeviceTypeRegistry.java | 43 ---------- .../internal/device/InsteonDevice.java | 81 ++++--------------- .../internal/device/database/LinkDB.java | 10 +-- .../device/database/LinkDBChange.java | 10 --- .../internal/device/database/ModemDB.java | 2 +- .../device/database/ModemDBChange.java | 10 --- .../device/feature/MessageHandler.java | 14 ++++ .../src/main/resources/device-features.xml | 6 ++ .../src/main/resources/device-types.xml | 15 ++-- 14 files changed, 69 insertions(+), 245 deletions(-) diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/InsteonBindingConstants.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/InsteonBindingConstants.java index b2dcbde0fc3e4..79ca1c7fcaf98 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/InsteonBindingConstants.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/InsteonBindingConstants.java @@ -75,6 +75,7 @@ public class InsteonBindingConstants { public static final String FEATURE_LED_ON_OFF = "ledOnOff"; public static final String FEATURE_LINK_FF_GROUP = "linkFFGroup"; public static final String FEATURE_LOW_BATTERY_THRESHOLD = "lowBatteryThreshold"; + public static final String FEATURE_MONITOR_MODE = "monitorMode"; public static final String FEATURE_ON_LEVEL = "onLevel"; public static final String FEATURE_PING = "ping"; public static final String FEATURE_RAMP_RATE = "rampRate"; diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/command/DeviceCommand.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/command/DeviceCommand.java index 9dce3dc6e6577..88f05fcea5910 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/command/DeviceCommand.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/command/DeviceCommand.java @@ -28,6 +28,7 @@ import org.openhab.binding.insteon.internal.device.InsteonDevice; import org.openhab.binding.insteon.internal.device.ProductData; import org.openhab.binding.insteon.internal.device.database.LinkDBRecord; +import org.openhab.binding.insteon.internal.device.database.ModemDBRecord; import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.KeypadButtonToggleMode; import org.openhab.binding.insteon.internal.handler.InsteonDeviceHandler; import org.openhab.binding.insteon.internal.handler.InsteonThingHandler; @@ -465,9 +466,9 @@ private void listMissingLinks(Console console, String thingId) { console.println("The modem database is not loaded yet."); } else { List deviceLinks = device.getMissingDeviceLinks().entrySet().stream() - .map(entry -> String.format("%s: %s", entry.getKey(), entry.getValue().getRecord())).toList(); + .map(entry -> String.format("%s: %s", entry.getKey(), entry.getValue())).toList(); List modemLinks = device.getMissingModemLinks().entrySet().stream() - .map(entry -> String.format("%s: %s", entry.getKey(), entry.getValue().getRecord())).toList(); + .map(entry -> String.format("%s: %s", entry.getKey(), entry.getValue())).toList(); if (deviceLinks.isEmpty() && modemLinks.isEmpty()) { console.println("There are no missing links for device " + device.getAddress() + "."); } else { @@ -499,33 +500,33 @@ private void addMissingLinks(Console console, String thingId) { console.println("The device " + thingId + " is not configured or enabled!"); } else if (!device.getLinkDB().isComplete()) { console.println("The link database for device " + thingId + " is not loaded yet."); - } else if (!device.getLinkDB().getChanges().isEmpty()) { - console.println("The link database for device " + thingId + " has pending changes."); } else if (!getModem().getDB().isComplete()) { console.println("The modem database is not loaded yet."); - } else if (!getModem().getDB().getChanges().isEmpty()) { - console.println("The modem database has pending changes."); } else { - int deviceLinkCount = device.getMissingDeviceLinks().size(); - int modemLinkCount = device.getMissingModemLinks().size(); - if (deviceLinkCount == 0 && modemLinkCount == 0) { + List deviceLinks = device.getMissingDeviceLinks().values().stream().toList(); + List modemLinks = device.getMissingModemLinks().values().stream().toList(); + if (deviceLinks.isEmpty() && modemLinks.isEmpty()) { console.println("There are no missing links for device " + device.getAddress() + "."); } else { - if (deviceLinkCount > 0) { + if (!deviceLinks.isEmpty()) { if (!device.isAwake() || !device.isResponding()) { - console.println("Scheduling " + deviceLinkCount + " missing links for device " + console.println("Scheduling " + deviceLinks.size() + " missing links for device " + device.getAddress() + " to be added to its link database the next time it is " + (device.isBatteryPowered() ? "awake" : "online") + "."); } else { - console.println("Adding " + deviceLinkCount + " missing links for device " + device.getAddress() - + " to its link database..."); + console.println("Adding " + deviceLinks.size() + " missing links for device " + + device.getAddress() + " to its link database..."); } - device.addMissingDeviceLinks(); + deviceLinks.forEach(record -> device.getLinkDB().markRecordForAddOrModify(record.getAddress(), + record.getGroup(), record.isController(), record.getData())); + device.getLinkDB().update(); } - if (modemLinkCount > 0) { - console.println("Adding " + modemLinkCount + " missing links for device " + device.getAddress() + if (!modemLinks.isEmpty()) { + console.println("Adding " + modemLinks.size() + " missing links for device " + device.getAddress() + " to the modem database..."); - device.addMissingModemLinks(); + modemLinks.forEach(record -> getModem().getDB().markRecordForAddOrModify(record.getAddress(), + record.getGroup(), record.isController(), record.getData())); + getModem().getDB().update(); } } } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DefaultLink.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DefaultLink.java index 4e781215445c8..4fc6cdffb4b84 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DefaultLink.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DefaultLink.java @@ -12,12 +12,9 @@ */ package org.openhab.binding.insteon.internal.device; -import java.util.List; - import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.insteon.internal.device.database.LinkDBRecord; import org.openhab.binding.insteon.internal.device.database.ModemDBRecord; -import org.openhab.binding.insteon.internal.transport.message.Msg; /** * The {@link DefaultLink} represents a device default link @@ -29,13 +26,11 @@ public class DefaultLink { private String name; private LinkDBRecord linkDBRecord; private ModemDBRecord modemDBRecord; - private List commands; - public DefaultLink(String name, LinkDBRecord linkDBRecord, ModemDBRecord modemDBRecord, List commands) { + public DefaultLink(String name, LinkDBRecord linkDBRecord, ModemDBRecord modemDBRecord) { this.name = name; this.linkDBRecord = linkDBRecord; this.modemDBRecord = modemDBRecord; - this.commands = commands; } public String getName() { @@ -50,16 +45,8 @@ public ModemDBRecord getModemDBRecord() { return modemDBRecord; } - public List getCommands() { - return commands; - } - @Override public String toString() { - String s = name + "|linkDB:" + linkDBRecord + "|modemDB:" + modemDBRecord; - if (!commands.isEmpty()) { - s += "|commands:" + commands; - } - return s; + return name + "|linkDB:" + linkDBRecord + "|modemDB:" + modemDBRecord; } } diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceFeature.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceFeature.java index f64f375844522..16462551372a0 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceFeature.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceFeature.java @@ -236,13 +236,13 @@ public int getGroup() { public int getComponentId() { int componentId = 0; - if (device instanceof InsteonDevice insteonDevice) { + if (device instanceof InsteonDevice insteonDevice && isControllerOrResponderFeature()) { // use feature group as component id if device has more than one controller or responder feature, - // othewise use the component id of the link db first record + // set to 1 if device link db has a matching record, otherwise fall back to 0 if (insteonDevice.getControllerOrResponderFeatures().size() > 1) { componentId = getGroup(); - } else { - componentId = insteonDevice.getLinkDB().getFirstRecordComponentId(); + } else if (insteonDevice.getLinkDB().hasComponentIdRecord(1, isControllerFeature())) { + componentId = 1; } } return componentId; diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceType.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceType.java index a626905931f0e..d0c433edecafe 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceType.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/DeviceType.java @@ -21,10 +21,6 @@ import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; -import org.openhab.binding.insteon.internal.transport.message.FieldException; -import org.openhab.binding.insteon.internal.transport.message.InvalidMessageTypeException; -import org.openhab.binding.insteon.internal.transport.message.Msg; import org.openhab.binding.insteon.internal.utils.HexUtils; /** @@ -175,7 +171,6 @@ public static class DefaultLinkEntry { private boolean controller; private int group; private byte[] data; - private List commands = new ArrayList<>(); public DefaultLinkEntry(String name, boolean controller, int group, byte[] data) { this.name = name; @@ -196,14 +191,6 @@ public byte[] getData() { return data; } - public List getCommands() { - return commands; - } - - public void addCommand(CommandEntry command) { - commands.add(command); - } - @Override public String toString() { String s = name + "->"; @@ -212,55 +199,6 @@ public String toString() { s += "|data1:" + HexUtils.getHexString(data[0]); s += "|data2:" + HexUtils.getHexString(data[1]); s += "|data3:" + HexUtils.getHexString(data[2]); - if (!commands.isEmpty()) { - s += "|commands:" + commands; - } - return s; - } - } - - /** - * Class that reflects a command entry - */ - public static class CommandEntry { - private String name; - private int ext; - private byte cmd1; - private byte cmd2; - private byte[] data; - - public CommandEntry(String name, int ext, byte cmd1, byte cmd2, byte[] data) { - this.name = name; - this.ext = ext; - this.cmd1 = cmd1; - this.cmd2 = cmd2; - this.data = data; - } - - public @Nullable Msg getMessage(InsteonDevice device) { - try { - if (ext == 0) { - return Msg.makeStandardMessage(device.getAddress(), cmd1, cmd2); - } else if (ext == 1) { - return Msg.makeExtendedMessage(device.getAddress(), cmd1, cmd2, data, - device.getInsteonEngine().supportsChecksum()); - } else if (ext == 2) { - return Msg.makeExtendedMessageCRC2(device.getAddress(), cmd1, cmd2, data); - } - } catch (FieldException | InvalidMessageTypeException e) { - } - return null; - } - - @Override - public String toString() { - String s = name + "->"; - s += "ext:" + ext; - s += "|cmd1:" + HexUtils.getHexString(cmd1); - s += "|cmd2:" + HexUtils.getHexString(cmd2); - s += "|data1:" + HexUtils.getHexString(data[0]); - s += "|data2:" + HexUtils.getHexString(data[1]); - s += "|data3:" + HexUtils.getHexString(data[2]); return s; } } 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 9242013bc4f1c..416613ee702ed 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 @@ -19,10 +19,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.insteon.internal.InsteonResourceLoader; -import org.openhab.binding.insteon.internal.device.DeviceType.CommandEntry; import org.openhab.binding.insteon.internal.device.DeviceType.DefaultLinkEntry; import org.openhab.binding.insteon.internal.device.DeviceType.FeatureEntry; -import org.openhab.binding.insteon.internal.utils.HexUtils; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -249,52 +247,11 @@ private void parseDefaultLink(Element element, Map lin getHexAttributeAsByte(element, "data3") }; DefaultLinkEntry link = new DefaultLinkEntry(name, isController, group, data); - - NodeList nodes = element.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element child = (Element) node; - String nodeName = child.getNodeName(); - if ("command".equals(nodeName)) { - link.addCommand(getDefaultLinkCommand(child)); - } - } - } - if (links.putIfAbsent(name, link) != null) { throw new SAXException("duplicate default link: " + name); } } - /** - * Returns a default link command - * - * @param element element to parse - * @return default link command - * @throws SAXException - */ - private CommandEntry getDefaultLinkCommand(Element element) throws SAXException { - String name = element.getAttribute("name"); - if (name.isEmpty()) { - throw new SAXException("undefined default link command name"); - } - int ext = getAttributeAsInteger(element, "ext"); - if (ext < 0 || ext > 2) { - throw new SAXException("out of bound default link command ext argument: " + ext); - } - byte cmd1 = getHexAttributeAsByte(element, "cmd1"); - if (cmd1 == 0) { - throw new SAXException("invalid default link command cmd1 argument: " + HexUtils.getHexString(cmd1)); - } - byte cmd2 = getHexAttributeAsByte(element, "cmd2", (byte) 0x00); - byte[] data = { getHexAttributeAsByte(element, "data1", (byte) 0x00), - getHexAttributeAsByte(element, "data2", (byte) 0x00), - getHexAttributeAsByte(element, "data3", (byte) 0x00) }; - - return new CommandEntry(name, ext, cmd1, cmd2, data); - } - /** * Singleton instance function * diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/InsteonDevice.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/InsteonDevice.java index 2b80616923c26..8d1b2c2520988 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/InsteonDevice.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/InsteonDevice.java @@ -14,7 +14,6 @@ import static org.openhab.binding.insteon.internal.InsteonBindingConstants.*; -import java.io.IOException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedList; @@ -34,10 +33,7 @@ import org.openhab.binding.insteon.internal.config.InsteonChannelConfiguration; import org.openhab.binding.insteon.internal.device.DeviceFeature.QueryStatus; import org.openhab.binding.insteon.internal.device.database.LinkDB; -import org.openhab.binding.insteon.internal.device.database.LinkDBChange; import org.openhab.binding.insteon.internal.device.database.LinkDBRecord; -import org.openhab.binding.insteon.internal.device.database.ModemDB; -import org.openhab.binding.insteon.internal.device.database.ModemDBChange; import org.openhab.binding.insteon.internal.device.database.ModemDBEntry; import org.openhab.binding.insteon.internal.device.database.ModemDBRecord; import org.openhab.binding.insteon.internal.device.feature.FeatureEnums.DeviceTypeRenamer; @@ -618,11 +614,8 @@ public void updateDefaultLinks() { // create modem db record ModemDBRecord modemDBRecord = ModemDBRecord.create(address, link.getGroup(), !link.isController(), !link.isController() ? productData.getRecordData() : new byte[3]); - // create default link commands - List commands = link.getCommands().stream().map(command -> command.getMessage(this)) - .filter(Objects::nonNull).map(Objects::requireNonNull).toList(); // add default link - addDefaultLink(new DefaultLink(name, linkDBRecord, modemDBRecord, commands)); + addDefaultLink(new DefaultLink(name, linkDBRecord, modemDBRecord)); }); } @@ -644,14 +637,16 @@ private void addDefaultLink(DefaultLink link) { * * @return map of missing link db records based on default links */ - public Map getMissingDeviceLinks() { - Map links = new LinkedHashMap<>(); + public Map getMissingDeviceLinks() { + Map links = new LinkedHashMap<>(); if (linkDB.isComplete() && hasModemDBEntry()) { + int linkCount = getDefaultLinks().size(); for (DefaultLink link : getDefaultLinks()) { LinkDBRecord record = link.getLinkDBRecord(); - if ((record.getComponentId() > 0 && !linkDB.hasComponentIdRecord(record.getComponentId(), true)) - || !linkDB.hasGroupRecord(record.getGroup(), true)) { - links.put(link.getName(), LinkDBChange.forAdd(record)); + if ((linkCount > 1 && record.getComponentId() > 0 + && !linkDB.hasComponentIdRecord(record.getComponentId(), record.isController())) + || !linkDB.hasGroupRecord(record.getGroup(), record.isController())) { + links.put(link.getName(), record); } } } @@ -663,14 +658,16 @@ public Map getMissingDeviceLinks() { * * @return map of missing modem db records based on default links */ - public Map getMissingModemLinks() { - Map links = new LinkedHashMap<>(); + public Map getMissingModemLinks() { + Map links = new LinkedHashMap<>(); InsteonModem modem = getModem(); if (modem != null && modem.getDB().isComplete() && hasModemDBEntry()) { + State monitorMode = modem.getFeatureState(FEATURE_MONITOR_MODE); for (DefaultLink link : getDefaultLinks()) { ModemDBRecord record = link.getModemDBRecord(); - if (!modem.getDB().hasRecord(record.getAddress(), record.getGroup(), record.isController())) { - links.put(link.getName(), ModemDBChange.forAdd(record)); + if ((OnOffType.OFF.equals(monitorMode) || record.isController()) + && !modem.getDB().hasRecord(record.getAddress(), record.getGroup(), record.isController())) { + links.put(link.getName(), record); } } } @@ -700,56 +697,6 @@ public void logMissingLinks() { } } - /** - * Adds missing links to link db for this device - */ - public void addMissingDeviceLinks() { - if (getDefaultLinks().isEmpty()) { - return; - } - List changes = getMissingDeviceLinks().values().stream().distinct().toList(); - if (changes.isEmpty()) { - logger.debug("no missing default links from link db to add for {}", address); - } else { - logger.trace("adding missing default links to link db for {}", address); - linkDB.clearChanges(); - changes.forEach(linkDB::addChange); - linkDB.update(); - } - - InsteonModem modem = getModem(); - if (modem != null) { - getMissingDeviceLinks().keySet().stream().map(this::getDefaultLink).filter(Objects::nonNull) - .map(Objects::requireNonNull).flatMap(link -> link.getCommands().stream()).forEach(msg -> { - try { - modem.writeMessage(msg); - } catch (IOException e) { - logger.warn("message write failed for msg: {}", msg, e); - } - }); - } - } - - /** - * Adds missing links to modem db for this device - */ - public void addMissingModemLinks() { - InsteonModem modem = getModem(); - if (modem == null || getDefaultLinks().isEmpty()) { - return; - } - List changes = getMissingModemLinks().values().stream().distinct().toList(); - if (changes.isEmpty()) { - logger.debug("no missing default links from modem db to add for {}", address); - } else { - logger.trace("adding missing default links to modem db for {}", address); - ModemDB modemDB = modem.getDB(); - modemDB.clearChanges(); - changes.forEach(modemDB::addChange); - modemDB.update(); - } - } - /** * Sets a keypad button radio group * diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDB.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDB.java index d72f520d926b6..2d4b12a370870 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDB.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDB.java @@ -92,10 +92,6 @@ public int getLastRecordLocation() { } } - public int getFirstRecordComponentId() { - return Optional.ofNullable(getFirstRecord()).map(LinkDBRecord::getComponentId).orElse(0); - } - public @Nullable LinkDBRecord getRecord(int location) { synchronized (records) { return records.get(location); @@ -351,8 +347,8 @@ public void update(long delay) { public @Nullable LinkDBRecord addRecord(LinkDBRecord record) { synchronized (records) { LinkDBRecord prevRecord = records.put(record.getLocation(), record); - // move last record if overwritten - if (prevRecord != null && prevRecord.isLast()) { + // move last record if overwritten by a different record + if (prevRecord != null && prevRecord.isLast() && !prevRecord.equals(record)) { int location = prevRecord.getLocation() - LinkDBRecord.SIZE; records.put(location, LinkDBRecord.withNewLocation(location, prevRecord)); if (logger.isTraceEnabled()) { @@ -414,7 +410,7 @@ public void clearChanges() { * * @param change the change to add */ - public void addChange(LinkDBChange change) { + private void addChange(LinkDBChange change) { synchronized (changes) { LinkDBChange prevChange = changes.put(change.getLocation(), change); if (prevChange == null) { diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBChange.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBChange.java index 8dbc726e4ca0e..ac85ce0100e7e 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBChange.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/LinkDBChange.java @@ -51,16 +51,6 @@ public static LinkDBChange forAdd(int location, InsteonAddress address, int grou return new LinkDBChange(LinkDBRecord.create(location, address, group, isController, data), ChangeType.ADD); } - /** - * Factory method for creating a new LinkDBChange for add - * - * @param record the record to add - * @return the link db change - */ - public static LinkDBChange forAdd(LinkDBRecord record) { - return new LinkDBChange(record, ChangeType.ADD); - } - /** * Factory method for creating a new LinkDBChange for modify * diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDB.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDB.java index bded3fbdb34a0..6bc556f66c1c4 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDB.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDB.java @@ -391,7 +391,7 @@ public void clearChanges() { * * @param change the change to add */ - public void addChange(ModemDBChange change) { + private void addChange(ModemDBChange change) { ModemDBRecord record = change.getRecord(); int index = getChangeIndex(record.getAddress(), record.getGroup(), record.isController()); if (index == -1) { diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDBChange.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDBChange.java index 14999f4637e08..3ae8e08bad658 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDBChange.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/device/database/ModemDBChange.java @@ -40,16 +40,6 @@ public static ModemDBChange forAdd(InsteonAddress address, int group, boolean is return new ModemDBChange(ModemDBRecord.create(address, group, isController, data), ChangeType.ADD); } - /** - * Factory method for creating a new ModemDBChange for add - * - * @param record the record to add - * @return the modem db change - */ - public static ModemDBChange forAdd(ModemDBRecord record) { - return new ModemDBChange(record, ChangeType.ADD); - } - /** * Factory method for creating a new ModemDBChange for modify * 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 11e4faf0ac39a..3ae3f6cfb7e0d 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 @@ -1718,6 +1718,20 @@ protected State getBitState(boolean is24Hr) { } } + /** + * Thermostat status reporting reply message handler + */ + public static class ThermostatStatusReportingReplyHandler extends MessageHandler { + ThermostatStatusReportingReplyHandler(DeviceFeature feature) { + super(feature); + } + + @Override + public void handleMessage(byte cmd1, Msg msg) { + logger.debug("{}: thermostat status reporting enabled on {}", nm(), getInsteonDevice().getAddress()); + } + } + /** * Venstar thermostat system mode message handler */ 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 332a95b57bbfd..42f33c34d6877 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 @@ -922,6 +922,12 @@ NoOpCommandHandler NoPollHandler + DefaultDispatcher 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 d945e941a853a..bccec4aff92e3 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 @@ -731,13 +731,12 @@ ThermostatTimeFormat ThermostatOpFlags + ThermostatStatusReporting - - - + @@ -773,13 +772,12 @@ OpFlags + ThermostatStatusReporting - - - + @@ -798,12 +796,11 @@ OpFlags OpFlags + ThermostatStatusReporting - - - +