diff --git a/bundles/org.openhab.binding.mqtt.generic/src/main/java/org/openhab/binding/mqtt/generic/AbstractMQTTThingHandler.java b/bundles/org.openhab.binding.mqtt.generic/src/main/java/org/openhab/binding/mqtt/generic/AbstractMQTTThingHandler.java index ded70ee83..9f7cc39be 100644 --- a/bundles/org.openhab.binding.mqtt.generic/src/main/java/org/openhab/binding/mqtt/generic/AbstractMQTTThingHandler.java +++ b/bundles/org.openhab.binding.mqtt.generic/src/main/java/org/openhab/binding/mqtt/generic/AbstractMQTTThingHandler.java @@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.mqtt.generic.utils.FutureCollector; import org.openhab.binding.mqtt.generic.values.OnOffValue; import org.openhab.binding.mqtt.generic.values.Value; import org.openhab.binding.mqtt.handler.AbstractBrokerHandler; @@ -103,7 +104,10 @@ public abstract class AbstractMQTTThingHandler extends BaseThingHandler * @param connection A started broker connection * @return A future that completes normal on success and exceptionally on any errors. */ - protected abstract CompletableFuture<@Nullable Void> start(MqttBrokerConnection connection); + protected CompletableFuture<@Nullable Void> start(MqttBrokerConnection connection) { + return availabilityStates.values().parallelStream().map(cChannel -> cChannel.start(connection, scheduler, 0)) + .collect(FutureCollector.allOf()); + } /** * Called when the MQTT connection disappeared. diff --git a/bundles/org.openhab.binding.mqtt.homeassistant/src/main/java/org/openhab/binding/mqtt/homeassistant/internal/handler/HomeAssistantThingHandler.java b/bundles/org.openhab.binding.mqtt.homeassistant/src/main/java/org/openhab/binding/mqtt/homeassistant/internal/handler/HomeAssistantThingHandler.java index 9a73aff1f..6e147f20a 100644 --- a/bundles/org.openhab.binding.mqtt.homeassistant/src/main/java/org/openhab/binding/mqtt/homeassistant/internal/handler/HomeAssistantThingHandler.java +++ b/bundles/org.openhab.binding.mqtt.homeassistant/src/main/java/org/openhab/binding/mqtt/homeassistant/internal/handler/HomeAssistantThingHandler.java @@ -194,13 +194,14 @@ public class HomeAssistantThingHandler extends AbstractMQTTThingHandler // Start all known components and channels within the components and put the Thing offline // if any subscribing failed ( == broker connection lost) - CompletableFuture<@Nullable Void> future = haComponents.values().parallelStream() - .map(e -> e.start(connection, scheduler, attributeReceiveTimeout)) - .reduce(CompletableFuture.completedFuture(null), (a, v) -> a.thenCompose(b -> v)) // reduce to one - .exceptionally(e -> { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); - return null; - }); + CompletableFuture<@Nullable Void> future = CompletableFuture.allOf(super.start(connection), + haComponents.values().parallelStream().map(e -> e.start(connection, scheduler, attributeReceiveTimeout)) + .reduce(CompletableFuture.completedFuture(null), (a, v) -> a.thenCompose(b -> v)) // reduce to + // one + .exceptionally(e -> { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); + return null; + })); return future .thenCompose(b -> discoverComponents.startDiscovery(connection, 0, discoveryHomeAssistantIDs, this));