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.tado.internal.api;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.openhab.binding.tado.internal.TadoBindingConstants.FanLevel;
18 import org.openhab.binding.tado.internal.TadoBindingConstants.FanSpeed;
19 import org.openhab.binding.tado.internal.TadoBindingConstants.HorizontalSwing;
20 import org.openhab.binding.tado.internal.TadoBindingConstants.HvacMode;
21 import org.openhab.binding.tado.internal.TadoBindingConstants.TemperatureUnit;
22 import org.openhab.binding.tado.internal.TadoBindingConstants.VerticalSwing;
23 import org.openhab.binding.tado.internal.api.model.ACFanLevel;
24 import org.openhab.binding.tado.internal.api.model.ACHorizontalSwing;
25 import org.openhab.binding.tado.internal.api.model.ACVerticalSwing;
26 import org.openhab.binding.tado.internal.api.model.AcFanSpeed;
27 import org.openhab.binding.tado.internal.api.model.AcMode;
28 import org.openhab.binding.tado.internal.api.model.AcModeCapabilities;
29 import org.openhab.binding.tado.internal.api.model.AirConditioningCapabilities;
30 import org.openhab.binding.tado.internal.api.model.GenericZoneCapabilities;
31 import org.openhab.binding.tado.internal.api.model.ManualTerminationCondition;
32 import org.openhab.binding.tado.internal.api.model.OverlayTerminationCondition;
33 import org.openhab.binding.tado.internal.api.model.OverlayTerminationConditionTemplate;
34 import org.openhab.binding.tado.internal.api.model.OverlayTerminationConditionType;
35 import org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition;
36 import org.openhab.binding.tado.internal.api.model.TemperatureObject;
37 import org.openhab.binding.tado.internal.api.model.TimerTerminationCondition;
38 import org.openhab.binding.tado.internal.api.model.TimerTerminationConditionTemplate;
41 * Utility methods for the conversion of API types.
43 * @author Dennis Frommknecht - Initial contribution
46 public class TadoApiTypeUtils {
48 public static OverlayTerminationCondition getTerminationCondition(OverlayTerminationConditionType type,
49 int timerDurationInSeconds) {
52 return timerTermination(timerDurationInSeconds);
54 return manualTermination();
56 return tadoModeTermination();
58 throw new IllegalArgumentException("Unexpected OverlayTerminationConditionType " + type);
62 public static OverlayTerminationCondition cleanTerminationCondition(
63 OverlayTerminationCondition terminationCondition) {
64 OverlayTerminationConditionType conditionType = terminationCondition.getType();
66 int timerDuration = 0;
67 if (conditionType == OverlayTerminationConditionType.TIMER) {
68 Integer duration = ((TimerTerminationCondition) terminationCondition).getRemainingTimeInSeconds();
69 if (duration != null) {
70 timerDuration = duration.intValue();
74 return getTerminationCondition(conditionType, timerDuration);
77 public static OverlayTerminationCondition terminationConditionTemplateToTerminationCondition(
78 OverlayTerminationConditionTemplate template) {
79 OverlayTerminationConditionType conditionType = template.getType();
81 int timerDuration = 0;
82 if (conditionType == OverlayTerminationConditionType.TIMER) {
83 Integer duration = ((TimerTerminationConditionTemplate) template).getDurationInSeconds();
84 if (duration != null) {
85 timerDuration = duration.intValue();
89 return getTerminationCondition(conditionType, timerDuration);
92 public static TimerTerminationCondition timerTermination(int durationInSeconds) {
93 TimerTerminationCondition terminationCondition = new TimerTerminationCondition();
94 terminationCondition.setType(OverlayTerminationConditionType.TIMER);
95 terminationCondition.setDurationInSeconds(durationInSeconds);
96 return terminationCondition;
99 public static ManualTerminationCondition manualTermination() {
100 ManualTerminationCondition terminationCondition = new ManualTerminationCondition();
101 terminationCondition.setType(OverlayTerminationConditionType.MANUAL);
102 return terminationCondition;
105 public static TadoModeTerminationCondition tadoModeTermination() {
106 TadoModeTerminationCondition terminationCondition = new TadoModeTerminationCondition();
107 terminationCondition.setType(OverlayTerminationConditionType.TADO_MODE);
108 return terminationCondition;
111 public static TemperatureObject temperature(float degree, TemperatureUnit temperatureUnit) {
112 TemperatureObject temperature = new TemperatureObject();
113 if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
114 temperature.setFahrenheit(degree);
116 temperature.setCelsius(degree);
122 public static Float getTemperatureInUnit(TemperatureObject temperature, TemperatureUnit temperatureUnit) {
123 return temperatureUnit == TemperatureUnit.FAHRENHEIT ? temperature.getFahrenheit() : temperature.getCelsius();
126 public static AcMode getAcMode(HvacMode mode) {
139 throw new IllegalArgumentException("Unexpected AcMode " + mode);
143 public static AcFanSpeed getAcFanSpeed(FanSpeed fanSpeed) {
146 return AcFanSpeed.AUTO;
148 return AcFanSpeed.HIGH;
150 return AcFanSpeed.MIDDLE;
152 return AcFanSpeed.LOW;
154 throw new IllegalArgumentException("Unexpected AcFanSpeed " + fanSpeed);
158 public static ACFanLevel getFanLevel(FanLevel fanLevel) {
161 return ACFanLevel.AUTO;
163 return ACFanLevel.LEVEL1;
165 return ACFanLevel.LEVEL2;
167 return ACFanLevel.LEVEL3;
169 return ACFanLevel.LEVEL4;
171 return ACFanLevel.LEVEL5;
173 return ACFanLevel.SILENT;
175 throw new IllegalArgumentException("Unexpected FanLevel " + fanLevel);
179 public static ACHorizontalSwing getHorizontalSwing(HorizontalSwing horizontalSwing) {
180 switch (horizontalSwing) {
182 return ACHorizontalSwing.LEFT;
184 return ACHorizontalSwing.MID_LEFT;
186 return ACHorizontalSwing.MID;
188 return ACHorizontalSwing.MID_RIGHT;
190 return ACHorizontalSwing.RIGHT;
192 return ACHorizontalSwing.ON;
194 return ACHorizontalSwing.OFF;
196 return ACHorizontalSwing.AUTO;
198 throw new IllegalArgumentException("Unexpected HorizontalSwing " + horizontalSwing);
202 public static ACVerticalSwing getVerticalSwing(VerticalSwing verticalSwing) {
203 switch (verticalSwing) {
205 return ACVerticalSwing.AUTO;
207 return ACVerticalSwing.UP;
209 return ACVerticalSwing.MID_UP;
211 return ACVerticalSwing.MID;
213 return ACVerticalSwing.MID_DOWN;
215 return ACVerticalSwing.DOWN;
217 return ACVerticalSwing.ON;
219 return ACVerticalSwing.OFF;
221 throw new IllegalArgumentException("Unexpected VerticalSwing " + verticalSwing);
225 public static AcModeCapabilities getModeCapabilities(AcMode acMode,
226 @Nullable GenericZoneCapabilities capabilities) {
227 AirConditioningCapabilities acCapabilities;
229 if (capabilities instanceof AirConditioningCapabilities) {
230 acCapabilities = (AirConditioningCapabilities) capabilities;
232 acCapabilities = new AirConditioningCapabilities();
237 return acCapabilities.getCOOL();
239 return acCapabilities.getHEAT();
241 return acCapabilities.getDRY();
243 return acCapabilities.getAUTO();
245 return acCapabilities.getFAN();
247 throw new IllegalArgumentException("Unexpected AcMode " + acMode);