]> git.basschouten.com Git - openhab-addons.git/commitdiff
Added capability to enable / disable background discovery service as well as tune...
authorGaël L'hopital <gael@lhopital.org>
Wed, 12 Jul 2023 19:27:34 +0000 (21:27 +0200)
committerGitHub <noreply@github.com>
Wed, 12 Jul 2023 19:27:34 +0000 (21:27 +0200)
Signed-off-by: clinique <gael@lhopital.org>
bundles/org.openhab.binding.freeboxos/README.md
bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/config/FreeboxOsConfiguration.java
bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/discovery/FreeboxOsDiscoveryService.java
bundles/org.openhab.binding.freeboxos/src/main/resources/OH-INF/config/bridge-config.xml

index 5c4c8ace990058172f3def18bfeae037995f86df..a0d76d01763fcaf4ad21d3d6efc74ece9d31f96c 100644 (file)
@@ -54,13 +54,14 @@ FreeboxOS binding has the following configuration parameters:
 
 ### API bridge
 
-| Parameter Label          | Parameter ID      | Description                                            | Required | Default              |
-|--------------------------|-------------------|--------------------------------------------------------|----------|----------------------|
-| Freebox Server Address   | apiDomain         | The domain to use in place of hardcoded Freebox ip     | No       | mafreebox.freebox.fr |
-| Application Token        | appToken          | Token generated by the Freebox Server.                 | Yes      |                      |
-| Network Device Discovery | discoverNetDevice | Enable the discovery of network device things.         | No       | false                |
-| HTTPS Available          | httpsAvailable    | Tells if https has been configured on the Freebox      | No       | false                |
-| HTTPS port               | httpsPort         | Port to use for remote https access to the Freebox Api | No       | 15682                |
+| Parameter Label               | Parameter ID      | Description                                            | Required | Default              |
+|-------------------------------|-------------------|--------------------------------------------------------|----------|----------------------|
+| Freebox Server Address        | apiDomain         | The domain to use in place of hardcoded Freebox ip     | No       | mafreebox.freebox.fr |
+| Application Token             | appToken          | Token generated by the Freebox Server.                 | Yes      |                      |
+| Network Device Discovery      | discoverNetDevice | Enable the discovery of network device things.         | No       | false                |
+| Background Discovery Interval | discoveryInterval | Interval in minutes - 0 disables background discovery  | No       | 10                   |
+| HTTPS Available               | httpsAvailable    | Tells if https has been configured on the Freebox      | No       | false                |
+| HTTPS port                    | httpsPort         | Port to use for remote https access to the Freebox Api | No       | 15682                |
 
 If the parameter *apiDomain* is not set, the binding will use the default address used by Free to access your Freebox Server (mafreebox.freebox.fr).
 The bridge thing will initialize only if a valid application token (parameter *appToken*) is filled.
index b079080ddf8f90e635c6f9e8e870ec0e236b45a9..92c8a132a3d45685261c08dad4a2e067f34aba1e 100644 (file)
@@ -33,6 +33,7 @@ public class FreeboxOsConfiguration {
     private String apiDomain = FreeboxTlsCertificateProvider.DEFAULT_NAME;
     public String appToken = "";
     public boolean discoverNetDevice;
+    public int discoveryInterval = 10;
 
     private int httpsPort = 15682;
     private boolean httpsAvailable;
index f81b2dc18c8c46fe9a02a4cce8bafc4b5cb134c6..ac84e6e206235a7bf5536f2416a50cf994c948d2 100644 (file)
@@ -70,7 +70,6 @@ import inet.ipaddr.mac.MACAddress;
 @NonNullByDefault
 public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implements ThingHandlerService {
     private static final int DISCOVERY_TIME_SECONDS = 10;
-    private static final int BACKGROUND_SCAN_REFRESH_MINUTES = 1;
 
     private final Logger logger = LoggerFactory.getLogger(FreeboxOsDiscoveryService.class);
 
@@ -89,8 +88,8 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
 
     @Override
     public void setThingHandler(@Nullable ThingHandler handler) {
-        if (handler instanceof FreeboxOsHandler) {
-            bridgeHandler = (FreeboxOsHandler) handler;
+        if (handler instanceof FreeboxOsHandler freeboxosHandler) {
+            bridgeHandler = freeboxosHandler;
             activate(null);
         }
     }
@@ -103,8 +102,14 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
     @Override
     protected void startBackgroundDiscovery() {
         stopBackgroundDiscovery();
-        backgroundFuture = Optional.of(scheduler.scheduleWithFixedDelay(this::startScan,
-                BACKGROUND_SCAN_REFRESH_MINUTES, BACKGROUND_SCAN_REFRESH_MINUTES, TimeUnit.MINUTES));
+        FreeboxOsHandler handler = bridgeHandler;
+        if (handler != null) {
+            int interval = handler.getConfiguration().discoveryInterval;
+            if (interval > 0) {
+                backgroundFuture = Optional
+                        .of(scheduler.scheduleWithFixedDelay(this::startScan, 1, interval, TimeUnit.MINUTES));
+            }
+        }
     }
 
     @Override
@@ -116,23 +121,23 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
     @Override
     protected void startScan() {
         logger.debug("Starting Freebox discovery scan");
-        FreeboxOsHandler localHandler = bridgeHandler;
-        if (localHandler != null && localHandler.getThing().getStatus() == ThingStatus.ONLINE) {
+        FreeboxOsHandler handler = bridgeHandler;
+        if (handler != null && handler.getThing().getStatus() == ThingStatus.ONLINE) {
             try {
-                ThingUID bridgeUID = localHandler.getThing().getUID();
+                ThingUID bridgeUID = handler.getThing().getUID();
 
-                List<LanHost> lanHosts = localHandler.getManager(LanBrowserManager.class).getHosts().stream()
-                        .filter(LanHost::reachable).collect(Collectors.toList());
+                List<LanHost> lanHosts = handler.getManager(LanBrowserManager.class).getHosts().stream()
+                        .filter(LanHost::reachable).toList();
 
-                discoverServer(localHandler.getManager(SystemManager.class), bridgeUID);
-                discoverPhone(localHandler.getManager(PhoneManager.class), bridgeUID);
-                discoverPlugs(localHandler.getManager(FreeplugManager.class), bridgeUID);
-                discoverRepeater(localHandler.getManager(RepeaterManager.class), bridgeUID, lanHosts);
-                discoverPlayer(localHandler.getManager(PlayerManager.class), bridgeUID, lanHosts);
-                discoverVM(localHandler.getManager(VmManager.class), bridgeUID, lanHosts);
-                discoverHome(localHandler.getManager(HomeManager.class), bridgeUID);
-                if (localHandler.getConfiguration().discoverNetDevice) {
-                    discoverHosts(localHandler, bridgeUID, lanHosts);
+                discoverServer(handler.getManager(SystemManager.class), bridgeUID);
+                discoverPhone(handler.getManager(PhoneManager.class), bridgeUID);
+                discoverPlugs(handler.getManager(FreeplugManager.class), bridgeUID);
+                discoverRepeater(handler.getManager(RepeaterManager.class), bridgeUID, lanHosts);
+                discoverPlayer(handler.getManager(PlayerManager.class), bridgeUID, lanHosts);
+                discoverVM(handler.getManager(VmManager.class), bridgeUID, lanHosts);
+                discoverHome(handler.getManager(HomeManager.class), bridgeUID);
+                if (handler.getConfiguration().discoverNetDevice) {
+                    discoverHosts(handler, bridgeUID, lanHosts);
                 }
             } catch (FreeboxException e) {
                 logger.warn("Error while requesting data for things discovery: {}", e.getMessage());
@@ -181,10 +186,9 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
             throws FreeboxException {
         try {
             List<MACAddress> wifiMacs = new ArrayList<>();
-            wifiMacs.addAll(localHandler.getManager(APManager.class).getStations().stream().map(Station::mac)
-                    .collect(Collectors.toList()));
-            wifiMacs.addAll(localHandler.getManager(RepeaterManager.class).getHosts().stream().map(LanHost::getMac)
-                    .collect(Collectors.toList()));
+            wifiMacs.addAll(localHandler.getManager(APManager.class).getStations().stream().map(Station::mac).toList());
+            wifiMacs.addAll(
+                    localHandler.getManager(RepeaterManager.class).getHosts().stream().map(LanHost::getMac).toList());
 
             lanHosts.forEach(lanHost -> {
                 MACAddress mac = lanHost.getMac();
@@ -253,9 +257,8 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
             logger.debug("Adding new Freebox Server {} to inbox", thingUID);
 
             DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withBridge(bridgeUID)
-                    .withProperty(Thing.PROPERTY_MAC_ADDRESS, config.mac())
                     .withRepresentationProperty(Thing.PROPERTY_MAC_ADDRESS).withLabel(config.modelInfo().prettyName())
-                    .build();
+                    .withProperty(Thing.PROPERTY_MAC_ADDRESS, config.mac()).build();
             thingDiscovered(discoveryResult);
         } catch (PermissionException e) {
             logger.warn("Missing permission to discover Server {}", e.getPermission());
@@ -270,9 +273,8 @@ public class FreeboxOsDiscoveryService extends AbstractDiscoveryService implemen
                 ThingUID thingUID = new ThingUID(player.apiAvailable() ? THING_TYPE_ACTIVE_PLAYER : THING_TYPE_PLAYER,
                         bridgeUID, Integer.toString(player.id()));
                 DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withBridge(bridgeUID)
-                        .withLabel(player.deviceName())
                         .withProperty(Thing.PROPERTY_MAC_ADDRESS, player.mac().toColonDelimitedString())
-                        .withProperty(ClientConfiguration.ID, player.id())
+                        .withProperty(ClientConfiguration.ID, player.id()).withLabel(player.deviceName())
                         .withRepresentationProperty(Thing.PROPERTY_MAC_ADDRESS).build();
                 thingDiscovered(discoveryResult);
             }
index 4c5f6bec9c42beb2df4d0534c454985a9b264774..39702e7996e179a08110c72f55ef769c7db03d38 100644 (file)
                        <context>password</context>
                        <description>Token generated by the Freebox server</description>
                </parameter>
+               <parameter name="discoveryInterval" type="integer" min="0" max="10080" required="false">
+                       <label>Background Discovery Interval</label>
+                       <description>
+                               Background discovery interval in minutes (default 10 - 0 disables background discovery)
+                       </description>
+                       <default>10</default>
+                       <advanced>true</advanced>
+               </parameter>
                <parameter name="discoverNetDevice" type="boolean">
                        <label>Network Device Discovery</label>
                        <description>Enable the discovery of network device things</description>