[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() { protected ChannelUpdateHandler defaultActiveProgramStateUpdateHandler() {
return (channelUID, cache) -> updateState(channelUID, cache.putIfAbsentAndGet(channelUID, () -> { return (channelUID, cache) -> updateState(channelUID, cache.putIfAbsentAndGet(channelUID, () -> {
Optional<HomeConnectApiClient> apiClient = getApiClient(); 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_ACTIVE_PROGRAM_STATE, defaultActiveProgramStateUpdateHandler());
handlers.put(CHANNEL_SELECTED_PROGRAM_STATE, handlers.put(CHANNEL_SELECTED_PROGRAM_STATE,
updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
// register dryer specific handlers
handlers.put(CHANNEL_DRYER_DRYING_TARGET,
getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler());
} }
@Override @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.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.QuantityType;
import org.openhab.core.thing.Channel;
import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
import org.openhab.core.types.Command; import org.openhab.core.types.Command;
@ -89,18 +88,8 @@ public class HomeConnectOvenHandler extends AbstractHomeConnectThingHandler {
} }
return UnDefType.UNDEF; return UnDefType.UNDEF;
}))); })));
handlers.put(CHANNEL_SETPOINT_TEMPERATURE, (channelUID, cache) -> { handlers.put(CHANNEL_SETPOINT_TEMPERATURE, getAndUpdateSelectedProgramStateUpdateHandler());
Optional<Channel> channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); handlers.put(CHANNEL_DURATION, getAndUpdateSelectedProgramStateUpdateHandler());
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);
}
});
} }
@Override @Override

View File

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