import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.netatmo.internal.api.ApiResponse;
+import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.FeatureArea;
import org.openhab.binding.netatmo.internal.deserialization.NAObjectMap;
/**
public class NAHomeStatusResponse extends ApiResponse<NAHomeStatus> {
}
- public class HomeStatus extends NAThing {
+ public class HomeStatus extends NAObject {
private @Nullable NAObjectMap<HomeStatusModule> modules;
private @Nullable NAObjectMap<Room> rooms;
private @Nullable NAObjectMap<HomeStatusPerson> persons;
NAObjectMap<HomeStatusPerson> local = persons;
return local != null ? local : new NAObjectMap<>();
}
+
+ public boolean appliesTo(FeatureArea area) {
+ return switch (area) {
+ case ENERGY -> (rooms != null || modules != null);
+ case SECURITY -> persons != null;
+ default -> false;
+ };
+ }
}
private @Nullable HomeStatus home;
import java.util.List;
import java.util.Set;
+import java.util.function.Predicate;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.FeatureArea;
import org.openhab.binding.netatmo.internal.api.dto.HomeData;
import org.openhab.binding.netatmo.internal.api.dto.HomeDataPerson;
import org.openhab.binding.netatmo.internal.api.dto.HomeStatusPerson;
super.setNewData(data);
if (data instanceof HomeData.Security securityData) {
knownIds = securityData.getKnownPersons().stream().map(HomeDataPerson::getId).toList();
- } else if (data instanceof HomeStatus securityStatus) {
- List<HomeStatusPerson> present = securityStatus.getPersons().values().stream()
- .filter(HomeStatusPerson::atHome).toList();
+ } else if (data instanceof HomeStatus status && status.appliesTo(FeatureArea.SECURITY)) {
+ List<String> present = status.getPersons().values().stream().filter(HomeStatusPerson::atHome)
+ .map(HomeStatusPerson::getId).toList();
persons = present.size();
- unknowns = present.stream().filter(person -> !knownIds.contains(person.getId())).count();
+ unknowns = present.stream().filter(Predicate.not(knownIds::contains)).count();
}
}