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.digitalstrom.internal.lib.serverconnection.impl;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.HashMap;
18 import java.util.Iterator;
19 import java.util.LinkedList;
20 import java.util.List;
22 import java.util.Map.Entry;
25 import org.openhab.binding.digitalstrom.internal.lib.GeneralLibConstance;
26 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.BaseSensorValues;
27 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.AssignedSensors;
28 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.SensorValues;
29 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.TemperatureControlConfig;
30 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.TemperatureControlInternals;
31 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.TemperatureControlStatus;
32 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.TemperatureControlValues;
33 import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontainer.impl.WeatherSensorData;
34 import org.openhab.binding.digitalstrom.internal.lib.config.Config;
35 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.DsAPI;
36 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.HttpTransport;
37 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.constants.JSONApiResponseKeysEnum;
38 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.simpledsrequestbuilder.SimpleRequestBuilder;
39 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.simpledsrequestbuilder.constants.ClassKeys;
40 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.simpledsrequestbuilder.constants.FunctionKeys;
41 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.simpledsrequestbuilder.constants.InterfaceKeys;
42 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.simpledsrequestbuilder.constants.ParameterKeys;
43 import org.openhab.binding.digitalstrom.internal.lib.structure.Apartment;
44 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.Circuit;
45 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.Device;
46 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.CachedMeteringValue;
47 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceConfig;
48 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
49 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceParameterClassEnum;
50 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringTypeEnum;
51 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringUnitsEnum;
52 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
53 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.DSID;
54 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.JSONCachedMeteringValueImpl;
55 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.JSONDeviceConfigImpl;
56 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.JSONDeviceSceneSpecImpl;
57 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.impl.CircuitImpl;
58 import org.openhab.binding.digitalstrom.internal.lib.structure.devices.impl.DeviceImpl;
59 import org.openhab.binding.digitalstrom.internal.lib.structure.impl.JSONApartmentImpl;
60 import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.Scene;
61 import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
62 import org.slf4j.Logger;
63 import org.slf4j.LoggerFactory;
65 import com.google.gson.JsonArray;
66 import com.google.gson.JsonElement;
67 import com.google.gson.JsonObject;
70 * The {@link DsAPIImpl} is the implementation of the {@link DsAPI}.
72 * @author Alexander Betker - initial contributer
73 * @author Alex Maier - initial contributer
74 * @author Michael Ochel - implements new methods, API updates and change SimpleJSON to GSON, add helper methods and
75 * requests building with constants to {@link SimpleRequestBuilder}
76 * @author Matthias Siegele - implements new methods, API updates and change SimpleJSON to GSON, add helper methods and
77 * requests building with constants to {@link SimpleRequestBuilder}
79 public class DsAPIImpl implements DsAPI {
81 private final Logger logger = LoggerFactory.getLogger(DsAPIImpl.class);
82 private final HttpTransport transport;
84 public static final String QUERY_GET_METERLIST = "/apartment/dSMeters/*(dSID)";
87 * Contains methods where no login is required.
89 public static final List<String> METHODS_MUST_NOT_BE_LOGGED_IN = Arrays.asList(FunctionKeys.LOGIN,
90 FunctionKeys.REQUEST_APPLICATION_TOKEN, FunctionKeys.VERSION, FunctionKeys.TIME, FunctionKeys.GET_DSID,
91 FunctionKeys.LOGOUT, FunctionKeys.LOGIN_APPLICATION);
94 * Create a new {@link DsAPIImpl} with the given {@link HttpTransport}.
96 * @param transport for connection, must not be null
98 public DsAPIImpl(HttpTransport transport) {
99 this.transport = transport;
103 * Creates a new {@link DsAPIImpl} with creating a new {@link HttpTransport}, parameters see
104 * {@link HttpTransportImpl#HttpTransportImpl(String, int, int)}.
106 * @param uri of the digitalSTROM-Server, must not be null
107 * @param connectTimeout to set
108 * @param readTimeout to set
110 public DsAPIImpl(String uri, int connectTimeout, int readTimeout) {
111 this.transport = new HttpTransportImpl(uri, connectTimeout, readTimeout);
115 * Creates a new {@link DsAPIImpl} with creating a new {@link HttpTransport}, parameters see
116 * {@link HttpTransportImpl#HttpTransportImpl(String, int, int, boolean)}.
118 * @param uri of the digitalSTROM-Server, must not be null
119 * @param connectTimeout to set
120 * @param readTimeout to set
121 * @param aceptAllCerts yes/no (true/false)
123 public DsAPIImpl(String uri, int connectTimeout, int readTimeout, boolean aceptAllCerts) {
124 this.transport = new HttpTransportImpl(uri, connectTimeout, readTimeout, aceptAllCerts);
127 private boolean isValidApartmentSceneNumber(int sceneNumber) {
128 return (sceneNumber > -1 && sceneNumber < 256);
131 private boolean checkBlankField(JsonObject obj, String key) {
132 return obj != null && obj.get(key) != null;
135 private boolean checkRequiredZone(Integer zoneID, String zoneName) {
136 return zoneID != null && zoneID > -1 || (zoneName != null && !zoneName.isBlank());
139 private boolean checkRequiredDevice(DSID dsid, String dSUID, String name) {
140 String objectString = SimpleRequestBuilder.objectToString(dsid);
141 return (objectString != null && !objectString.isBlank()) || (name != null && !name.isBlank())
142 || (dSUID != null && !dSUID.isBlank());
146 public boolean callApartmentScene(String token, Short groupID, String groupName, Scene sceneNumber, Boolean force) {
147 if (sceneNumber != null && isValidApartmentSceneNumber(sceneNumber.getSceneNumber())) {
148 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
149 .addFunction(FunctionKeys.CALL_SCENE).addDefaultGroupParameter(token, groupID, groupName)
150 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
151 .addParameter(ParameterKeys.FORCE, force.toString()).buildRequestString());
152 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
158 public boolean undoApartmentScene(String token, Short groupID, String groupName, Scene sceneNumber) {
159 if (sceneNumber != null && isValidApartmentSceneNumber(sceneNumber.getSceneNumber())) {
160 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
161 .addFunction(FunctionKeys.UNDO_SCENE).addDefaultGroupParameter(token, groupID, groupName)
162 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
163 .buildRequestString());
164 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
170 public Apartment getApartmentStructure(String token) {
171 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
172 .addFunction(FunctionKeys.GET_STRUCTURE).addParameter(ParameterKeys.TOKEN, token).buildRequestString());
174 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
176 if (JSONResponseHandler.checkResponse(responseObj)) {
177 JsonObject apartObj = JSONResponseHandler.getResultJsonObject(responseObj);
178 if (checkBlankField(apartObj, JSONApiResponseKeysEnum.APARTMENT.getKey())) {
179 return new JSONApartmentImpl((JsonObject) apartObj.get(JSONApiResponseKeysEnum.APARTMENT.getKey()));
186 public List<Device> getApartmentDevices(String token) {
187 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
188 .addFunction(FunctionKeys.GET_DEVICES).addParameter(ParameterKeys.TOKEN, token).buildRequestString());
189 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
190 if (JSONResponseHandler.checkResponse(responseObj)
191 && responseObj.get(JSONApiResponseKeysEnum.RESULT.getKey()) instanceof JsonArray) {
192 JsonArray array = (JsonArray) responseObj.get(JSONApiResponseKeysEnum.RESULT.getKey());
194 List<Device> deviceList = new LinkedList<>();
195 for (int i = 0; i < array.size(); i++) {
196 if (array.get(i) instanceof JsonObject) {
197 deviceList.add(new DeviceImpl((JsonObject) array.get(i)));
202 return new LinkedList<>();
206 public List<Circuit> getApartmentCircuits(String sessionToken) {
207 String response = transport.execute(
208 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT).addFunction(FunctionKeys.GET_CIRCUITS)
209 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
211 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
212 if (JSONResponseHandler.checkResponse(responseObj)) {
213 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
214 if (responseObj.get(JSONApiResponseKeysEnum.CIRCUITS.getKey()).isJsonArray()) {
215 JsonArray array = responseObj.get(JSONApiResponseKeysEnum.CIRCUITS.getKey()).getAsJsonArray();
217 List<Circuit> circuitList = new LinkedList<>();
218 for (int i = 0; i < array.size(); i++) {
219 if (array.get(i).isJsonObject()) {
220 circuitList.add(new CircuitImpl(array.get(i).getAsJsonObject()));
226 return new LinkedList<>();
230 public boolean callZoneScene(String token, Integer zoneID, String zoneName, Short groupID, String groupName,
231 SceneEnum sceneNumber, Boolean force) {
232 if (checkRequiredZone(zoneID, zoneName)) {
233 String response = transport.execute(
234 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.ZONE).addFunction(FunctionKeys.CALL_SCENE)
235 .addDefaultZoneGroupParameter(token, zoneID, zoneName, groupID, groupName)
236 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
237 .addParameter(ParameterKeys.FORCE, force.toString()).buildRequestString());
239 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
245 public boolean undoZoneScene(String token, Integer zoneID, String zoneName, Short groupID, String groupName,
246 SceneEnum sceneNumber) {
247 if (checkRequiredZone(zoneID, zoneName)) {
248 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
249 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.UNDO_SCENE)
250 .addDefaultZoneGroupParameter(token, zoneID, zoneName, groupID, groupName)
251 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
252 .buildRequestString());
253 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
259 public boolean turnDeviceOn(String token, DSID dsid, String dSUID, String name) {
260 if (checkRequiredDevice(dsid, dSUID, name)) {
261 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
262 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.TURN_ON)
263 .addDefaultDeviceParameter(token, dsid, dSUID, name).buildRequestString());
264 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
270 public boolean turnDeviceOff(String token, DSID dSID, String dSUID, String name) {
271 if (checkRequiredDevice(dSID, dSUID, name)) {
272 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
273 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.TURN_OFF)
274 .addDefaultDeviceParameter(token, dSID, dSUID, name).buildRequestString());
276 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
283 public DeviceConfig getDeviceConfig(String token, DSID dSID, String dSUID, String name,
284 DeviceParameterClassEnum class_, Integer index) {
285 if (checkRequiredDevice(dSID, dSUID, name) && class_ != null
286 && SimpleRequestBuilder.objectToString(index) != null) {
287 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.DEVICE)
288 .addFunction(FunctionKeys.GET_CONFIG).addDefaultDeviceParameter(token, dSID, dSUID, name)
289 .addParameter(ParameterKeys.CLASS, class_.getClassIndex().toString())
290 .addParameter(ParameterKeys.INDEX, SimpleRequestBuilder.objectToString(index))
291 .buildRequestString());
293 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
295 if (JSONResponseHandler.checkResponse(responseObj)) {
296 JsonObject configObject = JSONResponseHandler.getResultJsonObject(responseObj);
298 if (configObject != null) {
299 return new JSONDeviceConfigImpl(configObject);
307 public int getDeviceOutputValue(String token, DSID dSID, String dSUID, String name, Short offset) {
308 if (checkRequiredDevice(dSID, dSUID, name) && SimpleRequestBuilder.objectToString(offset) != null) {
309 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
310 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.GET_OUTPUT_VALUE)
311 .addDefaultDeviceParameter(token, dSID, dSUID, name)
312 .addParameter(ParameterKeys.OFFSET, SimpleRequestBuilder.objectToString(offset))
313 .buildRequestString());
315 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
317 if (JSONResponseHandler.checkResponse(responseObj)) {
318 JsonObject valueObject = JSONResponseHandler.getResultJsonObject(responseObj);
320 if (checkBlankField(valueObject, JSONApiResponseKeysEnum.VALUE.getKey())) {
321 return valueObject.get(JSONApiResponseKeysEnum.VALUE.getKey()).getAsInt();
329 public boolean setDeviceOutputValue(String token, DSID dSID, String dSUID, String name, Short offset,
331 if (checkRequiredDevice(dSID, dSUID, name) && SimpleRequestBuilder.objectToString(offset) != null
332 && SimpleRequestBuilder.objectToString(value) != null) {
333 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
334 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.SET_OUTPUT_VALUE)
335 .addDefaultDeviceParameter(token, dSID, dSUID, name)
336 .addParameter(ParameterKeys.OFFSET, SimpleRequestBuilder.objectToString(offset))
337 .addParameter(ParameterKeys.VALUE, SimpleRequestBuilder.objectToString(value))
338 .buildRequestString());
339 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
345 public DeviceSceneSpec getDeviceSceneMode(String token, DSID dSID, String dSUID, String name, Short sceneID) {
346 if (checkRequiredDevice(dSID, dSUID, name) && SimpleRequestBuilder.objectToString(sceneID) != null) {
347 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
348 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.GET_SCENE_MODE)
349 .addDefaultDeviceParameter(token, dSID, dSUID, name)
350 .addParameter(ParameterKeys.SCENE_ID, SimpleRequestBuilder.objectToString(sceneID))
351 .buildRequestString());
352 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
354 if (JSONResponseHandler.checkResponse(responseObj)) {
355 JsonObject sceneSpec = JSONResponseHandler.getResultJsonObject(responseObj);
357 if (sceneSpec != null) {
358 return new JSONDeviceSceneSpecImpl(sceneSpec);
366 public short getDeviceSensorValue(String token, DSID dSID, String dSUID, String name, Short sensorIndex) {
367 if (checkRequiredDevice(dSID, dSUID, dSUID) && sensorIndex != null) {
368 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
369 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.GET_SENSOR_VALUE)
370 .addDefaultDeviceParameter(token, dSID, dSUID, name)
371 .addParameter(ParameterKeys.SENSOR_INDEX, SimpleRequestBuilder.objectToString(sensorIndex))
372 .buildRequestString());
373 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
375 if (JSONResponseHandler.checkResponse(responseObj)) {
376 JsonObject valueObject = JSONResponseHandler.getResultJsonObject(responseObj);
378 if (checkBlankField(valueObject, JSONApiResponseKeysEnum.SENSOR_VALUE.getKey())) {
379 return valueObject.get(JSONApiResponseKeysEnum.SENSOR_VALUE.getKey()).getAsShort();
387 public boolean callDeviceScene(String token, DSID dSID, String dSUID, String name, Scene sceneNumber,
389 if (checkRequiredDevice(dSID, dSUID, name) && sceneNumber != null) {
390 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.DEVICE)
391 .addFunction(FunctionKeys.CALL_SCENE).addDefaultDeviceParameter(token, dSID, dSUID, name)
392 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
393 .addParameter(ParameterKeys.FORCE, force.toString()).buildRequestString());
394 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
400 public boolean undoDeviceScene(String token, DSID dSID, String dSUID, String name, Scene sceneNumber) {
401 if (checkRequiredDevice(dSID, dSUID, name) && sceneNumber != null) {
402 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.DEVICE)
403 .addFunction(FunctionKeys.UNDO_SCENE).addDefaultDeviceParameter(token, dSID, dSUID, name)
404 .addParameter(ParameterKeys.SCENENUMBER, sceneNumber.getSceneNumber().toString())
405 .buildRequestString());
406 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
412 public boolean subscribeEvent(String token, String name, Integer subscriptionID, int connectionTimeout,
414 if ((name != null && !name.isBlank()) && SimpleRequestBuilder.objectToString(subscriptionID) != null) {
416 response = transport.execute(
417 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.EVENT).addFunction(FunctionKeys.SUBSCRIBE)
418 .addParameter(ParameterKeys.TOKEN, token).addParameter(ParameterKeys.NAME, name)
419 .addParameter(ParameterKeys.SUBSCRIPTIONID,
420 SimpleRequestBuilder.objectToString(subscriptionID))
421 .buildRequestString(),
422 connectionTimeout, readTimeout);
423 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
429 public boolean unsubscribeEvent(String token, String name, Integer subscriptionID, int connectionTimeout,
431 if (name != null && !name.isBlank() && SimpleRequestBuilder.objectToString(subscriptionID) != null) {
433 response = transport.execute(
434 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.EVENT).addFunction(FunctionKeys.UNSUBSCRIBE)
435 .addParameter(ParameterKeys.TOKEN, token).addParameter(ParameterKeys.NAME, name)
436 .addParameter(ParameterKeys.SUBSCRIPTIONID,
437 SimpleRequestBuilder.objectToString(subscriptionID))
438 .buildRequestString(),
439 connectionTimeout, readTimeout);
440 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
446 public String getEvent(String token, Integer subscriptionID, Integer timeout) {
447 if (SimpleRequestBuilder.objectToString(subscriptionID) != null) {
448 return transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.EVENT)
449 .addFunction(FunctionKeys.GET).addParameter(ParameterKeys.TOKEN, token)
450 .addParameter(ParameterKeys.SUBSCRIPTIONID, SimpleRequestBuilder.objectToString(subscriptionID))
451 .addParameter(ParameterKeys.TIMEOUT, SimpleRequestBuilder.objectToString(timeout))
452 .buildRequestString());
458 public int getTime(String token) {
459 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
460 .addFunction(FunctionKeys.TIME).addParameter(ParameterKeys.TOKEN, token).buildRequestString());
461 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
463 if (JSONResponseHandler.checkResponse(responseObj)) {
464 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
466 if (checkBlankField(obj, JSONApiResponseKeysEnum.TIME.getKey())) {
467 return obj.get(JSONApiResponseKeysEnum.TIME.getKey()).getAsInt();
474 public List<Integer> getResolutions(String token) {
475 String response = transport.execute(
476 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.METERING).addFunction(FunctionKeys.GET_RESOLUTIONS)
477 .addParameter(ParameterKeys.TOKEN, token).buildRequestString());
479 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
481 if (JSONResponseHandler.checkResponse(responseObj)) {
482 JsonObject resObj = JSONResponseHandler.getResultJsonObject(responseObj);
483 if (resObj != null && resObj.get(JSONApiResponseKeysEnum.RESOLUTIONS.getKey()) instanceof JsonArray) {
484 JsonArray array = (JsonArray) resObj.get(JSONApiResponseKeysEnum.RESOLUTIONS.getKey());
486 List<Integer> resolutionList = new LinkedList<>();
487 for (int i = 0; i < array.size(); i++) {
488 if (array.get(i) instanceof JsonObject) {
489 JsonObject jObject = (JsonObject) array.get(i);
491 if (jObject.get(JSONApiResponseKeysEnum.RESOLUTION.getKey()) != null) {
492 int val = jObject.get(JSONApiResponseKeysEnum.RESOLUTION.getKey()).getAsInt();
494 resolutionList.add(val);
499 return resolutionList;
506 public List<CachedMeteringValue> getLatest(String token, MeteringTypeEnum type, List<String> meterDSIDs,
507 MeteringUnitsEnum unit) {
508 if (meterDSIDs != null) {
509 String jsonMeterList = ".meters(";
510 for (int i = 0; i < meterDSIDs.size(); i++) {
511 if (!meterDSIDs.get(i).isEmpty()) {
512 jsonMeterList += meterDSIDs.get(i);
513 if (i < meterDSIDs.size() - 1 && !meterDSIDs.get(i + 1).isEmpty()) {
514 jsonMeterList += ",";
520 jsonMeterList += ")";
521 return getLatest(token, type, jsonMeterList, unit);
527 public List<CachedMeteringValue> getLatest(String token, MeteringTypeEnum type, String meterDSIDs,
528 MeteringUnitsEnum unit) {
529 if (type != null && meterDSIDs != null) {
530 String unitstring = null;
532 unitstring = unit.unit;
534 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.METERING)
535 .addFunction(FunctionKeys.GET_LATEST).addParameter(ParameterKeys.TOKEN, token)
536 .addParameter(ParameterKeys.TYPE, SimpleRequestBuilder.objectToString(type).toLowerCase())
537 .addParameter(ParameterKeys.FROM, meterDSIDs).addParameter(ParameterKeys.UNIT, unitstring)
538 .buildRequestString());
540 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
541 if (JSONResponseHandler.checkResponse(responseObj)) {
542 JsonObject latestObj = JSONResponseHandler.getResultJsonObject(responseObj);
543 if (latestObj != null && latestObj.get(JSONApiResponseKeysEnum.VALUES.getKey()) instanceof JsonArray) {
544 JsonArray array = (JsonArray) latestObj.get(JSONApiResponseKeysEnum.VALUES.getKey());
546 List<CachedMeteringValue> list = new LinkedList<>();
547 for (int i = 0; i < array.size(); i++) {
548 if (array.get(i) instanceof JsonObject) {
549 list.add(new JSONCachedMeteringValueImpl((JsonObject) array.get(i), type, unit));
560 public boolean setDeviceValue(String token, DSID dSID, String dSUID, String name, Integer value) {
561 if (checkRequiredDevice(dSID, dSUID, name)) {
562 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.DEVICE)
563 .addFunction(FunctionKeys.SET_VALUE).addParameter(ParameterKeys.TOKEN, token)
564 .addParameter(ParameterKeys.DSID, SimpleRequestBuilder.objectToString(dSID))
565 .addParameter(ParameterKeys.DSUID, dSUID).addParameter(ParameterKeys.NAME, name)
566 .addParameter(ParameterKeys.VALUE, value.toString()).buildRequestString());
567 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
573 public List<String> getMeterList(String token) {
574 List<String> meterList = new LinkedList<>();
575 JsonObject responseObj = query(token, QUERY_GET_METERLIST);
576 if (responseObj != null && responseObj.get(JSONApiResponseKeysEnum.DS_METERS.getKey()).isJsonArray()) {
577 JsonArray array = responseObj.get(JSONApiResponseKeysEnum.DS_METERS.getKey()).getAsJsonArray();
578 for (int i = 0; i < array.size(); i++) {
579 if (array.get(i) instanceof JsonObject) {
580 meterList.add(array.get(i).getAsJsonObject().get("dSID").getAsString());
588 public String loginApplication(String loginToken) {
589 if (loginToken != null && !loginToken.isBlank()) {
590 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
591 .addRequestClass(ClassKeys.SYSTEM).addFunction(FunctionKeys.LOGIN_APPLICATION)
592 .addParameter(ParameterKeys.LOGIN_TOKEN, loginToken).buildRequestString());
593 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
595 if (JSONResponseHandler.checkResponse(responseObj)) {
596 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
597 String tokenStr = null;
599 if (checkBlankField(obj, JSONApiResponseKeysEnum.TOKEN.getKey())) {
600 tokenStr = obj.get(JSONApiResponseKeysEnum.TOKEN.getKey()).getAsString();
602 if (tokenStr != null) {
611 public String login(String user, String password) {
612 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
613 .addFunction(FunctionKeys.LOGIN).addParameter(ParameterKeys.USER, user)
614 .addParameter(ParameterKeys.PASSWORD, password).buildRequestString());
615 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
617 if (JSONResponseHandler.checkResponse(responseObj)) {
618 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
619 String tokenStr = null;
621 if (checkBlankField(obj, JSONApiResponseKeysEnum.TOKEN.getKey())) {
622 tokenStr = obj.get(JSONApiResponseKeysEnum.TOKEN.getKey()).getAsString();
624 if (tokenStr != null) {
633 public boolean logout() {
635 response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
636 .addFunction(FunctionKeys.LOGOUT).buildRequestString());
637 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
641 public Map<String, String> getDSID(String token) {
642 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
643 .addFunction(FunctionKeys.GET_DSID).addParameter(ParameterKeys.TOKEN, token).buildRequestString());
644 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
646 if (JSONResponseHandler.checkResponse(responseObj)) {
647 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
649 Map<String, String> dsidMap = new HashMap<>(obj.entrySet().size());
650 for (Entry<String, JsonElement> entry : obj.entrySet()) {
651 dsidMap.put(entry.getKey(), entry.getValue().getAsString());
660 public boolean enableApplicationToken(String applicationToken, String sessionToken) {
661 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
662 .addFunction(FunctionKeys.ENABLE_APPLICATION_TOKEN).addParameter(ParameterKeys.TOKEN, sessionToken)
663 .addParameter(ParameterKeys.APPLICATION_TOKEN, applicationToken).buildRequestString(),
664 Config.HIGH_CONNECTION_TIMEOUT, Config.HIGH_READ_TIMEOUT);
665 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
669 public String requestAppplicationToken(String applicationName) {
670 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
671 .addFunction(FunctionKeys.REQUEST_APPLICATION_TOKEN)
672 .addParameter(ParameterKeys.APPLICATION_NAME, applicationName).buildRequestString());
674 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
675 if (JSONResponseHandler.checkResponse(responseObj)) {
676 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
678 return obj.get(JSONApiResponseKeysEnum.APPLICATION_TOKEN.getKey()).getAsString();
685 public boolean revokeToken(String applicationToken, String sessionToken) {
686 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
687 .addFunction(FunctionKeys.REVOKE_TOKEN).addParameter(ParameterKeys.APPLICATION_TOKEN, applicationToken)
688 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
689 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
693 public int checkConnection(String token) {
694 return transport.checkConnection(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
695 .addFunction(FunctionKeys.GET_NAME).addParameter(ParameterKeys.TOKEN, token).buildRequestString());
699 public int[] getSceneValue(String token, DSID dSID, String dSUID, String name, Short sceneId) {
700 int[] value = { -1, -1 };
701 if (checkRequiredDevice(dSID, dSUID, name)) {
702 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.DEVICE)
703 .addFunction(FunctionKeys.GET_SCENE_VALUE).addDefaultDeviceParameter(token, dSID, dSUID, name)
704 .addParameter(ParameterKeys.SCENE_ID, SimpleRequestBuilder.objectToString(sceneId))
705 .buildRequestString(), Config.DEFAULT_CONNECTION_TIMEOUT, Config.HIGH_READ_TIMEOUT);
706 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
708 if (JSONResponseHandler.checkResponse(responseObj)) {
709 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
710 if (obj != null && obj.get(JSONApiResponseKeysEnum.VALUE.getKey()) != null) {
711 value[GeneralLibConstance.SCENE_ARRAY_INDEX_VALUE] = obj.get(JSONApiResponseKeysEnum.VALUE.getKey())
713 if (obj.get(JSONApiResponseKeysEnum.ANGLE.getKey()) != null) {
714 value[GeneralLibConstance.SCENE_ARRAY_INDEX_ANGLE] = obj
715 .get(JSONApiResponseKeysEnum.ANGLE.getKey()).getAsInt();
725 public boolean increaseValue(String sessionToken, DSID dSID, String dSUID, String name) {
726 if (checkRequiredDevice(dSID, dSUID, name)) {
727 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
728 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.INCREASE_VALUE)
729 .addDefaultDeviceParameter(sessionToken, dSID, dSUID, name).buildRequestString());
730 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
736 public boolean decreaseValue(String sessionToken, DSID dSID, String dSUID, String name) {
737 if (checkRequiredDevice(dSID, dSUID, name)) {
738 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
739 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.DECREASE_VALUE)
740 .addDefaultDeviceParameter(sessionToken, dSID, dSUID, name).buildRequestString());
741 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
747 public String getInstallationName(String sessionToken) {
748 String response = null;
750 response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
751 .addRequestClass(ClassKeys.APARTMENT).addFunction(FunctionKeys.GET_NAME)
752 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
753 } catch (Exception e) {
754 logger.debug("An exception occurred", e);
757 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
759 if (JSONResponseHandler.checkResponse(responseObj)) {
760 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
761 if (checkBlankField(obj, JSONApiResponseKeysEnum.NAME.getKey())) {
762 return obj.get(JSONApiResponseKeysEnum.NAME.getKey()).getAsString();
769 public String getZoneName(String sessionToken, Integer zoneID) {
770 if (checkRequiredZone(zoneID, null)) {
771 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
772 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.GET_NAME)
773 .addParameter(ParameterKeys.ID, SimpleRequestBuilder.objectToString(zoneID))
774 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
775 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
777 if (JSONResponseHandler.checkResponse(responseObj)) {
778 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
779 if (checkBlankField(obj, JSONApiResponseKeysEnum.NAME.getKey())) {
780 return obj.get(JSONApiResponseKeysEnum.NAME.getKey()).getAsString();
788 public String getDeviceName(String sessionToken, DSID dSID, String dSUID) {
789 if (checkRequiredDevice(dSID, dSUID, null)) {
790 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
791 .addRequestClass(ClassKeys.DEVICE).addFunction(FunctionKeys.GET_NAME)
792 .addDefaultDeviceParameter(sessionToken, dSID, dSUID, null).buildRequestString());
793 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
795 if (JSONResponseHandler.checkResponse(responseObj)) {
796 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
797 if (checkBlankField(obj, JSONApiResponseKeysEnum.NAME.getKey())) {
798 return obj.get(JSONApiResponseKeysEnum.NAME.getKey()).getAsString();
806 public String getCircuitName(String sessionToken, DSID dSID) {
807 String response = transport
808 .execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.CIRCUIT).addFunction(FunctionKeys.GET_NAME)
809 .addParameter(ParameterKeys.DSID, SimpleRequestBuilder.objectToString(dSID))
810 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
811 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
813 if (JSONResponseHandler.checkResponse(responseObj)) {
814 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
815 if (checkBlankField(obj, JSONApiResponseKeysEnum.NAME.getKey())) {
816 return obj.get(JSONApiResponseKeysEnum.NAME.getKey()).getAsString();
824 public String getSceneName(String sessionToken, Integer zoneID, String zoneName, Short groupID, Short sceneID) {
825 if (checkRequiredZone(zoneID, zoneName)) {
826 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
827 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SCENE_GET_NAME)
828 .addDefaultZoneGroupParameter(sessionToken, zoneID, zoneName, groupID, null)
829 .addParameter(ParameterKeys.SCENENUMBER, SimpleRequestBuilder.objectToString(sceneID))
830 .buildRequestString());
831 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
833 if (JSONResponseHandler.checkResponse(responseObj)) {
834 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
835 if (checkBlankField(obj, JSONApiResponseKeysEnum.NAME.getKey())) {
836 return obj.get(JSONApiResponseKeysEnum.NAME.getKey()).getAsString();
844 public TemperatureControlStatus getZoneTemperatureControlStatus(String sessionToken, Integer zoneID,
846 if (checkRequiredZone(zoneID, zoneName)) {
847 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.ZONE)
848 .addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_STATUS)
849 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
850 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
852 if (JSONResponseHandler.checkResponse(responseObj)) {
853 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
854 return new TemperatureControlStatus(obj, zoneID, zoneName);
861 public TemperatureControlConfig getZoneTemperatureControlConfig(String sessionToken, Integer zoneID,
863 if (checkRequiredZone(zoneID, zoneName)) {
864 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
865 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_CONFIG)
866 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
867 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
869 if (JSONResponseHandler.checkResponse(responseObj)) {
870 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
871 return new TemperatureControlConfig(obj, zoneID, zoneName);
878 public TemperatureControlValues getZoneTemperatureControlValues(String sessionToken, Integer zoneID,
880 if (checkRequiredZone(zoneID, zoneName)) {
881 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
882 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_VALUES)
883 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
884 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
886 if (JSONResponseHandler.checkResponse(responseObj)) {
887 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
888 return new TemperatureControlValues(obj, zoneID, zoneName);
895 public AssignedSensors getZoneAssignedSensors(String sessionToken, Integer zoneID, String zoneName) {
896 if (checkRequiredZone(zoneID, zoneName)) {
897 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
898 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.GET_ASSIGNED_SENSORS)
899 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
900 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
902 if (JSONResponseHandler.checkResponse(responseObj)) {
903 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
904 return new AssignedSensors(obj, zoneID, zoneName);
911 public boolean setZoneTemperatureControlState(String sessionToken, Integer zoneID, String controlState,
913 if (checkRequiredZone(zoneID, zoneName)) {
914 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
915 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_TEMEPERATURE_CONTROL_STATE)
916 .addDefaultZoneParameter(sessionToken, zoneID, zoneName)
917 .addParameter(ParameterKeys.CONTROL_STATE, controlState).buildRequestString());
919 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
925 public boolean setZoneTemperatureControlValues(String sessionToken, Integer zoneID, String zoneName,
926 List<Object[]> controlValues) {
927 if (checkRequiredZone(zoneID, zoneName)) {
928 if (checkRequiredZone(zoneID, zoneName)) {
929 if (controlValues != null) {
930 SimpleRequestBuilder builder = SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
931 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_TEMEPERATURE_CONTROL_VALUE)
932 .addDefaultZoneParameter(sessionToken, zoneID, zoneName);
933 for (Object[] objAry : controlValues) {
934 if (objAry.length == 2 && objAry[0] instanceof String && objAry[1] instanceof Integer) {
935 builder.addParameter((String) objAry[0], SimpleRequestBuilder.objectToString(objAry[1]));
937 builder.buildRequestString();
938 throw new IllegalArgumentException(
939 "The first field of the object array have to be a String and the second have to be an Integer.");
942 String response = transport.execute(builder.buildRequestString());
944 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
952 public SensorValues getZoneSensorValues(String sessionToken, Integer zoneID, String zoneName) {
953 if (checkRequiredZone(zoneID, zoneName)) {
954 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.ZONE)
955 .addFunction(FunctionKeys.GET_SENSOR_VALUES).addParameter(ParameterKeys.TOKEN, sessionToken)
956 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
957 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
959 if (JSONResponseHandler.checkResponse(responseObj)) {
960 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
961 return new SensorValues(obj, zoneID, zoneName);
968 public boolean setZoneTemperatureControlConfig(String sessionToken, Integer zoneID, String zoneName,
969 String controlDSUID, Short controlMode, Integer referenceZone, Float ctrlOffset, Float emergencyValue,
970 Float manualValue, Float ctrlKp, Float ctrlTs, Float ctrlTi, Float ctrlKd, Float ctrlImin, Float ctrlImax,
971 Float ctrlYmin, Float ctrlYmax, Boolean ctrlAntiWindUp, Boolean ctrlKeepFloorWarm) {
972 if (checkRequiredZone(zoneID, zoneName)) {
973 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
974 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_TEMPERATION_CONTROL_CONFIG)
975 .addDefaultZoneParameter(sessionToken, zoneID, zoneName)
976 .addParameter(ParameterKeys.CONTROL_MODE, SimpleRequestBuilder.objectToString(controlMode))
977 .addParameter(ParameterKeys.CONTROL_DSUID, controlDSUID)
978 .addParameter(ParameterKeys.REFERENCE_ZONE, SimpleRequestBuilder.objectToString(referenceZone))
979 .addParameter(ParameterKeys.CTRL_OFFSET, SimpleRequestBuilder.objectToString(ctrlOffset))
980 .addParameter(ParameterKeys.EMERGENCY_VALUE, SimpleRequestBuilder.objectToString(emergencyValue))
981 .addParameter(ParameterKeys.MANUAL_VALUE, SimpleRequestBuilder.objectToString(manualValue))
982 .addParameter(ParameterKeys.CTRL_KP, SimpleRequestBuilder.objectToString(ctrlKp))
983 .addParameter(ParameterKeys.CTRL_TS, SimpleRequestBuilder.objectToString(ctrlTs))
984 .addParameter(ParameterKeys.CTRL_TI, SimpleRequestBuilder.objectToString(ctrlTi))
985 .addParameter(ParameterKeys.CTRL_KD, SimpleRequestBuilder.objectToString(ctrlKd))
986 .addParameter(ParameterKeys.CTRL_I_MIN, SimpleRequestBuilder.objectToString(ctrlImin))
987 .addParameter(ParameterKeys.CTRL_I_MAX, SimpleRequestBuilder.objectToString(ctrlImax))
988 .addParameter(ParameterKeys.CTRL_Y_MIN, SimpleRequestBuilder.objectToString(ctrlYmin))
989 .addParameter(ParameterKeys.CTRL_Y_MAX, SimpleRequestBuilder.objectToString(ctrlYmax))
990 .addParameter(ParameterKeys.CTRL_ANTI_WIND_UP, SimpleRequestBuilder.objectToString(ctrlAntiWindUp))
991 .addParameter(ParameterKeys.CTRL_KEEP_FLOOR_WARM,
992 SimpleRequestBuilder.objectToString(ctrlKeepFloorWarm))
993 .buildRequestString());
995 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1001 public boolean setZoneSensorSource(String sessionToken, Integer zoneID, String zoneName, SensorEnum sensorType,
1003 if (checkRequiredZone(zoneID, zoneName)) {
1004 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
1005 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_SENSOR_SOURCE)
1006 .addDefaultZoneParameter(sessionToken, zoneID, zoneName)
1007 .addParameter(ParameterKeys.SENSOR_TYPE, sensorType.getSensorType().toString())
1008 .addParameter(ParameterKeys.DSID, SimpleRequestBuilder.objectToString(dSID)).buildRequestString());
1010 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1016 public boolean clearZoneSensorSource(String sessionToken, Integer zoneID, String zoneName, SensorEnum sensorType) {
1017 if (checkRequiredZone(zoneID, zoneName)) {
1018 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
1019 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_TEMEPERATURE_CONTROL_VALUE)
1020 .addDefaultZoneParameter(sessionToken, zoneID, zoneName)
1021 .addParameter(ParameterKeys.SENSOR_TYPE, sensorType.getSensorType().toString())
1022 .buildRequestString());
1024 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1030 public TemperatureControlInternals getZoneTemperatureControlInternals(String sessionToken, Integer zoneID,
1032 if (checkRequiredZone(zoneID, zoneName)) {
1033 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
1034 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_INTERNALS)
1035 .addDefaultZoneParameter(sessionToken, zoneID, zoneName).buildRequestString());
1036 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1038 if (JSONResponseHandler.checkResponse(responseObj)) {
1039 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1040 return new TemperatureControlInternals(obj, zoneID, zoneName);
1047 public boolean setZoneOutputValue(String sessionToken, Integer zoneID, String zoneName, Short groupID,
1048 String groupName, Integer value) {
1049 if (value != null && checkRequiredZone(zoneID, zoneName)) {
1050 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
1051 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.SET_OUTPUT_VALUE)
1052 .addParameter(ParameterKeys.TOKEN, sessionToken).addParameter(ParameterKeys.NAME, zoneName)
1053 .addDefaultZoneGroupParameter(sessionToken, zoneID, zoneName, groupID, groupName)
1054 .addParameter(ParameterKeys.VALUE, SimpleRequestBuilder.objectToString(value))
1055 .buildRequestString());
1056 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1058 if (JSONResponseHandler.checkResponse(responseObj)) {
1066 public boolean zoneBlink(String sessionToken, Integer zoneID, String zoneName, Short groupID, String groupName) {
1067 if (checkRequiredZone(zoneID, zoneName)) {
1068 String response = transport.execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON)
1069 .addRequestClass(ClassKeys.ZONE).addFunction(FunctionKeys.BLINK)
1070 .addDefaultZoneGroupParameter(sessionToken, zoneID, zoneName, groupID, groupName)
1071 .buildRequestString());
1072 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1074 if (JSONResponseHandler.checkResponse(responseObj)) {
1082 public boolean pushZoneSensorValue(String sessionToken, Integer zoneID, String zoneName, Short groupID,
1083 String sourceDSUID, Float sensorValue, SensorEnum sensorType) {
1084 if (checkRequiredZone(zoneID, zoneName) && sensorType != null && sensorValue != null) {
1085 String response = transport
1086 .execute(SimpleRequestBuilder.buildNewRequest(InterfaceKeys.JSON).addRequestClass(ClassKeys.ZONE)
1087 .addFunction(FunctionKeys.PUSH_SENSOR_VALUE)
1088 .addDefaultZoneGroupParameter(sessionToken, zoneID, zoneName, groupID, null)
1089 .addParameter(ParameterKeys.SOURCE_DSUID, sourceDSUID)
1090 .addParameter(ParameterKeys.SENSOR_VALUE, SimpleRequestBuilder.objectToString(sensorValue))
1091 .addParameter(ParameterKeys.SENSOR_TYPE,
1092 SimpleRequestBuilder.objectToString(sensorType.getSensorType()))
1093 .buildRequestString());
1094 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1100 public List<TemperatureControlStatus> getApartmentTemperatureControlStatus(String sessionToken) {
1101 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
1102 .addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_STATUS)
1103 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1104 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1106 if (JSONResponseHandler.checkResponse(responseObj)) {
1107 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1108 if (obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).isJsonArray()) {
1109 JsonArray jArray = obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).getAsJsonArray();
1110 if (jArray.size() != 0) {
1111 List<TemperatureControlStatus> list = new ArrayList<>(jArray.size());
1112 Iterator<JsonElement> iter = jArray.iterator();
1113 while (iter.hasNext()) {
1114 TemperatureControlStatus tContStat = new TemperatureControlStatus(
1115 iter.next().getAsJsonObject());
1116 list.add(tContStat);
1126 public Map<Integer, TemperatureControlConfig> getApartmentTemperatureControlConfig(String sessionToken) {
1127 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
1128 .addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_CONFIG)
1129 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1130 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1132 if (JSONResponseHandler.checkResponse(responseObj)) {
1133 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1134 if (obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).isJsonArray()) {
1135 JsonArray jArray = obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).getAsJsonArray();
1136 if (jArray.size() != 0) {
1137 Map<Integer, TemperatureControlConfig> map = new HashMap<>(jArray.size());
1138 Iterator<JsonElement> iter = jArray.iterator();
1139 while (iter.hasNext()) {
1140 TemperatureControlConfig tContConf = new TemperatureControlConfig(
1141 iter.next().getAsJsonObject());
1142 map.put(tContConf.getZoneID(), tContConf);
1152 public Map<Integer, TemperatureControlValues> getApartmentTemperatureControlValues(String sessionToken) {
1153 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
1154 .addFunction(FunctionKeys.GET_TEMPERATURE_CONTROL_VALUES)
1155 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1156 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1158 if (JSONResponseHandler.checkResponse(responseObj)) {
1159 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1160 if (obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).isJsonArray()) {
1161 JsonArray jArray = obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).getAsJsonArray();
1162 if (jArray.size() != 0) {
1163 Map<Integer, TemperatureControlValues> map = new HashMap<>(jArray.size());
1164 Iterator<JsonElement> iter = jArray.iterator();
1165 while (iter.hasNext()) {
1166 TemperatureControlValues tContVal = new TemperatureControlValues(iter.next().getAsJsonObject());
1167 map.put(tContVal.getZoneID(), tContVal);
1177 public Map<Integer, AssignedSensors> getApartmentAssignedSensors(String sessionToken) {
1178 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
1179 .addFunction(FunctionKeys.GET_ASSIGNED_SENSORS).addParameter(ParameterKeys.TOKEN, sessionToken)
1180 .buildRequestString());
1181 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1183 if (JSONResponseHandler.checkResponse(responseObj)) {
1184 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1185 if (obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).isJsonArray()) {
1186 JsonArray jArray = obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).getAsJsonArray();
1187 if (jArray.size() != 0) {
1188 HashMap<Integer, AssignedSensors> map = new HashMap<>(jArray.size());
1189 Iterator<JsonElement> iter = jArray.iterator();
1190 while (iter.hasNext()) {
1191 AssignedSensors assignedSensors = new AssignedSensors(iter.next().getAsJsonObject());
1192 map.put(assignedSensors.getZoneID(), assignedSensors);
1202 public Map<Integer, BaseSensorValues> getApartmentSensorValues(String sessionToken) {
1203 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.APARTMENT)
1204 .addFunction(FunctionKeys.GET_SENSOR_VALUES).addParameter(ParameterKeys.TOKEN, sessionToken)
1205 .buildRequestString());
1206 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1208 if (JSONResponseHandler.checkResponse(responseObj)) {
1209 JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj);
1210 if (obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).isJsonArray()) {
1211 JsonArray jArray = obj.get(JSONApiResponseKeysEnum.ZONES.getKey()).getAsJsonArray();
1212 WeatherSensorData weather = new WeatherSensorData(obj);
1213 if (jArray.size() != 0) {
1214 HashMap<Integer, BaseSensorValues> map = new HashMap<>(jArray.size() + 1);
1215 Iterator<JsonElement> iter = jArray.iterator();
1216 while (iter.hasNext()) {
1217 SensorValues sensorValues = new SensorValues(iter.next().getAsJsonObject());
1218 map.put(sensorValues.getZoneID(), sensorValues);
1220 map.put(GeneralLibConstance.BROADCAST_ZONE_GROUP_ID, weather);
1229 public JsonObject query(String sessionToken, String query) {
1230 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1231 .addFunction(FunctionKeys.QUERY).addParameter(ParameterKeys.QUERY, query)
1232 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1234 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1235 if (JSONResponseHandler.checkResponse(responseObj)) {
1236 return JSONResponseHandler.getResultJsonObject(responseObj);
1242 public JsonObject query2(String sessionToken, String query) {
1243 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1244 .addFunction(FunctionKeys.QUERY2).addParameter(ParameterKeys.QUERY, query)
1245 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1247 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1248 if (JSONResponseHandler.checkResponse(responseObj)) {
1249 return JSONResponseHandler.getResultJsonObject(responseObj);
1255 public String propertyTreeGetString(String sessionToken, String path) {
1256 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1257 .addFunction(FunctionKeys.GET_STRING).addParameter(ParameterKeys.PATH, path)
1258 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1260 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1261 if (JSONResponseHandler.checkResponse(responseObj)) {
1262 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
1263 return responseObj.get(JSONApiResponseKeysEnum.VALUE.getKey()).getAsString();
1269 public Boolean propertyTreeSetString(String token, String path, String value) {
1270 String response = transport.execute(
1271 SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE).addFunction(FunctionKeys.SET_STRING)
1272 .addParameter(ParameterKeys.PATH, path).addParameter(ParameterKeys.TOKEN, token)
1273 .addParameter(ParameterKeys.VALUE, value).buildRequestString());
1275 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1279 public JsonArray propertyTreeGetChildren(String sessionToken, String path) {
1280 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1281 .addFunction(FunctionKeys.GET_CHILDREN).addParameter(ParameterKeys.PATH, path)
1282 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1284 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1285 if (JSONResponseHandler.checkResponse(responseObj)) {
1286 return responseObj.get(JSONApiResponseKeysEnum.RESULT.getKey()).getAsJsonArray();
1292 public Integer propertyTreeGetInteger(String sessionToken, String path) {
1293 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1294 .addFunction(FunctionKeys.GET_INTEGER).addParameter(ParameterKeys.PATH, path)
1295 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1297 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1298 if (JSONResponseHandler.checkResponse(responseObj)) {
1299 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
1300 return responseObj.get(JSONApiResponseKeysEnum.VALUE.getKey()).getAsInt();
1306 public Boolean propertyTreeSetInteger(String sessionToken, String path, Integer value) {
1307 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1308 .addFunction(FunctionKeys.SET_INTEGER).addParameter(ParameterKeys.PATH, path)
1309 .addParameter(ParameterKeys.TOKEN, sessionToken)
1310 .addParameter(ParameterKeys.VALUE, SimpleRequestBuilder.objectToString(value)).buildRequestString());
1312 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1316 public Boolean propertyTreeGetBoolean(String sessionToken, String path) {
1317 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1318 .addFunction(FunctionKeys.GET_BOOLEAN).addParameter(ParameterKeys.PATH, path)
1319 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1321 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1322 if (JSONResponseHandler.checkResponse(responseObj)) {
1323 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
1324 return responseObj.get(JSONApiResponseKeysEnum.VALUE.getKey()).getAsBoolean();
1330 public Boolean propertyTreeSetBoolean(String sessionToken, String path, Boolean value) {
1331 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1332 .addFunction(FunctionKeys.SET_BOOLEAN).addParameter(ParameterKeys.PATH, path)
1333 .addParameter(ParameterKeys.TOKEN, sessionToken)
1334 .addParameter(ParameterKeys.VALUE, SimpleRequestBuilder.objectToString(value)).buildRequestString());
1336 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1340 public String propertyTreeGetType(String sessionToken, String path) {
1341 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1342 .addFunction(FunctionKeys.GET_TYPE).addParameter(ParameterKeys.PATH, path)
1343 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1345 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1346 if (JSONResponseHandler.checkResponse(responseObj)) {
1347 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
1348 return responseObj.get(JSONApiResponseKeysEnum.VALUE.getKey()).getAsString();
1354 public Map<String, Boolean> propertyTreeGetFlages(String sessionToken, String path) {
1355 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1356 .addFunction(FunctionKeys.GET_FLAGS).addParameter(ParameterKeys.PATH, path)
1357 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1359 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1360 if (JSONResponseHandler.checkResponse(responseObj)) {
1361 responseObj = JSONResponseHandler.getResultJsonObject(responseObj);
1362 Set<Entry<String, JsonElement>> flagEntries = responseObj.entrySet();
1363 Map<String, Boolean> flags = new HashMap<>(flagEntries.size());
1364 for (Entry<String, JsonElement> flag : flagEntries) {
1365 flags.put(flag.getKey(), flag.getValue().getAsBoolean());
1373 public Boolean propertyTreeSetFlag(String sessionToken, String path, String flag, Boolean value) {
1374 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1375 .addFunction(FunctionKeys.SET_FLAG).addParameter(ParameterKeys.PATH, path)
1376 .addParameter(ParameterKeys.TOKEN, sessionToken).addParameter(ParameterKeys.FLAG, flag)
1377 .addParameter(ParameterKeys.VALUE, SimpleRequestBuilder.objectToString(value)).buildRequestString());
1379 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1383 public Boolean propertyTreeRemove(String sessionToken, String path) {
1384 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.PROPERTY_TREE)
1385 .addFunction(FunctionKeys.REMOVE).addParameter(ParameterKeys.PATH, path)
1386 .addParameter(ParameterKeys.TOKEN, sessionToken).buildRequestString());
1388 return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response));
1392 public Map<String, String> getSystemVersion() {
1393 String response = transport.execute(SimpleRequestBuilder.buildNewJsonRequest(ClassKeys.SYSTEM)
1394 .addFunction(FunctionKeys.VERSION).buildRequestString());
1396 JsonObject responseObj = JSONResponseHandler.toJsonObject(response);
1397 if (JSONResponseHandler.checkResponse(responseObj)) {
1398 Set<Entry<String, JsonElement>> entries = JSONResponseHandler.getResultJsonObject(responseObj).entrySet();
1399 Map<String, String> versions = new HashMap<>(entries.size());
1400 for (Entry<String, JsonElement> entry : entries) {
1401 versions.put(entry.getKey(), entry.getValue().getAsString());