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 public class Security extends HomeData {
42 private NAObjectMap<HomeDataPerson> persons = new NAObjectMap<>();
44 public NAObjectMap<HomeDataPerson> getPersons() {
48 public List<HomeDataPerson> getKnownPersons() {
49 return persons.values().stream().filter(HomeDataPerson::isKnown).toList();
53 public class Energy extends HomeData {
54 private String temperatureControlMode = "";
55 private SetpointMode thermMode = SetpointMode.UNKNOWN;
56 private int thermSetpointDefaultDuration;
57 private List<ThermProgram> schedules = List.of();
59 public int getThermSetpointDefaultDuration() {
60 return thermSetpointDefaultDuration;
63 public SetpointMode getThermMode() {
67 public String getTemperatureControlMode() {
68 return temperatureControlMode;
71 public List<ThermProgram> getThermSchedules() {
75 public @Nullable ThermProgram getActiveProgram() {
76 return schedules.stream().filter(ThermProgram::isSelected).findFirst().orElse(null);
80 private double altitude;
81 private double[] coordinates = {};
82 private @Nullable String country;
83 private @Nullable String timezone;
85 private NAObjectMap<HomeDataRoom> rooms = new NAObjectMap<>();
86 private NAObjectMap<HomeDataModule> modules = new NAObjectMap<>();
89 public ModuleType getType() {
90 return ModuleType.HOME;
94 public double getAltitude() {
99 public double[] getCoordinates() {
104 public Optional<String> getCountry() {
105 return Optional.ofNullable(country);
109 public Optional<String> getTimezone() {
110 return Optional.ofNullable(timezone);
113 public NAObjectMap<HomeDataRoom> getRooms() {
117 public NAObjectMap<HomeDataModule> getModules() {
121 public Set<FeatureArea> getFeatures() {
122 return getModules().values().stream().map(m -> m.getType().feature).collect(Collectors.toSet());