[mqtt.homeassistant] Make sensors compliant (#8591)

Signed-off-by: Jochen Klein <git@jochen.susca.de>
This commit is contained in:
Jochen Klein
2020-10-02 03:07:08 +02:00
committed by GitHub
parent 3abe27b224
commit f06068a189
18 changed files with 295 additions and 69 deletions

View File

@@ -15,6 +15,7 @@ package org.openhab.binding.mqtt.generic;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
@@ -355,16 +356,16 @@ public abstract class AbstractMQTTThingHandler extends BaseThingHandler
}
protected void calculateThingStatus() {
final boolean availabilityTopicsSeen;
final Optional<Boolean> availabilityTopicsSeen;
if (availabilityStates.isEmpty()) {
availabilityTopicsSeen = true;
availabilityTopicsSeen = Optional.empty();
} else {
availabilityTopicsSeen = availabilityStates.values().stream().allMatch(
c -> c != null && OnOffType.ON.equals(c.getCache().getChannelState().as(OnOffType.class)));
availabilityTopicsSeen = Optional.of(availabilityStates.values().stream().allMatch(
c -> c != null && OnOffType.ON.equals(c.getCache().getChannelState().as(OnOffType.class))));
}
updateThingStatus(messageReceived.get(), availabilityTopicsSeen);
}
protected abstract void updateThingStatus(boolean messageReceived, boolean availabilityTopicsSeen);
protected abstract void updateThingStatus(boolean messageReceived, Optional<Boolean> availabilityTopicsSeen);
}

View File

@@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -186,8 +187,8 @@ public class GenericMQTTThingHandler extends AbstractMQTTThingHandler implements
}
@Override
protected void updateThingStatus(boolean messageReceived, boolean availibilityTopicsSeen) {
if (messageReceived || availibilityTopicsSeen) {
protected void updateThingStatus(boolean messageReceived, Optional<Boolean> availibilityTopicsSeen) {
if (availibilityTopicsSeen.orElse(true)) {
updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE);
} else {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE);