]> git.basschouten.com Git - openhab-addons.git/commitdiff
[homematic] Fix `NullPointerException` in discovery (#17390)
authorSönke Küper <soenkekueper@gmx.de>
Mon, 16 Sep 2024 18:13:52 +0000 (20:13 +0200)
committerGitHub <noreply@github.com>
Mon, 16 Sep 2024 18:13:52 +0000 (20:13 +0200)
* #17372: Fixed NPE

Signed-off-by: Sönke Küper <soenkekueper@gmx.de>
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/discovery/HomematicDeviceDiscoveryService.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/handler/HomematicBridgeHandler.java

index 91405efb9fb6217b75c3a21de2a6c22ec7f724dc..e55d8db58030f1ac4cf9da136e345079fc4bd9cc 100644 (file)
@@ -78,7 +78,7 @@ public class HomematicDeviceDiscoveryService
             Thing bridge = thingHandler.getThing();
             ThingStatus bridgeStatus = bridge.getStatus();
 
-            if (ThingStatus.ONLINE == bridgeStatus) {
+            if (ThingStatus.ONLINE == bridgeStatus && gateway != null) {
                 gateway.setInstallMode(true, getInstallModeDuration());
 
                 int remaining = gateway.getInstallMode();
@@ -109,7 +109,10 @@ public class HomematicDeviceDiscoveryService
     public synchronized void stopScan() {
         logger.debug("Stopping Homematic discovery scan");
         disableInstallMode();
-        thingHandler.getGateway().cancelLoadAllDeviceMetadata();
+        final HomematicGateway gateway = thingHandler.getGateway();
+        if (gateway != null) {
+            gateway.cancelLoadAllDeviceMetadata();
+        }
         waitForScanFinishing();
         super.stopScan();
     }
@@ -117,10 +120,11 @@ public class HomematicDeviceDiscoveryService
     private void disableInstallMode() {
         try {
             synchronized (installModeSync) {
-                if (isInInstallMode) {
+                final HomematicGateway gateway = thingHandler.getGateway();
+                if (isInInstallMode && gateway != null) {
                     isInInstallMode = false;
                     installModeSync.notify();
-                    thingHandler.getGateway().setInstallMode(false, 0);
+                    gateway.setInstallMode(false, 0);
                 }
             }
         } catch (Exception ex) {
@@ -172,10 +176,10 @@ public class HomematicDeviceDiscoveryService
      * Starts a thread which loads all Homematic devices connected to the gateway.
      */
     public void loadDevices() {
-        if (loadDevicesFuture == null && thingHandler.getGateway() != null) {
+        final HomematicGateway gateway = thingHandler.getGateway();
+        if (loadDevicesFuture == null && gateway != null) {
             loadDevicesFuture = scheduler.submit(() -> {
                 try {
-                    final HomematicGateway gateway = thingHandler.getGateway();
                     gateway.loadAllDeviceMetadata();
                     thingHandler.getTypeGenerator().validateFirmwares();
                 } catch (Throwable ex) {
index 2d4bb424006dcb0e72498b1c2e0adb39cd344c11..f8d42a64949f2aebfab5f33cd02b5bd92b8dcfc0 100644 (file)
@@ -24,6 +24,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.client.HttpClient;
 import org.openhab.binding.homematic.internal.common.HomematicConfig;
 import org.openhab.binding.homematic.internal.communicator.HomematicGateway;
@@ -267,8 +268,11 @@ public class HomematicBridgeHandler extends BaseBridgeHandler implements Homemat
     }
 
     /**
-     * Returns the HomematicGateway.
+     * Returns the {@link HomematicGateway}.
+     *
+     * @return The gateway or null if gateway has not yet been initialized.
      */
+    @Nullable
     public HomematicGateway getGateway() {
         return gateway;
     }