2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.netatmo.internal.api.dto;
15 import java.util.List;
16 import java.util.Optional;
18 import java.util.stream.Collectors;
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.eclipse.jdt.annotation.Nullable;
22 import org.openhab.binding.netatmo.internal.api.ApiResponse;
23 import org.openhab.binding.netatmo.internal.api.ListBodyResponse;
24 import org.openhab.binding.netatmo.internal.api.data.ModuleType;
25 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.FeatureArea;
26 import org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.SetpointMode;
27 import org.openhab.binding.netatmo.internal.deserialization.NAObjectMap;
30 * The {@link HomeData} holds home information returned by homesdata endpoint.
32 * @author Gaƫl L'hopital - Initial contribution
37 public class HomeData extends NAThing implements NAModule, LocationEx {
38 public class HomesDataResponse extends ApiResponse<ListBodyResponse<HomeData>> {
41 private double altitude;
42 private double[] coordinates = {};
43 private @Nullable String country;
44 private @Nullable String timezone;
46 private @Nullable String temperatureControlMode;
47 private SetpointMode thermMode = SetpointMode.UNKNOWN;
48 private int thermSetpointDefaultDuration;
49 private List<ThermProgram> schedules = List.of();
51 private NAObjectMap<HomeDataPerson> persons = new NAObjectMap<>();
52 private NAObjectMap<HomeDataRoom> rooms = new NAObjectMap<>();
53 private NAObjectMap<HomeDataModule> modules = new NAObjectMap<>();
56 public ModuleType getType() {
57 return ModuleType.HOME;
61 public double getAltitude() {
66 public double[] getCoordinates() {
71 public Optional<String> getCountry() {
72 return Optional.ofNullable(country);
76 public Optional<String> getTimezone() {
77 return Optional.ofNullable(timezone);
80 public int getThermSetpointDefaultDuration() {
81 return thermSetpointDefaultDuration;
84 public SetpointMode getThermMode() {
88 public NAObjectMap<HomeDataPerson> getPersons() {
92 public List<HomeDataPerson> getKnownPersons() {
93 return persons.values().stream().filter(HomeDataPerson::isKnown).collect(Collectors.toList());
96 public Optional<String> getTemperatureControlMode() {
97 return Optional.ofNullable(temperatureControlMode);
100 public NAObjectMap<HomeDataRoom> getRooms() {
104 public NAObjectMap<HomeDataModule> getModules() {
108 public Set<FeatureArea> getFeatures() {
109 return getModules().values().stream().map(m -> m.getType().feature).collect(Collectors.toSet());
112 public List<ThermProgram> getThermSchedules() {
116 public @Nullable ThermProgram getActiveProgram() {
117 return schedules.stream().filter(ThermProgram::isSelected).findFirst().orElse(null);