diff --git a/src/main/java/io/github/hapjava/accessories/HomekitAccessory.java b/src/main/java/io/github/hapjava/accessories/HomekitAccessory.java index 5e2bbe3b6..64c406492 100644 --- a/src/main/java/io/github/hapjava/accessories/HomekitAccessory.java +++ b/src/main/java/io/github/hapjava/accessories/HomekitAccessory.java @@ -4,6 +4,7 @@ import io.github.hapjava.services.impl.AccessoryInformationService; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.concurrent.CompletableFuture; /** @@ -81,11 +82,18 @@ default Collection getServices() { }; /** - * default implementation which is sufficient if accessory has only one services + * default implementation which is sufficient if accessory has only one service * * @return primary service */ default Service getPrimaryService() { - return getServices().isEmpty() ? null : getServices().iterator().next(); + Iterator iterator = getServices().iterator(); + while (iterator.hasNext()) { + Service service = iterator.next(); + if (!(service instanceof AccessoryInformationService)) { + return service; + } + } + return null; }; } diff --git a/src/main/java/io/github/hapjava/server/impl/HomekitRegistry.java b/src/main/java/io/github/hapjava/server/impl/HomekitRegistry.java index cc6cd352e..3e3be9b6b 100644 --- a/src/main/java/io/github/hapjava/server/impl/HomekitRegistry.java +++ b/src/main/java/io/github/hapjava/server/impl/HomekitRegistry.java @@ -42,8 +42,11 @@ public synchronized void reset() { List newServices; try { newServices = new ArrayList<>(2); - newServices.add(new AccessoryInformationService(accessory)); - for (Service service : accessory.getServices()) { + Collection services = accessory.getServices(); + if (!services.stream().anyMatch(s -> s instanceof AccessoryInformationService)) { + newServices.add(new AccessoryInformationService(accessory)); + } + for (Service service : services) { newServices.add(service); newServices.addAll(service.getLinkedServices()); }