]> git.basschouten.com Git - openhab-addons.git/commitdiff
Fix NUPnP discovery after firmware change (#15622)
authorJacob Laursen <jacob-github@vindvejr.dk>
Sat, 23 Sep 2023 17:05:32 +0000 (19:05 +0200)
committerGitHub <noreply@github.com>
Sat, 23 Sep 2023 17:05:32 +0000 (19:05 +0200)
Fixes #15598

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/discovery/HueBridgeNupnpDiscovery.java
itests/org.openhab.binding.hue.tests/src/main/java/org/openhab/binding/hue/internal/discovery/HueBridgeNupnpDiscoveryOSGITest.java

index 9c3f3e3e787933d243f9a8c7b2aa93bbce1d69f9..d150319d08ddf16cfeefa32779d1252155182c96 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.hue.internal.discovery;
 import static org.openhab.binding.hue.internal.HueBindingConstants.*;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -55,7 +56,7 @@ public class HueBridgeNupnpDiscovery extends AbstractDiscoveryService {
 
     protected static final String BRIDGE_INDICATOR = "fffe";
 
-    private static final String MODEL_NAME_PHILIPS_HUE = "\"name\":\"Philips hue\"";
+    private static final String[] MODEL_NAME_PHILIPS_HUE = { "\"name\":\"Hue Bridge\"", "\"name\":\"Philips hue\"" };
     private static final String DISCOVERY_URL = "https://discovery.meethue.com/";
     private static final String CONFIG_URL_PATTERN = "http://%s/api/0/config";
     private static final int REQUEST_TIMEOUT = 5000;
@@ -156,7 +157,7 @@ public class HueBridgeNupnpDiscovery extends AbstractDiscoveryService {
             logger.debug("Bridge not discovered: Failure accessing description file for ip: {}", host);
             return false;
         }
-        if (description == null || !description.contains(MODEL_NAME_PHILIPS_HUE)) {
+        if (description == null || !Arrays.stream(MODEL_NAME_PHILIPS_HUE).anyMatch(description::contains)) {
             logger.debug("Bridge not discovered: Description does not contain the model name: {}", description);
             return false;
         }
index 164c287cc7c329003d49f1761aea2f4274ba3f58..2ce1a5f0d528cc5f33c813c3b831e74aa4e9390c 100644 (file)
@@ -55,15 +55,20 @@ public class HueBridgeNupnpDiscoveryOSGITest extends JavaOSGiTest {
     private static final ThingTypeUID BRIDGE_THING_TYPE_UID = new ThingTypeUID("hue", "bridge");
     private static final String IP1 = "192.168.31.17";
     private static final String IP2 = "192.168.30.28";
+    private static final String IP3 = "192.168.30.29";
     private static final String SN1 = "001788fffe20057f";
     private static final String SN2 = "001788fffe141b41";
+    private static final String SN3 = "001788fffe141b42";
     private static final ThingUID BRIDGE_THING_UID_1 = new ThingUID(BRIDGE_THING_TYPE_UID, SN1);
     private static final ThingUID BRIDGE_THING_UID_2 = new ThingUID(BRIDGE_THING_TYPE_UID, SN2);
+    private static final ThingUID BRIDGE_THING_UID_3 = new ThingUID(BRIDGE_THING_TYPE_UID, SN3);
 
     private final String validBridgeDiscoveryResult = "[{\"id\":\"" + SN1 + "\",\"internalipaddress\":" + IP1
-            + "},{\"id\":\"" + SN2 + "\",\"internalipaddress\":" + IP2 + "}]";
+            + "},{\"id\":\"" + SN2 + "\",\"internalipaddress\":" + IP2 + "},{\"id\":\"" + SN3
+            + "\",\"internalipaddress\":" + IP3 + "}]";
     private @Nullable String discoveryResult;
-    private String expBridgeDescription = "{\"name\":\"Philips hue\",\"datastoreversion\":\"149\",\"swversion\":\"1957113050\",\"apiversion\":\"1.57.0\",\"mac\":\"00:11:22:33:44\",\"bridgeid\":\"$SN\",\"factorynew\":false,\"replacesbridgeid\":null,\"modelid\":\"BSB002\",\"starterkitid\":\"\"}";
+    private String expBridgeDescription1 = "{\"name\":\"Philips hue\",\"datastoreversion\":\"149\",\"swversion\":\"1957113050\",\"apiversion\":\"1.57.0\",\"mac\":\"00:11:22:33:44\",\"bridgeid\":\"$SN\",\"factorynew\":false,\"replacesbridgeid\":null,\"modelid\":\"BSB002\",\"starterkitid\":\"\"}";
+    private String expBridgeDescription2 = "{\"name\":\"Hue Bridge\",\"datastoreversion\":\"161\",\"swversion\":\"1959194040\",\"apiversion\":\"1.59.0\",\"mac\":\"00:11:22:33:44\",\"bridgeid\":\"$SN\",\"factorynew\":false,\"replacesbridgeid\":null,\"modelid\":\"BSB002\",\"starterkitid\":\"\"}";
 
     private void checkDiscoveryResult(@Nullable DiscoveryResult result, String expIp, String expSn) {
         if (result == null) {
@@ -98,9 +103,11 @@ public class HueBridgeNupnpDiscoveryOSGITest extends JavaOSGiTest {
             if (url.contains("meethue")) {
                 return discoveryResult;
             } else if (url.contains(IP1)) {
-                return expBridgeDescription.replaceAll("$SN", SN1);
+                return expBridgeDescription1.replaceAll("$SN", SN1);
             } else if (url.contains(IP2)) {
-                return expBridgeDescription.replaceAll("$SN", SN2);
+                return expBridgeDescription1.replaceAll("$SN", SN2);
+            } else if (url.contains(IP3)) {
+                return expBridgeDescription2.replaceAll("$SN", SN3);
             }
             throw new IOException();
         }
@@ -162,20 +169,24 @@ public class HueBridgeNupnpDiscoveryOSGITest extends JavaOSGiTest {
         sut.startScan();
 
         waitForAssert(() -> {
-            assertThat(results.size(), is(2));
+            assertThat(results.size(), is(3));
             assertThat(results.get(BRIDGE_THING_UID_1), is(notNullValue()));
             checkDiscoveryResult(results.get(BRIDGE_THING_UID_1), IP1, SN1);
             assertThat(results.get(BRIDGE_THING_UID_2), is(notNullValue()));
             checkDiscoveryResult(results.get(BRIDGE_THING_UID_2), IP2, SN2);
+            assertThat(results.get(BRIDGE_THING_UID_3), is(notNullValue()));
+            checkDiscoveryResult(results.get(BRIDGE_THING_UID_3), IP3, SN3);
 
             final List<DiscoveryResult> inboxResults = inbox.stream().filter(forThingTypeUID(BRIDGE_THING_TYPE_UID))
                     .collect(Collectors.toList());
-            assertTrue(inboxResults.size() >= 2);
+            assertTrue(inboxResults.size() >= 3);
 
             assertThat(inboxResults.stream().filter(result -> result.getThingUID().equals(BRIDGE_THING_UID_1))
                     .findFirst().orElse(null), is(notNullValue()));
             assertThat(inboxResults.stream().filter(result -> result.getThingUID().equals(BRIDGE_THING_UID_2))
                     .findFirst().orElse(null), is(notNullValue()));
+            assertThat(inboxResults.stream().filter(result -> result.getThingUID().equals(BRIDGE_THING_UID_3))
+                    .findFirst().orElse(null), is(notNullValue()));
         });
     }
 
@@ -259,7 +270,7 @@ public class HueBridgeNupnpDiscoveryOSGITest extends JavaOSGiTest {
         });
 
         // invalid bridge description
-        expBridgeDescription = "";
+        expBridgeDescription1 = "";
         discoveryResult = "[{\"id\":\"001788fffe20057f\",\"internalipaddress\":" + IP1 + "}]";
         sut.startScan();
         waitForAssert(() -> {