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.sleepiq.internal.api;
15 import java.util.List;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.eclipse.jetty.client.HttpClient;
20 import org.openhab.binding.sleepiq.internal.api.dto.Bed;
21 import org.openhab.binding.sleepiq.internal.api.dto.FamilyStatusResponse;
22 import org.openhab.binding.sleepiq.internal.api.dto.LoginInfo;
23 import org.openhab.binding.sleepiq.internal.api.dto.PauseModeResponse;
24 import org.openhab.binding.sleepiq.internal.api.dto.SleepDataResponse;
25 import org.openhab.binding.sleepiq.internal.api.dto.Sleeper;
26 import org.openhab.binding.sleepiq.internal.api.enums.Side;
27 import org.openhab.binding.sleepiq.internal.api.enums.SleepDataInterval;
28 import org.openhab.binding.sleepiq.internal.api.impl.SleepIQImpl;
31 * This interface is the main API to access the SleepIQ system.
33 * @author Gregory Moyer - Initial contribution
36 public interface SleepIQ {
38 * Login to the {@link Configuration configured} account. This method is not
39 * required to be called before other methods because all methods must
40 * ensure login before acting. However, when the only desired action is to
41 * login and not retrieve other data, this method is the most efficient
44 * @return basic information about the logged in user
45 * @throws UnauthorizedException
46 * if the credentials provided are not valid
47 * @throws LoginException
48 * if the login request fails for any reason other than bad
49 * credentials (including missing credentials)
51 public @Nullable LoginInfo login() throws LoginException, UnauthorizedException;
54 * Get a list of beds connected to the account.
56 * @return the list of beds
57 * @throws LoginException
58 * if the login request fails for any reason other than bad
59 * credentials (including missing credentials)
60 * @throws SleepIQException
62 public List<Bed> getBeds() throws LoginException, SleepIQException, BedNotFoundException;
65 * Get a list of sleepers registered to this account for beds or bed positions
66 * (left or right side).
68 * @return the list of sleepers
69 * @throws LoginException
70 * @throws SleepIQException
72 public List<Sleeper> getSleepers() throws LoginException, SleepIQException;
75 * Get the status of all beds and all air chambers registered to this
78 * @return the complete status of beds on the account
79 * @throws LoginException
80 * @throws SleepIQException
82 public FamilyStatusResponse getFamilyStatus() throws LoginException, SleepIQException;
85 * Get the Sleep Data for a sleeper registered to this account.
87 * @param sleeperId the sleeper Id to query
88 * @param interval The time period for which data is to be queried
89 * @return the Sleep Data
90 * @throws BedNotFoundException
91 * if the bed identifier was not found on the account
92 * @throws LoginException
93 * @throws SleepIQException
95 public SleepDataResponse getSleepData(String sleeperId, SleepDataInterval interval)
96 throws BedNotFoundException, LoginException, SleepIQException;
99 * Get the status of "pause mode" (disabling SleepIQ data upload) for a
100 * specific bed. A bed in pause mode will send no information to the SleepIQ
101 * cloud services. For example, if a sleeper is in bed and disables SleepIQ
102 * (enables pause mode), the service will continue to report that the bed is
103 * occupied even after the sleeper exits the bed until pause mode is
106 * @return the status of pause mode for the specified bed
107 * @throws BedNotFoundException
108 * if the bed identifier was not found on the account
109 * @throws LoginException
110 * @throws SleepIQException
112 public PauseModeResponse getPauseMode(String bedId) throws BedNotFoundException, LoginException, SleepIQException;
115 * Set the sleep number for a chamber of a bed
117 * @param bedId the unique identifier of the bed
118 * @param side thethe chamber of the bed
119 * @param sleepNumber the new sleep number
121 * @throws LoginException
122 * @throws SleepIQException
124 public void setSleepNumber(String bedId, Side side, int sleepNumber) throws LoginException, SleepIQException;
127 * Set the pause (privacy) mode for a bed
129 * @param bedId the unique identifier of the bed
131 * @throws LoginException
132 * @throws SleepIQException
134 public void setPauseMode(String bedId, boolean command) throws LoginException, SleepIQException;
137 * Create a default implementation instance of this interface. Each call to
138 * this method will create a new object.
140 * @param config the configuration to use for the new instance
141 * @param httpClient handle to the Jetty http client
142 * @return a concrete implementation of this interface
144 public static SleepIQ create(Configuration config, HttpClient httpClient) {
145 return new SleepIQImpl(config, httpClient);
149 * Close down the cloud service
151 public void shutdown();