[homematic] Fix invalid default values ending up in the thing type (#12437)

Sometimes invalid default values ended up in the default value for a channel of a thing type. Initializing the thing would fail completely complaining that it is not an allowed option. This patch makes sure those values are actually valid and attempts to correct them if they are invalid.

Signed-off-by: Flole <flole@flole.de>
This commit is contained in:
Flole998 2022-03-07 21:51:17 +01:00 committed by GitHub
parent 38a14b821d
commit 0e0b9afe08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -342,6 +342,33 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
}
});
builder.withOptions(options);
if (dp.isEnumType()) {
logger.trace("Checking if default option {} is valid",
Objects.toString(dp.getDefaultValue(), ""));
boolean needsChange = true;
for (ParameterOption option : options) {
if (option.getValue().equals(Objects.toString(dp.getDefaultValue(), ""))) {
needsChange = false;
break;
}
}
if (needsChange) {
String defStr = Objects.toString(dp.getDefaultValue(), "0");
if (defStr == null) {
defStr = "0";
}
int offset = Integer.parseInt(defStr);
if (offset >= 0 && offset < options.size()) {
ParameterOption defaultOption = options.get(offset);
logger.trace("Changing default option to {} (offset {})", defaultOption, defStr);
builder.withDefault(defaultOption.getValue());
} else if (options.size() > 0) {
ParameterOption defaultOption = options.get(0);
logger.trace("Changing default option to {} (first value)", defaultOption);
builder.withDefault(defaultOption.getValue());
}
}
}
}
if (dp.isNumberType()) {