]> git.basschouten.com Git - openhab-addons.git/commitdiff
[netatmo] Floodlight switch repaired (#12743)
authorSven Strohschein <novanic@gmx.de>
Mon, 16 May 2022 07:28:44 +0000 (09:28 +0200)
committerGitHub <noreply@github.com>
Mon, 16 May 2022 07:28:44 +0000 (09:28 +0200)
* [netatmo] Floodlight switch repaired

Signed-off-by: Sven Strohschein <sven.strohschein@gmail.com>
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/java/org/openhab/binding/netatmo/internal/handler/capability/PresenceCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/SecurityCapability.java

index 3640144ff4902f6276c92e9e3a33a6c1d97c6eec..3b497711787c8b0e0a2a52ab7d5967da0f8017d7 100644 (file)
@@ -101,10 +101,12 @@ public class SecurityApi extends RestManager {
         post(uriBuilder, ApiResponse.Ok.class, null, null);
     }
 
-    public void changeFloodLightMode(String localCameraURL, FloodLightMode mode) throws NetatmoException {
-        UriBuilder uriBuilder = UriBuilder.fromUri(localCameraURL).path(PATH_COMMAND).path(SUB_PATH_FLOODLIGHTSET);
-        uriBuilder.queryParam("config", "%7B%22mode%22:%22" + mode.toString() + "%22%7D");
-        get(uriBuilder, ApiResponse.Ok.class);
+    public void changeFloodLightMode(String homeId, String cameraId, FloodLightMode mode) throws NetatmoException {
+        UriBuilder uriBuilder = getAppUriBuilder(PATH_STATE);
+        String payload = String.format(
+                "{\"home\": {\"id\":\"%s\",\"modules\": [ {\"id\":\"%s\",\"floodlight\":\"%s\"} ]}}", homeId, cameraId,
+                mode.name().toLowerCase());
+        post(uriBuilder, ApiResponse.Ok.class, payload, "application/json;charset=utf-8");
     }
 
     public void setPersonAwayStatus(String homeId, String personId, boolean away) throws NetatmoException {
index 65829a0e18c88571dcbfa89e80cad6d121005a9c..1a066b9a51418964e7723e2bf41d21dca56a972f 100644 (file)
@@ -119,6 +119,7 @@ public class NetatmoConstants {
     public static final String PATH_OAUTH = "oauth2/token";
     public static final String PATH_API = "api";
     public static final String PATH_COMMAND = "command";
+    public static final String PATH_STATE = "setstate";
     public static final String SUB_PATH_PERSON_AWAY = "setpersonsaway";
     public static final String SUB_PATH_PERSON_HOME = "setpersonshome";
     public static final String SUB_PATH_HOMES_DATA = "homesdata";
@@ -134,7 +135,6 @@ public class NetatmoConstants {
     public static final String SUB_PATH_GETEVENTS = "getevents";
     public static final String SUB_PATH_PING = "ping";
     public static final String SUB_PATH_CHANGESTATUS = "changestatus";
-    public static final String SUB_PATH_FLOODLIGHTSET = "floodlight_set_config";
     public static final String PARAM_DEVICEID = "device_id";
     public static final String PARAM_MODULEID = "module_id";
     public static final String PARAM_HOMEID = "home_id";
index d800dccf59f444e1425699f4eed0e0d3d0e93b0c..6b381782c0827f6daf9051986e4713fd313bd4bb 100644 (file)
@@ -62,6 +62,6 @@ public class PresenceCapability extends CameraCapability {
     }
 
     private void changeFloodlightMode(FloodLightMode mode) {
-        securityCapability.ifPresent(cap -> cap.changeFloodlightMode(localUrl, mode));
+        securityCapability.ifPresent(cap -> cap.changeFloodlightMode(handler.getId(), mode));
     }
 }
index 80e0c0fbfd4e8c43f865da6a2cbcc17099f0cf2f..b488348dd858159aaf3411f80914350ce6cc671c 100644 (file)
@@ -158,14 +158,10 @@ class SecurityCapability extends RestCapability<SecurityApi> {
         });
     }
 
-    public void changeFloodlightMode(@Nullable String localURL, FloodLightMode mode) {
-        if (localURL == null) {
-            logger.info("Changing floodlight mode can only be done on local camera.");
-            return;
-        }
+    public void changeFloodlightMode(String cameraId, FloodLightMode mode) {
         getApi().ifPresent(api -> {
             try {
-                api.changeFloodLightMode(localURL, mode);
+                api.changeFloodLightMode(handler.getId(), cameraId, mode);
                 handler.expireData();
             } catch (NetatmoException e) {
                 logger.warn("Error changing Presence floodlight mode '{}' : {}", mode, e.getMessage());