]> git.basschouten.com Git - openhab-addons.git/commitdiff
[nikohomecontrol] Fix dimmer control sequence (#11737)
authorMark Herwege <mherwege@users.noreply.github.com>
Thu, 9 Dec 2021 17:59:18 +0000 (18:59 +0100)
committerGitHub <noreply@github.com>
Thu, 9 Dec 2021 17:59:18 +0000 (18:59 +0100)
* Fix dimmer control sequence

Signed-off-by: Mark Herwege <mark.herwege@telenet.be>
bundles/org.openhab.binding.nikohomecontrol/src/main/java/org/openhab/binding/nikohomecontrol/internal/protocol/nhc2/NikoHomeControlCommunication2.java

index 722346fcd74c5cde4ca1a5af3ef4cb966c4772e7..61d407f29ba0eb82d003bbcaf433494f8876420d 100644 (file)
@@ -395,7 +395,7 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
                         break;
                     default:
                         actionType = ActionType.GENERIC;
-                        logger.debug("device type {} not recognised, default to GENERIC action", device.type);
+                        logger.debug("device model {} not recognised, default to GENERIC action", device.model);
                 }
 
                 NhcAction2 nhcAction = new NhcAction2(device.uuid, device.name, device.model, device.technology,
@@ -480,23 +480,27 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
             booleanState = basicStateProperty.get().basicState;
         }
 
-        if (booleanState != null) {
-            if (NHCON.equals(booleanState)) {
-                action.setBooleanState(true);
-                logger.debug("setting action {} internally to ON", action.getId());
-            } else if (NHCOFF.equals(booleanState)) {
-                action.setBooleanState(false);
-                logger.debug("setting action {} internally to OFF", action.getId());
-            }
+        if (NHCOFF.equals(booleanState)) {
+            action.setBooleanState(false);
+            logger.debug("setting action {} internally to OFF", action.getId());
         }
 
         if (dimmerProperty.isPresent()) {
             String brightness = dimmerProperty.get().brightness;
             if (brightness != null) {
-                action.setState(Integer.parseInt(brightness));
-                logger.debug("setting action {} internally to {}", action.getId(), dimmerProperty.get().brightness);
+                try {
+                    action.setState(Integer.parseInt(brightness));
+                    logger.debug("setting action {} internally to {}", action.getId(), dimmerProperty.get().brightness);
+                } catch (NumberFormatException e) {
+                    logger.debug("received invalid brightness value {} for dimmer {}", brightness, action.getId());
+                }
             }
         }
+
+        if (NHCON.equals(booleanState)) {
+            action.setBooleanState(true);
+            logger.debug("setting action {} internally to ON", action.getId());
+        }
     }
 
     private void updateRollershutterState(NhcAction2 action, List<NhcProperty> deviceProperties) {
@@ -505,7 +509,7 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
                 action.setState(Integer.parseInt(position));
                 logger.debug("setting action {} internally to {}", action.getId(), position);
             } catch (NumberFormatException e) {
-                logger.trace("received empty rollershutter {} position info", action.getId());
+                logger.trace("received empty or invalid rollershutter {} position info {}", action.getId(), position);
             }
         });
     }
@@ -615,6 +619,10 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
         switch (action.getType()) {
             case GENERIC:
             case TRIGGER:
+                if (!NHCON.equals(value)) {
+                    // Only trigger for ON
+                    return;
+                }
                 property.basicState = NHCTRIGGERED;
                 break;
             case RELAY:
@@ -627,6 +635,17 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
                 } else if (NHCOFF.equals(value)) {
                     property.status = value;
                 } else {
+                    try {
+                        action.setState(Integer.parseInt(value)); // set cached state to new brightness value to avoid
+                                                                  // switching on with old brightness value before
+                                                                  // updating
+                                                                  // to new value
+                    } catch (NumberFormatException e) {
+                        logger.debug("internal error, trying to set invalid brightness value {} for dimmer {}", value,
+                                action.getId());
+                        return;
+                    }
+
                     // If the light is off, turn the light on before sending the brightness value, needs to happen
                     // in 2 separate messages.
                     if (!action.booleanState()) {
@@ -643,8 +662,7 @@ public class NikoHomeControlCommunication2 extends NikoHomeControlCommunication
                 } else if (NHCDOWN.equals(value)) {
                     property.position = "0";
                 } else {
-                    int position = Integer.parseInt(value);
-                    property.position = String.valueOf(position);
+                    property.position = value;
                 }
                 break;
         }