[homeconnect] Add missing channel update handler configuration (#10785)

* [homeconnect] Add missing channel update handler configuration

Related to dryer, washer and washer/dryer appliances

Signed-off-by: Laurent Garnier <lg.hc@free.fr>

* 2 new methods to factorize duplicated code

Signed-off-by: Laurent Garnier <lg.hc@free.fr>

* Apply spotless

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
This commit is contained in:
lolodomo 2021-06-05 19:33:30 +02:00 committed by GitHub
parent 17eb0d5d78
commit d36c7804d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 45 deletions

View File

@ -1073,6 +1073,25 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
}));
}
protected ChannelUpdateHandler getAndUpdateSelectedProgramStateUpdateHandler() {
return (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache);
}
};
}
protected ChannelUpdateHandler getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() {
return (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()
.handle(channel.get().getUID(), cache);
}
};
}
protected ChannelUpdateHandler defaultActiveProgramStateUpdateHandler() {
return (channelUID, cache) -> updateState(channelUID, cache.putIfAbsentAndGet(channelUID, () -> {
Optional<HomeConnectApiClient> apiClient = getApiClient();

View File

@ -60,6 +60,10 @@ public class HomeConnectDryerHandler extends AbstractHomeConnectThingHandler {
handlers.put(CHANNEL_ACTIVE_PROGRAM_STATE, defaultActiveProgramStateUpdateHandler());
handlers.put(CHANNEL_SELECTED_PROGRAM_STATE,
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
// register dryer specific handlers
handlers.put(CHANNEL_DRYER_DRYING_TARGET,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
}
@Override

View File

@ -36,7 +36,6 @@ import org.openhab.binding.homeconnect.internal.client.model.Data;
import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.QuantityType;
import org.openhab.core.thing.Channel;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
import org.openhab.core.types.Command;
@ -89,18 +88,8 @@ public class HomeConnectOvenHandler extends AbstractHomeConnectThingHandler {
}
return UnDefType.UNDEF;
})));
handlers.put(CHANNEL_SETPOINT_TEMPERATURE, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_DURATION, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_SETPOINT_TEMPERATURE, getAndUpdateSelectedProgramStateUpdateHandler());
handlers.put(CHANNEL_DURATION, getAndUpdateSelectedProgramStateUpdateHandler());
}
@Override

View File

@ -17,7 +17,6 @@ import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstan
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.homeconnect.internal.client.HomeConnectApiClient;
@ -26,7 +25,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationEx
import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException;
import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider;
import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.Channel;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
import org.openhab.core.types.Command;
@ -65,20 +63,13 @@ public class HomeConnectWasherDryerHandler extends AbstractHomeConnectThingHandl
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
// register washer specific handlers
handlers.put(CHANNEL_WASHER_SPIN_SPEED, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()
.handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_WASHER_TEMPERATURE, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()
.handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_WASHER_SPIN_SPEED,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
handlers.put(CHANNEL_WASHER_TEMPERATURE,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
// register dryer specific handlers
handlers.put(CHANNEL_DRYER_DRYING_TARGET,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
}
@Override
@ -103,6 +94,7 @@ public class HomeConnectWasherDryerHandler extends AbstractHomeConnectThingHandl
handlers.put(EVENT_WASHER_SPIN_SPEED,
event -> getThingChannel(CHANNEL_WASHER_SPIN_SPEED).ifPresent(channel -> updateState(channel.getUID(),
event.getValue() == null ? UnDefType.UNDEF : new StringType(event.getValue()))));
// register dryer specific event handlers
handlers.put(EVENT_DRYER_DRYING_TARGET,
event -> getThingChannel(CHANNEL_DRYER_DRYING_TARGET).ifPresent(channel -> updateState(channel.getUID(),
event.getValue() == null ? UnDefType.UNDEF : new StringType(event.getValue()))));

View File

@ -17,7 +17,6 @@ import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstan
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.homeconnect.internal.client.HomeConnectApiClient;
@ -26,7 +25,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationEx
import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException;
import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider;
import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.Channel;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
import org.openhab.core.types.Command;
@ -65,20 +63,14 @@ public class HomeConnectWasherHandler extends AbstractHomeConnectThingHandler {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
// register washer specific handlers
handlers.put(CHANNEL_WASHER_SPIN_SPEED, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()
.handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_WASHER_TEMPERATURE, (channelUID, cache) -> {
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE);
if (channel.isPresent()) {
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()
.handle(channel.get().getUID(), cache);
}
});
handlers.put(CHANNEL_WASHER_SPIN_SPEED,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
handlers.put(CHANNEL_WASHER_TEMPERATURE,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
handlers.put(CHANNEL_WASHER_IDOS1,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
handlers.put(CHANNEL_WASHER_IDOS2,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
}
@Override