]> git.basschouten.com Git - openhab-addons.git/commitdiff
[daikin] Add the ability to disable background discovery (#12300)
authorjimtng <2554958+jimtng@users.noreply.github.com>
Sat, 19 Feb 2022 20:50:12 +0000 (06:50 +1000)
committerGitHub <noreply@github.com>
Sat, 19 Feb 2022 20:50:12 +0000 (21:50 +0100)
Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
bundles/org.openhab.binding.daikin/README.md
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/discovery/DaikinACUnitDiscoveryService.java

index ff9d1f2e61cb766b0eaefaa62d706ff3aaa47a42..f2ded25e3664b8f309e1dfe93cb1fe7cec41c863 100644 (file)
@@ -13,6 +13,14 @@ This may work with the older KRP series of wired adapters, but has not been test
 This add-on will broadcast messages on your local network looking for Daikin air conditioning units and adding them to the queue of new items discovered.
 You can also manually add a new item if you know the IP address.
 
+Background discovery polls the network every minute for devices.
+Background discovery is **enabled** by default.
+To **disable** background discovery, add the following line to the *conf/services/runtime.cfg* file:
+
+```text
+discovery.daikin:background=false
+```
+
 ### BRP072C42 adapter discovery
 
 A BRP072C42 adapter requires a registered UUID to authenticate. Upon discovery, a UUID will be generated but the adapter's key must be entered in the Thing configuration to complete the UUID registration.
index eb2f89ce2b3211e7ff70ae01d0779460bed2eac7..7a58fdb48b05e5a3b762f9e1b5f92b509a03c255 100644 (file)
@@ -53,7 +53,7 @@ import org.slf4j.LoggerFactory;
  * @author Paul Smedley <paul@smedley.id.au> - Modifications to support Airbase Controllers
  *
  */
-@Component(service = DiscoveryService.class)
+@Component(service = DiscoveryService.class, configurationPid = "discovery.daikin")
 @NonNullByDefault
 public class DaikinACUnitDiscoveryService extends AbstractDiscoveryService {
     private static final String UDP_PACKET_CONTENTS = "DAIKIN_UDP/common/basic_info";
@@ -62,17 +62,15 @@ public class DaikinACUnitDiscoveryService extends AbstractDiscoveryService {
     private Logger logger = LoggerFactory.getLogger(DaikinACUnitDiscoveryService.class);
 
     private @Nullable HttpClient httpClient;
-    private final Runnable scanner;
     private @Nullable ScheduledFuture<?> backgroundFuture;
 
     public DaikinACUnitDiscoveryService() {
         super(Collections.singleton(DaikinBindingConstants.THING_TYPE_AC_UNIT), 600, true);
-        scanner = createScanner();
     }
 
     @Override
     protected void startScan() {
-        scheduler.execute(scanner);
+        scheduler.execute(this::scanner);
     }
 
     @Override
@@ -83,7 +81,7 @@ public class DaikinACUnitDiscoveryService extends AbstractDiscoveryService {
             backgroundFuture.cancel(true);
             backgroundFuture = null;
         }
-        backgroundFuture = scheduler.scheduleWithFixedDelay(scanner, 0, 60, TimeUnit.SECONDS);
+        backgroundFuture = scheduler.scheduleWithFixedDelay(this::scanner, 0, 60, TimeUnit.SECONDS);
     }
 
     @Override
@@ -96,32 +94,30 @@ public class DaikinACUnitDiscoveryService extends AbstractDiscoveryService {
         super.stopBackgroundDiscovery();
     }
 
-    private Runnable createScanner() {
-        return () -> {
-            long timestampOfLastScan = getTimestampOfLastScan();
-            for (InetAddress broadcastAddress : getBroadcastAddresses()) {
-                logger.trace("Starting broadcast for {}", broadcastAddress.toString());
-
-                try (DatagramSocket socket = new DatagramSocket()) {
-                    socket.setBroadcast(true);
-                    socket.setReuseAddress(true);
-                    byte[] packetContents = UDP_PACKET_CONTENTS.getBytes(StandardCharsets.UTF_8);
-                    DatagramPacket packet = new DatagramPacket(packetContents, packetContents.length, broadcastAddress,
-                            REMOTE_UDP_PORT);
-
-                    // Send before listening in case the port isn't bound until here.
-                    socket.send(packet);
-
-                    // receivePacketAndDiscover will return false if no packet is received after 1 second
-                    while (receivePacketAndDiscover(socket)) {
-                    }
-                } catch (Exception e) {
-                    // Nothing to do here - the host couldn't be found, likely because it doesn't exist
+    private void scanner() {
+        long timestampOfLastScan = getTimestampOfLastScan();
+        for (InetAddress broadcastAddress : getBroadcastAddresses()) {
+            logger.trace("Starting broadcast for {}", broadcastAddress.toString());
+
+            try (DatagramSocket socket = new DatagramSocket()) {
+                socket.setBroadcast(true);
+                socket.setReuseAddress(true);
+                byte[] packetContents = UDP_PACKET_CONTENTS.getBytes(StandardCharsets.UTF_8);
+                DatagramPacket packet = new DatagramPacket(packetContents, packetContents.length, broadcastAddress,
+                        REMOTE_UDP_PORT);
+
+                // Send before listening in case the port isn't bound until here.
+                socket.send(packet);
+
+                // receivePacketAndDiscover will return false if no packet is received after 1 second
+                while (receivePacketAndDiscover(socket)) {
                 }
+            } catch (Exception e) {
+                // Nothing to do here - the host couldn't be found, likely because it doesn't exist
             }
+        }
 
-            removeOlderResults(timestampOfLastScan);
-        };
+        removeOlderResults(timestampOfLastScan);
     }
 
     private boolean receivePacketAndDiscover(DatagramSocket socket) {