From: Andrew Fiddian-Green Date: Wed, 13 Jan 2021 22:01:01 +0000 (+0000) Subject: [velux] Fixed a couple of bugs if the Bridge contains one or more Scenes (#9794) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=b4705eb75cb765424b616a3cb5f3484a75ceea9c;p=openhab-addons.git [velux] Fixed a couple of bugs if the Bridge contains one or more Scenes (#9794) Signed-off-by: Andrew Fiddian-Green --- diff --git a/bundles/org.openhab.binding.velux/org.openhab.binding.velux-3.1.0-SNAPSHOT.jar b/bundles/org.openhab.binding.velux/org.openhab.binding.velux-3.1.0-SNAPSHOT.jar new file mode 100644 index 0000000000..1e5d4337c9 Binary files /dev/null and b/bundles/org.openhab.binding.velux/org.openhab.binding.velux-3.1.0-SNAPSHOT.jar differ diff --git a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/VeluxBindingConstants.java b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/VeluxBindingConstants.java index a81206be42..72b2826af3 100644 --- a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/VeluxBindingConstants.java +++ b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/VeluxBindingConstants.java @@ -100,6 +100,9 @@ public class VeluxBindingConstants { THING_TYPE_VELUX_ACTUATOR, THING_TYPE_VELUX_ROLLERSHUTTER, THING_TYPE_VELUX_WINDOW, THING_TYPE_VELUX_VSHUTTER, THING_TYPE_BINDING, THING_TYPE_BRIDGE); + public static final Set ACTUATOR_THINGS = Set.of(THING_TYPE_VELUX_ACTUATOR, + THING_TYPE_VELUX_ROLLERSHUTTER, THING_TYPE_VELUX_WINDOW); + // *** List of all Channel ids *** // List of all binding channel ids @@ -153,6 +156,4 @@ public class VeluxBindingConstants { public static final String UNKNOWN_THING_TYPE_ID = "FAILED"; public static final String UNKNOWN_IP_ADDRESS = "xxx.xxx.xxx.xxx"; - - public static final String BRIDGE_THING_TYPE_UID = THING_TYPE_BRIDGE.toString(); } diff --git a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/discovery/VeluxDiscoveryService.java b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/discovery/VeluxDiscoveryService.java index 0f66b14d93..53ec7faada 100644 --- a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/discovery/VeluxDiscoveryService.java +++ b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/discovery/VeluxDiscoveryService.java @@ -313,7 +313,8 @@ public class VeluxDiscoveryService extends AbstractDiscoveryService implements R @Override protected void startBackgroundDiscovery() { logger.trace("startBackgroundDiscovery() called."); - if (backgroundTask == null || backgroundTask.isCancelled()) { + ScheduledFuture task = this.backgroundTask; + if (task == null || task.isCancelled()) { this.backgroundTask = scheduler.scheduleWithFixedDelay(this::startScan, 10, 600, TimeUnit.SECONDS); } } diff --git a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/ChannelBridgeCheck.java b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/ChannelBridgeCheck.java index 6a7b755f48..3563778e34 100644 --- a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/ChannelBridgeCheck.java +++ b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/ChannelBridgeCheck.java @@ -81,7 +81,7 @@ final class ChannelBridgeCheck extends ChannelHandlerTemplate { LOGGER.trace("handleCommand(): ignoring non SCENE_ACTION."); continue; } - if (!ThingConfiguration.exists(thisBridgeHandler, channelUID, + if (!ThingConfiguration.exists(thisBridgeHandler, thisChannelUID, VeluxBindingProperties.PROPERTY_SCENE_NAME)) { LOGGER.trace("handleCommand(): aborting processing as scene name is not set."); break; diff --git a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/VeluxBridgeHandler.java b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/VeluxBridgeHandler.java index 2229cc9bdc..778b56ba5b 100644 --- a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/VeluxBridgeHandler.java +++ b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/VeluxBridgeHandler.java @@ -200,7 +200,7 @@ public class VeluxBridgeHandler extends ExtendedBaseBridgeHandler implements Vel * @param channelUID for type {@link ChannelUID}. * @return thingTypeUID of type {@link ThingTypeUID}. */ - ThingTypeUID thingTypeUIDOf(ChannelUID channelUID) { + public ThingTypeUID thingTypeUIDOf(ChannelUID channelUID) { String[] segments = channelUID.getAsString().split(AbstractUID.SEPARATOR); if (segments.length > 1) { return new ThingTypeUID(segments[0], segments[1]); diff --git a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/utils/Thing2VeluxActuator.java b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/utils/Thing2VeluxActuator.java index 6bf048b7b8..a225da45db 100644 --- a/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/utils/Thing2VeluxActuator.java +++ b/bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/utils/Thing2VeluxActuator.java @@ -52,8 +52,9 @@ public class Thing2VeluxActuator { // Private private void mapThing2Velux() { - if (channelUID.toString().startsWith(VeluxBindingConstants.BRIDGE_THING_TYPE_UID)) { - logger.trace("mapThing2Velux(): channel {} is on a Bridge Thing, exiting.", channelUID); + // only process real actuator things + if (!VeluxBindingConstants.ACTUATOR_THINGS.contains(bridgeHandler.thingTypeUIDOf(channelUID))) { + logger.trace("mapThing2Velux(): channel {} is not an Actuator Thing, exiting.", channelUID); return; }