2 * Copyright (c) 2010-2022 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.openhab.binding.tado.internal.TadoBindingConstants.FanLevel;
16 import org.openhab.binding.tado.internal.TadoBindingConstants.FanSpeed;
17 import org.openhab.binding.tado.internal.TadoBindingConstants.HorizontalSwing;
18 import org.openhab.binding.tado.internal.TadoBindingConstants.HvacMode;
19 import org.openhab.binding.tado.internal.TadoBindingConstants.TemperatureUnit;
20 import org.openhab.binding.tado.internal.TadoBindingConstants.VerticalSwing;
21 import org.openhab.binding.tado.internal.api.model.ACFanLevel;
22 import org.openhab.binding.tado.internal.api.model.ACHorizontalSwing;
23 import org.openhab.binding.tado.internal.api.model.ACVerticalSwing;
24 import org.openhab.binding.tado.internal.api.model.AcFanSpeed;
25 import org.openhab.binding.tado.internal.api.model.AcMode;
26 import org.openhab.binding.tado.internal.api.model.AcModeCapabilities;
27 import org.openhab.binding.tado.internal.api.model.AirConditioningCapabilities;
28 import org.openhab.binding.tado.internal.api.model.ManualTerminationCondition;
29 import org.openhab.binding.tado.internal.api.model.OverlayTerminationCondition;
30 import org.openhab.binding.tado.internal.api.model.OverlayTerminationConditionTemplate;
31 import org.openhab.binding.tado.internal.api.model.OverlayTerminationConditionType;
32 import org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition;
33 import org.openhab.binding.tado.internal.api.model.TemperatureObject;
34 import org.openhab.binding.tado.internal.api.model.TimerTerminationCondition;
35 import org.openhab.binding.tado.internal.api.model.TimerTerminationConditionTemplate;
38 * Utility methods for the conversion of API types.
40 * @author Dennis Frommknecht - Initial contribution
42 public class TadoApiTypeUtils {
43 public static OverlayTerminationCondition getTerminationCondition(OverlayTerminationConditionType type,
44 Integer timerDurationInSeconds) {
47 return timerTermination(timerDurationInSeconds);
49 return manualTermination();
51 return tadoModeTermination();
57 public static OverlayTerminationCondition cleanTerminationCondition(
58 OverlayTerminationCondition terminationCondition) {
59 Integer timerDuration = terminationCondition.getType() == OverlayTerminationConditionType.TIMER
60 ? ((TimerTerminationCondition) terminationCondition).getRemainingTimeInSeconds()
63 return getTerminationCondition(terminationCondition.getType(), timerDuration);
66 public static OverlayTerminationCondition terminationConditionTemplateToTerminationCondition(
67 OverlayTerminationConditionTemplate template) {
68 Integer timerDuration = template.getType() == OverlayTerminationConditionType.TIMER
69 ? ((TimerTerminationConditionTemplate) template).getDurationInSeconds()
72 return getTerminationCondition(template.getType(), timerDuration);
75 public static TimerTerminationCondition timerTermination(int durationInSeconds) {
76 TimerTerminationCondition terminationCondition = new TimerTerminationCondition();
77 terminationCondition.setType(OverlayTerminationConditionType.TIMER);
78 terminationCondition.setDurationInSeconds(durationInSeconds);
79 return terminationCondition;
82 public static ManualTerminationCondition manualTermination() {
83 ManualTerminationCondition terminationCondition = new ManualTerminationCondition();
84 terminationCondition.setType(OverlayTerminationConditionType.MANUAL);
85 return terminationCondition;
88 public static TadoModeTerminationCondition tadoModeTermination() {
89 TadoModeTerminationCondition terminationCondition = new TadoModeTerminationCondition();
90 terminationCondition.setType(OverlayTerminationConditionType.TADO_MODE);
91 return terminationCondition;
94 public static TemperatureObject temperature(float degree, TemperatureUnit temperatureUnit) {
95 TemperatureObject temperature = new TemperatureObject();
96 if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
97 temperature.setFahrenheit(degree);
99 temperature.setCelsius(degree);
105 public static Float getTemperatureInUnit(TemperatureObject temperature, TemperatureUnit temperatureUnit) {
106 if (temperature == null) {
110 return temperatureUnit == TemperatureUnit.FAHRENHEIT ? temperature.getFahrenheit() : temperature.getCelsius();
113 public static AcMode getAcMode(HvacMode mode) {
134 public static AcFanSpeed getAcFanSpeed(FanSpeed fanSpeed) {
135 if (fanSpeed == null) {
141 return AcFanSpeed.AUTO;
143 return AcFanSpeed.HIGH;
145 return AcFanSpeed.MIDDLE;
147 return AcFanSpeed.LOW;
153 public static ACFanLevel getFanLevel(FanLevel fanLevel) {
154 if (fanLevel == null) {
160 return ACFanLevel.AUTO;
162 return ACFanLevel.LEVEL1;
164 return ACFanLevel.LEVEL2;
166 return ACFanLevel.LEVEL3;
168 return ACFanLevel.LEVEL4;
170 return ACFanLevel.LEVEL5;
172 return ACFanLevel.SILENT;
178 public static ACHorizontalSwing getHorizontalSwing(HorizontalSwing horizontalSwing) {
179 if (horizontalSwing == null) {
183 switch (horizontalSwing) {
185 return ACHorizontalSwing.LEFT;
187 return ACHorizontalSwing.MID_LEFT;
189 return ACHorizontalSwing.MID;
191 return ACHorizontalSwing.MID_RIGHT;
193 return ACHorizontalSwing.RIGHT;
195 return ACHorizontalSwing.ON;
197 return ACHorizontalSwing.OFF;
199 return ACHorizontalSwing.AUTO;
205 public static ACVerticalSwing getVerticalSwing(VerticalSwing verticalSwing) {
206 if (verticalSwing == null) {
210 switch (verticalSwing) {
212 return ACVerticalSwing.AUTO;
214 return ACVerticalSwing.UP;
216 return ACVerticalSwing.MID_UP;
218 return ACVerticalSwing.MID;
220 return ACVerticalSwing.MID_DOWN;
222 return ACVerticalSwing.DOWN;
224 return ACVerticalSwing.ON;
226 return ACVerticalSwing.OFF;
232 public static AcModeCapabilities getModeCapabilities(AirConditioningCapabilities capabilities, AcMode mode) {
233 AcModeCapabilities modeCapabilities = null;
238 modeCapabilities = capabilities.getCOOL();
241 modeCapabilities = capabilities.getHEAT();
244 modeCapabilities = capabilities.getDRY();
247 modeCapabilities = capabilities.getAUTO();
250 modeCapabilities = capabilities.getFAN();
255 return modeCapabilities != null ? modeCapabilities : new AcModeCapabilities();