]> git.basschouten.com Git - openhab-addons.git/blob
cc2069e75ad3630ed6c31f2b6db55ca81ba2291c
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.tado.internal.api;
14
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;
39
40 /**
41  * Utility methods for the conversion of API types.
42  *
43  * @author Dennis Frommknecht - Initial contribution
44  */
45 @NonNullByDefault
46 public class TadoApiTypeUtils {
47
48     public static OverlayTerminationCondition getTerminationCondition(OverlayTerminationConditionType type,
49             int timerDurationInSeconds) {
50         switch (type) {
51             case TIMER:
52                 return timerTermination(timerDurationInSeconds);
53             case MANUAL:
54                 return manualTermination();
55             case TADO_MODE:
56                 return tadoModeTermination();
57             default:
58                 throw new IllegalArgumentException("Unexpected OverlayTerminationConditionType " + type);
59         }
60     }
61
62     public static OverlayTerminationCondition cleanTerminationCondition(
63             OverlayTerminationCondition terminationCondition) {
64         OverlayTerminationConditionType conditionType = terminationCondition.getType();
65
66         int timerDuration = 0;
67         if (conditionType == OverlayTerminationConditionType.TIMER) {
68             Integer duration = ((TimerTerminationCondition) terminationCondition).getRemainingTimeInSeconds();
69             if (duration != null) {
70                 timerDuration = duration.intValue();
71             }
72         }
73
74         return getTerminationCondition(conditionType, timerDuration);
75     }
76
77     public static OverlayTerminationCondition terminationConditionTemplateToTerminationCondition(
78             OverlayTerminationConditionTemplate template) {
79         OverlayTerminationConditionType conditionType = template.getType();
80
81         int timerDuration = 0;
82         if (conditionType == OverlayTerminationConditionType.TIMER) {
83             Integer duration = ((TimerTerminationConditionTemplate) template).getDurationInSeconds();
84             if (duration != null) {
85                 timerDuration = duration.intValue();
86             }
87         }
88
89         return getTerminationCondition(conditionType, timerDuration);
90     }
91
92     public static TimerTerminationCondition timerTermination(int durationInSeconds) {
93         TimerTerminationCondition terminationCondition = new TimerTerminationCondition();
94         terminationCondition.setType(OverlayTerminationConditionType.TIMER);
95         terminationCondition.setDurationInSeconds(durationInSeconds);
96         return terminationCondition;
97     }
98
99     public static ManualTerminationCondition manualTermination() {
100         ManualTerminationCondition terminationCondition = new ManualTerminationCondition();
101         terminationCondition.setType(OverlayTerminationConditionType.MANUAL);
102         return terminationCondition;
103     }
104
105     public static TadoModeTerminationCondition tadoModeTermination() {
106         TadoModeTerminationCondition terminationCondition = new TadoModeTerminationCondition();
107         terminationCondition.setType(OverlayTerminationConditionType.TADO_MODE);
108         return terminationCondition;
109     }
110
111     public static TemperatureObject temperature(float degree, TemperatureUnit temperatureUnit) {
112         TemperatureObject temperature = new TemperatureObject();
113         if (temperatureUnit == TemperatureUnit.FAHRENHEIT) {
114             temperature.setFahrenheit(degree);
115         } else {
116             temperature.setCelsius(degree);
117         }
118
119         return temperature;
120     }
121
122     public static Float getTemperatureInUnit(TemperatureObject temperature, TemperatureUnit temperatureUnit) {
123         return temperatureUnit == TemperatureUnit.FAHRENHEIT ? temperature.getFahrenheit() : temperature.getCelsius();
124     }
125
126     public static AcMode getAcMode(HvacMode mode) {
127         switch (mode) {
128             case HEAT:
129                 return AcMode.HEAT;
130             case COOL:
131                 return AcMode.COOL;
132             case FAN:
133                 return AcMode.FAN;
134             case DRY:
135                 return AcMode.DRY;
136             case AUTO:
137                 return AcMode.AUTO;
138             default:
139                 throw new IllegalArgumentException("Unexpected AcMode " + mode);
140         }
141     }
142
143     public static AcFanSpeed getAcFanSpeed(FanSpeed fanSpeed) {
144         switch (fanSpeed) {
145             case AUTO:
146                 return AcFanSpeed.AUTO;
147             case HIGH:
148                 return AcFanSpeed.HIGH;
149             case MIDDLE:
150                 return AcFanSpeed.MIDDLE;
151             case LOW:
152                 return AcFanSpeed.LOW;
153             default:
154                 throw new IllegalArgumentException("Unexpected AcFanSpeed " + fanSpeed);
155         }
156     }
157
158     public static ACFanLevel getFanLevel(FanLevel fanLevel) {
159         switch (fanLevel) {
160             case AUTO:
161                 return ACFanLevel.AUTO;
162             case LEVEL1:
163                 return ACFanLevel.LEVEL1;
164             case LEVEL2:
165                 return ACFanLevel.LEVEL2;
166             case LEVEL3:
167                 return ACFanLevel.LEVEL3;
168             case LEVEL4:
169                 return ACFanLevel.LEVEL4;
170             case LEVEL5:
171                 return ACFanLevel.LEVEL5;
172             case SILENT:
173                 return ACFanLevel.SILENT;
174             default:
175                 throw new IllegalArgumentException("Unexpected FanLevel " + fanLevel);
176         }
177     }
178
179     public static ACHorizontalSwing getHorizontalSwing(HorizontalSwing horizontalSwing) {
180         switch (horizontalSwing) {
181             case LEFT:
182                 return ACHorizontalSwing.LEFT;
183             case MID_LEFT:
184                 return ACHorizontalSwing.MID_LEFT;
185             case MID:
186                 return ACHorizontalSwing.MID;
187             case MID_RIGHT:
188                 return ACHorizontalSwing.MID_RIGHT;
189             case RIGHT:
190                 return ACHorizontalSwing.RIGHT;
191             case ON:
192                 return ACHorizontalSwing.ON;
193             case OFF:
194                 return ACHorizontalSwing.OFF;
195             case AUTO:
196                 return ACHorizontalSwing.AUTO;
197             default:
198                 throw new IllegalArgumentException("Unexpected HorizontalSwing " + horizontalSwing);
199         }
200     }
201
202     public static ACVerticalSwing getVerticalSwing(VerticalSwing verticalSwing) {
203         switch (verticalSwing) {
204             case AUTO:
205                 return ACVerticalSwing.AUTO;
206             case UP:
207                 return ACVerticalSwing.UP;
208             case MID_UP:
209                 return ACVerticalSwing.MID_UP;
210             case MID:
211                 return ACVerticalSwing.MID;
212             case MID_DOWN:
213                 return ACVerticalSwing.MID_DOWN;
214             case DOWN:
215                 return ACVerticalSwing.DOWN;
216             case ON:
217                 return ACVerticalSwing.ON;
218             case OFF:
219                 return ACVerticalSwing.OFF;
220             default:
221                 throw new IllegalArgumentException("Unexpected VerticalSwing " + verticalSwing);
222         }
223     }
224
225     public static AcModeCapabilities getModeCapabilities(AcMode acMode,
226             @Nullable GenericZoneCapabilities capabilities) {
227         AirConditioningCapabilities acCapabilities;
228
229         if (capabilities instanceof AirConditioningCapabilities conditioningCapabilities) {
230             acCapabilities = conditioningCapabilities;
231         } else {
232             acCapabilities = new AirConditioningCapabilities();
233         }
234
235         switch (acMode) {
236             case COOL:
237                 return acCapabilities.getCOOL();
238             case HEAT:
239                 return acCapabilities.getHEAT();
240             case DRY:
241                 return acCapabilities.getDRY();
242             case AUTO:
243                 return acCapabilities.getAUTO();
244             case FAN:
245                 return acCapabilities.getFAN();
246             default:
247                 throw new IllegalArgumentException("Unexpected AcMode " + acMode);
248         }
249     }
250 }