]> git.basschouten.com Git - openhab-addons.git/commitdiff
[nikohomecontrol] Do not set thing status before end of initialization (#12819)
authorMark Herwege <mherwege@users.noreply.github.com>
Sat, 4 Jun 2022 21:39:46 +0000 (23:39 +0200)
committerGitHub <noreply@github.com>
Sat, 4 Jun 2022 21:39:46 +0000 (23:39 +0200)
* Do not set thing status before end of initialization
* Change ThingStatusDetail when no communication object
* Change bridge config error messages
* Bridge status changed handling
* Check bridge status in handler init

Signed-off-by: Mark Herwege <mark.herwege@telenet.be>
bundles/org.openhab.binding.nikohomecontrol/src/main/java/org/openhab/binding/nikohomecontrol/internal/handler/NikoHomeControlActionHandler.java
bundles/org.openhab.binding.nikohomecontrol/src/main/java/org/openhab/binding/nikohomecontrol/internal/handler/NikoHomeControlEnergyMeterHandler.java
bundles/org.openhab.binding.nikohomecontrol/src/main/java/org/openhab/binding/nikohomecontrol/internal/handler/NikoHomeControlThermostatHandler.java
bundles/org.openhab.binding.nikohomecontrol/src/main/resources/OH-INF/i18n/nikohomecontrol.properties
bundles/org.openhab.binding.nikohomecontrol/src/main/resources/OH-INF/i18n/nikohomecontrol_fr.properties
bundles/org.openhab.binding.nikohomecontrol/src/main/resources/OH-INF/i18n/nikohomecontrol_nl.properties
bundles/org.openhab.binding.nikohomecontrol/src/main/resources/OH-INF/thing/thing-types.xml

index df5bb9544e2e83b1748fd04333ab001ece040b52..af185ee4f00f8f0b098210679fe1d64d336a8cfd 100644 (file)
@@ -36,6 +36,7 @@ import org.openhab.core.thing.ChannelUID;
 import org.openhab.core.thing.Thing;
 import org.openhab.core.thing.ThingStatus;
 import org.openhab.core.thing.ThingStatusDetail;
+import org.openhab.core.thing.ThingStatusInfo;
 import org.openhab.core.thing.binding.BaseThingHandler;
 import org.openhab.core.types.Command;
 import org.slf4j.Logger;
@@ -54,6 +55,8 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
 
     private volatile @Nullable NhcAction nhcAction;
 
+    private volatile boolean initialized = false;
+
     private String actionId = "";
     private int stepValue;
     private boolean invert;
@@ -64,10 +67,9 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
 
     @Override
     public void handleCommand(ChannelUID channelUID, Command command) {
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
         if (nhcComm == null) {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
+            logger.debug("communication not up yet, cannot handle command {} for {}", command, channelUID);
             return;
         }
 
@@ -200,6 +202,8 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
 
     @Override
     public void initialize() {
+        initialized = false;
+
         NikoHomeControlActionConfig config;
         if (thing.getThingTypeUID().equals(THING_TYPE_DIMMABLE_LIGHT)) {
             config = getConfig().as(NikoHomeControlActionDimmerConfig.class);
@@ -212,52 +216,66 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
         }
         actionId = config.actionId;
 
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlBridgeHandler bridgeHandler = getBridgeHandler();
+        if (bridgeHandler == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
+            return;
+        }
+
+        updateStatus(ThingStatus.UNKNOWN);
+
+        Bridge bridge = getBridge();
+        if ((bridge != null) && ThingStatus.ONLINE.equals(bridge.getStatus())) {
+            // We need to do this in a separate thread because we may have to wait for the
+            // communication to become active
+            scheduler.submit(this::startCommunication);
+        }
+    }
+
+    private synchronized void startCommunication() {
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
+
         if (nhcComm == null) {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
             return;
-        } else {
-            updateStatus(ThingStatus.UNKNOWN);
         }
 
-        // We need to do this in a separate thread because we may have to wait for the communication to become active
-        scheduler.submit(() -> {
-            if (!nhcComm.communicationActive()) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
-                        "@text/offline.communication-error");
-                return;
-            }
+        if (!nhcComm.communicationActive()) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
+                    "@text/offline.communication-error");
+            return;
+        }
 
-            NhcAction nhcAction = nhcComm.getActions().get(actionId);
-            if (nhcAction == null) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
-                        "@text/offline.configuration-error.actionId");
-                return;
-            }
+        NhcAction nhcAction = nhcComm.getActions().get(actionId);
+        if (nhcAction == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.actionId");
+            return;
+        }
 
-            nhcAction.setEventHandler(this);
+        nhcAction.setEventHandler(this);
 
-            updateProperties(nhcAction);
+        updateProperties(nhcAction);
 
-            String actionLocation = nhcAction.getLocation();
-            if (thing.getLocation() == null) {
-                thing.setLocation(actionLocation);
-            }
+        String actionLocation = nhcAction.getLocation();
+        if (thing.getLocation() == null) {
+            thing.setLocation(actionLocation);
+        }
 
-            actionEvent(nhcAction.getState());
+        this.nhcAction = nhcAction;
 
-            this.nhcAction = nhcAction;
+        logger.debug("action initialized {}", actionId);
 
-            logger.debug("action initialized {}", actionId);
+        Bridge bridge = getBridge();
+        if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
+            updateStatus(ThingStatus.ONLINE);
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
 
-            Bridge bridge = getBridge();
-            if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
-                updateStatus(ThingStatus.ONLINE);
-            } else {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
-            }
-        });
+        actionEvent(nhcAction.getState());
+
+        initialized = true;
     }
 
     private void updateProperties(NhcAction nhcAction) {
@@ -341,13 +359,13 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
         if (nhcBridgeHandler != null) {
             nhcBridgeHandler.bridgeOnline();
         } else {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
         }
     }
 
-    private @Nullable NikoHomeControlCommunication getCommunication() {
-        NikoHomeControlBridgeHandler nhcBridgeHandler = getBridgeHandler();
+    private @Nullable NikoHomeControlCommunication getCommunication(
+            @Nullable NikoHomeControlBridgeHandler nhcBridgeHandler) {
         return nhcBridgeHandler != null ? nhcBridgeHandler.getCommunication() : null;
     }
 
@@ -355,4 +373,18 @@ public class NikoHomeControlActionHandler extends BaseThingHandler implements Nh
         Bridge nhcBridge = getBridge();
         return nhcBridge != null ? (NikoHomeControlBridgeHandler) nhcBridge.getHandler() : null;
     }
+
+    @Override
+    public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) {
+        ThingStatus bridgeStatus = bridgeStatusInfo.getStatus();
+        if (ThingStatus.ONLINE.equals(bridgeStatus)) {
+            if (!initialized) {
+                scheduler.submit(this::startCommunication);
+            } else {
+                updateStatus(ThingStatus.ONLINE);
+            }
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
+    }
 }
index 6aee1157f7ccfe043310bc2995512daa627c5a9b..1f5d66280209d252de272e8565c47c4615b9704c 100644 (file)
@@ -31,6 +31,7 @@ import org.openhab.core.thing.ChannelUID;
 import org.openhab.core.thing.Thing;
 import org.openhab.core.thing.ThingStatus;
 import org.openhab.core.thing.ThingStatusDetail;
+import org.openhab.core.thing.ThingStatusInfo;
 import org.openhab.core.thing.binding.BaseThingHandler;
 import org.openhab.core.types.Command;
 import org.openhab.core.types.UnDefType;
@@ -50,6 +51,8 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
 
     private volatile @Nullable NhcEnergyMeter nhcEnergyMeter;
 
+    private volatile boolean initialized = false;
+
     private String energyMeterId = "";
 
     public NikoHomeControlEnergyMeterHandler(Thing thing) {
@@ -71,66 +74,81 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
 
     @Override
     public void initialize() {
+        initialized = false;
+
         NikoHomeControlEnergyMeterConfig config = getConfig().as(NikoHomeControlEnergyMeterConfig.class);
 
         energyMeterId = config.energyMeterId;
 
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlBridgeHandler bridgeHandler = getBridgeHandler();
+        if (bridgeHandler == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
+            return;
+        }
+
+        updateStatus(ThingStatus.UNKNOWN);
+
+        Bridge bridge = getBridge();
+        if ((bridge != null) && ThingStatus.ONLINE.equals(bridge.getStatus())) {
+            // We need to do this in a separate thread because we may have to wait for the
+            // communication to become active
+            scheduler.submit(this::startCommunication);
+        }
+    }
+
+    private synchronized void startCommunication() {
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
+
         if (nhcComm == null) {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
             return;
-        } else {
-            updateStatus(ThingStatus.UNKNOWN);
         }
 
-        // We need to do this in a separate thread because we may have to wait for the
-        // communication to become active
-        scheduler.submit(() -> {
-            if (!nhcComm.communicationActive()) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
-                        "@text/offline.communication-error");
-                return;
-            }
+        if (!nhcComm.communicationActive()) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
+                    "@text/offline.communication-error");
+            return;
+        }
 
-            NhcEnergyMeter nhcEnergyMeter = nhcComm.getEnergyMeters().get(energyMeterId);
-            if (nhcEnergyMeter == null) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
-                        "@text/offline.configuration-error.energyMeterId");
-                return;
-            }
+        NhcEnergyMeter nhcEnergyMeter = nhcComm.getEnergyMeters().get(energyMeterId);
+        if (nhcEnergyMeter == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.energyMeterId");
+            return;
+        }
 
-            nhcEnergyMeter.setEventHandler(this);
+        nhcEnergyMeter.setEventHandler(this);
 
-            updateProperties(nhcEnergyMeter);
+        updateProperties(nhcEnergyMeter);
 
-            String location = nhcEnergyMeter.getLocation();
-            if (thing.getLocation() == null) {
-                thing.setLocation(location);
-            }
+        String location = nhcEnergyMeter.getLocation();
+        if (thing.getLocation() == null) {
+            thing.setLocation(location);
+        }
 
-            // Subscribing to power readings starts an intensive data flow, therefore only do it when there is an item
-            // linked to the channel
-            if (isLinked(CHANNEL_POWER)) {
-                nhcComm.startEnergyMeter(energyMeterId);
-            }
+        this.nhcEnergyMeter = nhcEnergyMeter;
 
-            this.nhcEnergyMeter = nhcEnergyMeter;
+        logger.debug("energy meter intialized {}", energyMeterId);
 
-            logger.debug("energy meter intialized {}", energyMeterId);
+        Bridge bridge = getBridge();
+        if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
+            updateStatus(ThingStatus.ONLINE);
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
 
-            Bridge bridge = getBridge();
-            if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
-                updateStatus(ThingStatus.ONLINE);
-            } else {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
-            }
-        });
+        // Subscribing to power readings starts an intensive data flow, therefore only do it when there is an item
+        // linked to the channel
+        if (isLinked(CHANNEL_POWER)) {
+            nhcComm.startEnergyMeter(energyMeterId);
+        }
+
+        initialized = true;
     }
 
     @Override
     public void dispose() {
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
 
         if (nhcComm != null) {
             nhcComm.stopEnergyMeter(energyMeterId);
@@ -178,7 +196,7 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
     // Subscribing to power readings starts an intensive data flow, therefore only do it when there is an item linked to
     // the channel
     public void channelLinked(ChannelUID channelUID) {
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
         if (nhcComm != null) {
             // This can be expensive, therefore do it in a job.
             scheduler.submit(() -> {
@@ -196,7 +214,7 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
 
     @Override
     public void channelUnlinked(ChannelUID channelUID) {
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
         if (nhcComm != null) {
             // This can be expensive, therefore do it in a job.
             scheduler.submit(() -> {
@@ -230,13 +248,13 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
         if (nhcBridgeHandler != null) {
             nhcBridgeHandler.bridgeOnline();
         } else {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
         }
     }
 
-    private @Nullable NikoHomeControlCommunication getCommunication() {
-        NikoHomeControlBridgeHandler nhcBridgeHandler = getBridgeHandler();
+    private @Nullable NikoHomeControlCommunication getCommunication(
+            @Nullable NikoHomeControlBridgeHandler nhcBridgeHandler) {
         return nhcBridgeHandler != null ? nhcBridgeHandler.getCommunication() : null;
     }
 
@@ -244,4 +262,18 @@ public class NikoHomeControlEnergyMeterHandler extends BaseThingHandler implemen
         Bridge nhcBridge = getBridge();
         return nhcBridge != null ? (NikoHomeControlBridgeHandler) nhcBridge.getHandler() : null;
     }
+
+    @Override
+    public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) {
+        ThingStatus bridgeStatus = bridgeStatusInfo.getStatus();
+        if (ThingStatus.ONLINE.equals(bridgeStatus)) {
+            if (!initialized) {
+                scheduler.submit(this::startCommunication);
+            } else {
+                updateStatus(ThingStatus.ONLINE);
+            }
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
+    }
 }
index 0debc0e7a4c08e7037cd8648821e6f2bd3c08eb2..f318306a0e85d2905268b997dfdd56cc8650e84f 100644 (file)
@@ -36,6 +36,7 @@ import org.openhab.core.thing.ChannelUID;
 import org.openhab.core.thing.Thing;
 import org.openhab.core.thing.ThingStatus;
 import org.openhab.core.thing.ThingStatusDetail;
+import org.openhab.core.thing.ThingStatusInfo;
 import org.openhab.core.thing.binding.BaseThingHandler;
 import org.openhab.core.types.Command;
 import org.slf4j.Logger;
@@ -54,6 +55,8 @@ public class NikoHomeControlThermostatHandler extends BaseThingHandler implement
 
     private volatile @Nullable NhcThermostat nhcThermostat;
 
+    private volatile boolean initialized = false;
+
     private String thermostatId = "";
     private int overruleTime;
 
@@ -66,10 +69,9 @@ public class NikoHomeControlThermostatHandler extends BaseThingHandler implement
 
     @Override
     public void handleCommand(ChannelUID channelUID, Command command) {
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
         if (nhcComm == null) {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
+            logger.debug("communication not up yet, cannot handle command {} for {}", command, channelUID);
             return;
         }
 
@@ -149,59 +151,74 @@ public class NikoHomeControlThermostatHandler extends BaseThingHandler implement
 
     @Override
     public void initialize() {
+        initialized = false;
+
         NikoHomeControlThermostatConfig config = getConfig().as(NikoHomeControlThermostatConfig.class);
 
         thermostatId = config.thermostatId;
         overruleTime = config.overruleTime;
 
-        NikoHomeControlCommunication nhcComm = getCommunication();
+        NikoHomeControlBridgeHandler bridgeHandler = getBridgeHandler();
+        if (bridgeHandler == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
+            return;
+        }
+
+        updateStatus(ThingStatus.UNKNOWN);
+
+        Bridge bridge = getBridge();
+        if ((bridge != null) && ThingStatus.ONLINE.equals(bridge.getStatus())) {
+            // We need to do this in a separate thread because we may have to wait for the
+            // communication to become active
+            scheduler.submit(this::startCommunication);
+        }
+    }
+
+    private synchronized void startCommunication() {
+        NikoHomeControlCommunication nhcComm = getCommunication(getBridgeHandler());
+
         if (nhcComm == null) {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
             return;
-        } else {
-            updateStatus(ThingStatus.UNKNOWN);
         }
 
-        // We need to do this in a separate thread because we may have to wait for the
-        // communication to become active
-        scheduler.submit(() -> {
-            if (!nhcComm.communicationActive()) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
-                        "@text/offline.communication-error");
-                return;
-            }
+        if (!nhcComm.communicationActive()) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
+                    "@text/offline.communication-error");
+            return;
+        }
 
-            NhcThermostat nhcThermostat = nhcComm.getThermostats().get(thermostatId);
-            if (nhcThermostat == null) {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
-                        "@text/offline.configuration-error.thermostatId");
-                return;
-            }
+        NhcThermostat nhcThermostat = nhcComm.getThermostats().get(thermostatId);
+        if (nhcThermostat == null) {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.thermostatId");
+            return;
+        }
 
-            nhcThermostat.setEventHandler(this);
+        nhcThermostat.setEventHandler(this);
 
-            updateProperties(nhcThermostat);
+        updateProperties(nhcThermostat);
 
-            String thermostatLocation = nhcThermostat.getLocation();
-            if (thing.getLocation() == null) {
-                thing.setLocation(thermostatLocation);
-            }
+        String thermostatLocation = nhcThermostat.getLocation();
+        if (thing.getLocation() == null) {
+            thing.setLocation(thermostatLocation);
+        }
 
-            thermostatEvent(nhcThermostat.getMeasured(), nhcThermostat.getSetpoint(), nhcThermostat.getMode(),
-                    nhcThermostat.getOverrule(), nhcThermostat.getDemand());
+        this.nhcThermostat = nhcThermostat;
 
-            this.nhcThermostat = nhcThermostat;
+        logger.debug("thermostat intialized {}", thermostatId);
 
-            logger.debug("thermostat intialized {}", thermostatId);
+        Bridge bridge = getBridge();
+        if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
+            updateStatus(ThingStatus.ONLINE);
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
 
-            Bridge bridge = getBridge();
-            if ((bridge != null) && (bridge.getStatus() == ThingStatus.ONLINE)) {
-                updateStatus(ThingStatus.ONLINE);
-            } else {
-                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
-            }
-        });
+        thermostatEvent(nhcThermostat.getMeasured(), nhcThermostat.getSetpoint(), nhcThermostat.getMode(),
+                nhcThermostat.getOverrule(), nhcThermostat.getDemand());
+
+        initialized = true;
     }
 
     private void updateProperties(NhcThermostat nhcThermostat) {
@@ -306,13 +323,13 @@ public class NikoHomeControlThermostatHandler extends BaseThingHandler implement
         if (nhcBridgeHandler != null) {
             nhcBridgeHandler.bridgeOnline();
         } else {
-            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED,
-                    "@text/offline.bridge-unitialized");
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
+                    "@text/offline.configuration-error.invalid-bridge-handler");
         }
     }
 
-    private @Nullable NikoHomeControlCommunication getCommunication() {
-        NikoHomeControlBridgeHandler nhcBridgeHandler = getBridgeHandler();
+    private @Nullable NikoHomeControlCommunication getCommunication(
+            @Nullable NikoHomeControlBridgeHandler nhcBridgeHandler) {
         return nhcBridgeHandler != null ? nhcBridgeHandler.getCommunication() : null;
     }
 
@@ -320,4 +337,18 @@ public class NikoHomeControlThermostatHandler extends BaseThingHandler implement
         Bridge nhcBridge = getBridge();
         return nhcBridge != null ? (NikoHomeControlBridgeHandler) nhcBridge.getHandler() : null;
     }
+
+    @Override
+    public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) {
+        ThingStatus bridgeStatus = bridgeStatusInfo.getStatus();
+        if (ThingStatus.ONLINE.equals(bridgeStatus)) {
+            if (!initialized) {
+                scheduler.submit(this::startCommunication);
+            } else {
+                updateStatus(ThingStatus.ONLINE);
+            }
+        } else {
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
+        }
+    }
 }
index e7c7a4ce0b8da95019665c6242a8a775344ab1f1..3f63b3909d1723366cf38ed2854176779ec91c81 100644 (file)
@@ -116,5 +116,6 @@ offline.configuration-error.energyMeterRemoved = Energy meter has been removed f
 offline.configuration-error.thermostatId = Configured thermostat ID does not match an thermostat in controller
 offline.configuration-error.thermostatRemoved = Thermostat has been removed from controller
 
+offline.configuration-error.invalid-bridge-handler = Invalid bridge handler
+
 offline.communication-error = Error communicating with controller
-offline.bridge-unitialized = Bridge not initialized
index cc473f544df7f65170cae26b4e751140af6cdd2e..4a12e2dbc0daccd54f4259b44420ebff930439df 100644 (file)
@@ -116,4 +116,3 @@ offline.configuration-error.thermostatId = L'ID configuré ne correspond pas à
 offline.configuration-error.thermostatRemoved = Le thermostat a été retiré de l'unité de contrôle
 
 offline.communication-error = Erreur de communication avec l'unité de contrôle
-offline.bridge-unitialized = Pont de connexion non initialisé
index e03247a660d126348bc24e7ea20adaee783fd5d4..1de9dda40a5504415b6a8295663a044feaf60fe7 100644 (file)
@@ -116,4 +116,4 @@ offline.configuration-error.thermostatId = Geconfigureerde thermostaat-ID komt n
 offline.configuration-error.thermostatRemoved = Thermostaat is verwijderd van de controller
 
 offline.communication-error = Fout tijdens het communiceren met de controller
-offline.bridge-unitialized = Bridge niet geïnitialiseerd
+
index e75e3a666f7be74c76326cb197831a37bdb6459c..90af05135016e20f1e83f19451c0777ed9e74bdb 100644 (file)
                        <bridge-type-ref id="bridge"/>
                        <bridge-type-ref id="bridge2"/>
                </supported-bridge-type-refs>
-               <label>@textThermostatLabel</label>
-               <description>@textThermostatDescription</description>
+               <label>@text/ThermostatLabel</label>
+               <description>@text/ThermostatDescription</description>
                <channels>
                        <channel id="measured" typeId="measured"/>
                        <channel id="mode" typeId="mode"/>