Skip to content

Commit a8d1bad

Browse files
committed
[homeconnectdirect] Fix channel options update for washer appliance
Fix #21462 Signed-off-by: Laurent Garnier <lg.hc@free.fr>
1 parent aa33a37 commit a8d1bad

1 file changed

Lines changed: 33 additions & 7 deletions

File tree

bundles/org.openhab.binding.homeconnectdirect/src/main/java/org/openhab/binding/homeconnectdirect/internal/handler/HomeConnectDirectWasherDryerHandler.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,44 @@ protected void onApplianceDescriptionChangeEvent(List<DeviceDescriptionChange> d
115115
case DRYER_DRYING_TARGET_KEY -> updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_DRYING_TARGET, key);
116116
case DRYER_WRINKLE_GUARD_KEY -> updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_WRINKLE_GUARD, key);
117117
case ROOT_OPTION_LIST_KEY, LAUNDRY_CARE_OPTION_LIST_KEY -> {
118-
updateReadonlyEnumOptionDescriptionIfLinked(CHANNEL_LAUNDRY_CARE_PROCESS_PHASE, key);
119-
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_TEMPERATURE, key);
120-
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_SPIN_SPEED, key);
121-
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_RINSE_PLUS, key);
122-
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_STAINS, key);
123-
updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_DRYING_TARGET, key);
124-
updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_WRINKLE_GUARD, key);
118+
getDeviceDescriptionServiceOptional().ifPresent(deviceDescriptionService -> {
119+
if (!keyFoundInList(deviceDescriptionChanges, LAUNDRY_CARE_PROCESS_PHASE_KEY)
120+
&& optionKeyExists(deviceDescriptionService, LAUNDRY_CARE_PROCESS_PHASE_KEY)) {
121+
updateReadonlyEnumOptionDescriptionIfLinked(CHANNEL_LAUNDRY_CARE_PROCESS_PHASE,
122+
LAUNDRY_CARE_PROCESS_PHASE_KEY);
123+
} else if (!keyFoundInList(deviceDescriptionChanges, DRYER_PROCESS_PHASE_KEY)
124+
&& optionKeyExists(deviceDescriptionService, DRYER_PROCESS_PHASE_KEY)) {
125+
updateReadonlyEnumOptionDescriptionIfLinked(CHANNEL_LAUNDRY_CARE_PROCESS_PHASE,
126+
DRYER_PROCESS_PHASE_KEY);
127+
}
128+
});
129+
if (!keyFoundInList(deviceDescriptionChanges, WASHER_TEMPERATURE_KEY)) {
130+
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_TEMPERATURE, WASHER_TEMPERATURE_KEY);
131+
}
132+
if (!keyFoundInList(deviceDescriptionChanges, WASHER_SPIN_SPEED_KEY)) {
133+
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_SPIN_SPEED, WASHER_SPIN_SPEED_KEY);
134+
}
135+
if (!keyFoundInList(deviceDescriptionChanges, WASHER_RINSE_PLUS_KEY)) {
136+
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_RINSE_PLUS, WASHER_RINSE_PLUS_KEY);
137+
}
138+
if (!keyFoundInList(deviceDescriptionChanges, WASHER_STAINS_KEY)) {
139+
updateEnumOptionDescriptionIfLinked(CHANNEL_WASHER_STAINS, WASHER_STAINS_KEY);
140+
}
141+
if (!keyFoundInList(deviceDescriptionChanges, DRYER_DRYING_TARGET_KEY)) {
142+
updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_DRYING_TARGET, DRYER_DRYING_TARGET_KEY);
143+
}
144+
if (!keyFoundInList(deviceDescriptionChanges, DRYER_WRINKLE_GUARD_KEY)) {
145+
updateEnumOptionDescriptionIfLinked(CHANNEL_DRYER_WRINKLE_GUARD, DRYER_WRINKLE_GUARD_KEY);
146+
}
125147
}
126148
}
127149
});
128150
}
129151

152+
private boolean keyFoundInList(List<DeviceDescriptionChange> deviceDescriptionChanges, String key) {
153+
return deviceDescriptionChanges.stream().map(c -> c.key()).filter(k -> k.equals(key)).findFirst().isPresent();
154+
}
155+
130156
@Override
131157
protected void onApplianceValueEvent(Value value, Resource resource) {
132158
super.onApplianceValueEvent(value, resource);

0 commit comments

Comments
 (0)