added migrated 2.x add-ons
Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.openhab.binding.sensibo.internal.dto.AbstractRequest;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.TypeAdapter;
|
||||
import com.google.gson.stream.JsonReader;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class WireHelper {
|
||||
|
||||
private final Gson gson;
|
||||
|
||||
public WireHelper() {
|
||||
gson = new GsonBuilder().registerTypeAdapter(ZonedDateTime.class, new TypeAdapter<ZonedDateTime>() {
|
||||
@Override
|
||||
public void write(final JsonWriter out, final ZonedDateTime value) throws IOException {
|
||||
out.value(value.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZonedDateTime read(final JsonReader in) throws IOException {
|
||||
return ZonedDateTime.parse(in.nextString());
|
||||
}
|
||||
}).setPrettyPrinting().create();
|
||||
}
|
||||
|
||||
public <T> T deSerializeResponse(final String jsonClasspathName, final Type type) throws IOException {
|
||||
final String json = IOUtils.toString(WireHelper.class.getResourceAsStream(jsonClasspathName));
|
||||
|
||||
final JsonParser parser = new JsonParser();
|
||||
final JsonObject o = parser.parse(json).getAsJsonObject();
|
||||
assertEquals("success", o.get("status").getAsString());
|
||||
|
||||
return gson.fromJson(o.get("result"), type);
|
||||
}
|
||||
|
||||
public <T> T deSerializeFromClasspathResource(final String jsonClasspathName, final Type type) throws IOException {
|
||||
final String json = IOUtils.toString(WireHelper.class.getResourceAsStream(jsonClasspathName));
|
||||
return deSerializeFromString(json, type);
|
||||
}
|
||||
|
||||
public <T> T deSerializeFromString(final String json, final Type type) throws IOException {
|
||||
return gson.fromJson(json, type);
|
||||
}
|
||||
|
||||
public <T> String serialize(final AbstractRequest req) throws IOException {
|
||||
return gson.toJson(req);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import org.openhab.binding.sensibo.internal.WireHelper;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public abstract class AbstractSerializationDeserializationTest {
|
||||
|
||||
protected WireHelper wireHelper = new WireHelper();
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.AcStateDTO;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.MeasurementDTO;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.ModeCapabilityDTO;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.PodDetailsDTO;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.TemperatureDTO;
|
||||
import org.openhab.binding.sensibo.internal.model.SensiboSky;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class GetPodDetailsResponseTest extends AbstractSerializationDeserializationTest {
|
||||
|
||||
@Test
|
||||
public void testDeserializeWithSmartModeSetup() throws IOException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse("/get_pod_details_response_smartmode_settings.json",
|
||||
PodDetailsDTO.class);
|
||||
|
||||
assertEquals("34:15:13:AA:AA:AA", rsp.macAddress);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeserializeNullpointerExample() throws IOException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse("/get_pod_details_response_nullpointer.json",
|
||||
PodDetailsDTO.class);
|
||||
SensiboSky internal = new SensiboSky(rsp);
|
||||
|
||||
assertEquals("50175457", internal.getSerialNumber());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeserialize() throws IOException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse("/get_pod_details_response.json", PodDetailsDTO.class);
|
||||
|
||||
assertEquals("MA:C:AD:DR:ES:S0", rsp.macAddress);
|
||||
assertEquals("IN010056", rsp.firmwareVersion);
|
||||
assertEquals("cc3100_stm32f0", rsp.firmwareType);
|
||||
assertEquals("SERIALNUMASSTRING", rsp.serialNumber);
|
||||
assertEquals("C", rsp.temperatureUnit);
|
||||
assertEquals("skyv2", rsp.productModel);
|
||||
assertAcState(rsp.acState);
|
||||
assertMeasurement(rsp.lastMeasurement);
|
||||
assertRemoteCapabilities(rsp.getRemoteCapabilities());
|
||||
}
|
||||
|
||||
private void assertRemoteCapabilities(final Map<String, ModeCapabilityDTO> remoteCapabilities) {
|
||||
assertNotNull(remoteCapabilities);
|
||||
|
||||
assertEquals(5, remoteCapabilities.size());
|
||||
final ModeCapabilityDTO mode = remoteCapabilities.get("heat");
|
||||
|
||||
assertNotNull(mode.swingModes);
|
||||
assertNotNull(mode.fanLevels);
|
||||
assertNotNull(mode.temperatures);
|
||||
final Map<String, TemperatureDTO> temperatures = mode.temperatures;
|
||||
final TemperatureDTO temperature = temperatures.get("C");
|
||||
assertNotNull(temperature);
|
||||
assertNotNull(temperature.validValues);
|
||||
}
|
||||
|
||||
private void assertMeasurement(final MeasurementDTO lastMeasurement) {
|
||||
assertNotNull(lastMeasurement);
|
||||
assertNull(lastMeasurement.batteryVoltage);
|
||||
assertEquals(Double.valueOf("22.5"), lastMeasurement.temperature);
|
||||
assertEquals(Double.valueOf("24.2"), lastMeasurement.humidity);
|
||||
assertEquals(Integer.valueOf("-71"), lastMeasurement.wifiSignalStrength);
|
||||
assertEquals(ZonedDateTime.parse("2019-05-05T07:52:11Z"), lastMeasurement.measurementTimestamp.time);
|
||||
}
|
||||
|
||||
private void assertAcState(final AcStateDTO acState) {
|
||||
assertNotNull(acState);
|
||||
|
||||
assertTrue(acState.on);
|
||||
assertEquals("medium_high", acState.fanLevel);
|
||||
assertEquals("C", acState.temperatureUnit);
|
||||
assertEquals(21, acState.targetTemperature.intValue());
|
||||
assertEquals("heat", acState.mode);
|
||||
assertEquals("rangeFull", acState.swing);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.sensibo.internal.dto.pods.PodDTO;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class GetPodsResponseTest extends AbstractSerializationDeserializationTest {
|
||||
|
||||
@Test
|
||||
public void testDeserialize() throws IOException {
|
||||
final Type type = new TypeToken<ArrayList<PodDTO>>() {
|
||||
}.getType();
|
||||
|
||||
final List<PodDTO> rsp = wireHelper.deSerializeResponse("/get_pods_response.json", type);
|
||||
|
||||
assertEquals(1, rsp.size());
|
||||
assertEquals("PODID", rsp.get(0).id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.sensibo.internal.dto.setacstateproperty.SetAcStatePropertyRequest;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class SetAcStatePropertyRequestTest extends AbstractSerializationDeserializationTest {
|
||||
|
||||
@Test
|
||||
public void testSerializeDeserialize() throws IOException {
|
||||
SetAcStatePropertyRequest req = new SetAcStatePropertyRequest("PODID", "targetTemperature", "mode");
|
||||
String serializedJson = wireHelper.serialize(req);
|
||||
|
||||
final SetAcStatePropertyRequest deSerializedRequest = wireHelper.deSerializeFromString(serializedJson,
|
||||
SetAcStatePropertyRequest.class);
|
||||
|
||||
assertEquals("mode", deSerializedRequest.newValue);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.sensibo.internal.dto.setacstateproperty.SetAcStatePropertyReponse;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class SetAcStatePropertyResponseTest extends AbstractSerializationDeserializationTest {
|
||||
|
||||
@Test
|
||||
public void testDeserialize() throws IOException {
|
||||
final SetAcStatePropertyReponse rsp = wireHelper.deSerializeResponse("/set_acstate_response.json",
|
||||
SetAcStatePropertyReponse.class);
|
||||
|
||||
assertNotNull(rsp.acState);
|
||||
assertTrue(rsp.acState.on);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.dto;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.AcStateDTO;
|
||||
import org.openhab.binding.sensibo.internal.dto.settimer.SetTimerRequest;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class SetTimerRequestTest extends AbstractSerializationDeserializationTest {
|
||||
|
||||
@Test
|
||||
public void testSerializeDeserialize() throws IOException {
|
||||
AcStateDTO acState = new AcStateDTO(false, "fanLevel", "C", 21, "mode", "swing");
|
||||
SetTimerRequest req = new SetTimerRequest("PODID", 60, acState);
|
||||
String serializedJson = wireHelper.serialize(req);
|
||||
|
||||
final SetTimerRequest deSerializedRequest = wireHelper.deSerializeFromString(serializedJson,
|
||||
SetTimerRequest.class);
|
||||
assertNotNull(deSerializedRequest.acState);
|
||||
assertEquals(60, deSerializedRequest.minutesFromNow);
|
||||
assertFalse(deSerializedRequest.acState.on);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.handler;
|
||||
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.get;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.openhab.binding.sensibo.internal.config.SensiboAccountConfiguration;
|
||||
import org.openhab.binding.sensibo.internal.model.SensiboSky;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
import org.openhab.core.thing.Bridge;
|
||||
import org.openhab.core.thing.ThingUID;
|
||||
|
||||
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
|
||||
import com.github.tomakehurst.wiremock.junit.WireMockRule;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class SensiboAccountHandlerTest {
|
||||
@Rule
|
||||
public WireMockRule wireMockRule = new WireMockRule(WireMockConfiguration.options().dynamicPort());
|
||||
|
||||
@Mock
|
||||
private Bridge sensiboAccountMock;
|
||||
|
||||
private HttpClient httpClient;
|
||||
@Mock
|
||||
private Configuration configuration;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
httpClient = new HttpClient();
|
||||
httpClient.start();
|
||||
SensiboAccountHandler.API_ENDPOINT = "http://localhost:" + wireMockRule.port() + "/api"; // https://home.sensibo.com/api/v2
|
||||
}
|
||||
|
||||
@After
|
||||
public void shutdown() throws Exception {
|
||||
httpClient.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitialize1() throws InterruptedException, IOException {
|
||||
testInitialize("/get_pods_response.json", "/get_pod_details_response.json");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitializeMarco() throws InterruptedException, IOException {
|
||||
testInitialize("/get_pods_response.json", "/get_pod_details_response_marco.json");
|
||||
}
|
||||
|
||||
private void testInitialize(String podsResponse, String podDetailsResponse)
|
||||
throws InterruptedException, IOException {
|
||||
// Setup account
|
||||
final SensiboAccountConfiguration accountConfig = new SensiboAccountConfiguration();
|
||||
accountConfig.apiKey = "APIKEY";
|
||||
when(configuration.as(eq(SensiboAccountConfiguration.class))).thenReturn(accountConfig);
|
||||
|
||||
// Setup initial response
|
||||
final String getPodsResponse = IOUtils.toString(getClass().getResourceAsStream(podsResponse));
|
||||
stubFor(get(urlEqualTo("/api/v2/users/me/pods?apiKey=APIKEY"))
|
||||
.willReturn(aResponse().withStatus(200).withBody(getPodsResponse)));
|
||||
|
||||
// Setup 2nd response with details
|
||||
final String getPodDetailsResponse = IOUtils.toString(getClass().getResourceAsStream(podDetailsResponse));
|
||||
stubFor(get(urlEqualTo("/api/v2/pods/PODID?apiKey=APIKEY&fields=*"))
|
||||
.willReturn(aResponse().withStatus(200).withBody(getPodDetailsResponse)));
|
||||
|
||||
when(sensiboAccountMock.getConfiguration()).thenReturn(configuration);
|
||||
when(sensiboAccountMock.getUID()).thenReturn(new ThingUID("sensibo:account:thinguid"));
|
||||
|
||||
final SensiboAccountHandler subject = new SensiboAccountHandler(sensiboAccountMock, httpClient);
|
||||
// Async, poll for status
|
||||
subject.initialize();
|
||||
|
||||
// Verify num things found == 1
|
||||
int numPods = 0;
|
||||
for (int i = 0; i < 20; i++) {
|
||||
final List<SensiboSky> things = subject.getModel().getPods();
|
||||
numPods = things.size();
|
||||
if (numPods == 1) {
|
||||
break;
|
||||
} else {
|
||||
// Wait some more
|
||||
Thread.sleep(200);
|
||||
}
|
||||
}
|
||||
|
||||
assertEquals(1, numPods);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.sensibo.internal.handler;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
import org.mockito.Mockito;
|
||||
import org.openhab.binding.sensibo.internal.SensiboBindingConstants;
|
||||
import org.openhab.binding.sensibo.internal.SensiboCommunicationException;
|
||||
import org.openhab.binding.sensibo.internal.WireHelper;
|
||||
import org.openhab.binding.sensibo.internal.dto.poddetails.PodDetailsDTO;
|
||||
import org.openhab.binding.sensibo.internal.handler.SensiboSkyHandler.StateChange;
|
||||
import org.openhab.binding.sensibo.internal.model.SensiboModel;
|
||||
import org.openhab.binding.sensibo.internal.model.SensiboSky;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.library.types.QuantityType;
|
||||
import org.openhab.core.library.unit.ImperialUnits;
|
||||
import org.openhab.core.library.unit.SIUnits;
|
||||
import org.openhab.core.thing.Channel;
|
||||
import org.openhab.core.thing.ChannelUID;
|
||||
import org.openhab.core.thing.Thing;
|
||||
import org.openhab.core.thing.ThingUID;
|
||||
|
||||
/**
|
||||
* @author Arne Seime - Initial contribution
|
||||
*/
|
||||
public class SensiboSkyHandlerTest {
|
||||
|
||||
private final WireHelper wireHelper = new WireHelper();
|
||||
|
||||
@Test
|
||||
public void testStateChangeValidation() throws IOException, SensiboCommunicationException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse("/get_pod_details_response.json", PodDetailsDTO.class);
|
||||
SensiboSky sky = new SensiboSky(rsp);
|
||||
Thing thing = Mockito.mock(Thing.class);
|
||||
SensiboSkyHandler handler = new SensiboSkyHandler(thing);
|
||||
|
||||
// Target temperature
|
||||
StateChange stateChangeCheck = handler.checkStateChangeValid(sky, SensiboSkyHandler.TARGET_TEMPERATURE_PROPERTY,
|
||||
new DecimalType(123));
|
||||
assertFalse(stateChangeCheck.valid);
|
||||
assertNotNull(stateChangeCheck.validationMessage);
|
||||
assertTrue(handler.checkStateChangeValid(sky, SensiboSkyHandler.TARGET_TEMPERATURE_PROPERTY,
|
||||
new DecimalType(10)).valid);
|
||||
|
||||
// Mode
|
||||
StateChange stateChangeCheckMode = handler.checkStateChangeValid(sky, "mode", "invalid");
|
||||
assertFalse(stateChangeCheckMode.valid);
|
||||
assertNotNull(stateChangeCheckMode.validationMessage);
|
||||
assertTrue(handler.checkStateChangeValid(sky, "mode", "auto").valid);
|
||||
|
||||
// Swing
|
||||
StateChange stateChangeCheckSwing = handler.checkStateChangeValid(sky, "swing", "invalid");
|
||||
assertFalse(stateChangeCheckSwing.valid);
|
||||
assertNotNull(stateChangeCheckSwing.validationMessage);
|
||||
assertTrue(handler.checkStateChangeValid(sky, "swing", "stopped").valid);
|
||||
|
||||
// FanLevel
|
||||
StateChange stateChangeCheckFanLevel = handler.checkStateChangeValid(sky, "fanLevel", "invalid");
|
||||
assertFalse(stateChangeCheckFanLevel.valid);
|
||||
assertNotNull(stateChangeCheckFanLevel.validationMessage);
|
||||
assertTrue(handler.checkStateChangeValid(sky, "fanLevel", "high").valid);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTemperatureConversion() throws IOException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse("/get_pod_details_response.json", PodDetailsDTO.class);
|
||||
SensiboSky sky = new SensiboSky(rsp);
|
||||
Thing thing = Mockito.mock(Thing.class);
|
||||
Mockito.when(thing.getUID()).thenReturn(new ThingUID("sensibo:account:thinguid"));
|
||||
|
||||
Map<String, Object> config = new HashMap<>();
|
||||
config.put("macAddress", sky.getMacAddress());
|
||||
Mockito.when(thing.getConfiguration()).thenReturn(new Configuration(config));
|
||||
|
||||
SensiboSkyHandler handler = Mockito.spy(new SensiboSkyHandler(thing));
|
||||
handler.initialize();
|
||||
|
||||
SensiboModel model = new SensiboModel(0);
|
||||
model.addPod(sky);
|
||||
|
||||
// Once with Celcius argument
|
||||
handler.handleCommand(new ChannelUID(thing.getUID(), SensiboBindingConstants.CHANNEL_TARGET_TEMPERATURE),
|
||||
new QuantityType<>(50, ImperialUnits.FAHRENHEIT), model);
|
||||
|
||||
// Once with Fahrenheit
|
||||
handler.handleCommand(new ChannelUID(thing.getUID(), SensiboBindingConstants.CHANNEL_TARGET_TEMPERATURE),
|
||||
new QuantityType<>(10, SIUnits.CELSIUS), model);
|
||||
|
||||
// Once with Decimal directly
|
||||
handler.handleCommand(new ChannelUID(thing.getUID(), SensiboBindingConstants.CHANNEL_TARGET_TEMPERATURE),
|
||||
new DecimalType(10), model);
|
||||
|
||||
ArgumentCaptor<DecimalType> valueCapture = ArgumentCaptor.forClass(DecimalType.class);
|
||||
Mockito.verify(handler, Mockito.times(3)).updateAcState(ArgumentMatchers.eq(sky), ArgumentMatchers.anyString(),
|
||||
valueCapture.capture());
|
||||
assertEquals(new DecimalType(10), valueCapture.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddDynamicChannelsMarco() throws IOException, SensiboCommunicationException {
|
||||
testAddDynamicChannels("/get_pod_details_response_marco.json");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddDynamicChannels() throws IOException, SensiboCommunicationException {
|
||||
testAddDynamicChannels("/get_pod_details_response.json");
|
||||
}
|
||||
|
||||
private void testAddDynamicChannels(String podDetailsResponse) throws IOException, SensiboCommunicationException {
|
||||
final PodDetailsDTO rsp = wireHelper.deSerializeResponse(podDetailsResponse, PodDetailsDTO.class);
|
||||
SensiboSky sky = new SensiboSky(rsp);
|
||||
Thing thing = Mockito.mock(Thing.class);
|
||||
Mockito.when(thing.getUID()).thenReturn(new ThingUID("sensibo:account:thinguid"));
|
||||
SensiboSkyHandler handler = Mockito.spy(new SensiboSkyHandler(thing));
|
||||
List<Channel> dynamicChannels = handler.createDynamicChannels(sky);
|
||||
assertTrue(!dynamicChannels.isEmpty());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,352 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": {
|
||||
"configGroup": "stable1",
|
||||
"macAddress": "MA:C:AD:DR:ES:S0",
|
||||
"cleanFiltersNotificationEnabled": true,
|
||||
"room": {
|
||||
"name": "Basement",
|
||||
"icon": "den"
|
||||
},
|
||||
"firmwareType": "cc3100_stm32f0",
|
||||
"productModel": "skyv2",
|
||||
"sensorsCalibration": {
|
||||
"temperature": 0,
|
||||
"humidity": 0
|
||||
},
|
||||
"temperatureUnit": "C",
|
||||
"isGeofenceOnExitEnabled": false,
|
||||
"connectionStatus": {
|
||||
"isAlive": true,
|
||||
"lastSeen": {
|
||||
"secondsAgo": 80,
|
||||
"time": "2019-05-05T07:52:11Z"
|
||||
}
|
||||
},
|
||||
"id": "PODID",
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "medium_high",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 21,
|
||||
"mode": "heat",
|
||||
"swing": "rangeFull"
|
||||
},
|
||||
"smartMode": null,
|
||||
"shouldShowFilterCleaningNotification": true,
|
||||
"location": {
|
||||
"latLon": [
|
||||
59.0000000,
|
||||
10.0000000
|
||||
],
|
||||
"updateTime": null,
|
||||
"country": "Norway",
|
||||
"createTime": {
|
||||
"secondsAgo": 17857639,
|
||||
"time": "2018-10-10T15:26:12Z"
|
||||
},
|
||||
"address": [
|
||||
"Streetname",
|
||||
"zip city",
|
||||
"Norway"
|
||||
],
|
||||
"id": "ADDRESSID"
|
||||
},
|
||||
"currentlyAvailableFirmwareVersion": "IN010056",
|
||||
"isClimateReactGeofenceOnExitEnabled": false,
|
||||
"remoteCapabilities": {
|
||||
"modes": {
|
||||
"dry": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"auto": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"heat": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
10,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
50,
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"fan": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"cool": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"serial": "SERIALNUMASSTRING",
|
||||
"firmwareVersion": "IN010056",
|
||||
"measurements": {
|
||||
"batteryVoltage": null,
|
||||
"temperature": 22.5,
|
||||
"humidity": 24.2,
|
||||
"time": {
|
||||
"secondsAgo": 80,
|
||||
"time": "2019-05-05T07:52:11Z"
|
||||
},
|
||||
"rssi": "-71",
|
||||
"piezo": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": {
|
||||
"configGroup": "stable",
|
||||
"macAddress": "MA:C:AD:DR:ES:S0",
|
||||
"isGeofenceOnExitEnabled": false,
|
||||
"sensorsCalibration": {
|
||||
"temperature": 0.0,
|
||||
"humidity": 0.0
|
||||
},
|
||||
"cleanFiltersNotificationEnabled": true,
|
||||
"connectionStatus": {
|
||||
"isAlive": true,
|
||||
"lastSeen": {
|
||||
"secondsAgo": 51,
|
||||
"time": "2019-10-08T04:40:03Z"
|
||||
}
|
||||
},
|
||||
"acState": {
|
||||
"on": false,
|
||||
"mode": "dry",
|
||||
"swing": "stopped"
|
||||
},
|
||||
"serial": "serial",
|
||||
"id": "PODID",
|
||||
"firmwareVersion": "IN010056",
|
||||
"firmwareType": "cc3100_stm32f0",
|
||||
"measurements": {
|
||||
"batteryVoltage": null,
|
||||
"temperature": 23.2,
|
||||
"humidity": 59.5,
|
||||
"time": {
|
||||
"secondsAgo": 51,
|
||||
"time": "2019-10-08T04:40:03Z"
|
||||
},
|
||||
"rssi": "-63",
|
||||
"piezo": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"remoteFlavor": "Enormous Stegosaurus",
|
||||
"smartMode": null,
|
||||
"shouldShowFilterCleaningNotification": false,
|
||||
"location": {
|
||||
"latLon": [
|
||||
41.9279707,
|
||||
12.4625373
|
||||
],
|
||||
"updateTime": {
|
||||
"secondsAgo": 75125215,
|
||||
"time": "2017-05-21T16:33:59Z"
|
||||
},
|
||||
"name": "Casa di Marco",
|
||||
"country": "Italia",
|
||||
"createTime": {
|
||||
"secondsAgo": 129385606,
|
||||
"time": "2015-09-01T16:14:08Z"
|
||||
},
|
||||
"address": [
|
||||
"XXX",
|
||||
"XX",
|
||||
"XXX"
|
||||
],
|
||||
"id": "XX"
|
||||
},
|
||||
"currentlyAvailableFirmwareVersion": "IN010056",
|
||||
"tags": [],
|
||||
"productModel": "skyv2",
|
||||
"schedules": [
|
||||
{
|
||||
"nextTime": null,
|
||||
"podUid": "PODUID",
|
||||
"recurringDays": [],
|
||||
"createTimeSecondsAgo": 67070291,
|
||||
"isEnabled": false,
|
||||
"createTime": "2017-08-22T22:02:43",
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "quiet",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 26,
|
||||
"mode": "cool"
|
||||
},
|
||||
"targetTimeLocal": "03:00",
|
||||
"timezone": "Europe/Rome",
|
||||
"nextTimeSecondsFromNow": null,
|
||||
"causedBy": {
|
||||
"username": "XX",
|
||||
"firstName": "XX",
|
||||
"lastName": "XX",
|
||||
"email": "XXX@domain.it"
|
||||
},
|
||||
"id": "XXXXX"
|
||||
},
|
||||
{
|
||||
"nextTime": null,
|
||||
"podUid": "PODUID",
|
||||
"recurringDays": [],
|
||||
"createTimeSecondsAgo": 4605564,
|
||||
"isEnabled": false,
|
||||
"createTime": "2019-08-15T21:21:30",
|
||||
"acState": {
|
||||
"on": false
|
||||
},
|
||||
"targetTimeLocal": "05:30",
|
||||
"timezone": "Europe/Rome",
|
||||
"nextTimeSecondsFromNow": null,
|
||||
"causedBy": {
|
||||
"username": "XX",
|
||||
"firstName": "XX",
|
||||
"lastName": "XX",
|
||||
"email": "XXX@domain.it"
|
||||
},
|
||||
"id": "QwNtU5zq2D"
|
||||
},
|
||||
{
|
||||
"nextTime": null,
|
||||
"podUid": "E69jFpsP",
|
||||
"recurringDays": [],
|
||||
"createTimeSecondsAgo": 67070257,
|
||||
"isEnabled": false,
|
||||
"createTime": "2017-08-22T22:03:17",
|
||||
"acState": {
|
||||
"on": false
|
||||
},
|
||||
"targetTimeLocal": "03:30",
|
||||
"timezone": "Europe/Rome",
|
||||
"nextTimeSecondsFromNow": null,
|
||||
"causedBy": {
|
||||
"username": "XX",
|
||||
"firstName": "XX",
|
||||
"lastName": "XX",
|
||||
"email": "XXX@domain.it"
|
||||
},
|
||||
"id": "RwVeW8U3Hw"
|
||||
},
|
||||
{
|
||||
"nextTime": null,
|
||||
"podUid": "E69jFpsP",
|
||||
"recurringDays": [],
|
||||
"createTimeSecondsAgo": 4605590,
|
||||
"isEnabled": false,
|
||||
"createTime": "2019-08-15T21:21:04",
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "quiet",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 26,
|
||||
"mode": "cool"
|
||||
},
|
||||
"targetTimeLocal": "05:00",
|
||||
"timezone": "Europe/Rome",
|
||||
"nextTimeSecondsFromNow": null,
|
||||
"causedBy": {
|
||||
"username": "XX",
|
||||
"firstName": "XX",
|
||||
"lastName": "XX",
|
||||
"email": "XXX@domain.it"
|
||||
},
|
||||
"id": "ruzhJCVBeW"
|
||||
}
|
||||
],
|
||||
"isClimateReactGeofenceOnExitEnabled": false,
|
||||
"remoteCapabilities": {
|
||||
"modes": {
|
||||
"dry": {
|
||||
"temperatures": {
|
||||
|
||||
},
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull"
|
||||
]
|
||||
},
|
||||
"auto": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto",
|
||||
"strong"
|
||||
]
|
||||
},
|
||||
"heat": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
50,
|
||||
52,
|
||||
54,
|
||||
55,
|
||||
57,
|
||||
59,
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto",
|
||||
"strong"
|
||||
]
|
||||
},
|
||||
"fan": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto",
|
||||
"strong"
|
||||
]
|
||||
},
|
||||
"cool": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto",
|
||||
"strong"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"remote": {
|
||||
"window": false,
|
||||
"toggle": false
|
||||
},
|
||||
"room": {
|
||||
"name": "Camera da letto",
|
||||
"icon": "Bedroom"
|
||||
},
|
||||
"temperatureUnit": "C",
|
||||
"timer": {
|
||||
"acState": {
|
||||
"on": false,
|
||||
"mode": "dry",
|
||||
"swing": "stopped"
|
||||
},
|
||||
"targetTimeSecondsFromNow": -5275495,
|
||||
"createTimeSecondsAgo": 5277295,
|
||||
"isEnabled": false,
|
||||
"causedBy": {
|
||||
"username": "XX",
|
||||
"firstName": "XX",
|
||||
"lastName": "XX",
|
||||
"email": "XXX@domain.it"
|
||||
},
|
||||
"id": "KWcppTmrbb",
|
||||
"targetTime": "2019-08-08T03:15:59",
|
||||
"createTime": "2019-08-08T02:45:59"
|
||||
},
|
||||
"motionSensors": [],
|
||||
"remoteAlternatives": [
|
||||
"_daikin2b_comfort",
|
||||
"_daikin2f_33",
|
||||
"_daikin2b_33",
|
||||
"_daikin2b_33_comfort_horizontal_swinging",
|
||||
"_daikin2b",
|
||||
"_daikin2c",
|
||||
"_daikin2bf_comfort",
|
||||
"_daikin2_33",
|
||||
"_daikin2f"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,599 @@
|
||||
{
|
||||
|
||||
"status": "success",
|
||||
|
||||
"result": {
|
||||
|
||||
"configGroup": "stable",
|
||||
|
||||
"macAddress": "xxxxxxxx",
|
||||
|
||||
"isGeofenceOnExitEnabled": false,
|
||||
|
||||
"sensorsCalibration": {
|
||||
|
||||
"temperature": 0.0,
|
||||
|
||||
"humidity": 0.0
|
||||
|
||||
},
|
||||
|
||||
"cleanFiltersNotificationEnabled": true,
|
||||
|
||||
"connectionStatus": {
|
||||
|
||||
"isAlive": true,
|
||||
|
||||
"lastSeen": {
|
||||
|
||||
"secondsAgo": 14,
|
||||
|
||||
"time": "2019-08-15T11:44:00Z"
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"acState": {
|
||||
|
||||
"on": true,
|
||||
|
||||
"targetTemperature": 25,
|
||||
|
||||
"temperatureUnit": "C",
|
||||
|
||||
"mode": "cool",
|
||||
|
||||
"fanLevel": "auto"
|
||||
|
||||
},
|
||||
|
||||
"motionSensors": [],
|
||||
|
||||
"id": "aGbsMfYn",
|
||||
|
||||
"firmwareVersion": "IN010056",
|
||||
|
||||
"firmwareType": "cc3100_stm32f0",
|
||||
|
||||
"measurements": {
|
||||
|
||||
"temperature": 29.1,
|
||||
|
||||
"humidity": 71.5,
|
||||
|
||||
"time": {
|
||||
|
||||
"secondsAgo": 14,
|
||||
|
||||
"time": "2019-08-15T11:44:00Z"
|
||||
|
||||
},
|
||||
|
||||
"rssi": "-52",
|
||||
|
||||
"piezo": [
|
||||
|
||||
null,
|
||||
|
||||
null
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"smartMode": {
|
||||
|
||||
"deviceUid": "aGbsMfYn",
|
||||
|
||||
"highTemperatureThreshold": 30.0,
|
||||
|
||||
"type": "temperature",
|
||||
|
||||
"lowTemperatureState": {
|
||||
|
||||
"on": false,
|
||||
|
||||
"fanLevel": "low",
|
||||
|
||||
"temperatureUnit": "C",
|
||||
|
||||
"targetTemperature": 24,
|
||||
|
||||
"mode": "cool"
|
||||
|
||||
},
|
||||
|
||||
"enabled": false,
|
||||
|
||||
"highTemperatureState": {
|
||||
|
||||
"on": true,
|
||||
|
||||
"fanLevel": "low",
|
||||
|
||||
"temperatureUnit": "C",
|
||||
|
||||
"targetTemperature": 24,
|
||||
|
||||
"mode": "cool"
|
||||
|
||||
},
|
||||
|
||||
"lowTemperatureThreshold": 25.0
|
||||
|
||||
},
|
||||
|
||||
"shouldShowFilterCleaningNotification": false,
|
||||
|
||||
"location": {
|
||||
|
||||
"latLon": [
|
||||
|
||||
12.9331702,
|
||||
|
||||
100.9190772
|
||||
|
||||
],
|
||||
|
||||
"updateTime": {
|
||||
|
||||
"secondsAgo": 11618978,
|
||||
|
||||
"time": "2019-04-03T00:14:36Z"
|
||||
|
||||
},
|
||||
|
||||
"name": "Karel\u0027s place",
|
||||
|
||||
"country": "Thailand",
|
||||
|
||||
"createTime": {
|
||||
|
||||
"secondsAgo": 48921206,
|
||||
|
||||
"time": "2018-01-26T06:30:48Z"
|
||||
|
||||
},
|
||||
|
||||
"address": [
|
||||
|
||||
"xxx",
|
||||
|
||||
"xxx",
|
||||
|
||||
"xxx"
|
||||
|
||||
],
|
||||
|
||||
"id": "2Cr6zmCY5W"
|
||||
|
||||
},
|
||||
|
||||
"currentlyAvailableFirmwareVersion": "IN010056",
|
||||
|
||||
"tags": [],
|
||||
|
||||
"productModel": "skyv2",
|
||||
|
||||
"isClimateReactGeofenceOnExitEnabled": false,
|
||||
|
||||
"remoteCapabilities": {
|
||||
|
||||
"modes": {
|
||||
|
||||
"dry": {
|
||||
|
||||
"temperatures": {
|
||||
|
||||
"C": {
|
||||
|
||||
"isNative": true,
|
||||
|
||||
"values": [
|
||||
|
||||
17,
|
||||
|
||||
18,
|
||||
|
||||
19,
|
||||
|
||||
20,
|
||||
|
||||
21,
|
||||
|
||||
22,
|
||||
|
||||
23,
|
||||
|
||||
24,
|
||||
|
||||
25,
|
||||
|
||||
26,
|
||||
|
||||
27,
|
||||
|
||||
28,
|
||||
|
||||
29,
|
||||
|
||||
30
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"F": {
|
||||
|
||||
"isNative": false,
|
||||
|
||||
"values": [
|
||||
|
||||
63,
|
||||
|
||||
64,
|
||||
|
||||
66,
|
||||
|
||||
68,
|
||||
|
||||
70,
|
||||
|
||||
72,
|
||||
|
||||
73,
|
||||
|
||||
75,
|
||||
|
||||
77,
|
||||
|
||||
79,
|
||||
|
||||
81,
|
||||
|
||||
82,
|
||||
|
||||
84,
|
||||
|
||||
86
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"fanLevels": [
|
||||
|
||||
"low",
|
||||
|
||||
"medium",
|
||||
|
||||
"high",
|
||||
|
||||
"auto"
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"heat": {
|
||||
|
||||
"temperatures": {
|
||||
|
||||
"C": {
|
||||
|
||||
"isNative": true,
|
||||
|
||||
"values": [
|
||||
|
||||
17,
|
||||
|
||||
18,
|
||||
|
||||
19,
|
||||
|
||||
20,
|
||||
|
||||
21,
|
||||
|
||||
22,
|
||||
|
||||
23,
|
||||
|
||||
24,
|
||||
|
||||
25,
|
||||
|
||||
26,
|
||||
|
||||
27,
|
||||
|
||||
28,
|
||||
|
||||
29,
|
||||
|
||||
30
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"F": {
|
||||
|
||||
"isNative": false,
|
||||
|
||||
"values": [
|
||||
|
||||
63,
|
||||
|
||||
64,
|
||||
|
||||
66,
|
||||
|
||||
68,
|
||||
|
||||
70,
|
||||
|
||||
72,
|
||||
|
||||
73,
|
||||
|
||||
75,
|
||||
|
||||
77,
|
||||
|
||||
79,
|
||||
|
||||
81,
|
||||
|
||||
82,
|
||||
|
||||
84,
|
||||
|
||||
86
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"fanLevels": [
|
||||
|
||||
"low",
|
||||
|
||||
"medium",
|
||||
|
||||
"high",
|
||||
|
||||
"auto"
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"fan": {
|
||||
|
||||
"temperatures": {
|
||||
|
||||
"C": {
|
||||
|
||||
"isNative": true,
|
||||
|
||||
"values": [
|
||||
|
||||
17,
|
||||
|
||||
18,
|
||||
|
||||
19,
|
||||
|
||||
20,
|
||||
|
||||
21,
|
||||
|
||||
22,
|
||||
|
||||
23,
|
||||
|
||||
24,
|
||||
|
||||
25,
|
||||
|
||||
26,
|
||||
|
||||
27,
|
||||
|
||||
28,
|
||||
|
||||
29,
|
||||
|
||||
30
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"F": {
|
||||
|
||||
"isNative": false,
|
||||
|
||||
"values": [
|
||||
|
||||
63,
|
||||
|
||||
64,
|
||||
|
||||
66,
|
||||
|
||||
68,
|
||||
|
||||
70,
|
||||
|
||||
72,
|
||||
|
||||
73,
|
||||
|
||||
75,
|
||||
|
||||
77,
|
||||
|
||||
79,
|
||||
|
||||
81,
|
||||
|
||||
82,
|
||||
|
||||
84,
|
||||
|
||||
86
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"fanLevels": [
|
||||
|
||||
"low",
|
||||
|
||||
"medium",
|
||||
|
||||
"high",
|
||||
|
||||
"auto"
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"cool": {
|
||||
|
||||
"temperatures": {
|
||||
|
||||
"C": {
|
||||
|
||||
"isNative": true,
|
||||
|
||||
"values": [
|
||||
|
||||
17,
|
||||
|
||||
18,
|
||||
|
||||
19,
|
||||
|
||||
20,
|
||||
|
||||
21,
|
||||
|
||||
22,
|
||||
|
||||
23,
|
||||
|
||||
24,
|
||||
|
||||
25,
|
||||
|
||||
26,
|
||||
|
||||
27,
|
||||
|
||||
28,
|
||||
|
||||
29,
|
||||
|
||||
30
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
"F": {
|
||||
|
||||
"isNative": false,
|
||||
|
||||
"values": [
|
||||
|
||||
63,
|
||||
|
||||
64,
|
||||
|
||||
66,
|
||||
|
||||
68,
|
||||
|
||||
70,
|
||||
|
||||
72,
|
||||
|
||||
73,
|
||||
|
||||
75,
|
||||
|
||||
77,
|
||||
|
||||
79,
|
||||
|
||||
81,
|
||||
|
||||
82,
|
||||
|
||||
84,
|
||||
|
||||
86
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"fanLevels": [
|
||||
|
||||
"low",
|
||||
|
||||
"medium",
|
||||
|
||||
"high",
|
||||
|
||||
"auto"
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"serial": "50175457",
|
||||
|
||||
"remote": {
|
||||
|
||||
"window": false,
|
||||
|
||||
"toggle": false
|
||||
|
||||
},
|
||||
|
||||
"room": {
|
||||
|
||||
"name": "AC_bedroom",
|
||||
|
||||
"icon": "bedroom"
|
||||
|
||||
},
|
||||
|
||||
"temperatureUnit": "C",
|
||||
|
||||
"remoteFlavor": "Unofficial Cobra",
|
||||
|
||||
"remoteAlternatives": []
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,428 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": {
|
||||
"configGroup": "stable",
|
||||
"macAddress": "00:11:22:33:44:55",
|
||||
"isGeofenceOnExitEnabled": false,
|
||||
"sensorsCalibration": {
|
||||
"temperature": 0.0,
|
||||
"humidity": 0.0
|
||||
},
|
||||
"cleanFiltersNotificationEnabled": true,
|
||||
"connectionStatus": {
|
||||
"isAlive": true,
|
||||
"lastSeen": {
|
||||
"secondsAgo": 12,
|
||||
"time": "2019-10-05T15:26:45.199202Z"
|
||||
}
|
||||
},
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "auto",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 10,
|
||||
"mode": "heat",
|
||||
"swing": "rangeFull"
|
||||
},
|
||||
"serial": "000000000",
|
||||
"id": "PODID",
|
||||
"firmwareVersion": "SKY30043",
|
||||
"firmwareType": "esp8266ex",
|
||||
"measurements": {
|
||||
"temperature": 19.1,
|
||||
"humidity": 34.8,
|
||||
"time": {
|
||||
"secondsAgo": 12,
|
||||
"time": "2019-10-05T15:26:45.199202Z"
|
||||
},
|
||||
"rssi": "-68",
|
||||
"piezo": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"remoteFlavor": "Enthusiastic Triceratops",
|
||||
"shouldShowFilterCleaningNotification": false,
|
||||
"location": {
|
||||
"latLon": [
|
||||
59.924477,
|
||||
10.5884129
|
||||
],
|
||||
"name": "Home",
|
||||
"country": "Fantasyland",
|
||||
"createTime": {
|
||||
"secondsAgo": 31104046,
|
||||
"time": "2018-10-10T15:26:12Z"
|
||||
},
|
||||
"address": [
|
||||
"Street",
|
||||
"Zip post",
|
||||
"ENgland"
|
||||
],
|
||||
"id": "XXXXXXXX"
|
||||
},
|
||||
"currentlyAvailableFirmwareVersion": "SKY30043",
|
||||
"tags": [],
|
||||
"productModel": "skyv2",
|
||||
"schedules": [
|
||||
{
|
||||
"nextTime": "2019-10-06T11:00:00",
|
||||
"podUid": "XXXXXX",
|
||||
"recurringDays": [
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday",
|
||||
"Sunday"
|
||||
],
|
||||
"createTimeSecondsAgo": 51,
|
||||
"isEnabled": true,
|
||||
"createTime": "2019-10-05T15:26:07",
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "auto",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 10,
|
||||
"mode": "heat"
|
||||
},
|
||||
"targetTimeLocal": "13:00",
|
||||
"timezone": "Europe/Oslo",
|
||||
"nextTimeSecondsFromNow": 70381,
|
||||
"causedBy": {
|
||||
"username": "username",
|
||||
"firstName": "FIrst",
|
||||
"lastName": "Last",
|
||||
"email": "mail@gmail.com"
|
||||
},
|
||||
"id": "scheduleid"
|
||||
}
|
||||
],
|
||||
"isClimateReactGeofenceOnExitEnabled": false,
|
||||
"remoteCapabilities": {
|
||||
"modes": {
|
||||
"dry": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"auto": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"heat": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
10,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
50,
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"fan": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"cool": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"fixedTop",
|
||||
"fixedMiddleTop",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleBottom",
|
||||
"fixedBottom",
|
||||
"rangeFull"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86,
|
||||
88
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"quiet",
|
||||
"low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"remote": {
|
||||
"window": false,
|
||||
"toggle": false
|
||||
},
|
||||
"room": {
|
||||
"name": "Stue",
|
||||
"icon": "Livingroom"
|
||||
},
|
||||
"temperatureUnit": "C",
|
||||
"timer": {
|
||||
"acState": {
|
||||
"on": false,
|
||||
"fanLevel": "auto",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 10,
|
||||
"mode": "heat",
|
||||
"swing": "rangeFull"
|
||||
},
|
||||
"targetTimeSecondsFromNow": 3142,
|
||||
"createTimeSecondsAgo": 38,
|
||||
"isEnabled": true,
|
||||
"causedBy": {
|
||||
"username": "arneseime",
|
||||
"firstName": "Arne",
|
||||
"lastName": "Seime",
|
||||
"email": "arne.seime@gmail.com"
|
||||
},
|
||||
"id": "7AZN7A9amL",
|
||||
"targetTime": "2019-10-05T16:42:11",
|
||||
"createTime": "2019-10-05T15:49:11"
|
||||
},
|
||||
"motionSensors": [],
|
||||
"remoteAlternatives": [
|
||||
"_mitsubishi1f_horizontal_rangeful",
|
||||
"_mitsubishi1_for_ben_ho",
|
||||
"_mitsubishi1_plasma_on",
|
||||
"_mitsubishi1f_fixed_left",
|
||||
"_mitsubishi1_plasma_on_clean_on",
|
||||
"mitsubishi1f",
|
||||
"_mitsubishi1f_fixed_right",
|
||||
"_mitsubishi1_left_swing_fixed_bottom",
|
||||
"_mitsubishi1_fixed_center",
|
||||
"_mitsubishi1f"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,307 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": {
|
||||
"configGroup": "stable",
|
||||
"macAddress": "34:15:13:AA:AA:AA",
|
||||
"cleanFiltersNotificationEnabled": true,
|
||||
"room": {
|
||||
"name": "Living Room",
|
||||
"icon": "Den"
|
||||
},
|
||||
"firmwareType": "cc3100_stm32f0",
|
||||
"productModel": "skyv2",
|
||||
"sensorsCalibration": {
|
||||
"temperature": 0.0,
|
||||
"humidity": 0.0
|
||||
},
|
||||
"temperatureUnit": "C",
|
||||
"isGeofenceOnExitEnabled": true,
|
||||
"connectionStatus": {
|
||||
"isAlive": true,
|
||||
"lastSeen": {
|
||||
"secondsAgo": 17,
|
||||
"time": "2019-05-12T22:24:36Z"
|
||||
}
|
||||
},
|
||||
"id": "PODID",
|
||||
"acState": {
|
||||
"on": false,
|
||||
"fanLevel": "high",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 21,
|
||||
"mode": "cool",
|
||||
"swing": "rangeFull"
|
||||
},
|
||||
"smartMode": {
|
||||
"deviceUid": "PODID",
|
||||
"highTemperatureThreshold": 28.0,
|
||||
"type": "temperature",
|
||||
"lowTemperatureState": {
|
||||
"on": false,
|
||||
"fanLevel": "auto",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 26,
|
||||
"mode": "cool"
|
||||
},
|
||||
"enabled": false,
|
||||
"highTemperatureState": {
|
||||
"on": true,
|
||||
"fanLevel": "auto",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 26,
|
||||
"mode": "cool"
|
||||
},
|
||||
"lowTemperatureThreshold": 20.0
|
||||
},
|
||||
"shouldShowFilterCleaningNotification": false,
|
||||
"location": {
|
||||
"latLon": [
|
||||
47.5274799,
|
||||
19.1127283
|
||||
],
|
||||
"country": "Hungary",
|
||||
"createTime": {
|
||||
"secondsAgo": 2519470,
|
||||
"time": "2019-04-13T18:33:43Z"
|
||||
},
|
||||
"address": [
|
||||
"B",
|
||||
"u",
|
||||
"d"
|
||||
],
|
||||
"id": "w9s6KMRrhR"
|
||||
},
|
||||
"currentlyAvailableFirmwareVersion": "IN010056",
|
||||
"isClimateReactGeofenceOnExitEnabled": false,
|
||||
"remoteCapabilities": {
|
||||
"modes": {
|
||||
"dry": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull",
|
||||
"fixedBottom",
|
||||
"fixedMiddleBottom",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleTop",
|
||||
"fixedTop"
|
||||
],
|
||||
"temperatures": {},
|
||||
"fanLevels": [
|
||||
"low"
|
||||
]
|
||||
},
|
||||
"auto": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull",
|
||||
"fixedBottom",
|
||||
"fixedMiddleBottom",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleTop",
|
||||
"fixedTop"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
59,
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"heat": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull",
|
||||
"fixedBottom",
|
||||
"fixedMiddleBottom",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleTop",
|
||||
"fixedTop"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
61,
|
||||
63,
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"fan": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull",
|
||||
"fixedBottom",
|
||||
"fixedMiddleBottom",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleTop",
|
||||
"fixedTop"
|
||||
],
|
||||
"temperatures": {},
|
||||
"fanLevels": [
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
"cool": {
|
||||
"swing": [
|
||||
"stopped",
|
||||
"rangeFull",
|
||||
"fixedBottom",
|
||||
"fixedMiddleBottom",
|
||||
"fixedMiddle",
|
||||
"fixedMiddleTop",
|
||||
"fixedTop"
|
||||
],
|
||||
"temperatures": {
|
||||
"C": {
|
||||
"isNative": true,
|
||||
"values": [
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30
|
||||
]
|
||||
},
|
||||
"F": {
|
||||
"isNative": false,
|
||||
"values": [
|
||||
64,
|
||||
66,
|
||||
68,
|
||||
70,
|
||||
72,
|
||||
73,
|
||||
75,
|
||||
77,
|
||||
79,
|
||||
81,
|
||||
82,
|
||||
84,
|
||||
86
|
||||
]
|
||||
}
|
||||
},
|
||||
"fanLevels": [
|
||||
"low",
|
||||
"medium_low",
|
||||
"medium",
|
||||
"medium_high",
|
||||
"high",
|
||||
"auto"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"serial": "11184989",
|
||||
"firmwareVersion": "IN010056",
|
||||
"measurements": {
|
||||
"temperature": 23.8,
|
||||
"humidity": 58.9,
|
||||
"time": {
|
||||
"secondsAgo": 17,
|
||||
"time": "2019-05-12T22:24:36Z"
|
||||
},
|
||||
"rssi": "-40",
|
||||
"piezo": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": [
|
||||
{
|
||||
"id": "PODID"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{ "acState": {
|
||||
"on": true,
|
||||
"fanLevel": "medium_high",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 21,
|
||||
"mode": "heat",
|
||||
"swing": "rangeFull"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"status": "success",
|
||||
"result": {
|
||||
"status": "Success",
|
||||
"reason": "UserRequest",
|
||||
"acState": {
|
||||
"on": true,
|
||||
"fanLevel": "medium_high",
|
||||
"temperatureUnit": "C",
|
||||
"targetTemperature": 21,
|
||||
"mode": "heat",
|
||||
"swing": "rangeFull"
|
||||
},
|
||||
"changedProperties": [],
|
||||
"id": "RESULTID",
|
||||
"failureReason": null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user