]> git.basschouten.com Git - openhab-addons.git/commitdiff
[Netatmo] Floodlight issue on Presence Camera (#14492)
authorGaël L'hopital <gael@lhopital.org>
Mon, 27 Feb 2023 07:59:20 +0000 (08:59 +0100)
committerGitHub <noreply@github.com>
Mon, 27 Feb 2023 07:59:20 +0000 (08:59 +0100)
* Solving issue #14458

Signed-off-by: clinique <gael@lhopital.org>
* Removes the usage of "app.netatmo.net" since api now holds these entry points.
I think it was the origin of malfunction of floodlight (to be controlled by somebody who has one).

--------

Signed-off-by: clinique <gael@lhopital.org>
bundles/org.openhab.binding.netatmo/README.md
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/AuthenticationApi.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/EnergyApi.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/RestManager.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/SecurityApi.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/data/NetatmoConstants.java
bundles/org.openhab.binding.netatmo/src/main/resources/OH-INF/thing/channels.xml

index 7ec8be86b0c6b715ab55b0ceecfc403bf6433101..f0def84b734b4444bd0be79d35c050cd8659637c 100644 (file)
@@ -537,7 +537,7 @@ Warnings:
 | live          | vpn-stream-url (*)   | String       | Read-only  | Url of the live stream for this camera through Netatmo VPN.                                                                                 |
 | signal        | strength             | Number       | Read-only  | Signal strength (0 for no signal, 1 for weak...)                                                                                            |
 | signal        | value                | Number:Power | Read-only  | Signal strength in dBm                                                                                                                      |
-| presence      | floodlight           | Switch       | Read-write | Sets the floodlight to ON/OFF/AUTO                                                                                                          |
+| presence      | floodlight           | String       | Read-write | Sets the floodlight to ON/OFF/AUTO                                                                                                          |
 | last-event    | type                 | String       | Read-only  | Type of event                                                                                                                               |
 | last-event    | subtype              | String       | Read-only  | Sub-type of event                                                                                                                           |
 | last-event    | time                 | DateTime     | Read-only  | Time of occurrence of event                                                                                                                 |
index 869f33b637066ce9d3494e5b61ad0ea578d9f316..91cc30c208e2c4d9004390261a380328517319c9 100644 (file)
@@ -43,9 +43,8 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class AuthenticationApi extends RestManager {
-    private static final UriBuilder OAUTH_BUILDER = getApiBaseBuilder().path(PATH_OAUTH);
-    private static final UriBuilder AUTH_BUILDER = OAUTH_BUILDER.clone().path(SUB_PATH_AUTHORIZE);
-    private static final URI TOKEN_URI = OAUTH_BUILDER.clone().path(SUB_PATH_TOKEN).build();
+    private static final UriBuilder AUTH_BUILDER = getApiBaseBuilder(PATH_OAUTH, SUB_PATH_AUTHORIZE);
+    private static final URI TOKEN_URI = getApiBaseBuilder(PATH_OAUTH, SUB_PATH_TOKEN).build();
 
     private final Logger logger = LoggerFactory.getLogger(AuthenticationApi.class);
     private final ScheduledExecutorService scheduler;
index 95f2301792694e3165b8fa5e047edf2fec00ba9c..23d580678839e4269f2390b82ef520f1e298cb06 100644 (file)
@@ -45,7 +45,7 @@ public class EnergyApi extends RestManager {
      *             response body
      */
     public void switchSchedule(String homeId, String scheduleId) throws NetatmoException {
-        UriBuilder uriBuilder = getAppUriBuilder(SUB_PATH_SWITCH_SCHEDULE, PARAM_HOME_ID, homeId, PARAM_SCHEDULE_ID,
+        UriBuilder uriBuilder = getApiUriBuilder(SUB_PATH_SWITCH_SCHEDULE, PARAM_HOME_ID, homeId, PARAM_SCHEDULE_ID,
                 scheduleId);
         post(uriBuilder, ApiResponse.Ok.class, null);
     }
index aacbdedfa43dd2ad30950d672617d05bec5fd650..398265f412d88c81a33212bf5da22b89aa4f7d1b 100644 (file)
@@ -19,6 +19,7 @@ import java.net.URI;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.ws.rs.core.UriBuilder;
 
@@ -36,9 +37,7 @@ import org.openhab.binding.netatmo.internal.handler.ApiBridgeHandler;
  */
 @NonNullByDefault
 public abstract class RestManager {
-    private static final UriBuilder API_BASE_BUILDER = UriBuilder.fromUri(URL_API);
-    private static final UriBuilder APP_URI_BUILDER = UriBuilder.fromUri(URL_APP).path(PATH_API);
-    private static final UriBuilder API_URI_BUILDER = getApiBaseBuilder().path(PATH_API);
+    private static final UriBuilder API_URI_BUILDER = getApiBaseBuilder(PATH_API);
 
     private final Set<Scope> requiredScopes;
     private final ApiBridgeHandler apiBridge;
@@ -76,11 +75,11 @@ public abstract class RestManager {
             throw new IllegalArgumentException("appendParams : params count must be even");
         }
         for (int i = 0; i < params.length; i += 2) {
-            Object query = params[i];
-            if (query instanceof String) {
-                Object param = params[i + 1];
-                if (param != null) {
-                    builder.queryParam((String) query, param);
+            Object param1 = params[i];
+            Object param2 = params[i + 1];
+            if (param1 instanceof String query) {
+                if (param2 != null) { // or else just ignore this query element
+                    builder.queryParam(query, param2);
                 }
             } else {
                 throw new IllegalArgumentException("appendParams : even parameters must be Strings");
@@ -89,18 +88,16 @@ public abstract class RestManager {
         return builder;
     }
 
-    protected static UriBuilder getApiBaseBuilder() {
-        return API_BASE_BUILDER.clone();
+    protected static UriBuilder getApiBaseBuilder(String... paths) {
+        UriBuilder builder = UriBuilder.fromUri(URL_API);
+        Stream.of(paths).forEach(path -> builder.path(path));
+        return builder;
     }
 
     public static UriBuilder getApiUriBuilder(String path, @Nullable Object... params) {
         return appendParams(API_URI_BUILDER.clone().path(path), params);
     }
 
-    protected static UriBuilder getAppUriBuilder(String path, @Nullable Object... params) {
-        return appendParams(APP_URI_BUILDER.clone().path(path), params);
-    }
-
     private String toRequest(Map<String, String> entries) {
         return entries.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
     }
index cb3c4f4246fabaeecfc976122d29b536752a075f..8acaef8c72e08ce618fc311e0ddbba3a121c1dc4 100644 (file)
@@ -122,13 +122,13 @@ public class SecurityApi extends RestManager {
     }
 
     public void changeFloodLightMode(String homeId, String cameraId, FloodLightMode mode) throws NetatmoException {
-        UriBuilder uriBuilder = getAppUriBuilder(PATH_STATE);
-        String payload = String.format(PAYLOAD_FLOODLIGHT, homeId, cameraId, mode.name().toLowerCase());
+        UriBuilder uriBuilder = getApiUriBuilder(PATH_STATE);
+        String payload = PAYLOAD_FLOODLIGHT.formatted(homeId, cameraId, mode.name().toLowerCase());
         post(uriBuilder, ApiResponse.Ok.class, payload);
     }
 
     public void setPersonAwayStatus(String homeId, String personId, boolean away) throws NetatmoException {
-        UriBuilder uriBuilder = getAppUriBuilder(away ? SUB_PATH_PERSON_AWAY : SUB_PATH_PERSON_HOME);
+        UriBuilder uriBuilder = getApiUriBuilder(away ? SUB_PATH_PERSON_AWAY : SUB_PATH_PERSON_HOME);
         String payload = String.format(away ? PAYLOAD_PERSON_AWAY : PAYLOAD_PERSON_HOME, homeId, personId);
         post(uriBuilder, ApiResponse.Ok.class, payload);
     }
index 2066d0adb915f96a6de817de974c9ef661ea5e44..c805180223b1db7042a7870ce5f866e3f3b97dc4 100644 (file)
@@ -120,7 +120,6 @@ public class NetatmoConstants {
 
     // Netatmo API urls
     public static final String URL_API = "https://api.netatmo.com/";
-    public static final String URL_APP = "https://app.netatmo.net/";
     public static final String PATH_OAUTH = "oauth2";
     public static final String SUB_PATH_TOKEN = "token";
     public static final String SUB_PATH_AUTHORIZE = "authorize";
index 7599a195835e2386cb3a08a38367f098f8224bd6..97efdce8269c50d91d10c1a8918ad7ae45b00c73 100644 (file)
                <item-type>String</item-type>
                <label>Floodlight</label>
                <description>State of the floodlight (On/Off/Auto)</description>
+               <category>Lightbulb</category>
                <state pattern="%s">
                        <options>
                                <option value="ON">On</option>