From fe11c115ea2a03d2dfaba94952c9c1036c1fbc97 Mon Sep 17 00:00:00 2001 From: lolodomo Date: Fri, 28 May 2021 15:00:59 +0200 Subject: [PATCH] [homeconnect] Factorize handling of power command (#10747) Signed-off-by: Laurent Garnier --- .../handler/AbstractHomeConnectThingHandler.java | 8 ++++++++ .../handler/HomeConnectCoffeeMakerHandler.java | 6 +----- .../handler/HomeConnectCooktopHandler.java | 15 +++++++++++++++ .../handler/HomeConnectDishwasherHandler.java | 8 +------- .../internal/handler/HomeConnectHoodHandler.java | 7 +------ .../internal/handler/HomeConnectOvenHandler.java | 6 +----- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java index 20af6c24c..c9394f919 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java @@ -1172,6 +1172,14 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i } } + protected void handlePowerCommand(final ChannelUID channelUID, final Command command, + final HomeConnectApiClient apiClient, String stateNotOn) + throws CommunicationException, AuthorizationException, ApplianceOfflineException { + if (command instanceof OnOffType && CHANNEL_POWER_STATE.equals(channelUID.getId())) { + apiClient.setPowerState(getThingHaId(), OnOffType.ON.equals(command) ? STATE_POWER_ON : stateNotOn); + } + } + private int getCurrentBrightness(final ChannelUID channelUID, final HomeConnectApiClient apiClient) throws CommunicationException, AuthorizationException, ApplianceOfflineException { String id = channelUID.getId(); diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCoffeeMakerHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCoffeeMakerHandler.java index 48ac8b09d..b8dbb5af8 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCoffeeMakerHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCoffeeMakerHandler.java @@ -22,7 +22,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.ApplianceOfflin import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationException; import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; -import org.openhab.core.library.types.OnOffType; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -87,10 +86,7 @@ public class HomeConnectCoffeeMakerHandler extends AbstractHomeConnectThingHandl super.handleCommand(channelUID, command, apiClient); // turn coffee maker on and standby - if (command instanceof OnOffType && CHANNEL_POWER_STATE.equals(channelUID.getId())) { - apiClient.setPowerState(getThingHaId(), - OnOffType.ON.equals(command) ? STATE_POWER_ON : STATE_POWER_STANDBY); - } + handlePowerCommand(channelUID, command, apiClient, STATE_POWER_STANDBY); } @Override diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCooktopHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCooktopHandler.java index dc9feb651..92ffebce5 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCooktopHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectCooktopHandler.java @@ -17,8 +17,14 @@ import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstan import java.util.Map; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.homeconnect.internal.client.HomeConnectApiClient; +import org.openhab.binding.homeconnect.internal.client.exception.ApplianceOfflineException; +import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationException; +import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; +import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; +import org.openhab.core.types.Command; import org.openhab.core.types.UnDefType; /** @@ -66,6 +72,15 @@ public class HomeConnectCooktopHandler extends AbstractHomeConnectThingHandler { }); } + @Override + protected void handleCommand(final ChannelUID channelUID, final Command command, + final HomeConnectApiClient apiClient) + throws CommunicationException, AuthorizationException, ApplianceOfflineException { + super.handleCommand(channelUID, command, apiClient); + + handlePowerCommand(channelUID, command, apiClient, STATE_POWER_OFF); + } + @Override public String toString() { return "HomeConnectCooktopHandler [haId: " + getThingHaId() + "]"; diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDishwasherHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDishwasherHandler.java index ba79f238d..4f7927169 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDishwasherHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDishwasherHandler.java @@ -22,7 +22,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.ApplianceOfflin import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationException; import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; -import org.openhab.core.library.types.OnOffType; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -81,12 +80,7 @@ public class HomeConnectDishwasherHandler extends AbstractHomeConnectThingHandle throws CommunicationException, AuthorizationException, ApplianceOfflineException { super.handleCommand(channelUID, command, apiClient); - if (command instanceof OnOffType) { - if (CHANNEL_POWER_STATE.equals(channelUID.getId())) { - apiClient.setPowerState(getThingHaId(), - OnOffType.ON.equals(command) ? STATE_POWER_ON : STATE_POWER_OFF); - } - } + handlePowerCommand(channelUID, command, apiClient, STATE_POWER_OFF); handleLightCommands(channelUID, command, apiClient); } diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectHoodHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectHoodHandler.java index f0f0beae8..8ef81098b 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectHoodHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectHoodHandler.java @@ -145,12 +145,7 @@ public class HomeConnectHoodHandler extends AbstractHomeConnectThingHandler { throws CommunicationException, AuthorizationException, ApplianceOfflineException { super.handleCommand(channelUID, command, apiClient); - if (command instanceof OnOffType) { - if (CHANNEL_POWER_STATE.equals(channelUID.getId())) { - apiClient.setPowerState(getThingHaId(), - OnOffType.ON.equals(command) ? STATE_POWER_ON : STATE_POWER_OFF); - } - } + handlePowerCommand(channelUID, command, apiClient, STATE_POWER_OFF); // light commands handleLightCommands(channelUID, command, apiClient); diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java index a2236427b..c71d2b11b 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java @@ -159,11 +159,7 @@ public class HomeConnectOvenHandler extends AbstractHomeConnectThingHandler { throws CommunicationException, AuthorizationException, ApplianceOfflineException { super.handleCommand(channelUID, command, apiClient); - // turn coffee maker on and standby - if (command instanceof OnOffType && CHANNEL_POWER_STATE.equals(channelUID.getId())) { - apiClient.setPowerState(getThingHaId(), - OnOffType.ON.equals(command) ? STATE_POWER_ON : STATE_POWER_STANDBY); - } + handlePowerCommand(channelUID, command, apiClient, STATE_POWER_STANDBY); String operationState = getOperationState(); if (operationState != null && INACTIVE_STATE.contains(operationState) && command instanceof QuantityType) {