diff --git a/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/bridge-types.adoc b/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/bridge-types.adoc index caa8e7ba..832925b9 100644 --- a/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/bridge-types.adoc +++ b/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/bridge-types.adoc @@ -5,19 +5,19 @@ |=== |Bridge | Label ^|Description -| co7io-mbus:openhab-serial +| co7io-mbus:serial | Serial Bridge | The M-Bus Serial bridge allows to poll data using compatible serial interfaces. -<> +<> |=== -[[co7io-mbus:openhab-serial]] -== Bridge `co7io-mbus:openhab-serial` +[[co7io-mbus:serial]] +== Bridge `co7io-mbus:serial` -Below table contains complete configuration of `co7io-mbus:openhab-serial`. +Below table contains complete configuration of `co7io-mbus:serial`. diff --git a/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/config-descriptions.adoc b/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/config-descriptions.adoc index e243d452..9d9ea943 100644 --- a/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/config-descriptions.adoc +++ b/bundles/org.connectorio.addons.binding.mbus/docs/mbus/descriptors/config-descriptions.adoc @@ -20,9 +20,52 @@ |=== -[[thing-type:co7io-mbus:openhab-serial]] -== Config `thing-type:co7io-mbus:openhab-serial` -[width="100%",caption="thing-type:co7io-mbus:openhab-serial configuration",cols="1,1,1,2"] +[[thing-type:co7io-mbus:device]] +== Config `thing-type:co7io-mbus:device` +[width="100%",caption="thing-type:co7io-mbus:device configuration",cols="1,1,1,2"] +|=== +|Name | Type | Label ^|Description + +| address +| INTEGER +| Primary address +| + +| discoverChannels +| BOOLEAN +| Discover channels +| Enable automatic creation of channels based on polled data. + +| serialNumber +| INTEGER +| Serial number +| + +| manufacturerId +| TEXT +| Manufacturer identifier +| Three character identifier of manufacturer, for example 'KAM' for Kamstrup. + +| version +| INTEGER +| Version +| + +| deviceType +| TEXT +| Device type +| Type of device according to standard. + +| refreshInterval +| INTEGER +| Refresh interval +| Time between poll cycles. + +|=== + +[[thing-type:co7io-mbus:serial]] +== Config `thing-type:co7io-mbus:serial` +[width="100%",caption="thing-type:co7io-mbus:serial configuration",cols="1,1,1,2"] |=== |Name | Type | Label ^|Description @@ -78,47 +121,4 @@ |=== -[[thing-type:co7io-mbus:device]] -== Config `thing-type:co7io-mbus:device` -[width="100%",caption="thing-type:co7io-mbus:device configuration",cols="1,1,1,2"] -|=== -|Name | Type | Label ^|Description - -| address -| INTEGER -| Primary address -| - -| discoverChannels -| BOOLEAN -| Discover channels -| Enable automatic creation of channels based on polled data. - -| serialNumber -| INTEGER -| Serial number -| - -| manufacturerId -| TEXT -| Manufacturer identifier -| Three character identifier of manufacturer, for example 'KAM' for Kamstrup. - -| version -| INTEGER -| Version -| - -| deviceType -| TEXT -| Device type -| Type of device according to standard. - -| refreshInterval -| INTEGER -| Refresh interval -| Time between poll cycles. - -|=== - diff --git a/bundles/org.connectorio.addons.binding.mbus/src/main/java/org/connectorio/addons/binding/mbus/internal/handler/MBusBridgeBaseHandler.java b/bundles/org.connectorio.addons.binding.mbus/src/main/java/org/connectorio/addons/binding/mbus/internal/handler/MBusBridgeBaseHandler.java index 0dd8a90c..b076808c 100644 --- a/bundles/org.connectorio.addons.binding.mbus/src/main/java/org/connectorio/addons/binding/mbus/internal/handler/MBusBridgeBaseHandler.java +++ b/bundles/org.connectorio.addons.binding.mbus/src/main/java/org/connectorio/addons/binding/mbus/internal/handler/MBusBridgeBaseHandler.java @@ -17,14 +17,18 @@ */ package org.connectorio.addons.binding.mbus.internal.handler; +import java.util.Collection; +import java.util.Collections; import java.util.concurrent.CompletableFuture; import org.connectorio.addons.binding.handler.GenericBridgeHandlerBase; import org.connectorio.addons.binding.mbus.config.BridgeConfig; import org.connectorio.addons.binding.mbus.internal.discovery.DiscoveryCoordinator; +import org.connectorio.addons.binding.mbus.internal.discovery.MBusDiscoveryService; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ThingStatus; import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.ThingHandlerService; import org.openhab.core.types.Command; import org.openmuc.jmbus.MBusConnection; import org.slf4j.Logger; @@ -57,6 +61,17 @@ public void initialize() { }); } + @Override + public void dispose() { + if (connection.isDone()) { + try { + connection.get().close(); + } catch (Exception e) { + logger.error("Failed to close serial connection", e); + } + } + } + protected abstract CompletableFuture initializeConnection(); @Override @@ -73,4 +88,11 @@ public CompletableFuture getDiscoveryCoordinator() { return connection.thenApply(connection -> this.discoveryCoordinator); } + @Override + public Collection> getServices() { + return getBridgeConfig().filter(cfg -> cfg.discoveryMethod != null) + .map(cfg -> Collections.>singleton(MBusDiscoveryService.class)) + .orElse(Collections.emptySet()); + } + } \ No newline at end of file diff --git a/bundles/org.connectorio.addons.binding.mbus/src/main/resources/OH-INF/thing/bridge.xml b/bundles/org.connectorio.addons.binding.mbus/src/main/resources/OH-INF/thing/bridge.xml index 164cae37..f2b52a4e 100644 --- a/bundles/org.connectorio.addons.binding.mbus/src/main/resources/OH-INF/thing/bridge.xml +++ b/bundles/org.connectorio.addons.binding.mbus/src/main/resources/OH-INF/thing/bridge.xml @@ -20,7 +20,7 @@ xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> - + The M-Bus Serial bridge allows to poll data using compatible serial interfaces. diff --git a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusBridgeBaseHandler.java b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusBridgeBaseHandler.java index aa33b522..7ca386c2 100644 --- a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusBridgeBaseHandler.java +++ b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusBridgeBaseHandler.java @@ -85,12 +85,9 @@ public void dispose() { @Override public Collection> getServices() { - return getBridgeConfig().map(cfg -> { - if (cfg.discoverDevices) { - return Collections.>singleton(WMBusDiscoveryService.class); - } - return Collections.>emptyList(); - }).orElse(Collections.emptyList()); + return getBridgeConfig().filter(cfg -> cfg.discoverDevices) + .map(cfg -> Collections.>singleton(WMBusDiscoveryService.class)) + .orElse(Collections.emptySet()); } @Override @@ -110,20 +107,5 @@ public CompletableFuture getKeyStore() { public CompletableFuture getDiscoveryCoordinator() { return connection.thenApply(connection -> this.discoveryCoordinator); } - @Override - public void childHandlerDisposed(ThingHandler childHandler, Thing childThing) { - if (childHandler instanceof WMBusDeviceThingHandler) { - WMBusDeviceThingHandler handler = (WMBusDeviceThingHandler) childHandler; - dispatcher.thenAccept(dsp -> dsp.detach(handler)); - } - } - - @Override - public void childHandlerInitialized(ThingHandler childHandler, Thing childThing) { - if (childHandler instanceof WMBusDeviceThingHandler) { - WMBusDeviceThingHandler handler = (WMBusDeviceThingHandler) childHandler; - dispatcher.thenAccept(dsp -> dsp.attach(handler)); - } - } } diff --git a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusDeviceThingHandler.java b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusDeviceThingHandler.java index 9e0fc556..5b62f485 100644 --- a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusDeviceThingHandler.java +++ b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/handler/WMBusDeviceThingHandler.java @@ -107,6 +107,8 @@ public void initialize() { getBridgeHandler().map(WMBusBridgeHandler::getKeyStore).orElse(CompletableFuture.failedFuture(new IllegalArgumentException())) .thenAccept(keyStore -> keyStore.addKey(address, HexUtils.hexToBytes(encryptionKey))); } + getBridgeHandler().map(WMBusBridgeHandler::getDispatcher).orElse(CompletableFuture.failedFuture(new IllegalArgumentException())) + .thenAccept(dispatcher -> dispatcher.attach(this)); for (Channel channel : getThing().getChannels()) { if (WMBusBindingConstants.CHANNEL_TYPE_RSSI.equals(channel.getChannelTypeUID())) { @@ -128,6 +130,9 @@ public void dispose() { getBridgeHandler().map(WMBusBridgeHandler::getKeyStore).orElse(CompletableFuture.failedFuture(new IllegalArgumentException())) .thenAccept(keyStore -> keyStore.removeKey(address)); + getBridgeHandler().map(WMBusBridgeHandler::getDispatcher).orElse(CompletableFuture.failedFuture(new IllegalArgumentException())) + .thenAccept(dispatcher -> dispatcher.detach(this)); + super.dispose(); } diff --git a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/transport/WMBusMessageListenerAdapter.java b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/transport/WMBusMessageListenerAdapter.java index 2c71c354..56b11c60 100644 --- a/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/transport/WMBusMessageListenerAdapter.java +++ b/bundles/org.connectorio.addons.binding.wmbus/src/main/java/org/connectorio/addons/binding/wmbus/internal/transport/WMBusMessageListenerAdapter.java @@ -21,6 +21,7 @@ import java.util.function.Consumer; import org.connectorio.addons.binding.wmbus.dispatch.WMBusMessageDispatcher; import org.openhab.core.thing.binding.ThingHandlerCallback; +import org.openmuc.jmbus.HexUtils; import org.openmuc.jmbus.wireless.WMBusListener; import org.openmuc.jmbus.wireless.WMBusMessage; import org.slf4j.Logger; @@ -39,7 +40,7 @@ public WMBusMessageListenerAdapter(WMBusMessageDispatcher dispatcher, Consumer org.openmuc.jrxtx.* + + gnu.io.*;version=!, + * + !gnu.io.factory, !gnu.io.rfc2217,