Repository: openhab/openhab-addons
Pull request #18481: [tado] Support multiple homes & accounts, and bug fixes
Author: login: andrewfg
Labels: name: enhancement
description: An enhancement or new feature for an existing add-on
Created: 2025-04-01T15:21:09Z | Merged: 2025-05-16T11:33:24Z

This PR does the following:

- Relating to discussion here https://github.com/openhab/openhab-addons/issues/18340#issuecomment-2768524575 it adds support for multiple homes and accounts
- Relating to https://github.com/openhab/openhab-core/issues/4698 it breaks the thread-lock loop
- Relating to discussion here https://community.openhab.org/t/tado-authentication/163276/47 it re-starts the authentication if the prior refresh token is no longer accepted.

Signed-off-by: Andrew Fiddian-Green <software@whitebear.ch>

The Jar files for testing are here:

- [org.openhab.binding.tado-4.3.4-SNAPSHOT.zip](https://github.com/user-attachments/files/19606101/org.openhab.binding.tado-4.3.4-SNAPSHOT.zip)
- [org.openhab.binding.tado-5.0.0-SNAPSHOT.zip](https://github.com/user-attachments/files/19606102/org.openhab.binding.tado-5.0.0-SNAPSHOT.zip)


Diff:
diff --git a/bundles/org.openhab.binding.tado/README.md b/bundles/org.openhab.binding.tado/README.md
index 467d34dbddaa7..c61948787e20a 100644
--- a/bundles/org.openhab.binding.tado/README.md
+++ b/bundles/org.openhab.binding.tado/README.md
@@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
+| `rfcWithUser` | yes      | Determines if the user name shall be included in the oAuth RFC-8628 authentication |
+| `username`    | yes      | Username used to log in at [my.tado](https://my.tado.com)                          |
+| `password`    | yes      | Password of the username                                                           |
+| `homeId`      | yes      | Selects the Home Id to use (only needed if the account has multiple homes)         |
+
+The `rfcWithUser` setting is only needed if you have multiple tado° accounts.
+It forces the binding to use different authentication tokens for each respective account `username`.
+
+The `homeId` is only needed if you have multiple homes under a single tado° account.
+It forces the binding to read and write the data for the respective Home Id.
+If you do not have multiple homes, the binding always uses the first and only Home Id.
 
 Example `tado.things`
 
diff --git a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/TadoBindingConstants.java b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/TadoBindingConstants.java
index 9306d1dff67f5..2e75d1af8ce01 100644
--- a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/TadoBindingConstants.java
+++ b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/TadoBindingConstants.java
@@ -139,6 +139,7 @@ public enum OperationMode {
     // Configuration
     public static final String CONFIG_ZONE_ID = "id";
     public static final String CONFIG_MOBILE_DEVICE_ID = "id";
+    public static final String CONFIG_USE_RFC8628 = "useRfc8628";
 
     // Properties
     public static final String PROPERTY_ZONE_NAME = "name";
diff --git a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/config/TadoHomeConfig.java b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/config/TadoHomeConfig.java
index dd8b666764565..ca147c5998084 100644
--- a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/config/TadoHomeConfig.java
+++ b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/config/TadoHomeConfig.java
@@ -25,4 +25,6 @@ public class TadoHomeConfig {
     public @Nullable String username;
     public @Nullable String password;
     public @Nullable Boolean useRfc8628;
+    public @Nullable Boolean rfcWithUser;
+    public @Nullable Integer homeId;
 }
diff --git a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHandlerFactory.java b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHandlerFactory.java
index 4bb7833c3fd83..79a86c5f18390 100644
--- a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHandlerFactory.java
+++ b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHandlerFactory.java
@@ -20,6 +20,7 @@
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.ServletException;
 
@@ -56,6 +57,7 @@
  * handlers.
  *
  * @author Dennis Frommknecht - Initial contribution
+ * @author Andrew Fiddian-Green - OAuth RFC18628 authentication
  */
 @NonNullByDefault
 @Component(configurationPid = "binding.tado", service = ThingHandlerFactory.class)
@@ -73,14 +75,13 @@ public class TadoHandlerFactory extends BaseThingHandlerFactory {
     private final Logger logger = LoggerFactory.getLogger(TadoHandlerFactory.class);
     private final Set<TadoHomeHandler> oAuthClientServiceSubscribers = new HashSet<>();
     private final Map<ThingUID, ServiceRegistration<?>> discoveryServiceRegs = new HashMap<>();
+    private final Map<String, OAuthClientService> oAuthClientServices = new ConcurrentHashMap<>();
 
     private final TadoStateDescriptionProvider stateDescriptionProvider;
     private final HttpService httpService;
     private final OAuthFactory oAuthFactory;
     private final TadoAuthenticationServlet httpServlet;
 
-    private @Nullable OAuthClientService oAuthClientService;
-
     @Activate
     public TadoHandlerFactory(@Reference TadoStateDescriptionProvider stateDescriptionProvider,
             @Reference HttpService httpService, @Reference OAuthFactory oAuthFactory) {
@@ -92,9 +93,8 @@ public TadoHandlerFactory(@Reference TadoStateDescriptionProvider stateDescripti
 
     @Deactivate
     public void deactivate() {
-        if (oAuthClientService != null) {
-            oAuthFactory.ungetOAuthService(THING_TYPE_HOME.toString());
-        }
+        oAuthClientServices.keySet().forEach(id -> oAuthFactory.ungetOAuthService(id));
+        oAuthClientServices.clear();
     }
 
     @Override
@@ -107,7 +107,7 @@ public boolean supportsThingType(ThingTypeUID thingTypeUID) {
         ThingTypeUID thingTypeUID = thing.getThingTypeUID();
 
         if (thingTypeUID.equals(THING_TYPE_HOME)) {
-            TadoHomeHandler tadoHomeHandler = new TadoHomeHandler((Bridge) thing, this, oAuthFactory);
+            TadoHomeHandler tadoHomeHandler = new TadoHomeHandler((Bridge) thing, this);
             registerTadoDiscoveryService(tadoHomeHandler);
             return tadoHomeHandler;
         } else if (thingTypeUID.equals(THING_TYPE_ZONE)) {
@@ -148,10 +148,11 @@ protected synchronized void removeHandler(ThingHandler thingHandler) {
      * Retrieves the pre-existing {@link OAuthClientService} if present, or creates a new one.
      * If necessary also registers the {@link TadoAuthenticationServlet}.
      *
-     * @param tadoHomeHandler
+     * @param tadoHomeHandler the subscribing thing handler
+     * @param user the optional user name (may be null)
      * @return an {@link OAuthClientService}
      */
-    public OAuthClientService subscribeOAuthClientService(TadoHomeHandler tadoHomeHandler) {
+    public OAuthClientService subscribeOAuthClientService(TadoHomeHandler tadoHomeHandler, @Nullable String user) {
         if (oAuthClientServiceSubscribers.isEmpty()) {
             try {
                 httpService.registerServlet(TadoAuthenticationServlet.PATH, httpServlet, null, null);
@@ -162,16 +163,18 @@ public OAuthClientService subscribeOAuthClientService(TadoHomeHandler tadoHomeHa
 
         oAuthClientServiceSubscribers.add(tadoHomeHandler);
 
-        OAuthClientService oAuthClientService = this.oAuthClientService;
+        OAuthClientService oAuthClientService = oAuthClientServices.get(getServiceId(user));
         if (oAuthClientService == null) {
-            oAuthClientService = oAuthFactory.getOAuthClientService(THING_TYPE_HOME.toString());
-            this.oAuthClientService = oAuthClientService;
+            oAuthClientService = oAuthFactory.getOAuthClientService(getServiceId(user));
+            if (oAuthClientService != null) {
+                oAuthClientServices.put(getServiceId(user), oAuthClientService);
+            }
         }
 
         if (oAuthClientService == null) {
-            oAuthClientService = oAuthFactory.createOAuthClientService(THING_TYPE_HOME.toString(), //
-                    OAUTH_TOKEN_URL, OAUTH_DEVICE_URL, OAUTH_CLIENT_ID, null, OAUTH_SCOPE, false);
-            this.oAuthClientService = oAuthClientService;
+            oAuthClientService = oAuthFactory.createOAuthClientService(getServiceId(user), OAUTH_TOKEN_URL,
+                    OAUTH_DEVICE_URL, OAUTH_CLIENT_ID, null, OAUTH_SCOPE, false);
+            oAuthClientServices.put(getServiceId(user), oAuthClientService);
         }
 
         return oAuthClientService;
@@ -193,11 +196,15 @@ public void unsubscribeOAuthClientService(TadoHomeHandler tadoHomeHandler) {
     /**
      * Returns a nullable {@link AccessTokenResponse} if the OAuthClientService exists.
      *
+     * @param user the optional user name (may be null)
      * @return a nullable {@link AccessTokenResponse}.
-     * @throws OAuthException on any error
+     * @throws OAuthException
+     * @throws IOException
+     * @throws OAuthResponseException
      */
-    public @Nullable AccessTokenResponse getAccessTokenResponse() throws OAuthException {
-        OAuthClientService oAuthClientService = this.oAuthClientService;
+    public @Nullable AccessTokenResponse getAccessTokenResponse(@Nullable String user)
+            throws OAuthException, IOException, OAuthResponseException {
+        OAuthClientService oAuthClientService = oAuthClientServices.get(getServiceId(user));
         if (oAuthClientService == null) {
             throw new OAuthException("Missing OAuthClientService");
         }
@@ -205,18 +212,19 @@ public void unsubscribeOAuthClientService(TadoHomeHandler tadoHomeHandler) {
             return oAuthClientService.getAccessTokenResponse();
         } catch (OAuthException | IOException | OAuthResponseException e) {
             logger.debug("getAccessTokenResponse() error {}", e.getMessage(), e);
-            throw new OAuthException("OAuthClientService error" + e.getMessage(), e);
+            throw e;
         }
     }
 
     /**
      * Returns a non null DeviceCodeResponse from the OAuthClientService if it exists.
      *
+     * @param user the optional user name (may be null)
      * @return a {@link DeviceCodeResponseDTO}
      * @throws OAuthException if it cannot return a non null result
      */
-    public DeviceCodeResponseDTO getDeviceCodeResponse() throws OAuthException {
-        OAuthClientService oAuthClientService = this.oAuthClientService;
+    public DeviceCodeResponseDTO getDeviceCodeResponse(@Nullable String user) throws OAuthException {
+        OAuthClientService oAuthClientService = oAuthClientServices.get(getServiceId(user));
         if (oAuthClientService == null) {
             throw new OAuthException("Missing OAuthClientService");
         }
@@ -227,7 +235,21 @@ public DeviceCodeResponseDTO getDeviceCodeResponse() throws OAuthException {
         return result;
     }
 
-    public boolean hasOAuthClientService() {
-        return oAuthClientService != null;
+    /**
+     * Check if there is an OAuthClientService registered
+     *
+     * @param user the optional user name (may be null)
+     */
+    public boolean hasOAuthClientService(@Nullable String user) {
+        return oAuthClientServices.containsKey(getServiceId(user));
+    }
+
+    /**
+     * Build a unique OAuth service id using the (optional) user name if present and not blank
+     *
+     * @param user the optional user name (may be null)
+     */
+    private String getServiceId(@Nullable String user) {
+        return THING_TYPE_HOME.toString() + (user != null && !user.isBlank() ? ":" + user : "");
     }
 }
diff --git a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
index 801c2e06ce894..75e0b7e66d650 100644
--- a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
+++ b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
@@ -20,6 +20,7 @@
 import java.util.Objects;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -38,7 +39,7 @@
 import org.openhab.core.auth.client.oauth2.AccessTokenRefreshListener;
 import org.openhab.core.auth.client.oauth2.AccessTokenResponse;
 import org.openhab.core.auth.client.oauth2.OAuthClientService;
-import org.openhab.core.auth.client.oauth2.OAuthFactory;
+import org.openhab.core.config.core.Configuration;
 import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.thing.Bridge;
 import org.openhab.core.thing.ChannelUID;
@@ -56,6 +57,7 @@
  * The {@link TadoHomeHandler} is the bridge of all home-based things.
  *
  * @author Dennis Frommknecht - Initial contribution
+ * @author Andrew Fiddian-Green - OAuth RFC18628 authentication
  */
 @NonNullByDefault
 public class TadoHomeHandler extends BaseBridgeHandler implements AccessTokenRefreshListener {
@@ -64,7 +66,8 @@ public class TadoHomeHandler extends BaseBridgeHandler implements AccessTokenRef
     private static final String CONF_ERROR_NO_HOME = "@text/tado.home.status.nohome";
     private static final String CONF_ERROR_NO_HOME_ID = "@text/tado.home.status.nohomeid";
     private static final String CONF_PENDING_USER_CREDS = "@text/tado.home.status.username";
-    private static final String CONF_PENDING_OAUTH_CREDS = "@text/tado.home.status.oauth [\"http(s)://<YOUROPENHAB>:<YOURPORT>%s\"]";
+    private static final String CONF_PENDING_OAUTH_CREDS = //
+            "@text/tado.home.status.oauth [\"http(s)://<YOUROPENHAB>:<YOURPORT>%s?%s=%s\"]";
 
     // tado specific RFC-8628 oAuth authentication parameters
     private static final ZonedDateTime OAUTH_MANDATORY_FROM_DATE = ZonedDateTime.parse("2025-03-15T00:00:00Z");
@@ -83,7 +86,7 @@ public class TadoHomeHandler extends BaseBridgeHandler implements AccessTokenRef
     private @Nullable ScheduledFuture<?> initializationFuture;
     private @Nullable OAuthClientService oAuthClientService;
 
-    public TadoHomeHandler(Bridge bridge, TadoHandlerFactory tadoHandlerFactory, OAuthFactory oAuthFactory) {
+    public TadoHomeHandler(Bridge bridge, TadoHandlerFactory tadoHandlerFactory) {
         super(bridge);
         this.batteryChecker = new TadoBatteryChecker(this);
         this.configuration = getConfigAs(TadoHomeConfig.class);
@@ -100,9 +103,9 @@ public TemperatureUnit getTemperatureUnit() {
     public void initialize() {
         configuration = getConfigAs(TadoHomeConfig.class);
 
-        String userName = configuration.username;
+        String username = configuration.username;
         String password = configuration.password;
-        boolean v1CredentialsMissing = userName == null || userName.isBlank() || password == null || password.isBlank();
+        boolean v1CredentialsMissing = username == null || username.isBlank() || password == null || password.isBlank();
 
         boolean suggestRfc8628 = false;
         suggestRfc8628 |= Boolean.TRUE.equals(configuration.useRfc8628);
@@ -110,14 +113,23 @@ public void initialize() {
         suggestRfc8628 |= ZonedDateTime.now().isAfter(OAUTH_MANDATORY_FROM_DATE);
 
         if (suggestRfc8628) {
-            OAuthClientService oAuthClientService = tadoHandlerFactory.subscribeOAuthClientService(this);
+            String rfcUser = Boolean.TRUE.equals(configuration.rfcWithUser) //
+                    ? username != null && !username.isBlank() ? username : null
+                    : null;
+            OAuthClientService oAuthClientService = tadoHandlerFactory.subscribeOAuthClientService(this, rfcUser);
             oAuthClientService.addAccessTokenRefreshListener(this);
             this.api = new HomeApiFactory().create(oAuthClientService);
             this.oAuthClientService = oAuthClientService;
             logger.trace("initialize() api v2 created");
-            confPendingText = CONF_PENDING_OAUTH_CREDS.formatted(TadoAuthenticationServlet.PATH);
+            confPendingText = CONF_PENDING_OAUTH_CREDS.formatted(TadoAuthenticationServlet.PATH,
+                    TadoAuthenticationServlet.PARAM_NAME_USER, rfcUser != null ? rfcUser : "");
+            if (!Boolean.TRUE.equals(configuration.useRfc8628)) {
+                Configuration configuration = editConfiguration();
+                configuration.put(CONFIG_USE_RFC8628, Boolean.TRUE);
+                updateConfiguration(configuration);
+            }
         } else {
-            api = new HomeApiFactory().create(Objects.requireNonNull(userName), Objects.requireNonNull(password));
+            api = new HomeApiFactory().create(Objects.requireNonNull(username), Objects.requireNonNull(password));
             logger.trace("initialize() api v1 created");
             confPendingText = CONF_PENDING_USER_CREDS;
         }
@@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
+                if (homes.size() > 1) {
+                    Integer configHomeId = configuration.homeId;
+                    if (configHomeId == null || configHomeId == 0) {
+                        logger.info("Trying first Home Id in the list [{}]", homes.stream()
+                                .map(home -> String.valueOf(home.getId())).collect(Collectors.joining(",")));
+                    } else {
+                        firstHomeId = homes.stream().map(home -> home.getId()).filter(id -> configHomeId.equals(id))
+                                .findFirst().orElse(null);
+                    }
+                }
+
                 if (firstHomeId == null) {
                     updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, CONF_ERROR_NO_HOME_ID);
                     return;
diff --git a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/servlet/TadoAuthenticationServlet.java b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/servlet/TadoAuthenticationServlet.java
index 9835fc2eee59e..b955b8dd9f1a3 100644
--- a/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/servlet/TadoAuthenticationServlet.java
+++ b/bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/servlet/TadoAuthenticationServlet.java
@@ -24,6 +24,7 @@
 import org.openhab.binding.tado.internal.handler.TadoHandlerFactory;
 import org.openhab.core.auth.client.oauth2.DeviceCodeResponseDTO;
 import org.openhab.core.auth.client.oauth2.OAuthException;
+import org.openhab.core.auth.client.oauth2.OAuthResponseException;
 
 /**
  * The {@link TadoAuthenticationServlet} manages the authorization with the Tado API.
@@ -43,8 +44,9 @@ public class TadoAuthenticationServlet extends HttpServlet {
     private static final String HTML_AUTH_ERROR_TEMPLATE = "<span style=\"color: #ff0000\">$REPLACE$</span>";
     private static final String HTML_AUTH_START_TEMPLATE = "<a href=\"$REPLACE$\"><span style=\"color: #cc3300\">click to authenticate</span></a>";
 
-    private static final String PARAM_NAME = "oauth";
-    private static final String PARAM_VALUE = "start";
+    public static final String PARAM_NAME_USER = "user";
+    private static final String PARAM_NAME_OAUTH = "oauth";
+    private static final String PARAM_VALUE_START = "start";
 
     private static final String ERROR_BAD_URL = "no verification uri";
 
@@ -76,8 +78,9 @@ public TadoAuthenticationServlet(TadoHandlerFactory tadoHandlerFactory) {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
-        // if the query string is "?oauth=start" then serve the user authentication page
-        if (PARAM_VALUE.equals(request.getParameter(PARAM_NAME)) && tadoHandlerFactory.hasOAuthClientService()) {
+        // if the query string contains "oauth=start" then serve the user authentication page
+        if (PARAM_VALUE_START.equals(request.getParameter(PARAM_NAME_OAUTH))
+                && tadoHandlerFactory.hasOAuthClientService(request.getParameter(PARAM_NAME_USER))) {
             serveUserAuthenticationPage(request, response);
         } else {
             serveStatusPage(request, response);
@@ -100,24 +103,25 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
     private void serveStatusPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
         String dynamicHtml = null;
 
-        if (!tadoHandlerFactory.hasOAuthClientService()) {
+        if (!tadoHandlerFactory.hasOAuthClientService(request.getParameter(PARAM_NAME_USER))) {
             dynamicHtml = HTML_AUTH_NOT_REQUIRED;
         }
 
         if (dynamicHtml == null) {
             try {
-                if (tadoHandlerFactory.getAccessTokenResponse() != null) {
+                if (tadoHandlerFactory.getAccessTokenResponse(request.getParameter(PARAM_NAME_USER)) != null) {
                     dynamicHtml = HTML_AUTH_PASSED;
                 }
-            } catch (OAuthException e) {
-                dynamicHtml = HTML_AUTH_ERROR_TEMPLATE.replace(REPLACE_TAG,
-                        e.getMessage() instanceof String exception ? exception : e.getClass().getName());
+            } catch (OAuthException | OAuthResponseException e) {
+                // error already logged => fall through
             }
         }
 
         if (dynamicHtml == null) {
             if (request.getRequestURL() instanceof StringBuffer baseUrl) {
-                String dynamicUrl = baseUrl.append("?").append(PARAM_NAME).append("=").append(PARAM_VALUE).toString();
+                String dynamicUrl = baseUrl.append("?").append(PARAM_NAME_OAUTH).append("=").append(PARAM_VALUE_START)
+                        .append("&").append(PARAM_NAME_USER).append("=").append(request.getParameter(PARAM_NAME_USER))
+                        .toString();
                 dynamicHtml = HTML_AUTH_START_TEMPLATE.replace(REPLACE_TAG, dynamicUrl);
             } else {
                 dynamicHtml = HTML_AUTH_ERROR_TEMPLATE.replace(REPLACE_TAG, ERROR_BAD_URL);
@@ -145,7 +149,8 @@ private void serveUserAuthenticationPage(HttpServletRequest request, HttpServlet
         String dynamicHtml = null;
 
         try {
-            DeviceCodeResponseDTO deviceCodeResponse = tadoHandlerFactory.getDeviceCodeResponse();
+            DeviceCodeResponseDTO deviceCodeResponse = tadoHandlerFactory
+                    .getDeviceCodeResponse(request.getParameter(PARAM_NAME_USER));
             String userVerificationUri = deviceCodeResponse.getVerificationUriComplete();
             if (userVerificationUri != null && !userVerificationUri.isBlank()) {
                 response.sendRedirect(userVerificationUri);
diff --git a/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties b/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
index 84283669412c7..b3cd5183319d3 100644
--- a/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
+++ b/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
@@ -1,128 +1,132 @@
-# add-on
-
-addon.tado.name = tado° Binding
-addon.tado.description = Binding for tado° devices
-
-# thing types
-
-thing-type.tado.home.label = Tado Home
-thing-type.tado.home.description = The user's tado home
-thing-type.tado.mobiledevice.label = Mobile Device
-thing-type.tado.mobiledevice.description = Mobile device of a home
-thing-type.tado.zone.label = Zone
-thing-type.tado.zone.description = A zone of a home
-thing-type.tado.zone.channel.batteryLowAlarm.label = Battery Low Alarm
-thing-type.tado.zone.channel.batteryLowAlarm.description = ON if one or more devices in the zone have a low battery
-thing-type.tado.zone.channel.humidity.label = Humidity
-thing-type.tado.zone.channel.humidity.description = Current humidity in %
-
-# thing types config
-
-thing-type.config.tado.home.password.label = Password
-thing-type.config.tado.home.password.description = Password of tado login used for API access
-thing-type.config.tado.home.useRfc8628.label = Use oAuth RFC-8628
-thing-type.config.tado.home.useRfc8628.description = Determines if the binding shall use oAuth RFC-8628 authentication
-thing-type.config.tado.home.username.label = User Name
-thing-type.config.tado.home.username.description = User name of tado login used for API access
-thing-type.config.tado.mobiledevice.id.label = Mobile Device Id
-thing-type.config.tado.mobiledevice.id.description = Id of the mobile device
-thing-type.config.tado.mobiledevice.refreshInterval.label = Refresh Interval
-thing-type.config.tado.mobiledevice.refreshInterval.description = Refresh interval of location state
-thing-type.config.tado.zone.fallbackTimerDuration.label = Fallback Timer Duration
-thing-type.config.tado.zone.fallbackTimerDuration.description = Timer duration used if no other duration can be determined
-thing-type.config.tado.zone.hvacChangeDebounce.label = HVAC Change Debounce Delay
-thing-type.config.tado.zone.hvacChangeDebounce.description = Duration in seconds to combine multiple HVAC changes into one.
-thing-type.config.tado.zone.id.label = Zone Id
-thing-type.config.tado.zone.id.description = Id of the zone
-thing-type.config.tado.zone.refreshInterval.label = Refresh Interval
-thing-type.config.tado.zone.refreshInterval.description = Refresh interval of home data
-
-# channel types
-
-channel-type.tado.acPower.label = Air-conditioning Power
-channel-type.tado.acPower.description = Current power state of the air-conditioning
-channel-type.tado.atHome.label = At Home
-channel-type.tado.atHome.description = ON if at home, OFF if away
-channel-type.tado.currentTemperature.label = Temperature
-channel-type.tado.currentTemperature.description = Current temperature
-channel-type.tado.fanLevel.label = Fan Speed
-channel-type.tado.fanLevel.description = AC fan level (only if supported by AC)
-channel-type.tado.fanLevel.state.option.SILENT = SILENT
-channel-type.tado.fanLevel.state.option.LEVEL1 = LEVEL1
-channel-type.tado.fanLevel.state.option.LEVEL2 = LEVEL2
-channel-type.tado.fanLevel.state.option.LEVEL3 = LEVEL3
-channel-type.tado.fanLevel.state.option.LEVEL4 = LEVEL4
-channel-type.tado.fanLevel.state.option.LEVEL5 = LEVEL5
-channel-type.tado.fanLevel.state.option.AUTO = AUTO
-channel-type.tado.fanspeed.label = Fan Speed
-channel-type.tado.fanspeed.description = AC fan speed (only if supported by AC)
-channel-type.tado.fanspeed.state.option.LOW = Low
-channel-type.tado.fanspeed.state.option.MIDDLE = Middle
-channel-type.tado.fanspeed.state.option.HIGH = High
-channel-type.tado.fanspeed.state.option.AUTO = Auto
-channel-type.tado.geofencingEnabled.label = Geofencing Enabled
-channel-type.tado.geofencingEnabled.description = Selects if automatic geofencing is enabled or disabled
-channel-type.tado.heatingPower.label = Heating Power
-channel-type.tado.heatingPower.description = Current heating power
-channel-type.tado.homePresence.label = At Home
-channel-type.tado.homePresence.description = ON if at home, OFF if away
-channel-type.tado.horizontalSwing.label = Horizontal Swing
-channel-type.tado.horizontalSwing.description = State of AC horizontal swing (only if supported by AC)
-channel-type.tado.horizontalSwing.state.option.AUTO = AUTO
-channel-type.tado.horizontalSwing.state.option.LEFT = LEFT
-channel-type.tado.horizontalSwing.state.option.MID_LEFT = MID-LEFT
-channel-type.tado.horizontalSwing.state.option.MID = MID
-channel-type.tado.horizontalSwing.state.option.MID_RIGHT = MID-RIGHT
-channel-type.tado.horizontalSwing.state.option.RIGHT = RIGHT
-channel-type.tado.horizontalSwing.state.option.ON = ON
-channel-type.tado.horizontalSwing.state.option.OFF = OFF
-channel-type.tado.hvacMode.label = HVAC Mode
-channel-type.tado.hvacMode.description = Mode of the device (OFF, HEAT, COOL, DRY, FAN, AUTO - if supported)
-channel-type.tado.hvacMode.state.option.OFF = Off
-channel-type.tado.hvacMode.state.option.HEAT = Heat
-channel-type.tado.hvacMode.state.option.COOL = Cool
-channel-type.tado.hvacMode.state.option.DRY = Dry
-channel-type.tado.hvacMode.state.option.FAN = Fan
-channel-type.tado.hvacMode.state.option.AUTO = Auto
-channel-type.tado.light.label = Light
-channel-type.tado.light.description = State of control panel light (only if supported by AC)
-channel-type.tado.openWindowDetected.label = Open Window Detected
-channel-type.tado.openWindowDetected.description = Indicates if an open window has been detected
-channel-type.tado.openWindowRemainingTime.label = Override Remaining Time
-channel-type.tado.openWindowRemainingTime.description = The remaining Open Window heating/cooling Override time in the Zone
-channel-type.tado.operationMode.label = Zone Operation Mode
-channel-type.tado.operationMode.description = Active operation mode (schedule, manual, timer or until next change)
-channel-type.tado.operationMode.state.option.SCHEDULE = Schedule
-channel-type.tado.operationMode.state.option.MANUAL = Manual
-channel-type.tado.operationMode.state.option.UNTIL_CHANGE = Until change
-channel-type.tado.operationMode.state.option.TIMER = Timer
-channel-type.tado.overlayExpiry.label = Overlay End Time
-channel-type.tado.overlayExpiry.description = Time until when the overlay is active. Null if no overlay is set or overlay type is manual.
-channel-type.tado.overlayExpiry.state.pattern = %1$tF %1$tR
-channel-type.tado.swing.label = Swing
-channel-type.tado.swing.description = State of AC swing (only if supported by AC)
-channel-type.tado.targetTemperature.label = Target Temperature
-channel-type.tado.targetTemperature.description = Thermostat temperature setpoint
-channel-type.tado.timerDuration.label = Timer Duration
-channel-type.tado.timerDuration.description = Total duration of a timer
-channel-type.tado.verticalSwing.label = Vertical Swing
-channel-type.tado.verticalSwing.description = State of AC vertical swing (only if supported by AC)
-channel-type.tado.verticalSwing.state.option.AUTO = AUTO
-channel-type.tado.verticalSwing.state.option.UP = UP
-channel-type.tado.verticalSwing.state.option.MID_UP = MID-UP
-channel-type.tado.verticalSwing.state.option.MID = MID
-channel-type.tado.verticalSwing.state.option.MID_DOWN = MID-DOWN
-channel-type.tado.verticalSwing.state.option.DOWN = DOWN
-channel-type.tado.verticalSwing.state.option.ON = ON
-channel-type.tado.verticalSwing.state.option.OFF = OFF
-
-# tado home thing status messages
-
-tado.home.status.oauth = Try authenticating at {0}
-tado.home.status.username = Username and/or password might be invalid
-tado.home.status.nohome = User does not have access to any home
-tado.home.status.nohomeid = Missing Home Id
-
-# discovery
-
-discovery.bridge.label = tado° Internet Bridge ({0})
+# add-on
+
+addon.tado.name = tado° Binding
+addon.tado.description = Binding for tado° devices
+
+# thing types
+
+thing-type.tado.home.label = Tado Home
+thing-type.tado.home.description = The user's tado home
+thing-type.tado.mobiledevice.label = Mobile Device
+thing-type.tado.mobiledevice.description = Mobile device of a home
+thing-type.tado.zone.label = Zone
+thing-type.tado.zone.description = A zone of a home
+thing-type.tado.zone.channel.batteryLowAlarm.label = Battery Low Alarm
+thing-type.tado.zone.channel.batteryLowAlarm.description = ON if one or more devices in the zone have a low battery
+thing-type.tado.zone.channel.humidity.label = Humidity
+thing-type.tado.zone.channel.humidity.description = Current humidity in %
+
+# thing types config
+
+thing-type.config.tado.home.homeId.label = Home Id
+thing-type.config.tado.home.homeId.description = Selects the Home Id to be used (only needed if there are multiple homes)
+thing-type.config.tado.home.password.label = Password
+thing-type.config.tado.home.password.description = Password of tado login used for API access
+thing-type.config.tado.home.rfcWithUser.label = RFC-8628 with User
+thing-type.config.tado.home.rfcWithUser.description = Determines if the user name is included in the oAuth RFC-8628 authentication
+thing-type.config.tado.home.useRfc8628.label = Use oAuth RFC-8628
+thing-type.config.tado.home.useRfc8628.description = Determines if the binding shall use oAuth RFC-8628 authentication
+thing-type.config.tado.home.username.label = User Name
+thing-type.config.tado.home.username.description = User name of tado login used for API access
+thing-type.config.tado.mobiledevice.id.label = Mobile Device Id
+thing-type.config.tado.mobiledevice.id.description = Id of the mobile device
+thing-type.config.tado.mobiledevice.refreshInterval.label = Refresh Interval
+thing-type.config.tado.mobiledevice.refreshInterval.description = Refresh interval of location state
+thing-type.config.tado.zone.fallbackTimerDuration.label = Fallback Timer Duration
+thing-type.config.tado.zone.fallbackTimerDuration.description = Timer duration used if no other duration can be determined
+thing-type.config.tado.zone.hvacChangeDebounce.label = HVAC Change Debounce Delay
+thing-type.config.tado.zone.hvacChangeDebounce.description = Duration in seconds to combine multiple HVAC changes into one.
+thing-type.config.tado.zone.id.label = Zone Id
+thing-type.config.tado.zone.id.description = Id of the zone
+thing-type.config.tado.zone.refreshInterval.label = Refresh Interval
+thing-type.config.tado.zone.refreshInterval.description = Refresh interval of home data
+
+# channel types
+
+channel-type.tado.acPower.label = Air-conditioning Power
+channel-type.tado.acPower.description = Current power state of the air-conditioning
+channel-type.tado.atHome.label = At Home
+channel-type.tado.atHome.description = ON if at home, OFF if away
+channel-type.tado.currentTemperature.label = Temperature
+channel-type.tado.currentTemperature.description = Current temperature
+channel-type.tado.fanLevel.label = Fan Speed
+channel-type.tado.fanLevel.description = AC fan level (only if supported by AC)
+channel-type.tado.fanLevel.state.option.SILENT = SILENT
+channel-type.tado.fanLevel.state.option.LEVEL1 = LEVEL1
+channel-type.tado.fanLevel.state.option.LEVEL2 = LEVEL2
+channel-type.tado.fanLevel.state.option.LEVEL3 = LEVEL3
+channel-type.tado.fanLevel.state.option.LEVEL4 = LEVEL4
+channel-type.tado.fanLevel.state.option.LEVEL5 = LEVEL5
+channel-type.tado.fanLevel.state.option.AUTO = AUTO
+channel-type.tado.fanspeed.label = Fan Speed
+channel-type.tado.fanspeed.description = AC fan speed (only if supported by AC)
+channel-type.tado.fanspeed.state.option.LOW = Low
+channel-type.tado.fanspeed.state.option.MIDDLE = Middle
+channel-type.tado.fanspeed.state.option.HIGH = High
+channel-type.tado.fanspeed.state.option.AUTO = Auto
+channel-type.tado.geofencingEnabled.label = Geofencing Enabled
+channel-type.tado.geofencingEnabled.description = Selects if automatic geofencing is enabled or disabled
+channel-type.tado.heatingPower.label = Heating Power
+channel-type.tado.heatingPower.description = Current heating power
+channel-type.tado.homePresence.label = At Home
+channel-type.tado.homePresence.description = ON if at home, OFF if away
+channel-type.tado.horizontalSwing.label = Horizontal Swing
+channel-type.tado.horizontalSwing.description = State of AC horizontal swing (only if supported by AC)
+channel-type.tado.horizontalSwing.state.option.AUTO = AUTO
+channel-type.tado.horizontalSwing.state.option.LEFT = LEFT
+channel-type.tado.horizontalSwing.state.option.MID_LEFT = MID-LEFT
+channel-type.tado.horizontalSwing.state.option.MID = MID
+channel-type.tado.horizontalSwing.state.option.MID_RIGHT = MID-RIGHT
+channel-type.tado.horizontalSwing.state.option.RIGHT = RIGHT
+channel-type.tado.horizontalSwing.state.option.ON = ON
+channel-type.tado.horizontalSwing.state.option.OFF = OFF
+channel-type.tado.hvacMode.label = HVAC Mode
+channel-type.tado.hvacMode.description = Mode of the device (OFF, HEAT, COOL, DRY, FAN, AUTO - if supported)
+channel-type.tado.hvacMode.state.option.OFF = Off
+channel-type.tado.hvacMode.state.option.HEAT = Heat
+channel-type.tado.hvacMode.state.option.COOL = Cool
+channel-type.tado.hvacMode.state.option.DRY = Dry
+channel-type.tado.hvacMode.state.option.FAN = Fan
+channel-type.tado.hvacMode.state.option.AUTO = Auto
+channel-type.tado.light.label = Light
+channel-type.tado.light.description = State of control panel light (only if supported by AC)
+channel-type.tado.openWindowDetected.label = Open Window Detected
+channel-type.tado.openWindowDetected.description = Indicates if an open window has been detected
+channel-type.tado.openWindowRemainingTime.label = Override Remaining Time
+channel-type.tado.openWindowRemainingTime.description = The remaining Open Window heating/cooling Override time in the Zone
+channel-type.tado.operationMode.label = Zone Operation Mode
+channel-type.tado.operationMode.description = Active operation mode (schedule, manual, timer or until next change)
+channel-type.tado.operationMode.state.option.SCHEDULE = Schedule
+channel-type.tado.operationMode.state.option.MANUAL = Manual
+channel-type.tado.operationMode.state.option.UNTIL_CHANGE = Until change
+channel-type.tado.operationMode.state.option.TIMER = Timer
+channel-type.tado.overlayExpiry.label = Overlay End Time
+channel-type.tado.overlayExpiry.description = Time until when the overlay is active. Null if no overlay is set or overlay type is manual.
+channel-type.tado.overlayExpiry.state.pattern = %1$tF %1$tR
+channel-type.tado.swing.label = Swing
+channel-type.tado.swing.description = State of AC swing (only if supported by AC)
+channel-type.tado.targetTemperature.label = Target Temperature
+channel-type.tado.targetTemperature.description = Thermostat temperature setpoint
+channel-type.tado.timerDuration.label = Timer Duration
+channel-type.tado.timerDuration.description = Total duration of a timer
+channel-type.tado.verticalSwing.label = Vertical Swing
+channel-type.tado.verticalSwing.description = State of AC vertical swing (only if supported by AC)
+channel-type.tado.verticalSwing.state.option.AUTO = AUTO
+channel-type.tado.verticalSwing.state.option.UP = UP
+channel-type.tado.verticalSwing.state.option.MID_UP = MID-UP
+channel-type.tado.verticalSwing.state.option.MID = MID
+channel-type.tado.verticalSwing.state.option.MID_DOWN = MID-DOWN
+channel-type.tado.verticalSwing.state.option.DOWN = DOWN
+channel-type.tado.verticalSwing.state.option.ON = ON
+channel-type.tado.verticalSwing.state.option.OFF = OFF
+
+# tado home thing status messages
+
+tado.home.status.oauth = Try authenticating at {0}
+tado.home.status.username = Username and/or password might be invalid
+tado.home.status.nohome = User does not have access to any home
+tado.home.status.nohomeid = Missing Home Id
+
+# discovery
+
+discovery.bridge.label = tado° Internet Bridge ({0})
diff --git a/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/thing/thing-types.xml
index b3a06cecf2e57..e778a9a0886d1 100644
--- a/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/thing/thing-types.xml
+++ b/bundles/org.openhab.binding.tado/src/main/resources/OH-INF/thing/thing-types.xml
@@ -24,6 +24,12 @@
 				<description>Determines if the binding shall use oAuth RFC-8628 authentication</description>
 			</parameter>
 
+			<parameter name="rfcWithUser" type="boolean" required="false">
+				<label>RFC-8628 with User</label>
+				<description>Determines if the user name is included in the oAuth RFC-8628 authentication</description>
+				<advanced>true</advanced>
+			</parameter>
+
 			<parameter name="username" type="text" required="false">
 				<label>User Name</label>
 				<description>User name of tado login used for API access</description>
@@ -36,6 +42,12 @@
 				<context>password</context>
 				<advanced>true</advanced>
 			</parameter>
+
+			<parameter name="homeId" type="integer" required="false">
+				<label>Home Id</label>
+				<description>Selects the Home Id to be used (only needed if there are multiple homes)</description>
+				<advanced>true</advanced>
+			</parameter>
 		</config-description>
 	</bridge-type>
 


Reviews:
user: login: lsiepel
body: Thansk @andrewfg i have some questions that might improve the user experience (or not) :-)
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T07:55:57Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T09:24:27Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T09:29:53Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T09:42:41Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T09:52:44Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T09:57:47Z
user: login: lsiepel
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:16:58Z
user: login: lsiepel
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:18:48Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:20:36Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:32:53Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:36:08Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:45:36Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T10:52:38Z
user: login: lsiepel
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T11:30:43Z
user: login: lsiepel
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T11:31:33Z
user: login: lsiepel
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T11:32:39Z
user: login: lsiepel
body: Thanks, LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T11:33:08Z
user: login: jlaur
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T11:35:35Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T12:00:49Z
user: login: jlaur
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T12:32:43Z
user: login: andrewfg
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T13:51:44Z

Review comments:
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: lsiepel
body: Maybe a nit, but wouldn't it be easier to rename => `useRfc8628` to `useOauth` ?

Additionally, how do `rfcWithUser` and `username` related or differ? 
What happens if you habe one tado account and make use of the `rfcWithUser` ?
created_at: 2025-05-16T07:46:58Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: lsiepel
body: What if `homes` is empty?
created_at: 2025-05-16T07:50:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
+                if (homes.size() > 1) {
+                    Integer configHomeId = configuration.homeId;
+                    if (configHomeId == null || configHomeId == 0) {
+                        logger.info("Trying first Home Id in the list [{}]", homes.stream()
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: lsiepel
body: Why would the user want to configure that as the first is already automatically picked and the bindings continues to operate?

To be helpfull, it might be better to log _all_ available homes and set the thing offline ?

Maybe also adjust the logged text: to amke clear the home id was not set and it continue's with id xxx until the id is set in the configuration ?
created_at: 2025-05-16T07:53:44Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: lsiepel
body: Something seems off with this file, have not seen these symbols at the end of the lines before in a PR:
![image](https://github.com/user-attachments/assets/2cd620d5-fec8-4ca6-8f2e-ca58758c2749)

created_at: 2025-05-16T07:54:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: andrewfg
body: > rename => useRfc8628 to useOauth

I understand your suggestion but it would be a breaking change vs. #18433 so perhaps we should not change it now?

> how do rfcWithUser and username related or differ?

In the old authentication scheme the OH binding would submit the user name (and password) with each HTTP request; whereas in the new scheme it submits a token. The problem with #18433 was that it failed to cover the case of multiple Tado accounts under one OH instance since the token was persisted under the non specific topic name `tado`. By contrast this PR allows the binding to persist multiple tokens by appending the user name to the topic name e.g. `tado-username`.

In other words -- to answer your question -- previously the user name was an actual part of the HTTP request sent to the server but now it is only used (optionally) in the OH token persistence process.

> What happens if you have one tado account and make use of the rfcWithUser ?

If there is only one account it does not matter if the token is persisted under `tado` or `tado-username`.
created_at: 2025-05-16T09:24:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: andrewfg
body: > What if homes is empty?

The Thing goes offline `updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, CONF_ERROR_NO_HOME_ID)` in line 190 below..
created_at: 2025-05-16T09:29:52Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
+                if (homes.size() > 1) {
+                    Integer configHomeId = configuration.homeId;
+                    if (configHomeId == null || configHomeId == 0) {
+                        logger.info("Trying first Home Id in the list [{}]", homes.stream()
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: andrewfg
body: > Why would the user want to configure that as the first is already automatically picked and the bindings continues to operate?

Indeed. If there is a single account there is no need to configure a user name (persistence topic defaults to `tado`). And if there is a single home (per account) there is no need to configure a home id (binding defaults to first/only home). I guess the single home / single account case covers 99% of users.

The log message is to inform (the 1% of users above) to explicitly set a home id. However it still takes the first one 'just-in-case'. I would assume that a user would first have one home and then add a second one later, so we try not to break the first home if/when a second home will be added.
created_at: 2025-05-16T09:42:41Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: andrewfg
body: Umm. Running `mvn spotless:apply` on a Windows machine causes code to be formatted with CRLF line endings rather than with LF. There is some automation 'magic' in the Windows GitHub app settings which sorts this out in the case of .java, .xml, and .md files; but apparently it does not work for .properties files. ??

=> I will have a deeper look into this, and revert back to you.
created_at: 2025-05-16T09:52:44Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: andrewfg
body: @lsiepel I just made a commit with the CRLF line endings reverted back to LF only..
created_at: 2025-05-16T09:57:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: lsiepel
body: Hmm no IDE available now, But i would expect `homes.get(0).getId();` to throw an NPE or  out of bounds exception if `homes` is empty
created_at: 2025-05-16T10:16:58Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: lsiepel
body: I'm on a windows machine with vscode and do not experience this issue. If you need to compare some config file, feel free to ask.
created_at: 2025-05-16T10:18:48Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: andrewfg
body: PS @lsiepel I only recently learned this lesson because spotless also munges the `SemanticTags.csv` file -- which I have been playing with a lot in the recent days and weeks. And MS Excel is another culprit which substitutes CRLF for LF if you open a csv in Windows Excel..)
created_at: 2025-05-16T10:20:36Z
author_association: CONTRIBUTOR
path: bundles/org.openhab.binding.tado/src/main/resources/OH-INF/i18n/tado.properties
user: login: andrewfg
body: > I'm on a windows machine with vscode

Generally use Eclipse as my IDE for 95% of the time. However Eclipse is not CRLF aware. Therefore I use Visual Studio to edit markdown files (and now also for fixing CRLF issues).
created_at: 2025-05-16T10:32:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: andrewfg
body: Good point! I never tested it because (fortunately) I never had zero homes. => I will add a catch for that.
created_at: 2025-05-16T10:36:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: andrewfg
body: In line 166 we do test `homes.isEmpty()` and return with `updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, CONF_ERROR_NO_HOME)`.
created_at: 2025-05-16T10:45:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
+                if (homes.size() > 1) {
+                    Integer configHomeId = configuration.homeId;
+                    if (configHomeId == null || configHomeId == 0) {
+                        logger.info("Trying first Home Id in the list [{}]", homes.stream()
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: andrewfg
body: PS see the code comment above for more detailed explanation :)
created_at: 2025-05-16T10:52:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: lsiepel
body: It is not that important to create a breaking change.
created_at: 2025-05-16T11:30:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: lsiepel
body: ah yes, overlooked that. 
created_at: 2025-05-16T11:31:33Z
author_association: CONTRIBUTOR
diff_hunk: @@ -156,7 +168,24 @@ private synchronized void initializeBridgeStatusAndPropertiesIfOffline() {
                     return;
                 }
 
+                /*
+                 * If there is only one home, or if there is no valid configuration.homeId entry, then use the first
+                 * home id. Otherwise use the configuration.homeId entry value (if one exists). If there is no valid
+                 * configuration.homeId entry but there are multiple homes then log the available home to help the
+                 * user set up the proper configuration.homeId entry.
+                 */
                 Integer firstHomeId = homes.get(0).getId();
+                if (homes.size() > 1) {
+                    Integer configHomeId = configuration.homeId;
+                    if (configHomeId == null || configHomeId == 0) {
+                        logger.info("Trying first Home Id in the list [{}]", homes.stream()
path: bundles/org.openhab.binding.tado/src/main/java/org/openhab/binding/tado/internal/handler/TadoHomeHandler.java
user: login: lsiepel
body: Thanks, this helps.
created_at: 2025-05-16T11:32:39Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: jlaur
body: Does the binding work when not using RFC-8628, i.e. having this parameter set to false?
created_at: 2025-05-16T11:35:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: andrewfg
body: When #18433 was introduced this parameter switch was absolutely necessary to select the old or the new authentication method. However -- at least in my case -- the old process has in the meantime been blocked. I don't know 100% if there could still be users for whom the old process is still required. But I suppose we could indeed be bold and simply delete all the code for the old authentication process. => WDYT?
created_at: 2025-05-16T12:00:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: jlaur
body: Yes, I don't see a need for an option to disable RFC-8628 in a cloud binding where this is now the only authorization offered by the service. Had it been a local device where people could be using old firmware, it would have been a different story.
created_at: 2025-05-16T12:32:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,13 +17,23 @@ There are two ways to authenticate it as follows:
 1. Online via the OAuth Device Code Grant Flow (RFC-8628) authentication process through the link provided at `http://[openhab-ip-address]:8080/tado`.
 1. Enter `username` and `password` credentials in the thing configuration parameters as shown in the table below.
 
-Note: after March 15th, 2025 online authentication is the tado° preferred method.
-It is possible that the `username` and `password` method may cease to work some time after this date.
-
-| Parameter  | Required | Description                                               |
-|------------|----------|-----------------------------------------------------------|
-| `username` | yes      | Username used to log in at [my.tado](https://my.tado.com) |
-| `password` | yes      | Password of the username                                  |
+Note: after March 15th, 2025 online authentication is the tado° preferred (or even only) method.
+In other words the `username` and `password` method has probably ceased to work after that date.
+
+| Parameter     | Optional | Description                                                                        |
+|---------------|----------|------------------------------------------------------------------------------------|
+| `useRfc8628`  | yes      | Determines if the binding shall use oAuth RFC-8628 authentication                  |
path: bundles/org.openhab.binding.tado/README.md
user: login: andrewfg
body: Ok. I will make a new PR for that.
created_at: 2025-05-16T13:51:44Z
author_association: CONTRIBUTOR

PR comments:
user: login: andrewfg
created_at: 2025-04-02T14:01:16Z
body: Ping @OlduwanSteve just for info: I have tested this myself on my own system insofar as is possible without having two accounts. At least I can confirm that a) it does not break anything for users with one account, and b) it can authenticate a (single) account regardless of whether a user name is specified. I suggest you look at the new [docs](https://github.com/openhab/openhab-addons/blob/c88a55f4c63f02352f4c286d888a0c38f0e9ecf2/bundles/org.openhab.binding.tado/README.md#home-thing-the-bridge) -- note that you need to check the Advanced box to see the new configuration parameters for this feature.
author_association: CONTRIBUTOR
user: login: openhab-bot
created_at: 2025-04-04T12:38:53Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/tado-authentication/163276/54

author_association: COLLABORATOR
user: login: andrewfg
created_at: 2025-04-04T12:49:44Z
body: @OlduwanSteve there is also a build for OH v4.3.4 above
author_association: CONTRIBUTOR
user: login: openhab-bot
created_at: 2025-04-04T14:38:50Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/many-items-stop-responding-after-a-while-since-upgrade-to-oh-4-3-4/163498/18

author_association: COLLABORATOR
user: login: openhab-bot
created_at: 2025-04-04T15:49:42Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/tado-authentication/163276/56

author_association: COLLABORATOR
user: login: andypmuc
created_at: 2025-04-04T21:19:12Z
body: Hello, I also support this pull request and though of starting programming it. I have 3 tado devices distributed of VPN to be handled by one OpenHAB instance. I have also this error, when I click on authenticate. I have update several times and currently from 4.3.3 to 4.3.4. If I install a new instance, I have no problem. Regards Andreas

![image](https://github.com/user-attachments/assets/7a1dc890-925b-4473-80c5-676936981fd1)


```
HTTP ERROR 500 com.google.gson.JsonIOException: Failed making field 'java.lang.Throwable#detailMessage' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
URI:	/tado
STATUS:	500
MESSAGE:	com.google.gson.JsonIOException: Failed making field 'java.lang.Throwable#detailMessage' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
SERVLET:	org.openhab.binding.tado.internal.servlet.TadoAuthenticationServlet
CAUSED BY:	com.google.gson.JsonIOException: Failed making field 'java.lang.Throwable#detailMessage' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
CAUSED BY:	java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @7b83aec6

```
author_association: NONE
user: login: andrewfg
created_at: 2025-04-04T21:41:30Z
body: > I have also this error, when I click on authenticate.

Please provide logs as follows:
- log:set TRACE org.openhab.core.auth
- log:set TRACE org.openhab.binding.tado
author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-04T21:54:11Z
body: Sorry to ask this question, but where do I do this? In the GUI?
author_association: NONE
user: login: andrewfg
created_at: 2025-04-04T21:56:10Z
body: In the console. 
author_association: CONTRIBUTOR
user: login: openhab-bot
created_at: 2025-04-05T09:45:04Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/tado-authentication/163276/58

author_association: COLLABORATOR
user: login: OlduwanSteve
created_at: 2025-04-05T11:35:41Z
body: @andrewfg Great stuff, it works like a charm! I dropped the 4.3.4 snapshot jar in my addons folder, stopped the openhab service, cleared the cache, started the service again. My two bridges showed as pending config and each correctly prompted me with the user parameter pre-filled in the url.

One nice thing to note is that the tado OAuth confirmation for the second bridge recognised I was already logged in with one account, and gave me the option to logout before proceeding.

I'm very grateful for you jumping on this.
author_association: NONE
user: login: andrewfg
created_at: 2025-04-05T12:15:35Z
body: > the tado OAuth confirmation for the second bridge recognised I was already logged in with one account, and gave me the option to logout before proceeding.

Indeed. And I suspect that if you had not logged out of account A and logged in to account B, then it would have invalidated the prior token for account A.
author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-05T20:21:52Z
body: When I started Openhab from the cmd it worked, only when Openhab was running as a service it did not work. Either way, Icatch following message

`2025-04-05 22:05:37.310 [WARN ] [org.eclipse.jetty.server.HttpChannel] - /tado
com.google.gson.JsonIOException: Failed making field 'java.lang.Throwable#detailMessage' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
	at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:38) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:286) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
	at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1226) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:982) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthConnectorRFC8628.fetchAccessTokenResponse(OAuthConnectorRFC8628.java:358) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthConnectorRFC8628.getDeviceCodeResponse(OAuthConnectorRFC8628.java:204) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthClientServiceImpl.getDeviceCodeResponse(OAuthClientServiceImpl.java:474) ~[?:?]
	at org.openhab.binding.tado.internal.handler.TadoHandlerFactory.getDeviceCodeResponse(TadoHandlerFactory.java:223) ~[?:?]
	at org.openhab.binding.tado.internal.servlet.TadoAuthenticationServlet.serveUserAuthenticationPage(TadoAuthenticationServlet.java:148) ~[?:?]
	at org.openhab.binding.tado.internal.servlet.TadoAuthenticationServlet.doGet(TadoAuthenticationServlet.java:81) ~[?:?]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) ~[bundleFile:4.0.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[bundleFile:4.0.4]
	at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[?:?]
	at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:113) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:334) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[?:?]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.54.v20240208]
	at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) ~[?:?]
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:731) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.54.v20240208]
	at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @48b5157a
	at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[?:?]
	at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
	at java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) ~[?:?]
	at java.lang.reflect.Field.setAccessible(Field.java:172) ~[?:?]
	at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:35) ~[?:?]
	... 54 more`
author_association: NONE
user: login: andypmuc
created_at: 2025-04-05T20:33:52Z
body: Maybe it was the cache not emtpied ...
author_association: NONE
user: login: andrewfg
created_at: 2025-04-06T15:39:22Z
body: > When I started Openhab from the cmd it worked, only when Openhab was running as a service it did not work.
> Either way, I catch following message

@andypmuc you are saying confusing things. On one hand you say it works, but on the other hand you say it reports an error. Which is it?

In any case, the exception that you see (`OAuthConnectorRFC8628.fetchAccessTokenResponse(OAuthConnectorRFC8628.java:358`) means that OH did perfectly succeed in getting a valid device code from the Tado server on `https://login.tado.com/oauth2/device_authorize` but then the exact same Tado server on `https://login.tado.com/oauth2/token` rejected with HTTP 400 (bad request) to convert that device code into an access token. i.e. the error is coming from the Tado server. => So maybe you have some issue with your Tado account?

As a result of your log, I see that I do need to make the OH Core error logging more gentle. (Which I will do). However the underlying issue seems to be coming from the Tado server. So can you please turn on `log:set TRACE org.openhab.core.auth` and post the results?

--- 

EDIT see https://github.com/openhab/openhab-core/issues/4703


author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-07T17:18:24Z
body: What I said, was the truth, tested it several times. Now I have the problem, that the scanning of devices of the remote VPN Tado system is not working. Is there another way, to find out the ID?
author_association: NONE
user: login: andrewfg
created_at: 2025-04-07T17:49:57Z
body: > the scanning of devices of the remote VPN Tado system is not working

Sorry but I don't understand. Can you please explain further?

> What I said, was the truth, tested it several times

So if the log that you provided above applies identically to the case when it succeeded and also to the case when it failed, then obviously that log provides us with no information to help discern what failed. Or??

---
Probably if you could provide the log you would see a message _“The authorization request is still pending”_ this means that you did not complete the login process on the Tado website. Perhaps because you used the wrong login credentials, or perhaps because you did not press the submit button.

---

EDIT: see this https://community.openhab.org/t/tado-authentication/163276/65
author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-08T18:56:00Z
body: My mistake, I added a device not a zone. First I got the same error as above, now I get.

![image](https://github.com/user-attachments/assets/c83267f9-25ff-4bde-8176-4afe5cefe066)


`
2025-04-08 20:45:46.669 [INFO ] [org.openhab.core.Activator          ] - Starting openHAB 4.3.4 (Release Build)
2025-04-08 20:45:46.828 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Europe/Berlin'.
2025-04-08 20:45:46.843 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to '48.1198252570032,11.51229590177536'.
2025-04-08 20:45:46.843 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'en_DE'.
2025-04-08 20:45:47.249 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.249 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/events's Observer 
2025-04-08 20:45:47.262 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.262 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.268 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.268 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.268 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.268 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.275 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.275 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/inbox's Observer 
2025-04-08 20:45:47.275 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.1.9:8080/rest/events/states's Observer 
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : BundleComponentActivator : ComponentHolder created.
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Component created: DS=DS13, implementation=org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=modified configuration-pid=[org.openhab.jaas]
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Component Services: scope=singleton, services=[org.openhab.core.auth.AuthenticationProvider]
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Querying state disabled
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Querying state disabled
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Component can not be activated since it is in state disabled
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider] : Querying state disabled
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Updating target filters
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : dm osgi.ds.satisfying.condition tracker opened
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : registering service listener for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Changed state from disabled to unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Component enabled
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : ActivateInternal
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Changed state from unsatisfiedReference to satisfied
2025-04-08 20:45:47.433 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : registration change queue [registered]
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : BundleComponentActivator : ComponentHolder created.
2025-04-08 20:45:47.444 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : BundleComponentActivator : ComponentHolder created.
2025-04-08 20:45:47.444 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : BundleComponentActivator : ComponentHolder created.
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Dependency Manager created $000interface=org.openhab.core.io.net.http.HttpClientFactory, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=0
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Dependency Manager created $001interface=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=1
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Component created: DS=DS14, implementation=org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl]
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Component Services: scope=singleton, services=[org.openhab.core.auth.client.oauth2.OAuthFactory]
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Querying state disabled
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Querying state disabled
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Component can not be activated since it is in state disabled
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl] : Querying state disabled
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Updating target filters
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : No change in target property for dependency $000: currently registered: false
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] :  No existing service listener to unregister for dependency $000
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Setting target property for dependency $000 to null
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.io.net.http.HttpClientFactory), initialReferenceFilter (objectClass=org.openhab.core.io.net.http.HttpClientFactory)
2025-04-08 20:45:47.444 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $000 tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $000 tracker opened
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : registering service listener for dependency $000
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : No change in target property for dependency $001: currently registered: false
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] :  No existing service listener to unregister for dependency $001
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Setting target property for dependency $001 to null
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : New service tracker for $001, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler), initialReferenceFilter (objectClass=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $001 tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $001 tracker opened
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : registering service listener for dependency $001
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm osgi.ds.satisfying.condition tracker opened
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : registering service listener for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Changed state from disabled to unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Component enabled
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : ActivateInternal
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Dependency not satisfied: $000
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Dependency not satisfied: $001
2025-04-08 20:45:47.449 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Not all dependencies satisfied, cannot activate
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Dependency Manager created $000interface=org.openhab.core.storage.StorageService, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=0
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Dependency Manager created StorageCipherinterface=org.openhab.core.auth.client.oauth2.StorageCipher, filter=null, policy=static, cardinality=1..n, bind=setStorageCipher, unbind=unsetStorageCipher, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Component created: DS=DS14, implementation=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl]
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Component Services: scope=singleton, services=[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler]
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Component Properties: {CIPHER_TARGET=SymmetricKeyCipher, osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Querying state disabled
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Querying state disabled
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Component can not be activated since it is in state disabled
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl] : Querying state disabled
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Updating target filters
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : No change in target property for dependency $000: currently registered: false
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] :  No existing service listener to unregister for dependency $000
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Setting target property for dependency $000 to null
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.storage.StorageService), initialReferenceFilter (objectClass=org.openhab.core.storage.StorageService)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm $000 tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm $000 tracker opened
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : registering service listener for dependency $000
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : No change in target property for dependency StorageCipher: currently registered: false
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] :  No existing service listener to unregister for dependency StorageCipher
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Setting target property for dependency StorageCipher to null
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : New service tracker for StorageCipher, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.auth.client.oauth2.StorageCipher), initialReferenceFilter (objectClass=org.openhab.core.auth.client.oauth2.StorageCipher)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm StorageCipher tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm StorageCipher tracker opened
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : registering service listener for dependency StorageCipher
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm osgi.ds.satisfying.condition tracker opened
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : registering service listener for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Changed state from disabled to unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Component enabled
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : ActivateInternal
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Dependency not satisfied: $000
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Dependency not satisfied: StorageCipher
2025-04-08 20:45:47.449 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Not all dependencies satisfied, cannot activate
2025-04-08 20:45:47.449 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Dependency Manager created $000interface=org.osgi.service.cm.ConfigurationAdmin, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=0
2025-04-08 20:45:47.449 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2025-04-08 20:45:47.449 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Component created: DS=DS14, implementation=org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher]
2025-04-08 20:45:47.449 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Component Services: scope=singleton, services=[org.openhab.core.auth.client.oauth2.StorageCipher]
2025-04-08 20:45:47.449 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Querying state disabled
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Querying state disabled
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Component can not be activated since it is in state disabled
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher] : Querying state disabled
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Updating target filters
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : No change in target property for dependency $000: currently registered: false
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] :  No existing service listener to unregister for dependency $000
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Setting target property for dependency $000 to null
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.cm.ConfigurationAdmin), initialReferenceFilter (objectClass=org.osgi.service.cm.ConfigurationAdmin)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm $000 tracker reset (closed)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm $000 tracking 1 SingleStatic added {org.osgi.service.cm.ConfigurationAdmin}={osgi.command.scope=cm, service.description=Configuration Admin Service Specification 1.6 Implementation, service.id=40, service.bundleid=12, service.scope=bundle, osgi.command.function=[getConfiguration,getFactoryConfiguration,listConfigurations,createFactoryConfiguration], service.vendor=The Apache Software Foundation, config.plugins=, service.pid=org.apache.felix.cm.ConfigurationAdmin} (enter)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm $000 tracking 1 SingleStatic active: false trackerOpened: false optional: false
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm $000 tracking 1 SingleStatic added {org.osgi.service.cm.ConfigurationAdmin}={osgi.command.scope=cm, service.description=Configuration Admin Service Specification 1.6 Implementation, service.id=40, service.bundleid=12, service.scope=bundle, osgi.command.function=[getConfiguration,getFactoryConfiguration,listConfigurations,createFactoryConfiguration], service.vendor=The Apache Software Foundation, config.plugins=, service.pid=org.apache.felix.cm.ConfigurationAdmin} (exit)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm $000 tracker opened
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : registering service listener for dependency $000
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : dm osgi.ds.satisfying.condition tracker opened
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : registering service listener for dependency osgi.ds.satisfying.condition
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Changed state from disabled to unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Component enabled
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : ActivateInternal
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Changed state from unsatisfiedReference to satisfied
2025-04-08 20:45:47.460 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : registration change queue [registered]
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm StorageCipher tracking 2 MultipleStaticReluctant added {org.openhab.core.auth.client.oauth2.StorageCipher}={service.id=224, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher, component.id=69} (enter)
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : ActivateInternal
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Dependency not satisfied: $000
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Not all dependencies satisfied, cannot activate
2025-04-08 20:45:47.460 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm StorageCipher tracking 2 MultipleStaticReluctant added {org.openhab.core.auth.client.oauth2.StorageCipher}={service.id=224, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher, component.id=69} (exit)
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Checking constructor public org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider()
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Found constructor with 0 arguments : public org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider()
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : This thread collected dependencies
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : getService (single component manager) dependencies collected.
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state satisfied
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Querying state satisfied
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : getting activate: activate
2025-04-08 20:45:47.764 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Locating method activate in class org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Declared Method org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Found activate method: protected void org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider.activate(java.util.Map)
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.helper.ReadOnlyDictionary]
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : invoked activate: activate
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Set implementation object for component
2025-04-08 20:45:47.765 [DEBUG] [.internal.JaasAuthenticationProvider] - bundle org.openhab.core.auth.jaas:4.3.4 (161)[org.openhab.core.auth.jaas.internal.JaasAuthenticationProvider(66)] : Changed state from satisfied to active
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $000 tracking 2 SingleStatic added {org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=300, service.bundleid=182, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=162} (enter)
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : ActivateInternal
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Dependency not satisfied: $001
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Not all dependencies satisfied, cannot activate
2025-04-08 20:45:47.786 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $000 tracking 2 SingleStatic added {org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=300, service.bundleid=182, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=162} (exit)
2025-04-08 20:45:48.981 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'jdbc.persist'
2025-04-08 20:45:50.358 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm $000 tracking 3 SingleStatic added {org.openhab.core.storage.StorageService}={backup_files=10, service.id=374, service.bundleid=220, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=256, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=[org.openhab.storage.json, org.openhab.storage.json]} (enter)
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : ActivateInternal
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.359 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Changed state from unsatisfiedReference to satisfied
2025-04-08 20:45:50.360 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : registration change queue [registered]
2025-04-08 20:45:50.360 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $001 tracking 3 SingleStatic added {org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler}={service.id=384, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), CIPHER_TARGET=SymmetricKeyCipher, component.name=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl, component.id=68} (enter)
2025-04-08 20:45:50.360 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : ActivateInternal
2025-04-08 20:45:50.360 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.360 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.360 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Activating component from state unsatisfiedReference
2025-04-08 20:45:50.361 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.361 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state unsatisfiedReference
2025-04-08 20:45:50.361 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Changed state from unsatisfiedReference to satisfied
2025-04-08 20:45:50.361 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : registration change queue [registered]
2025-04-08 20:45:50.361 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : dm $001 tracking 3 SingleStatic added {org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler}={service.id=384, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), CIPHER_TARGET=SymmetricKeyCipher, component.name=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl, component.id=68} (exit)
2025-04-08 20:45:50.361 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : dm $000 tracking 3 SingleStatic added {org.openhab.core.storage.StorageService}={backup_files=10, service.id=374, service.bundleid=220, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=256, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=[org.openhab.storage.json, org.openhab.storage.json]} (exit)
2025-04-08 20:45:50.377 [WARN ] [automation.internal.RuleRegistryImpl] - Cannot find reference for {{6w69d!fM"><field name="TEXT">  -&gt; failed link quality </field></block></value><value name="ADD1"><block type="variables_get" id="03C/1u9d;S{%5CK/IW]-"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value></block></value><value name="itemName"><shadow type="oh_item" id="lX9(Is;NTscg5X2|NUp%"><mutation itemName="MyItem" itemLabel="MyItem"></mutation><field name="itemName">MyItem</field></shadow><block type="oh_item" id="A*!J,[DCh/Qm/!5%DPTZ"><mutation itemName="BieStrLog" itemLabel="BieStrLog"></mutation><field name="itemName">BieStrLog</field></block></value><next><block type="oh_sleep" id="N2lY`}I6L/t1FKv?qSFr"><field name="milliseconds">500</field></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement><next><block type="controls_if" id="*`Dly68l8b/qF_q_BSws"><value name="IF0"><block type="logic_compare" id="79/RhFeX:h!vzzlF6J8z"><field name="OP">EQ</field><value name="A"><block type="math_arithmetic" id="B3FNB1Can1GZumf8EW${"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="!HzJ)#[fN)wp#.g*Jx4)"><field name="NUM">1</field></shadow><block type="variables_get" id="A-KKd.DHY6mcU|{3Mxgp"><field name="VAR" id="q_.CF+*imQ0qCNlFPJ!3">max</field></block></value><value name="B"><shadow type="math_number" id="K1EP;Wm.7^W+r_#BVS,["><field name="NUM">1</field></shadow><block type="variables_get" id="(No^I{$1m|K](IgHoJT8"><field name="VAR" id="~m_5xGjtGELu.:qKawEm">min</field></block></value></block></value><value name="B"><block type="math_number" id="TpG$`h`V8}6.XtJ}+FDd"><field name="NUM">0</field></block></value></block></value><statement name="DO0"><block type="text_append" id="P!Dlo|dYU7JY_GSb3c5Y"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="#+YB^Kze=wf~3273fv^6"><field name="TEXT"></field></shadow><block type="oh_getitem_attribute" id="4TOA~Qidys3oR+ot^kTV"><mutation attributeName="Name"></mutation><field name="attributeName">Name</field><value name="item"><shadow type="oh_getitem" id="1A2i(n_@1d865E@g+z)s"><value name="itemName"><shadow type="oh_item" id=";uLW#F97k5U]=):X:lxY"><mutation itemName="MyItem" itemLabel="MyItem"></mutation><field name="itemName">MyItem</field></shadow></value></shadow><block type="variables_get" id="OH8*wd0~b{er/kMtP8(a"><field name="VAR" id="uIi{0Rn]*Tvg68AjQEg@">itm</field></block></value></block></value><next><block type="text_append" id="ZMiz]Qu5VyCUJ6X)bsE4"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="yKj6ES*TfVIg:^Eh0-YC"><field name="TEXT"></field></shadow><block type="text" id="TK2{Jc!M7+HL_LnLP@W`"><field name="TEXT"> has not changed </field></block></value><next><block type="text_append" id="+T1WM}mzus5wi2*}6U(Z"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="4g:i=rX[fJjeRy.^@NRs"><field name="TEXT"></field></shadow><block type="variables_get" id="0yi1BFN;GYs`s4C+(,2E"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value><next><block type="text_append" id="7lhR=npj3FZfBzpEQM`o"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="TT3nGLxOX{*]/;L*zv$/"><field name="TEXT"></field></shadow><block type="oh_text_crlf" id="Nq2B2%/]u[YpLsog+)1D"></block></value><next><block type="variables_set" id="vQnVX61k=wcl[DFxF*MH"><field name="VAR" id="cmb~y62qP`VuRD6Za{H%">err</field><value name="VALUE"><block type="logic_boolean" id="dDQf~zBYApG{0b!N=TIu"><field name="BOOL">TRUE</field></block></value><next><block type="oh_log" id="p!^$k.d.YK(Qk|+e3T@Q"><field name="severity">info</field><value name="message"><shadow type="text" id="6YC.F.YW-%4--(@pJOIc"><field name="TEXT"></field></shadow><block type="text_join" id=":4aB^6[F_Ay9]{ns-X;n"><mutation items="2"></mutation><value name="ADD0"><block type="text" id="s*5US1]y(%IYJXdWIf}6"><field name="TEXT">  -&gt; failed changing</field></block></value><value name="ADD1"><block type="variables_get" id="_753q;XA7-x7?H`u1UGt"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value></block></value><next><block type="oh_event" id="3k=zCNq3}yI%nJjX:;7R"><field name="eventType">sendCommand</field><value name="value"><shadow type="text" id="cD%xB[lEuEbP:/.3tPKL"><field name="TEXT">value</field></shadow><block type="text_join" id="SXA@f-5s?jFLpw::xfx8"><mutation items="2"></mutation><value name="ADD0"><block type="text" id="8@8a`ih7,zV=AouE:f,`"><field name="TEXT">  -&gt; failed changing</field></block></value><value name="ADD1"><block type="variables_get" id="KVm%{d8@*/CBm5Qf)cSr"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value></block></value><value name="itemName"><shadow type="oh_item" id="lX9(Is;NTscg5X2|NUp%"><mutation itemName="MyItem" itemLabel="MyItem"></mutation><field name="itemName">MyItem</field></shadow><block type="oh_item" id="HKYe!!#z($ai6jc#eLr9"><mutation itemName="BieStrLog" itemLabel="BieStrLog"></mutation><field name="itemName">BieStrLog</field></block></value><next><block type="oh_sleep" id="!mt#m0;GGCzA=`V+zqh0"><field name="milliseconds">500</field></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement><next><block type="oh_log" id="Gf|?4:ST?P3N@pR(YPVf" disabled="true"><field name="severity">info</field><value name="message"><shadow type="text" id="6YC.F.YW-%4--(@pJOIc"><field name="TEXT"></field></shadow><block type="text" id="ba+7,9j+wR;dv~sDzp9z"><field name="TEXT">Here</field></block></value><next><block type="oh_log" id="m[*x4b]3Nlp.AR2pwZ~s" disabled="true"><field name="severity">info</field><value name="message"><shadow type="text" id="6YC.F.YW-%4--(@pJOIc"><field name="TEXT"></field></shadow><block type="oh_toNumber" id="v)MTAXnjo|DpNl^@OH.0"><value name="valueAsText"><shadow type="text" id="!x.C8L,!3)]6xChL=%sa"><field name="TEXT">123</field></shadow><block type="oh_getitem_attribute" id="V(KdSnTT~|+_[SX3o`it"><mutation attributeName="State"></mutation><field name="attributeName">State</field><value name="item"><shadow type="oh_getitem" id="$ODuJ8eUp;(oid!|+q-+"><value name="itemName"><shadow type="oh_item" id="KU,fj*/OdIYe:wULy;cC"><mutation itemName="MyItem" itemLabel="MyItem"></mutation><field name="itemName">MyItem</field></shadow></value></shadow><block type="variables_get" id="9LwTu3M1=krKLt1}q(^:"><field name="VAR" id="uIi{0Rn]*Tvg68AjQEg@">itm</field></block></value></block></value></block></value><next><block type="controls_if" id="?-vF0UNPMlQa|}{f2K%@"><value name="IF0"><block type="logic_compare" id="_nTZ3H2TGc0}#7jv=^Wv"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="xg}R_cHb*nk5f_C:M9Xf"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value><value name="B"><block type="text" id="5_e,,@TE0;-Sw:ZrM?j)"><field name="TEXT">-</field></block></value></block></value><statement name="DO0"><block type="text_append" id="}F/=_^HkXKMpxHZK#]F1"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="#+YB^Kze=wf~3273fv^6"><field name="TEXT"></field></shadow><block type="oh_getitem_attribute" id="b|GXN)d;w+Pl8xaKSNp}"><mutation attributeName="Name"></mutation><field name="attributeName">Name</field><value name="item"><shadow type="oh_getitem" id="1A2i(n_@1d865E@g+z)s"><value name="itemName"><shadow type="oh_item" id=";uLW#F97k5U]=):X:lxY"><mutation itemName="MyItem" itemLabel="MyItem"></mutation><field name="itemName">MyItem</field></shadow></value></shadow><block type="variables_get" id="Ag]*FC~C5{1(XmQ{T))f"><field name="VAR" id="uIi{0Rn]*Tvg68AjQEg@">itm</field></block></value></block></value><next><block type="text_append" id="dMC%[m(4MHt4J`?Rur!J"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="yKj6ES*TfVIg:^Eh0-YC"><field name="TEXT"></field></shadow><block type="text" id="Y.5z!)wn`lrLa3l}[=%I"><field name="TEXT"> has invalid value </field></block></value><next><block type="text_append" id="fldKUwth~1E6;L?s1B0{"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="4g:i=rX[fJjeRy.^@NRs"><field name="TEXT"></field></shadow><block type="variables_get" id="4;x;Dhn!x.CyDMv:r(;{"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value><next><block type="text_append" id="Or!MSnoy*9L_O:tZeNB@"><field name="VAR" id="kG.3FSbyvZ]x]44@oWKc">msg</field><value name="TEXT"><shadow type="text" id="TT3nGLxOX{*]/;L*zv$/"><field name="TEXT"></field></shadow><block type="oh_text_crlf" id="Fr_6%=BET(F~y00lRObQ"></block></value><next><block type="variables_set" id="V.7dMswnH-.+RblS^CI}"><field name="VAR" id="cmb~y62qP`VuRD6Za{H%">err</field><value name="VALUE"><block type="logic_boolean" id="jmqnRJMxHy@(|De3eOjk"><field name="BOOL">TRUE</field></block></value><next><block type="oh_log" id="~,)ptWd*Trg{P-jpLuE("><field name="severity">info</field><value name="message"><shadow type="text" id="6YC.F.YW-%4--(@pJOIc"><field name="TEXT"></field></shadow><block type="text_join" id="v|?*cLpRO}A~}v^Qsc=N"><mutation items="2"></mutation><value name="ADD0"><block type="text" id="Q{ssO{cL6iDOXLKpVuPT"><field name="TEXT">  -&gt; invalid value</field></block></value><value name="ADD1"><block type="variables_get" id=",bX9iqb[8M:TC;f{pJd+"><field name="VAR" id="k8Bg[!ZftD%nHSX7va%`">val</field></block></value></block></value><next><block type="oh_event" id="SoN_2Z(@REdX]zXub`0Q"><field name="eventType">sendCommand</field><value name="value"><shadow type="text" id="cD%xB[lEuEbP:/.3tPKL"><field name="TEXT">value</field></shadow><block type="text_join" id="ZZhWO^uaktY6e$dHdfQy"><mutation items="2"></mutation><value name="ADD0"><block type="text" id="j2+Hk3|$;5HlkaMO3Yo#"><field name="TEXT">  -&gt; invalid value</field></block></value><value name="ADD1"><block type="variables_get" id="joA:J}} , it will remain the same.
2025-04-08 20:45:50.380 [WARN ] [automation.internal.RuleRegistryImpl] - Cannot find reference for {{input:timer_name}} , it will remain the same.
2025-04-08 20:45:50.380 [WARN ] [automation.internal.RuleRegistryImpl] - Cannot find reference for {{input:timer_name}} , it will remain the same.
2025-04-08 20:45:51.177 [INFO ] [.core.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
2025-04-08 20:45:52.421 [WARN ] [rg.openhab.core.io.net.exec.ExecUtil] - Failed to execute commandLine '[arping, --help]'
2025-04-08 20:45:52.446 [WARN ] [rg.openhab.core.io.net.exec.ExecUtil] - Failed to execute commandLine '[arping, --help]'
2025-04-08 20:45:52.551 [INFO ] [nternal.manager.ShellyManagerServlet] - Shelly Manager started at http(s)://192.168.1.9:8080/shelly/manager
2025-04-08 20:45:52.567 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Checking constructor public org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(org.openhab.core.io.net.http.HttpClientFactory,org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler)
2025-04-08 20:45:52.567 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.io.net.http.HttpClientFactory through loader of org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getClassFromComponentClassLoader: Found class org.openhab.core.io.net.http.HttpClientFactory
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler through loader of org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getClassFromComponentClassLoader: Found class org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Found constructor with 2 arguments : public org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(org.openhab.core.io.net.http.HttpClientFactory,org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler)
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : This thread collected dependencies
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getService (single component manager) dependencies collected.
2025-04-08 20:45:52.568 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state satisfied
2025-04-08 20:45:52.569 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Querying state satisfied
2025-04-08 20:45:52.569 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=300, service.bundleid=182, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=162}] service: [null]]]
2025-04-08 20:45:52.569 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : For dependency $001, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.auth.oauth2client.internal.OAuthStoreHandler}={service.id=384, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), CIPHER_TARGET=SymmetricKeyCipher, component.name=org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl, component.id=68}] service: [null]]]
2025-04-08 20:45:52.569 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2025-04-08 20:45:52.571 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Checking constructor public org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(org.openhab.core.storage.StorageService)
2025-04-08 20:45:52.571 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.storage.StorageService through loader of org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl
2025-04-08 20:45:52.571 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getClassFromComponentClassLoader: Found class org.openhab.core.storage.StorageService
2025-04-08 20:45:52.572 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Found constructor with 1 arguments : public org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(org.openhab.core.storage.StorageService)
2025-04-08 20:45:52.572 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getting bind: setStorageCipher
2025-04-08 20:45:52.572 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Locating method setStorageCipher in class org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl
2025-04-08 20:45:52.572 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : doFindMethod: Looking for method org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.setStorageCipher
2025-04-08 20:45:52.576 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Declared Method org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.setStorageCipher([interface org.osgi.framework.ServiceReference]) not found
2025-04-08 20:45:52.576 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Declared Method org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.setStorageCipher([interface org.osgi.service.component.ComponentServiceObjects]) not found
2025-04-08 20:45:52.576 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.auth.client.oauth2.StorageCipher through loader of org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl
2025-04-08 20:45:52.577 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getClassFromComponentClassLoader: Found class org.openhab.core.auth.client.oauth2.StorageCipher
2025-04-08 20:45:52.577 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : doFindMethod: No method taking ServiceReference found, checking method taking org.openhab.core.auth.client.oauth2.StorageCipher
2025-04-08 20:45:52.577 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : doFindMethod: Found Method protected synchronized void org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.setStorageCipher(org.openhab.core.auth.client.oauth2.StorageCipher)
2025-04-08 20:45:52.577 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Found bind method: protected synchronized void org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.setStorageCipher(org.openhab.core.auth.client.oauth2.StorageCipher)
2025-04-08 20:45:52.578 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Checking constructor public org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(org.osgi.service.cm.ConfigurationAdmin) throws java.security.NoSuchAlgorithmException,java.io.IOException
2025-04-08 20:45:52.578 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : getClassFromComponentClassLoader: Looking for interface class org.osgi.service.cm.ConfigurationAdmin through loader of org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher
2025-04-08 20:45:52.579 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : getClassFromComponentClassLoader: Found class org.osgi.service.cm.ConfigurationAdmin
2025-04-08 20:45:52.579 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Found constructor with 1 arguments : public org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(org.osgi.service.cm.ConfigurationAdmin) throws java.security.NoSuchAlgorithmException,java.io.IOException
2025-04-08 20:45:52.579 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : This thread collected dependencies
2025-04-08 20:45:52.579 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : getService (single component manager) dependencies collected.
2025-04-08 20:45:52.579 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state satisfied
2025-04-08 20:45:52.580 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Querying state satisfied
2025-04-08 20:45:52.580 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.cm.ConfigurationAdmin}={osgi.command.scope=cm, service.description=Configuration Admin Service Specification 1.6 Implementation, service.id=40, service.bundleid=12, service.scope=bundle, osgi.command.function=[getConfiguration,getFactoryConfiguration,listConfigurations,createFactoryConfiguration], service.vendor=The Apache Software Foundation, config.plugins=, service.pid=org.apache.felix.cm.ConfigurationAdmin}] service: [null]]]
2025-04-08 20:45:52.580 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2025-04-08 20:45:52.581 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - Encryption key loaded
2025-04-08 20:45:52.581 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : getting activate: activate
2025-04-08 20:45:52.581 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Locating method activate in class org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher
2025-04-08 20:45:52.581 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Declared Method org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:52.581 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Locating method activate in class java.lang.Object
2025-04-08 20:45:52.582 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Declared Method java.lang.Object.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:52.582 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : activate method [activate] not found, ignoring
2025-04-08 20:45:52.582 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Set implementation object for component
2025-04-08 20:45:52.582 [DEBUG] [t.internal.cipher.SymmetricKeyCipher] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher(69)] : Changed state from satisfied to active
2025-04-08 20:45:52.582 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : This thread collected dependencies
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getService (single component manager) dependencies collected.
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state satisfied
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Querying state satisfied
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.storage.StorageService}={backup_files=10, service.id=374, service.bundleid=220, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=256, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=[org.openhab.storage.json, org.openhab.storage.json]}] service: [null]]]
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : For dependency StorageCipher, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.auth.client.oauth2.StorageCipher}={service.id=224, service.bundleid=162, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher, component.id=69}] service: [org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher@19696243]]]
2025-04-08 20:45:52.583 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2025-04-08 20:45:52.587 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : invoking bind: setStorageCipher: parameters [org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher]
2025-04-08 20:45:52.588 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : invoked bind: setStorageCipher
2025-04-08 20:45:52.588 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : getting activate: activate
2025-04-08 20:45:52.588 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Locating method activate in class org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl
2025-04-08 20:45:52.588 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Declared Method org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:52.588 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Found activate method: public void org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl.activate(java.util.Map) throws java.security.GeneralSecurityException
2025-04-08 20:45:52.589 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.helper.ReadOnlyDictionary]
2025-04-08 20:45:52.590 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Using Cipher: org.openhab.core.auth.oauth2client.internal.cipher.SymmetricKeyCipher@19696243
2025-04-08 20:45:52.590 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : invoked activate: activate
2025-04-08 20:45:52.590 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Set implementation object for component
2025-04-08 20:45:52.590 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthStoreHandlerImpl(68)] : Changed state from satisfied to active
2025-04-08 20:45:52.590 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : getting activate: activate
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Locating method activate in class org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Declared Method org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Locating method activate in class java.lang.Object
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Declared Method java.lang.Object.activate([interface org.osgi.service.component.ComponentContext]) not found
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : activate method [activate] not found, ignoring
2025-04-08 20:45:52.591 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Set implementation object for component
2025-04-08 20:45:52.592 [DEBUG] [uth2client.internal.OAuthFactoryImpl] - bundle org.openhab.core.auth.oauth2client:4.3.4 (162)[org.openhab.core.auth.oauth2client.internal.OAuthFactoryImpl(67)] : Changed state from satisfied to active
2025-04-08 20:45:52.717 [WARN ] [ty.util.ssl.SslContextFactory.config] - Trusting all certificates configured for Client@6d8bd207[provider=null,keyStore=null,trustStore=null]
2025-04-08 20:45:52.717 [WARN ] [ty.util.ssl.SslContextFactory.config] - No Client EndPointIdentificationAlgorithm configured for Client@6d8bd207[provider=null,keyStore=null,trustStore=null]
2025-04-08 20:45:52.864 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2025-04-08 20:45:59.139 [INFO ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: Driver is available::Yank setupDataSource
2025-04-08 20:45:59.386 [INFO ] [ab.ui.habpanel.internal.HABPanelTile] - Started HABPanel at /habpanel
2025-04-08 20:46:04.224 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.230 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.242 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter grant_type, value refresh_token
2025-04-08 20:46:04.242 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter refresh_token, value vEnY07R5SClULYE-swcd5clHLsjQ7B7weAMuxo9evO6a3uMKdouN1epLt23QpFg0
2025-04-08 20:46:04.242 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter scope, value offline_access
2025-04-08 20:46:04.242 [DEBUG] [oauth2client.internal.OAuthConnector] - Setting authentication for clientId 1bb50063-6b0c-4d11-bd99-387f4a91cc46. Using basic auth false
2025-04-08 20:46:04.420 [ERROR] [oauth2client.internal.OAuthConnector] - grant type refresh_token to URL https://login.tado.com/oauth2/token failed with error code invalid_grant, description The refresh_token is invalid.
2025-04-08 20:46:04.427 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.428 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.437 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter grant_type, value refresh_token
2025-04-08 20:46:04.437 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter refresh_token, value vEnY07R5SClULYE-swcd5clHLsjQ7B7weAMuxo9evO6a3uMKdouN1epLt23QpFg0
2025-04-08 20:46:04.438 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter scope, value offline_access
2025-04-08 20:46:04.438 [DEBUG] [oauth2client.internal.OAuthConnector] - Setting authentication for clientId 1bb50063-6b0c-4d11-bd99-387f4a91cc46. Using basic auth false
2025-04-08 20:46:04.555 [ERROR] [oauth2client.internal.OAuthConnector] - grant type refresh_token to URL https://login.tado.com/oauth2/token failed with error code invalid_grant, description The refresh_token is invalid.
2025-04-08 20:46:04.558 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.559 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:04.567 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter grant_type, value refresh_token
2025-04-08 20:46:04.567 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter refresh_token, value vEnY07R5SClULYE-swcd5clHLsjQ7B7weAMuxo9evO6a3uMKdouN1epLt23QpFg0
2025-04-08 20:46:04.567 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter scope, value offline_access
2025-04-08 20:46:04.568 [DEBUG] [oauth2client.internal.OAuthConnector] - Setting authentication for clientId 1bb50063-6b0c-4d11-bd99-387f4a91cc46. Using basic auth false
2025-04-08 20:46:04.682 [ERROR] [oauth2client.internal.OAuthConnector] - grant type refresh_token to URL https://login.tado.com/oauth2/token failed with error code invalid_grant, description The refresh_token is invalid.
2025-04-08 20:46:04.807 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.1.9' with clientid 2acde997-ee03-44a3-9940-931192e199a2
2025-04-08 20:46:04.822 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
2025-04-08 20:46:04.867 [INFO ] [ternal.dhcp.DHCPPacketListenerServer] - DHCP request packet listener online
2025-04-08 20:46:05.005 [WARN ] [ado.internal.handler.TadoHomeHandler] - Error setting home presence: Missing the required parameter 'homeId' when calling updatePresenceLock
org.openhab.binding.tado.swagger.codegen.api.ApiException: Missing the required parameter 'homeId' when calling updatePresenceLock
	at org.openhab.binding.tado.swagger.codegen.api.client.HomeApi.updatePresenceLock(HomeApi.java:518) ~[bundleFile:?]
	at org.openhab.binding.tado.internal.handler.TadoHomeHandler.handleCommand(TadoHomeHandler.java:230) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [bundleFile:?]
	at jdk.proxy1651.$Proxy1776.handleCommand(Unknown Source) [?:?]
	at org.openhab.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:95) [bundleFile:?]
	at org.openhab.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-04-08 20:46:06.078 [WARN ] [ado.internal.handler.TadoHomeHandler] - Error setting home presence: Missing the required parameter 'homeId' when calling updatePresenceLock
org.openhab.binding.tado.swagger.codegen.api.ApiException: Missing the required parameter 'homeId' when calling updatePresenceLock
	at org.openhab.binding.tado.swagger.codegen.api.client.HomeApi.updatePresenceLock(HomeApi.java:518) ~[bundleFile:?]
	at org.openhab.binding.tado.internal.handler.TadoHomeHandler.handleCommand(TadoHomeHandler.java:230) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [bundleFile:?]
	at jdk.proxy1759.$Proxy1886.handleCommand(Unknown Source) [?:?]
	at org.openhab.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:95) [bundleFile:?]
	at org.openhab.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-04-08 20:46:07.044 [WARN ] [ado.internal.handler.TadoHomeHandler] - Error setting home presence: Missing the required parameter 'homeId' when calling updatePresenceLock
org.openhab.binding.tado.swagger.codegen.api.ApiException: Missing the required parameter 'homeId' when calling updatePresenceLock
	at org.openhab.binding.tado.swagger.codegen.api.client.HomeApi.updatePresenceLock(HomeApi.java:518) ~[bundleFile:?]
	at org.openhab.binding.tado.internal.handler.TadoHomeHandler.handleCommand(TadoHomeHandler.java:230) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [bundleFile:?]
	at jdk.proxy1786.$Proxy1913.handleCommand(Unknown Source) [?:?]
	at org.openhab.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:95) [bundleFile:?]
	at org.openhab.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-04-08 20:46:08.052 [WARN ] [ado.internal.handler.TadoHomeHandler] - Error setting home presence: Missing the required parameter 'homeId' when calling updatePresenceLock
org.openhab.binding.tado.swagger.codegen.api.ApiException: Missing the required parameter 'homeId' when calling updatePresenceLock
	at org.openhab.binding.tado.swagger.codegen.api.client.HomeApi.updatePresenceLock(HomeApi.java:518) ~[bundleFile:?]
	at org.openhab.binding.tado.internal.handler.TadoHomeHandler.handleCommand(TadoHomeHandler.java:230) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [bundleFile:?]
	at jdk.proxy1787.$Proxy1914.handleCommand(Unknown Source) [?:?]
	at org.openhab.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:95) [bundleFile:?]
	at org.openhab.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:147) [bundleFile:?]
	at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-04-08 20:46:19.430 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::store: Unable to store item
org.openhab.persistence.jdbc.internal.exceptions.JdbcSQLException: Error in SQL query!!!; (conn=27) Incorrect table name 'biestropenweathermapweather_forecasthours01_precipprobability_2006' Query: INSERT INTO biestropenweathermapweather_forecasthours01_precipprobability_2006 (time, value) VALUES( NOW(3), ? ) ON DUPLICATE KEY UPDATE VALUE= ? Parameters: [0.0, 0.0]; Pool Name= yank-default; SQL= INSERT INTO biestropenweathermapweather_forecasthours01_precipprobability_2006 (time, value) VALUES( NOW(3), ? ) ON DUPLICATE KEY UPDATE VALUE= ?
	at org.openhab.persistence.jdbc.internal.db.JdbcBaseDAO.doStoreItemValue(JdbcBaseDAO.java:441) ~[?:?]
	at org.openhab.persistence.jdbc.internal.JdbcMapper.storeItemValue(JdbcMapper.java:220) ~[?:?]
	at org.openhab.persistence.jdbc.internal.JdbcPersistenceService.internalStore(JdbcPersistenceService.java:174) ~[?:?]
	at org.openhab.persistence.jdbc.internal.JdbcPersistenceService.lambda$1(JdbcPersistenceService.java:146) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-04-08 20:46:24.769 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:24.770 [DEBUG] [lient.internal.OAuthStoreHandlerImpl] - Decrypting: AccessTokenResponse [accessToken=iLnFgKtXXhL/lR4em1Fbd6CHhE1ZDpU/dXnf7369YSugoa/BoWu6NYOHQgMxIlm9HYvCqW5VsuD+z4sGSJp/8ZVdpiw4kLxpdP7mVMRq4OdY/JqE41wnQhF34zUclIrtfjnYAx3cemEY5NrD8u3SdPLAplq90ztLI/zmeT2BQyXGpWRKCdzQVCglMKaj45YeZbpWhhhfqEpKZOul/xaKn0HvgGh+GYYSnE2srclsgKv1Fj+sJHSCl7IHkm76D9EbCQ0DyBk4+ukzbmUdLZnQJSiG/oObhuvOMjj/9NRDeRJYOVg7B5gqRqTqrJmgIFPx6MkKRPZ2rAGVlnScMLZR+hlF9rVb2qDmGY929cIXfHnXuqZNHceRr9sHI92Lfi0EDBOIOOJl5f+UowKz/E2z25Jhy6zg4TKguLrWCAhcl+XWcCrqUqldZ6AmfGhNqRRZUOAwaI4D2Rtj+w0Mi2+z92JkwCO5/67bxfi60OjJhyVXySXk/9OAyVgN4HPOzCjS//pkRKtFIDycb6dXFSTJU9+6Ak7DiMmZrICC/9u/B1R6DKuXXU6ZXgnL6hiESclL1gDSrEUdGqrRtXC8HSgQbZR+TDPgdFlxbVA4Gmv6XxLB6/NDs6GEZSH3Zo/wtEt7OHr9sVW5jYaATjpKqAi6825i+qQI5jFhbE1ibfB/JKsW1V0UmhG2sTWK4107ETPB0Ft3IpWjJkebLPVzpuFZWgVHMiLU/+hyhTqyqCuD2GtU7SHxHU0baYxHMSRohbjkakNRYToO4FaZsuA8K3P0aX/02efxZgYf/IlGBUJX5t8nfOPJ1cKBvWtpIOQ9+/EsBDxBIAVbgKRlw332FS0BhFwwykc/EM62MD7UPhUH5InLQFyouGF38hqeo9CMUi3ysiOvy71lAhDJAlEjJADE5Ko82xr8GsmRHjtFOJX2LHY07ZY5U6QRDoHTO2Y+FThBjxtX/H0+ZqHQPW8sJogIR/7h1DKEzArb2ZUPre1/+Zb0gEcdAYf4jM3tyQSQoZYodEKLb5AzKELn9W+cG+rTOy5q1tMEuWhPhlZiUtJoXslYwLjeZfmA9FdRjz+spyIKPGE0kRB0f0b1ksqXpI15Sa04ru0k824B5bsoHpYJRZ80OkVHTBvKNznj4u+azxLwyTm6umBdB/hzCvJucBlKv6cPRnfQifB9B2+HottGvgK/YSvVHMhmWwqUr63sQkUXS4CH8+mBbG3bAczRk5BVPn6xeXSx+91KJVhH29rWbiOTq0zpQkRiqqfZczkrypt4VMB6UxZSMTxlcxi48cEGL0FybcNWSlpkJDASPB6fKVGFT34MVPtD6/2wMAUh6sToplB2GRVE0bEy0K2IY2T96+ke0fP+i0NkgNGKsBCT59iTmiGoux3wYhAj1JFaXh9AxuLxuVXT0KqOiVr+BOdejbXDRSLZxGSyMycs2BUTxMknm+JKKOVLPmRG+afFr+rGwcJ/ojD0/FsAKAxM/8kPX1wBdIVtLkf3Rx3GF+UX4x1cFsBPtAnaClL4QtfyiYhwIJmScEzEoAqBfAb5jyUscxf4V3NX+Nq0qE1b0uJlJz1bBy1vIEfAOPeVC7Ncfn/EKMmnm+lHUsJi3yhlq9FER9Bi6nXwDjoxqigJSKquwtP1bYI1OEcE077FpP8dUsfqene78GNO6N/FalkTvW+gM4Sv6dcrz+kizAXaATa9SKslcdUND2Y6MdbytPMlFGues87SUA32AJTxgNffXoHw3Q==, tokenType=Bearer, expiresIn=600, refreshToken=XNWHEnDMpKH8+2HAOOhO17El8VS6QYpAIJWHf/mT/g5ftDsq9e5hQ6Q1TBa7VZ4toi1EzUJoRrKb1og033XkiGasLV/ZXKi6gmAXjkaTenOvmdOINqdYBK2mBDxfQN+u, scope=offline_access, state=null, createdOn=2025-04-07T17:21:54.881398500Z]
2025-04-08 20:46:24.775 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter grant_type, value refresh_token
2025-04-08 20:46:24.776 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter refresh_token, value vEnY07R5SClULYE-swcd5clHLsjQ7B7weAMuxo9evO6a3uMKdouN1epLt23QpFg0
2025-04-08 20:46:24.776 [DEBUG] [oauth2client.internal.OAuthConnector] - Oauth request parameter scope, value offline_access
2025-04-08 20:46:24.776 [DEBUG] [oauth2client.internal.OAuthConnector] - Setting authentication for clientId 1bb50063-6b0c-4d11-bd99-387f4a91cc46. Using basic auth false
2025-04-08 20:46:24.942 [ERROR] [oauth2client.internal.OAuthConnector] - grant type refresh_token to URL https://login.tado.com/oauth2/token failed with error code invalid_grant, description The refresh_token is invalid.
2025-04-08 20:46:24.944 [DEBUG] [.internal.handler.TadoHandlerFactory] - getAccessTokenResponse() error null
org.openhab.core.auth.client.oauth2.OAuthResponseException: null
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[?:?]
	at com.google.gson.internal.ConstructorConstructor$9.construct(ConstructorConstructor.java:262) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.createAccumulator(ReflectiveTypeAdapterFactory.java:427) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:383) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1227) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:982) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthConnector.doRequest(OAuthConnector.java:340) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthConnector.grantTypeRefreshToken(OAuthConnector.java:200) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthClientServiceImpl.refreshToken(OAuthClientServiceImpl.java:318) ~[?:?]
	at org.openhab.core.auth.oauth2client.internal.OAuthClientServiceImpl.getAccessTokenResponse(OAuthClientServiceImpl.java:352) ~[?:?]
	at org.openhab.binding.tado.internal.handler.TadoHandlerFactory.getAccessTokenResponse(TadoHandlerFactory.java:205) ~[?:?]
	at org.openhab.binding.tado.internal.servlet.TadoAuthenticationServlet.serveStatusPage(TadoAuthenticationServlet.java:109) ~[?:?]
	at org.openhab.binding.tado.internal.servlet.TadoAuthenticationServlet.doGet(TadoAuthenticationServlet.java:83) ~[?:?]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) ~[bundleFile:4.0.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[bundleFile:4.0.4]
	at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) ~[bundleFile:?]
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[bundleFile:9.4.54.v20240208]
	at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:113) ~[bundleFile:?]
	at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:334) ~[bundleFile:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.54.v20240208]
	at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) ~[bundleFile:?]
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:731) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.54.v20240208]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.54.v20240208]
	at java.lang.Thread.run(Thread.java:840) [?:?]
`
author_association: NONE
user: login: andrewfg
created_at: 2025-04-08T19:14:53Z
body: Your refresh token is trashed. So you will need to manually erase it. There is a file `\\OPENHABIAN\openHAB-userdata\jsondb\StorageHandler.For.OAuthClientService.json` where you should delete the tado:home entries. You should stop OH then edit the file, then restart again. Make a backup just in case.
author_association: CONTRIBUTOR
user: login: openhab-bot
created_at: 2025-04-08T21:54:41Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/oh-5-0-0-snapshot-some-bindings-with-external-connectivty-stop-working/163570/2

author_association: COLLABORATOR
user: login: andrewfg
created_at: 2025-04-10T02:38:51Z
body: @andypmuc please see this post https://community.openhab.org/t/tado-authentication/163276/71
author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-11T15:42:29Z
body: Now it works.
To explain my problem better, I have two networks 192.168.0.x and 192.168.1.x. Openhab is running on 192.168.1.x and one TadoBridge in 192.168.1.x, two other bridges in 192.168.0.x and the networks are connected via Wireshark VPN of two Fritzboxes. The bridge in 192.168.1.x is found, is there a way to add the two bridges in 192.168.0.x?

I have the two bridges in, because I have them from my old configuration, but I lost two zones and there is no way to get their ID or scan for them (I deleted them because of com problems). When I set up a new Openhab, I do not have the possibility to add anything from the other network, does this request solve this?
author_association: NONE
user: login: lsiepel
created_at: 2025-04-11T16:58:38Z
body: Well, that is more or less generic networking. openHAB can add any devices as long as it is able to connect to it.
Auto discovery might be a problem for those remote networks, not sure. So you might need to find the remote ip address, a different way. 
author_association: CONTRIBUTOR
user: login: andrewfg
created_at: 2025-04-11T18:40:38Z
body: > is there a way to add the two bridges

If both Tado hubs present themselves on your network then the OH discovery will find them and put them in the inbox. (If not then you have a LAN routing issue that is unrelated to this thread).

Normally when you only have one Tado hub it is only necessary to set the `useRfc8628` configuration parameter to cause RFC-8628 authentication. But if you have more than one hub, it needs a marker to differentiate between them, so you must also configure `rfcWithUser` and account `username` separately for each hub. And when you authenticate via the servlet remember to login with that respective account user name.

https://github.com/openhab/openhab-addons/blob/9f4d367efc37a471d1527f8572b291f9e7efcffd/bundles/org.openhab.binding.tado/README.md#home-thing-the-bridge
author_association: CONTRIBUTOR
user: login: andypmuc
created_at: 2025-04-12T21:06:39Z
body: I think I wait for the rfcWithUser feature, this will solve it easily.
author_association: NONE
user: login: openhab-bot
created_at: 2025-04-15T13:25:25Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/many-items-stop-responding-after-a-while-since-upgrade-to-oh-4-3-4/163498/30

author_association: COLLABORATOR
user: login: andrewfg
created_at: 2025-05-12T16:37:30Z
body: @lolodomo I think this one is ready to merge. (It has been verified by @OlduwanSteve and @andypmuc)
author_association: CONTRIBUTOR
user: login: openhab-bot
created_at: 2025-05-13T08:31:23Z
body: This pull request has been mentioned on **openHAB Community**. There might be relevant details there:

https://community.openhab.org/t/tado-add-on-only-works-with-one-bridge-since-openhab-version-4-3-4/164042/2

author_association: COLLABORATOR