Skip to content

Commit b821ed6

Browse files
committed
Changed unit support from conversion to requesting units from back-end.
Signed-off-by: Konstantin Panchenko <kpanchen@konstantech.com>
1 parent f52ac2b commit b821ed6

20 files changed

+280
-261
lines changed

ESH-INF/thing/channels.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@
8181
<label>Cool Set Point</label>
8282
<description>Gets or sets the cool set point of this zone.</description>
8383
<category>Temperature</category>
84-
<state min="15.5" max="37.0" step="0.5" pattern="%.1f %unit%" readOnly="false"/>
84+
<state step="0.5" pattern="%.1f %unit%" readOnly="false"/>
8585
</channel-type>
8686

8787
<channel-type id="heatSetPoint">
8888
<item-type>Number:Temperature</item-type>
8989
<label>Heat Set Point</label>
9090
<description>Gets or sets the heat set point of this zone.</description>
9191
<category>Temperature</category>
92-
<state min="4.0" max="32.0" step="0.5" pattern="%.1f %unit%" readOnly="false"/>
92+
<state step="0.5" pattern="%.1f %unit%" readOnly="false"/>
9393
</channel-type>
9494
</thing:thing-descriptions>

META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Bundle-Version: 2.5.0.qualifier
1111
Import-Package:
1212
com.google.gson,
1313
com.google.gson.annotations,
14+
javax.measure,
1415
javax.measure.quantity,
1516
org.apache.commons.lang,
1617
org.eclipse.jdt.annotation;resolution:=optional,

src/main/java/org/openhab/binding/icomfortwifi/handler/iComfortWiFiBridgeHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ private void updateThings() {
241241
// Creating lookup tables
242242
for (SystemInfo systemInfo : apiClient.getSystemsInfo().systemInfo) {
243243
idToTcsMap.put(systemInfo.gatewaySN, systemInfo);
244-
for (ZoneStatus zoneStatus : systemInfo.getSystemStatus().zoneStatus) {
244+
for (ZoneStatus zoneStatus : systemInfo.getZonesStatus().zoneStatus) {
245245
idToZoneMap.put(zoneStatus.getZoneID(), zoneStatus);
246246
zoneIdToTcsIdMap.put(zoneStatus.getZoneID(), systemInfo.gatewaySN);
247247
}

src/main/java/org/openhab/binding/icomfortwifi/handler/iComfortWiFiHeatingZoneHandler.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
import org.eclipse.smarthome.core.library.types.QuantityType;
1414
import org.eclipse.smarthome.core.library.types.StringType;
15-
import org.eclipse.smarthome.core.library.unit.SIUnits;
1615
import org.eclipse.smarthome.core.library.unit.SmartHomeUnits;
1716
import org.eclipse.smarthome.core.thing.ChannelUID;
1817
import org.eclipse.smarthome.core.thing.Thing;
@@ -21,6 +20,9 @@
2120
import org.eclipse.smarthome.core.types.Command;
2221
import org.eclipse.smarthome.core.types.RefreshType;
2322
import org.openhab.binding.icomfortwifi.iComfortWiFiBindingConstants;
23+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.AwayStatus;
24+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.FanMode;
25+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.OperationMode;
2426
import org.openhab.binding.icomfortwifi.internal.api.models.response.ZoneStatus;
2527
import org.slf4j.Logger;
2628
import org.slf4j.LoggerFactory;
@@ -34,7 +36,6 @@
3436
public class iComfortWiFiHeatingZoneHandler extends BaseiComfortWiFiHandler {
3537

3638
private final Logger logger = LoggerFactory.getLogger(iComfortWiFiHeatingZoneHandler.class);
37-
// private static final int CANCEL_SET_POINT_OVERRIDE = 0;
3839
private ThingStatus tcsStatus;
3940
private ZoneStatus zoneStatus;
4041

@@ -62,8 +63,8 @@ public void update(ThingStatus tcsStatus, ZoneStatus zoneStatus) {
6263
} else if (handleActiveFaults(zoneStatus) == false) {
6364
updateiComfortWiFiThingStatus(ThingStatus.ONLINE);
6465

65-
updateState(iComfortWiFiBindingConstants.ZONE_TEMPERATURE_CHANNEL,
66-
new QuantityType<>(zoneStatus.indoorTemp, SIUnits.CELSIUS));
66+
updateState(iComfortWiFiBindingConstants.ZONE_TEMPERATURE_CHANNEL, new QuantityType<>(zoneStatus.indoorTemp,
67+
zoneStatus.preferredTemperatureUnit.getTemperatureUnit()));
6768
updateState(iComfortWiFiBindingConstants.ZONE_HUMIDITY_CHANNEL,
6869
new QuantityType<>(zoneStatus.indoorHumidity, SmartHomeUnits.PERCENT));
6970
updateState(iComfortWiFiBindingConstants.ZONE_SYSTEM_STATUS_CHANNEL,
@@ -74,10 +75,10 @@ public void update(ThingStatus tcsStatus, ZoneStatus zoneStatus) {
7475
new StringType(zoneStatus.awayMode.toString()));
7576
updateState(iComfortWiFiBindingConstants.ZONE_FAN_MODE_CHANNEL,
7677
new StringType(zoneStatus.fanMode.toString()));
77-
updateState(iComfortWiFiBindingConstants.ZONE_COOL_SET_POINT_CHANNEL,
78-
new QuantityType<>(zoneStatus.coolSetPoint, SIUnits.CELSIUS));
79-
updateState(iComfortWiFiBindingConstants.ZONE_HEAT_SET_POINT_CHANNEL,
80-
new QuantityType<>(zoneStatus.heatSetPoint, SIUnits.CELSIUS));
78+
updateState(iComfortWiFiBindingConstants.ZONE_COOL_SET_POINT_CHANNEL, new QuantityType<>(
79+
zoneStatus.coolSetPoint, zoneStatus.preferredTemperatureUnit.getTemperatureUnit()));
80+
updateState(iComfortWiFiBindingConstants.ZONE_HEAT_SET_POINT_CHANNEL, new QuantityType<>(
81+
zoneStatus.heatSetPoint, zoneStatus.preferredTemperatureUnit.getTemperatureUnit()));
8182
}
8283
}
8384

@@ -91,13 +92,13 @@ public void handleCommand(ChannelUID channelUID, Command command) {
9192
if (command == RefreshType.REFRESH) {
9293
update(tcsStatus, zoneStatus);
9394
} else {
95+
9496
iComfortWiFiBridgeHandler bridge = getiComfortWiFiBridge();
9597
if (bridge != null) {
9698
String channelId = channelUID.getId();
9799
if (iComfortWiFiBindingConstants.ZONE_AWAY_MODE_CHANNEL.equals(channelId)) {
98-
bridge.setZoneAwayMode(zoneStatus,
99-
ZoneStatus.AwayStatus.valueOf(command.toString()).getAwayValue());
100-
} else if (zoneStatus.awayMode == ZoneStatus.AwayStatus.AWAY_OFF) {
100+
bridge.setZoneAwayMode(zoneStatus, AwayStatus.valueOf(command.toString()).getAwayValue());
101+
} else if (zoneStatus.awayMode == AwayStatus.AWAY_OFF) {
101102
logger.debug("Zone is not in Away mode, executing the command");
102103
if (iComfortWiFiBindingConstants.ZONE_COOL_SET_POINT_CHANNEL.equals(channelId)
103104
&& command instanceof QuantityType) {
@@ -109,11 +110,9 @@ public void handleCommand(ChannelUID channelUID, Command command) {
109110

110111
} else if (iComfortWiFiBindingConstants.ZONE_OPERATION_MODE_CHANNEL.equals(channelId)) {
111112
bridge.setZoneOperationMode(zoneStatus,
112-
ZoneStatus.OperationMode.valueOf(command.toString()).getOperationModeValue());
113-
113+
OperationMode.valueOf(command.toString()).getOperationModeValue());
114114
} else if (iComfortWiFiBindingConstants.ZONE_FAN_MODE_CHANNEL.equals(channelId)) {
115-
bridge.setZoneFanMode(zoneStatus,
116-
ZoneStatus.FanMode.valueOf(command.toString()).getFanModeValue());
115+
bridge.setZoneFanMode(zoneStatus, FanMode.valueOf(command.toString()).getFanModeValue());
117116

118117
}
119118
} else {

src/main/java/org/openhab/binding/icomfortwifi/internal/api/ApiAccess.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99
package org.openhab.binding.icomfortwifi.internal.api;
1010

11+
import java.util.Date;
1112
import java.util.HashMap;
1213
import java.util.Map;
1314
import java.util.concurrent.ExecutionException;
@@ -20,6 +21,7 @@
2021
import org.eclipse.jetty.client.util.StringContentProvider;
2122
import org.eclipse.jetty.http.HttpMethod;
2223
import org.eclipse.jetty.http.HttpStatus;
24+
import org.openhab.binding.icomfortwifi.internal.api.models.response.JsonDateDeserializer;
2325
import org.slf4j.Logger;
2426
import org.slf4j.LoggerFactory;
2527

@@ -40,7 +42,9 @@ public class ApiAccess {
4042
private final Gson gson;
4143

4244
public ApiAccess(HttpClient httpClient) {
43-
this.gson = new GsonBuilder().create();
45+
GsonBuilder gsonBuilder = new GsonBuilder();
46+
gsonBuilder.registerTypeAdapter(Date.class, new JsonDateDeserializer());
47+
this.gson = gsonBuilder.create();
4448
this.httpClient = httpClient;
4549
}
4650

@@ -87,7 +91,7 @@ public <TOut> TOut doRequest(HttpMethod method, String url, Map<String, String>
8791
String reply = response.getContentAsString();
8892

8993
if (outClass != null) {
90-
retVal = new Gson().fromJson(reply, outClass);
94+
retVal = this.gson.fromJson(reply, outClass);
9195
}
9296
}
9397
} catch (InterruptedException | ExecutionException e) {

src/main/java/org/openhab/binding/icomfortwifi/internal/api/iComfortWiFiApiClient.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@
2222
import org.openhab.binding.icomfortwifi.internal.api.models.request.ReqSetAwayMode;
2323
import org.openhab.binding.icomfortwifi.internal.api.models.request.ReqSetTStatInfo;
2424
import org.openhab.binding.icomfortwifi.internal.api.models.response.BuildingsInfo;
25+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.RequestStatus;
26+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.TempUnits;
2527
import org.openhab.binding.icomfortwifi.internal.api.models.response.GatewayInfo;
2628
import org.openhab.binding.icomfortwifi.internal.api.models.response.OwnerProfileInfo;
27-
import org.openhab.binding.icomfortwifi.internal.api.models.response.SystemStatus;
2829
import org.openhab.binding.icomfortwifi.internal.api.models.response.SystemsInfo;
2930
import org.openhab.binding.icomfortwifi.internal.api.models.response.UserValidation;
3031
import org.openhab.binding.icomfortwifi.internal.api.models.response.ZoneStatus;
31-
import org.openhab.binding.icomfortwifi.internal.api.models.response.ZoneStatus.TempUnits;
32+
import org.openhab.binding.icomfortwifi.internal.api.models.response.ZonesStatus;
3233
import org.openhab.binding.icomfortwifi.internal.configuration.iComfortWiFiBridgeConfiguration;
3334
import org.slf4j.Logger;
3435
import org.slf4j.LoggerFactory;
@@ -124,15 +125,23 @@ public void logout() {
124125

125126
public void update() {
126127
try {
127-
if (systemsInfo.returnStatus.toLowerCase().equals(SystemsInfo.Status.SUCCESS.asLowerCase())) {
128+
if (systemsInfo.returnStatus.equals(RequestStatus.SUCCESS)) {
128129
for (int i = 0; i < systemsInfo.systemInfo.size(); i++) {
129-
SystemStatus systemStatus = requestSystemStatus(systemsInfo.systemInfo.get(i).gatewaySN);
130-
GatewayInfo gatewayInfo = requestGatewayInfo(systemsInfo.systemInfo.get(i).gatewaySN);
131-
if (systemStatus.returnStatus.toLowerCase().equals(SystemStatus.Status.SUCCESS.asLowerCase())) {
132-
systemsInfo.systemInfo.get(i).setSystemStatus(systemStatus);
130+
// This is to get initial Temperature Unit
131+
if (systemsInfo.systemInfo.get(i).getGatewayInfo() == null) {
132+
GatewayInfo gatewayInfo = requestGatewayInfo(systemsInfo.systemInfo.get(i).gatewaySN,
133+
TempUnits.CELSIUS);
134+
systemsInfo.systemInfo.get(i).setGetewayInfo(gatewayInfo);
135+
}
136+
GatewayInfo gatewayInfo = requestGatewayInfo(systemsInfo.systemInfo.get(i).gatewaySN,
137+
systemsInfo.systemInfo.get(i).getGatewayInfo().preferredTemperatureUnit);
138+
ZonesStatus zonesStatus = requestZonesStatus(systemsInfo.systemInfo.get(i).gatewaySN,
139+
systemsInfo.systemInfo.get(i).getGatewayInfo().preferredTemperatureUnit);
140+
if (zonesStatus.returnStatus.equals(RequestStatus.SUCCESS)) {
141+
systemsInfo.systemInfo.get(i).setZonesStatus(zonesStatus);
133142
systemsInfo.systemInfo.get(i).setGetewayInfo(gatewayInfo);
134143
} else {
135-
systemsInfo.systemInfo.get(i).setSystemStatus(null);
144+
systemsInfo.systemInfo.get(i).setZonesStatus(null);
136145
systemsInfo.systemInfo.get(i).setGetewayInfo(null);
137146
}
138147
}
@@ -181,12 +190,12 @@ public void setZoneAwayMode(ZoneStatus zoneStatus, Integer awayMode) throws Time
181190
ReqSetAwayMode requestSetAway = new ReqSetAwayMode(zoneStatus);
182191
requestSetAway.awayMode = awayMode;
183192
String url = iComfortWiFiApiCommands.getCommandSetAwayModeNew(requestSetAway);
184-
SystemStatus newSystemStatus = apiAccess.doAuthenticatedPut(url, null, SystemStatus.class);
193+
ZonesStatus newZonesStatus = apiAccess.doAuthenticatedPut(url, null, ZonesStatus.class);
185194
// Updating status for changed system
186195
for (int i = 0; i < systemsInfo.systemInfo.size(); i++) {
187-
if (systemsInfo.systemInfo.get(i).getSystemStatus().zoneStatus.get(0).gatewaySN
196+
if (systemsInfo.systemInfo.get(i).getZonesStatus().zoneStatus.get(0).gatewaySN
188197
.equals(zoneStatus.gatewaySN)) {
189-
systemsInfo.systemInfo.get(i).setSystemStatus(newSystemStatus);
198+
systemsInfo.systemInfo.get(i).setZonesStatus(newZonesStatus);
190199
break;
191200
}
192201
}
@@ -224,14 +233,13 @@ private SystemsInfo requestSystemsInfo(String userName) throws TimeoutException
224233
return apiAccess.doAuthenticatedGet(url, SystemsInfo.class);
225234
}
226235

227-
private SystemStatus requestSystemStatus(String gatewaySN) throws TimeoutException {
228-
String url = iComfortWiFiApiCommands.getCommandGetTStatInfoList(gatewaySN,
229-
TempUnits.CELSIUS.getTempUnitsValue());
230-
return apiAccess.doAuthenticatedGet(url, SystemStatus.class);
236+
private ZonesStatus requestZonesStatus(String gatewaySN, TempUnits tempUnit) throws TimeoutException {
237+
String url = iComfortWiFiApiCommands.getCommandGetTStatInfoList(gatewaySN, tempUnit.getTempUnitsValue());
238+
return apiAccess.doAuthenticatedGet(url, ZonesStatus.class);
231239
}
232240

233-
private GatewayInfo requestGatewayInfo(String gatewaySN) throws TimeoutException {
234-
String url = iComfortWiFiApiCommands.getCommandGetGatewayInfo(gatewaySN, TempUnits.CELSIUS.getTempUnitsValue());
241+
private GatewayInfo requestGatewayInfo(String gatewaySN, TempUnits tempUnit) throws TimeoutException {
242+
String url = iComfortWiFiApiCommands.getCommandGetGatewayInfo(gatewaySN, tempUnit.getTempUnitsValue());
235243
return apiAccess.doAuthenticatedGet(url, GatewayInfo.class);
236244
}
237245

@@ -263,8 +271,7 @@ private boolean validateUsername() {
263271
logger.error("Credential conversion failed", e);
264272
}
265273

266-
if (validation != null
267-
&& validation.msgCode.toLowerCase().equals(UserValidation.Status.SUCCESS.asLowerCase())) {
274+
if (validation != null && validation.msgCode.equals(RequestStatus.SUCCESS)) {
268275
apiAccess.setUserCredentials(basicAuthentication);
269276
return true;
270277
} else {

src/main/java/org/openhab/binding/icomfortwifi/internal/api/iComfortWiFiApiCommands.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ public static String getCommandSetAwayModeNew(ReqSetAwayMode reqSetAway) {
287287
.append("&")
288288
.append(setAwayModeNew.paramsDef.TEMP_SCALE)
289289
.append("=")
290-
.append(reqSetAway.prefTempUnits.toString());
290+
.append(reqSetAway.preferredTemperatureUnit.toString());
291291
// @formatter:on
292292
return urlBuilder.toString();
293293
}

src/main/java/org/openhab/binding/icomfortwifi/internal/api/models/request/ReqSetAwayMode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class ReqSetAwayMode {
3333
@SerializedName("FanMode")
3434
public Integer fanMode = 0;
3535
@SerializedName("TempScale")
36-
public String prefTempUnits = null;
36+
public String preferredTemperatureUnit = null;
3737

3838
public ReqSetAwayMode() {
3939

@@ -46,7 +46,7 @@ public ReqSetAwayMode(ZoneStatus zoneStatus) {
4646
this.heatSetPoint = zoneStatus.heatSetPoint;
4747
this.coolSetPoint = zoneStatus.coolSetPoint;
4848
this.fanMode = zoneStatus.fanMode.getFanModeValue();
49-
this.prefTempUnits = zoneStatus.prefTempUnits.getTempUnitsValue();
49+
this.preferredTemperatureUnit = zoneStatus.preferredTemperatureUnit.getTempUnitsValue();
5050
}
5151

5252
}

src/main/java/org/openhab/binding/icomfortwifi/internal/api/models/request/ReqSetTStatInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public ReqSetTStatInfo(ZoneStatus zoneStatus) {
4444
this.heatSetPoint = zoneStatus.heatSetPoint;
4545
this.fanMode = zoneStatus.fanMode.getFanModeValue();
4646
this.operationMode = zoneStatus.operationMode.getOperationModeValue();
47-
this.prefTempUnits = zoneStatus.prefTempUnits.getTempUnitsValue();
47+
this.prefTempUnits = zoneStatus.preferredTemperatureUnit.getTempUnitsValue();
4848
this.zoneNumber = zoneStatus.zoneNumber;
4949
this.gatewaySN = zoneStatus.gatewaySN;
5050
}

src/main/java/org/openhab/binding/icomfortwifi/internal/api/models/response/BuildingsInfo.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
import java.util.ArrayList;
1212

13+
import org.openhab.binding.icomfortwifi.internal.api.models.response.CustomTypes.RequestStatus;
14+
1315
import com.google.gson.annotations.SerializedName;
1416

1517
/**
@@ -21,26 +23,8 @@
2123

2224
public class BuildingsInfo {
2325

24-
// Validation request enum
25-
public enum Status {
26-
SUCCESS {
27-
@Override
28-
public String asLowerCase() {
29-
return SUCCESS.toString().toLowerCase();
30-
}
31-
},
32-
FAILURE {
33-
@Override
34-
public String asLowerCase() {
35-
return FAILURE.toString().toLowerCase();
36-
}
37-
};
38-
39-
public abstract String asLowerCase();
40-
};
41-
4226
@SerializedName("ReturnStatus")
43-
public String returnStatus;
27+
public RequestStatus returnStatus;
4428

4529
@SerializedName("Buildings")
4630
public ArrayList<Building> buildingInfo;

0 commit comments

Comments
 (0)