]> git.basschouten.com Git - openhab-addons.git/commitdiff
[homekit] get min/max/step values from state description if possible (#13510)
authorCody Cutrer <cody@cutrer.us>
Sun, 9 Oct 2022 08:55:32 +0000 (02:55 -0600)
committerGitHub <noreply@github.com>
Sun, 9 Oct 2022 08:55:32 +0000 (10:55 +0200)
this helps to auto-configure if the binding is providing the necessary info

metadata config still overrides

Signed-off-by: Cody Cutrer <cody@cutrer.us>
bundles/org.openhab.io.homekit/src/main/java/org/openhab/io/homekit/internal/HomekitTaggedItem.java

index 0ba3c2e6363195862c68151e78e757196a620612..04e3ba31a7ed96b3a8a625de5f078610508d88fd 100644 (file)
@@ -32,6 +32,7 @@ import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.library.types.PercentType;
 import org.openhab.core.library.types.StringType;
 import org.openhab.core.types.State;
+import org.openhab.core.types.StateDescription;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -283,7 +284,27 @@ public class HomekitTaggedItem {
     @SuppressWarnings({ "null", "unchecked" })
     public <T> T getConfiguration(String key, T defaultValue) {
         if (configuration != null) {
-            final @Nullable Object value = configuration.get(key);
+            @Nullable
+            Object value = configuration.get(key);
+            // No explicit configuration, but for certain things we can check the state description
+            // to see if the binding provided it
+            if (value == null) {
+                final @Nullable StateDescription stateDescription = getItem().getStateDescription();
+                if (stateDescription != null) {
+                    switch (key) {
+                        case MIN_VALUE:
+                            value = stateDescription.getMinimum();
+                            break;
+                        case MAX_VALUE:
+                            value = stateDescription.getMaximum();
+                            break;
+                        case STEP:
+                            value = stateDescription.getStep();
+                            break;
+                    }
+                }
+            }
+
             if (value != null) {
                 if (value.getClass().equals(defaultValue.getClass())) {
                     return (T) value;