From ad9b4fbf791e1772e798f6b8c66234e617226e4e Mon Sep 17 00:00:00 2001 From: Gerhard Riegler <6545044+gerrieg@users.noreply.github.com> Date: Fri, 1 Jul 2022 17:38:39 +0200 Subject: [PATCH] [gardena] Adaptation of the login for API version 1.1 (#13050) * Adaptation of the login for API version 1.1 * Fixed logging statement * Fixed logging message * Reverted changes in the german translation Signed-off-by: Gerhard Riegler --- bundles/org.openhab.binding.gardena/README.md | 21 +++++----- .../gardena/internal/GardenaSmartImpl.java | 7 ++-- .../internal/config/GardenaConfig.java | 42 ++++++------------- .../resources/OH-INF/i18n/gardena.properties | 6 +-- .../OH-INF/i18n/gardena_de.properties | 2 +- .../main/resources/OH-INF/thing/bridge.xml | 10 ++--- 6 files changed, 31 insertions(+), 57 deletions(-) diff --git a/bundles/org.openhab.binding.gardena/README.md b/bundles/org.openhab.binding.gardena/README.md index 21e7c3562..f5933d05b 100644 --- a/bundles/org.openhab.binding.gardena/README.md +++ b/bundles/org.openhab.binding.gardena/README.md @@ -25,17 +25,16 @@ An account must be specified, all things for an account are discovered automatic There are several settings for an account: -| Name | Required | Description | -|-----------------------|----------|-----------------------------------------------------------------------------------------------------| -| **email** | yes | The email address for logging into the Gardena smart system | -| **password** | yes | The password for logging into the Gardena smart system | -| **apiKey** | yes | The Gardena smart system integration API key | -| **connectionTimeout** | no | The timeout in seconds for connections to Gardena smart system integration API (default = 10) | +| Name | Required | Description | +|-----------------------|----------|-----------------------------------------------------------------------------------------------| +| **apiSecret** | yes | The Gardena smart system integration API secret | +| **apiKey** | yes | The Gardena smart system integration API key | +| **connectionTimeout** | no | The timeout in seconds for connections to Gardena smart system integration API (default = 10) | ### Obtaining your API Key 1. Goto https://developer.husqvarnagroup.cloud/, sign in using your GARDENA smart system account and accept the terms of use -2. Create and save a new application via the 'Create application' button +2. Create and save a new application via the 'Create application' button. The Redirect URLs do not matter, you can enter what you want (e.g. http://localhost:8080) 3. Connect both _Authentication API_ and _GARDENA smart system API_ to your application via the 'Connect new API' button 4. Copy the application key to use with this binding as _apiKey_ @@ -46,14 +45,14 @@ There are several settings for an account: Minimal Thing configuration: ```java -Bridge gardena:account:home [ email="...", password="...", apiKey="..." ] +Bridge gardena:account:home [ apiSecret="...", apiKey="..." ] ``` Configuration of multiple bridges: ```java -Bridge gardena:account:home1 [ email="...", password="...", apiKey="..." ] -Bridge gardena:account:home2 [ email="...", password="...", apiKey="..." ] +Bridge gardena:account:home1 [ apiSecret="...", apiKey="..." ] +Bridge gardena:account:home2 [ apiSecret="...", apiKey="..." ] ``` Once a connection to an account is established, connected Things are discovered automatically. @@ -61,7 +60,7 @@ Once a connection to an account is established, connected Things are discovered Alternatively, you can manually configure Things: ```java -Bridge gardena:account:home [ email="...", password="...", apiKey="..." ] +Bridge gardena:account:home [ apiSecret="...", apiKey="..." ] { Thing mower myMower [ deviceId="c81ad682-6e45-42ce-bed1-6b4eff5620c8" ] Thing water_control myWaterControl [ deviceId="c81ad682-6e45-42ce-bed1-6b4eff5620c8" ] diff --git a/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/GardenaSmartImpl.java b/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/GardenaSmartImpl.java index f06d70fb4..2425df595 100644 --- a/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/GardenaSmartImpl.java +++ b/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/GardenaSmartImpl.java @@ -241,11 +241,10 @@ public class GardenaSmartImpl implements GardenaSmart, GardenaSmartWebSocketList PostOAuth2Response token = this.token; if (token == null || token.isRefreshTokenExpired()) { // new token - logger.debug("Gardena API login using password, reason: {}", + logger.debug("Gardena API login using apiSecret, reason: {}", token == null ? "no token available" : "refresh token expired"); - fields.add("grant_type", "password"); - fields.add("username", config.getEmail()); - fields.add("password", config.getPassword()); + fields.add("grant_type", "client_credentials"); + fields.add("client_secret", config.getApiSecret()); token = executeRequest(HttpMethod.POST, URL_API_TOKEN, fields, PostOAuth2Response.class); token.postProcess(); this.token = token; diff --git a/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/config/GardenaConfig.java b/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/config/GardenaConfig.java index 0941c8a9c..864d65475 100644 --- a/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/config/GardenaConfig.java +++ b/bundles/org.openhab.binding.gardena/src/main/java/org/openhab/binding/gardena/internal/config/GardenaConfig.java @@ -24,8 +24,7 @@ import org.eclipse.jdt.annotation.Nullable; public class GardenaConfig { private static final Integer DEFAULT_CONNECTION_TIMEOUT = 10; - private @Nullable String email; - private @Nullable String password; + private @Nullable String apiSecret; private @Nullable String apiKey; private transient Integer connectionTimeout = DEFAULT_CONNECTION_TIMEOUT; @@ -33,37 +32,23 @@ public class GardenaConfig { public GardenaConfig() { } - public GardenaConfig(String email, String password) { - this.email = email; - this.password = password; + public GardenaConfig(String apiKey, String apiSecret) { + this.apiKey = apiKey; + this.apiSecret = apiSecret; } /** - * Returns the email to connect to Gardena smart system. + * Returns the apiSecret to connect to Gardena smart system. */ - public @Nullable String getEmail() { - return email; + public @Nullable String getApiSecret() { + return apiSecret; } /** - * Sets the email to connect to Gardena smart system. + * Sets the apiSecret to connect to Gardena smart system. */ - public void setEmail(String email) { - this.email = email; - } - - /** - * Returns the password to connect to Gardena smart system. - */ - public @Nullable String getPassword() { - return password; - } - - /** - * Sets the password to connect to Gardena smart system. - */ - public void setPassword(String password) { - this.password = password; + public void setApiSecret(String apiSecret) { + this.apiSecret = apiSecret; } /** @@ -98,17 +83,14 @@ public class GardenaConfig { * Validate the config if email, password and apiKey is specified. */ public boolean isValid() { - final String email = this.email; - final String password = this.password; + final String apiSecret = this.apiSecret; final String apiKey = this.apiKey; - return email != null && !email.isBlank() && password != null && !password.isBlank() && apiKey != null - && !apiKey.isBlank(); + return apiSecret != null && !apiSecret.isBlank() && apiKey != null && !apiKey.isBlank(); } @Override public String toString() { StringBuilder sb = new StringBuilder(GardenaConfig.class.getSimpleName()).append("["); - sb.append("email: ").append(email).append(", "); sb.append("connectionTimeout: ").append(connectionTimeout).append(", "); sb.append("apiKey: ").append(apiKey); return sb.append("]").toString(); diff --git a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena.properties b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena.properties index 506d570bb..46b3b3b83 100644 --- a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena.properties +++ b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena.properties @@ -38,10 +38,8 @@ thing-type.config.gardena.account.apiKey.label = API Key thing-type.config.gardena.account.apiKey.description = The Gardena smart system integration API key thing-type.config.gardena.account.connectionTimeout.label = Connection Timeout thing-type.config.gardena.account.connectionTimeout.description = The timeout in seconds for connections to Gardena smart system integration API -thing-type.config.gardena.account.email.label = Email -thing-type.config.gardena.account.email.description = Email address for logging in to Gardena smart system -thing-type.config.gardena.account.password.label = Password -thing-type.config.gardena.account.password.description = Password for logging in to Gardena smart system +thing-type.config.gardena.account.apiSecret.label = API Secret +thing-type.config.gardena.account.apiSecret.description = The Gardena smart system integration API secret # channel group types diff --git a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena_de.properties b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena_de.properties index 43d67b30e..82f14f183 100644 --- a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena_de.properties +++ b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/i18n/gardena_de.properties @@ -39,7 +39,7 @@ thing-type.config.gardena.account.apiKey.description = Der Gardena Smart System thing-type.config.gardena.account.connectionTimeout.label = Verbindungszeitüberschreitung thing-type.config.gardena.account.connectionTimeout.description = Der Timeout in Sekunden für Verbindungen zur Gardena Smart System Integrations API thing-type.config.gardena.account.email.label = E-Mail -thing-type.config.gardena.account.email.description = E-Mail-Adresse für die Anmeldung im Gardena Smart System +thing-type.config.gardena.account.email.description = E-Mail-Adresse für die Anmeldung im Gardena Smart System thing-type.config.gardena.account.password.label = Passwort thing-type.config.gardena.account.password.description = Passwort zur Anmeldung im Gardena Smart System diff --git a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/thing/bridge.xml b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/thing/bridge.xml index 6711fc9e9..2d28069b3 100644 --- a/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/thing/bridge.xml +++ b/bundles/org.openhab.binding.gardena/src/main/resources/OH-INF/thing/bridge.xml @@ -10,14 +10,10 @@ The Gardena smart system account - - - Email address for logging in to Gardena smart system - - - + + password - Password for logging in to Gardena smart system + The Gardena smart system integration API secret