]> git.basschouten.com Git - openhab-addons.git/commitdiff
[velux] Fixed a couple of bugs if the Bridge contains one or more Scenes (#9794)
authorAndrew Fiddian-Green <software@whitebear.ch>
Wed, 13 Jan 2021 22:01:01 +0000 (22:01 +0000)
committerGitHub <noreply@github.com>
Wed, 13 Jan 2021 22:01:01 +0000 (23:01 +0100)
Signed-off-by: Andrew Fiddian-Green <software@whitebear.ch>
bundles/org.openhab.binding.velux/org.openhab.binding.velux-3.1.0-SNAPSHOT.jar [new file with mode: 0644]
bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/VeluxBindingConstants.java
bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/discovery/VeluxDiscoveryService.java
bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/ChannelBridgeCheck.java
bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/VeluxBridgeHandler.java
bundles/org.openhab.binding.velux/src/main/java/org/openhab/binding/velux/internal/handler/utils/Thing2VeluxActuator.java

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 (file)
index 0000000..1e5d433
Binary files /dev/null and b/bundles/org.openhab.binding.velux/org.openhab.binding.velux-3.1.0-SNAPSHOT.jar differ
index a81206be4222a34db6c1c476cd0cb473b5bc852e..72b2826af368613581534768eac7be3993d54ed1 100644 (file)
@@ -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<ThingTypeUID> 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();
 }
index 0f66b14d938ff38ddfbe26cd423dbac0fbff291f..53ec7faadabaa66fc427e7b9356519001e165dd3 100644 (file)
@@ -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);
         }
     }
index 6a7b755f483e04b8b17a46e8a8236e65e2dc042c..3563778e341176048b88bb437fe557f3414dd3d9 100644 (file)
@@ -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;
index 2229cc9bdc088515e417b2e07d5b4616f71b26d6..778b56ba5b91410498a11fefa36621af9578d478 100644 (file)
@@ -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]);
index 6bf048b7b858af8afe41ea21746e75017b1fa6f3..a225da45db0986b69d32cfc9de73f3ed74e0792c 100644 (file)
@@ -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;
         }