added migrated 2.x add-ons
Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
@@ -0,0 +1,244 @@
|
||||
/**
|
||||
* 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.innogysmarthome.internal;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
import org.eclipse.jetty.websocket.api.StatusCode;
|
||||
import org.eclipse.jetty.websocket.client.WebSocketClient;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.innogysmarthome.internal.listener.EventListener;
|
||||
|
||||
/**
|
||||
* @author Sven Strohschein - Initial contribution
|
||||
*/
|
||||
public class InnogyWebSocketTest {
|
||||
|
||||
private InnogyWebSocketAccessible webSocket;
|
||||
private EventListenerDummy eventListener;
|
||||
private WebSocketClient webSocketClientMock;
|
||||
private Session sessionMock;
|
||||
|
||||
@Before
|
||||
public void before() throws Exception {
|
||||
sessionMock = mock(Session.class);
|
||||
|
||||
Future<Session> futureMock = mock(Future.class);
|
||||
when(futureMock.get()).thenReturn(sessionMock);
|
||||
|
||||
webSocketClientMock = mock(WebSocketClient.class);
|
||||
when(webSocketClientMock.connect(any(), any())).thenReturn(futureMock);
|
||||
|
||||
eventListener = new EventListenerDummy();
|
||||
webSocket = new InnogyWebSocketAccessible(eventListener, new URI(""), 1000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStart() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertTrue(webSocket.isRunning());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStop() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
webSocket.stop();
|
||||
|
||||
assertFalse(webSocket.isRunning());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCloseAfterStop() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.stop();
|
||||
webSocket.onClose(StatusCode.ABNORMAL, "Test");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
// stop() itself causes a (abnormal) close event, that shouldn't get noticed
|
||||
// (otherwise it would cause a reconnect event which would lead to an infinite loop ...)
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCloseAfterRestart() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.stop();
|
||||
webSocket.onClose(StatusCode.ABNORMAL, "Test");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
// stop() itself causes a (abnormal) close event, that shouldn't get noticed
|
||||
// (otherwise it would cause a reconnect event which would lead to an infinite loop ...)
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
startWebSocket();
|
||||
|
||||
webSocket.onClose(StatusCode.ABNORMAL, "Test");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
// A close event after a restart of the web socket should get recognized again
|
||||
assertTrue(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCloseAbnormal() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.onClose(StatusCode.ABNORMAL, "Test");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertTrue(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCloseNormal() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.onClose(StatusCode.NORMAL, "Test");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
// Nothing should get noticed when a normal close is executed (for example by stopping OpenHAB)
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnMessage() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.onMessage("Test-Message");
|
||||
|
||||
assertTrue(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnMessageAfterStop() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.stop();
|
||||
webSocket.onClose(StatusCode.ABNORMAL, "Test");
|
||||
webSocket.onMessage("Test-Message");
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnError() throws Exception {
|
||||
startWebSocket();
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertFalse(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
|
||||
webSocket.onError(new RuntimeException("Test-Exception"));
|
||||
|
||||
assertFalse(eventListener.isOnEventCalled());
|
||||
assertTrue(eventListener.isOnErrorCalled());
|
||||
assertFalse(eventListener.isConnectionClosedCalled());
|
||||
}
|
||||
|
||||
private void startWebSocket() throws Exception {
|
||||
webSocket.start();
|
||||
when(sessionMock.isOpen()).thenReturn(true);
|
||||
|
||||
webSocket.onConnect(sessionMock);
|
||||
}
|
||||
|
||||
private class InnogyWebSocketAccessible extends InnogyWebSocket {
|
||||
|
||||
private InnogyWebSocketAccessible(EventListener eventListener, URI webSocketURI, int maxIdleTimeout) {
|
||||
super(eventListener, webSocketURI, maxIdleTimeout);
|
||||
}
|
||||
|
||||
@Override
|
||||
WebSocketClient startWebSocketClient() {
|
||||
return webSocketClientMock;
|
||||
}
|
||||
}
|
||||
|
||||
private class EventListenerDummy implements EventListener {
|
||||
|
||||
private boolean isOnEventCalled;
|
||||
private boolean isOnErrorCalled;
|
||||
private boolean isConnectionClosedCalled;
|
||||
|
||||
@Override
|
||||
public void onEvent(String msg) {
|
||||
isOnEventCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable cause) {
|
||||
isOnErrorCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connectionClosed() {
|
||||
isConnectionClosedCalled = true;
|
||||
}
|
||||
|
||||
public boolean isOnEventCalled() {
|
||||
return isOnEventCalled;
|
||||
}
|
||||
|
||||
public boolean isOnErrorCalled() {
|
||||
return isOnErrorCalled;
|
||||
}
|
||||
|
||||
public boolean isConnectionClosedCalled() {
|
||||
return isConnectionClosedCalled;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
/**
|
||||
* 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.innogysmarthome.internal.handler;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.innogysmarthome.internal.InnogyBindingConstants;
|
||||
import org.openhab.binding.innogysmarthome.internal.InnogyWebSocket;
|
||||
import org.openhab.binding.innogysmarthome.internal.client.InnogyClient;
|
||||
import org.openhab.binding.innogysmarthome.internal.client.entity.device.Device;
|
||||
import org.openhab.binding.innogysmarthome.internal.client.entity.device.DeviceConfig;
|
||||
import org.openhab.core.auth.client.oauth2.OAuthClientService;
|
||||
import org.openhab.core.auth.client.oauth2.OAuthFactory;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
import org.openhab.core.thing.Bridge;
|
||||
import org.openhab.core.thing.ThingUID;
|
||||
|
||||
/**
|
||||
* @author Sven Strohschein - Initial contribution
|
||||
*/
|
||||
public class InnogyBridgeHandlerTest {
|
||||
|
||||
private static final int MAXIMUM_RETRY_EXECUTIONS = 10;
|
||||
|
||||
private InnogyBridgeHandlerAccessible bridgeHandler;
|
||||
private Bridge bridgeMock;
|
||||
private InnogyWebSocket webSocketMock;
|
||||
|
||||
@Before
|
||||
public void before() throws Exception {
|
||||
bridgeMock = mock(Bridge.class);
|
||||
when(bridgeMock.getUID()).thenReturn(new ThingUID("innogysmarthome", "bridge"));
|
||||
|
||||
webSocketMock = mock(InnogyWebSocket.class);
|
||||
|
||||
OAuthClientService oAuthService = mock(OAuthClientService.class);
|
||||
|
||||
OAuthFactory oAuthFactoryMock = mock(OAuthFactory.class);
|
||||
when(oAuthFactoryMock.createOAuthClientService(any(), any(), any(), any(), any(), any(), any()))
|
||||
.thenReturn(oAuthService);
|
||||
|
||||
HttpClient httpClientMock = mock(HttpClient.class);
|
||||
|
||||
bridgeHandler = new InnogyBridgeHandlerAccessible(bridgeMock, oAuthFactoryMock, httpClientMock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitializeBridgeNotAvailable() throws Exception {
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("brand", "XY");
|
||||
bridgeConfig.setProperties(map);
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock, never()).start();
|
||||
assertEquals(0, bridgeHandler.getDirectExecutionCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitialize() throws Exception {
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock).start();
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitializeErrorOnStartingWebSocket() throws Exception {
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
doThrow(new RuntimeException("Test-Exception")).when(webSocketMock).start();
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock, times(MAXIMUM_RETRY_EXECUTIONS)).start();
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount()); // only the first execution should be without a delay
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConnectionClosed() throws Exception {
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock).start();
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
|
||||
bridgeHandler.connectionClosed();
|
||||
|
||||
verify(webSocketMock, times(2)).start(); // automatically restarted (with a delay)
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
|
||||
bridgeHandler.connectionClosed();
|
||||
|
||||
verify(webSocketMock, times(3)).start(); // automatically restarted (with a delay)
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConnectionClosedReconnectNotPossible() throws Exception {
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock).start();
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
|
||||
doThrow(new ConnectException("Connection refused")).when(webSocketMock).start();
|
||||
|
||||
bridgeHandler.connectionClosed();
|
||||
|
||||
verify(webSocketMock, times(10)).start(); // automatic reconnect attempts (with a delay)
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnEventDisconnect() throws Exception {
|
||||
final String disconnectEventJSON = "{ type: \"Disconnect\" }";
|
||||
|
||||
Configuration bridgeConfig = new Configuration();
|
||||
|
||||
when(bridgeMock.getConfiguration()).thenReturn(bridgeConfig);
|
||||
|
||||
bridgeHandler.initialize();
|
||||
|
||||
verify(webSocketMock).start();
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
|
||||
bridgeHandler.onEvent(disconnectEventJSON);
|
||||
|
||||
verify(webSocketMock, times(2)).start(); // automatically restarted (with a delay)
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
|
||||
bridgeHandler.onEvent(disconnectEventJSON);
|
||||
|
||||
verify(webSocketMock, times(3)).start(); // automatically restarted (with a delay)
|
||||
assertEquals(1, bridgeHandler.getDirectExecutionCount());
|
||||
}
|
||||
|
||||
private class InnogyBridgeHandlerAccessible extends InnogyBridgeHandler {
|
||||
|
||||
private final InnogyClient innogyClientMock;
|
||||
private final ScheduledExecutorService schedulerMock;
|
||||
private int executionCount;
|
||||
private int directExecutionCount;
|
||||
|
||||
private InnogyBridgeHandlerAccessible(Bridge bridge, OAuthFactory oAuthFactory, HttpClient httpClient)
|
||||
throws Exception {
|
||||
super(bridge, oAuthFactory, httpClient);
|
||||
|
||||
Device bridgeDevice = new Device();
|
||||
bridgeDevice.setId("bridgeId");
|
||||
bridgeDevice.setType(InnogyBindingConstants.DEVICE_SHC);
|
||||
bridgeDevice.setConfig(new DeviceConfig());
|
||||
|
||||
innogyClientMock = mock(InnogyClient.class);
|
||||
when(innogyClientMock.getFullDevices()).thenReturn(Collections.singletonList(bridgeDevice));
|
||||
|
||||
schedulerMock = mock(ScheduledExecutorService.class);
|
||||
|
||||
doAnswer(invocationOnMock -> {
|
||||
if (executionCount <= MAXIMUM_RETRY_EXECUTIONS) {
|
||||
executionCount++;
|
||||
invocationOnMock.getArgument(0, Runnable.class).run();
|
||||
}
|
||||
return null;
|
||||
}).when(schedulerMock).execute(any());
|
||||
|
||||
doAnswer(invocationOnMock -> {
|
||||
if (executionCount <= MAXIMUM_RETRY_EXECUTIONS) {
|
||||
executionCount++;
|
||||
long seconds = invocationOnMock.getArgument(1);
|
||||
if (seconds <= 0) {
|
||||
directExecutionCount++;
|
||||
}
|
||||
|
||||
invocationOnMock.getArgument(0, Runnable.class).run();
|
||||
}
|
||||
return mock(ScheduledFuture.class);
|
||||
}).when(schedulerMock).schedule(any(Runnable.class), anyLong(), any());
|
||||
}
|
||||
|
||||
public int getDirectExecutionCount() {
|
||||
return directExecutionCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
InnogyClient createInnogyClient(@NonNull OAuthClientService oAuthService, @NonNull HttpClient httpClient) {
|
||||
return innogyClientMock;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
InnogyWebSocket createWebSocket() {
|
||||
return webSocketMock;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
ScheduledExecutorService getScheduler() {
|
||||
return schedulerMock;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"configVersion": {
|
||||
"value": 38,
|
||||
"lastChanged": "2019-07-13T08:34:35.627766Z"
|
||||
},
|
||||
"cpuUsage": {
|
||||
"value": 0.80912222750515084,
|
||||
"lastChanged": "2019-07-22T19:35:06.080964Z"
|
||||
},
|
||||
"currentUtcOffset": {
|
||||
"value": 120,
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"deviceConfigurationState": {
|
||||
"value": "Complete",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"deviceInclusionState": {
|
||||
"value": "Included",
|
||||
"lastChanged": "2019-02-07T19:47:50.2148Z"
|
||||
},
|
||||
"discoveryActive": {
|
||||
"value": false,
|
||||
"lastChanged": "2019-07-13T07:19:47.187338Z"
|
||||
},
|
||||
"diskUsage": {
|
||||
"value": 57.358010125846029,
|
||||
"lastChanged": "2019-07-22T19:35:06.081238Z"
|
||||
},
|
||||
"ethIpAddress": {
|
||||
"value": "192.168.0.42",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"ethMacAddress": {
|
||||
"value": "94:c6:91:a1:93:b2",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"inUseAdapter": {
|
||||
"value": "eth",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"innogyLayerAttached": {
|
||||
"value": true,
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"isReachable": {
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"lastReboot": {
|
||||
"value": "2019-07-11T22:15:02Z",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"lbDongleAttached": {
|
||||
"value": false,
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"memoryUsage": {
|
||||
"value": 29.485105729836945,
|
||||
"lastChanged": "2019-07-22T19:35:06.081461Z"
|
||||
},
|
||||
"operationStatus": {
|
||||
"value": "active",
|
||||
"lastChanged": "2019-07-11T22:15:35.284088Z"
|
||||
},
|
||||
"updateAvailable": {
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"wMBusDongleAttached": {
|
||||
"value": false,
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"wifiIpAddress": {
|
||||
"value": "",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"wifiMacAddress": {
|
||||
"value": "40:9f:38:3d:b5:7d",
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
},
|
||||
"wifiSignalStrength": {
|
||||
"value": 0,
|
||||
"lastChanged": "1970-01-01T00:00:00Z"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"updateAvailable": {
|
||||
"value": "",
|
||||
"lastChanged": "2019-06-20T00:15:32.766Z"
|
||||
},
|
||||
"lastReboot": {
|
||||
"value": "2019-06-20T00:14:10.477Z",
|
||||
"lastChanged": "2019-06-20T00:15:32.767Z"
|
||||
},
|
||||
"MBusDongleAttached": {
|
||||
"value": false,
|
||||
"lastChanged": "2019-06-20T00:15:32.875Z"
|
||||
},
|
||||
"LBDongleAttached": {
|
||||
"value": false,
|
||||
"lastChanged": "2019-06-20T00:15:32.876Z"
|
||||
},
|
||||
"configVersion": {
|
||||
"value": 294,
|
||||
"lastChanged": "2019-07-16T16:30:14.498Z"
|
||||
},
|
||||
"OSState": {
|
||||
"value": "Normal",
|
||||
"lastChanged": "2019-06-20T01:15:32.961Z"
|
||||
},
|
||||
"memoryLoad": {
|
||||
"value": 63,
|
||||
"lastChanged": "2019-07-22T19:47:43.737Z"
|
||||
},
|
||||
"CPULoad": {
|
||||
"value": 12,
|
||||
"lastChanged": "2019-07-22T19:47:43.737Z"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "StateChanged",
|
||||
"desc": "/desc/event/StateChanged",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-06-29T21:16:05.1550000Z",
|
||||
"source": "/device/72e753b09fd44a118997bc615351cabd",
|
||||
"properties": {
|
||||
"isReachable": false,
|
||||
"deviceConfigurationState": "Complete",
|
||||
"deviceInclusionState": "Included",
|
||||
"updateState": "UpToDate",
|
||||
"firmwareVersion": "1.6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "MessageCreated",
|
||||
"desc": "/desc/event/MessageCreated",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-07-07T18:44:07.6280000Z",
|
||||
"source": "/desc/device/SHC.RWE/1.0",
|
||||
"data": {
|
||||
"id": "c5c3128810524820b6071b00e80dfd23",
|
||||
"type": "DeviceLowBattery",
|
||||
"read": false,
|
||||
"class": "Alert",
|
||||
"timestamp": "2019-07-07T18:44:07.583Z",
|
||||
"devices": ["/device/1b77a62c18c9423f871251704faec45f"],
|
||||
"properties": {
|
||||
"deviceName": "Fernbedienung",
|
||||
"serialNumber": "914140024103",
|
||||
"locationName": "Arbeitszimmer"
|
||||
},
|
||||
"namespace": "core.RWE"
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "MessageCreated",
|
||||
"desc": "/desc/event/MessageCreated",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-07-07T18:41:47.2970000Z",
|
||||
"source": "/desc/device/SHC.RWE/1.0",
|
||||
"data": {
|
||||
"id": "6e5ce2290cd247208f95a5b53736958b",
|
||||
"type": "DeviceLowBattery",
|
||||
"read": false,
|
||||
"class": "Alert",
|
||||
"timestamp": "2019-07-07T18:41:47.232Z",
|
||||
"devices": ["/device/fe51785319854f36a621d0b4f8ea0e25"],
|
||||
"properties": {
|
||||
"deviceName": "Heizkörperthermostat",
|
||||
"serialNumber": "914110165056",
|
||||
"locationName": "Bad"
|
||||
},
|
||||
"namespace": "core.RWE"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "MessageDeleted",
|
||||
"desc": "/desc/event/MessageDeleted",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-07-07T19:15:39.2100000Z",
|
||||
"data": { "id": "6e5ce2290cd247208f95a5b53736958b" }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "StateChanged",
|
||||
"desc": "/desc/event/StateChanged",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-03-10T17:34:56.2400000Z",
|
||||
"source": "/capability/3f268584b95c40df93b67d6c64957846",
|
||||
"properties": {
|
||||
"onState": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "StateChanged",
|
||||
"desc": "/desc/event/StateChanged",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-03-10T20:49:25.4940000Z",
|
||||
"source": "/device/b487e440f3e743649477fbbb64f8d55a",
|
||||
"properties": {
|
||||
"deviceInclusionState": "Included"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"sequenceNumber": 0,
|
||||
"type": "/event/UserDataChanged",
|
||||
"timestamp": "2019-02-25T20:18:20.5600109Z",
|
||||
"data": [
|
||||
{
|
||||
"key": "StatesId",
|
||||
"partition": "HomepageDeviceVisibility"
|
||||
},
|
||||
{
|
||||
"key": "UserData",
|
||||
"partition": "Version"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,632 @@
|
||||
[
|
||||
{
|
||||
"id": "b0f441a410f8465fbede93a7363a4339",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914100007996",
|
||||
"type": "SHC",
|
||||
"config": {
|
||||
"name": "Smart Home Controller",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-07-11T10:55:52.3863424Z",
|
||||
"timeOfDiscovery": "2016-07-11T10:55:52.3863424Z",
|
||||
"hardwareVersion": "00.02",
|
||||
"softwareVersion": "2.1.0.66",
|
||||
"firmwareVersion": "1.913",
|
||||
"hostName": "SMARTHOME06",
|
||||
"activityLogEnabled": true,
|
||||
"configurationState": "Complete",
|
||||
"geoLocation": "50.8301066,6.901272800000015",
|
||||
"timeZone": "W. Europe Standard Time",
|
||||
"currentUTCOffset": 60.0,
|
||||
"IPAddress": "192.168.0.125",
|
||||
"MACAddress": "00-1a-22-00-46-ae",
|
||||
"shcType": "0",
|
||||
"backendConnectionMonitored": true,
|
||||
"RFCommFailureNotification": false,
|
||||
"postCode": "50321",
|
||||
"city": "Brühl",
|
||||
"street": "Hermannstraße",
|
||||
"houseNumber": "13",
|
||||
"country": "Deutschland",
|
||||
"householdType": "House",
|
||||
"numberOfPersons": 0.0,
|
||||
"numberOfFloors": 0.0,
|
||||
"livingArea": 0.0,
|
||||
"registrationTime": "2016-07-11T10:55:52.3863424Z"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/d43d0a536110445fa040f06d25d25254",
|
||||
"/capability/edfd5fa4d18e4c4994935bf5905a262e"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "970da72e3d5847ac941b889e5e6e8b3a",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "",
|
||||
"type": "NotificationSender",
|
||||
"config": {
|
||||
"name": "Notification Sender",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-07-11T10:55:52.3863424Z",
|
||||
"timeOfDiscovery": "2016-07-11T10:55:52.3863424Z"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/fab663ad6dba4e0b92888bfb17dc3c1e",
|
||||
"/capability/84e766ad0f99445f99c810c47547cbb6",
|
||||
"/capability/098c77c87e5c42db9d39b616dcf6203d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "155f38e4ee2047c0b2246133b1de96a0",
|
||||
"manufacturer": "RWE",
|
||||
"version": "2.0",
|
||||
"product": "VariableActuator.RWE",
|
||||
"serialNumber": "155f38e4ee2047c0b2246133b1de96a0",
|
||||
"type": "VariableActuator",
|
||||
"config": {
|
||||
"name": "Zuhause",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-07-11T10:59:57.844Z",
|
||||
"timeOfDiscovery": "2016-07-11T10:56:19.262Z"
|
||||
},
|
||||
"tags": {
|
||||
"internalStateId": "HomeAway"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/2d7e58bca7fc40148e77cb4df6daef90"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b19d0f5794ee4a2b8ecadbf2ea470c31",
|
||||
"manufacturer": "RWE",
|
||||
"version": "2.0",
|
||||
"product": "VariableActuator.RWE",
|
||||
"serialNumber": "b19d0f5794ee4a2b8ecadbf2ea470c31",
|
||||
"type": "VariableActuator",
|
||||
"config": {
|
||||
"name": "Urlaub",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-07-11T11:00:02.191Z",
|
||||
"timeOfDiscovery": "2016-07-11T11:00:00.039Z"
|
||||
},
|
||||
"tags": {
|
||||
"internalStateId": "Vacation"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/aeda6003eb124b19be5ff644ca59fe40"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "32214feb11a74949b573346f1a380729",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914130092370",
|
||||
"type": "WSC2",
|
||||
"config": {
|
||||
"name": "Wandsender Test",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-07-11T11:22:18.087Z",
|
||||
"timeOfDiscovery": "2016-07-11T11:20:49.192Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCSwitchIdTag",
|
||||
"type": "TTwoButtonSwitchIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/2dca5b6a3e5a419d8f6f4a8f05ed8310"
|
||||
],
|
||||
"location": "/location/bd67af2ca266487bb97b7d08b3468c2f"
|
||||
},
|
||||
{
|
||||
"id": "d68abf56664c4607a2e01d66be1fb727",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914120076611",
|
||||
"type": "PSS",
|
||||
"config": {
|
||||
"name": "Fernseher",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-08-21T13:28:58.508Z",
|
||||
"timeOfDiscovery": "2016-08-21T13:28:34.606Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCEntertainmentId",
|
||||
"type": "TTVId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/3f268584b95c40df93b67d6c64957846"
|
||||
],
|
||||
"location": "/location/30858fcbea3f4833b4e7b3143ea872f7"
|
||||
},
|
||||
{
|
||||
"id": "18b546218e90484796e3d8e0786d0256",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914130043917",
|
||||
"type": "WSC2",
|
||||
"config": {
|
||||
"name": "Wandsender Bett",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-09-04T11:32:50.85Z",
|
||||
"timeOfDiscovery": "2016-09-04T11:32:26.982Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCSwitchIdTag",
|
||||
"type": "TTwoButtonSwitchIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/4110238f56cb4cb7ba211b0d8c9b6557"
|
||||
],
|
||||
"location": "/location/30858fcbea3f4833b4e7b3143ea872f7"
|
||||
},
|
||||
{
|
||||
"id": "e9b272c83d9a488abccb0d404771b6c6",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.1",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914110059496",
|
||||
"type": "RST",
|
||||
"config": {
|
||||
"name": "Heizkörperthermostat",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-09-29T18:27:38.094Z",
|
||||
"timeOfDiscovery": "2016-09-29T18:27:11.102Z",
|
||||
"displayCurrentTemperature": "TargetTemperature"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCHeatingId",
|
||||
"type": "TRadiatorThermostateIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/4afde71507ba4144bb81fbdc82a5fe7e",
|
||||
"/capability/a29a7a77fc05484780eae1f8b47e62b3",
|
||||
"/capability/a4e1d52096c54a2ebd018e9a1338f392"
|
||||
],
|
||||
"location": "/location/b09e4978ce8c4be9ad4afcdf6cc09005"
|
||||
},
|
||||
{
|
||||
"id": "07332bf0dd0e42508c66c846e1e1a8ad",
|
||||
"manufacturer": "RWE",
|
||||
"version": "2.0",
|
||||
"product": "SunriseSunsetSensor.RWE",
|
||||
"serialNumber": "07332bf0dd0e42508c66c846e1e1a8ad",
|
||||
"type": "SunriseSunsetSensor",
|
||||
"config": {
|
||||
"name": "Sunrise Sunset Sensor",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-09-29T21:51:39.553Z",
|
||||
"timeOfDiscovery": "2016-09-29T21:51:33.965Z"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/64bf06b56b5e4fc49292985c6bb48bea"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6de7890d580649aeafd66043b2102a12",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430037295",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Balkon",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-11-20T21:19:41.098Z",
|
||||
"timeOfDiscovery": "2016-11-20T21:19:25.775Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCDoorId",
|
||||
"type": "TBalconyDoorId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/3655816c7413451db58b9c07e473540b"
|
||||
],
|
||||
"location": "/location/e397695c607846379c76068beac379af"
|
||||
},
|
||||
{
|
||||
"id": "0f16337ac685415986a274376b601450",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914150006603",
|
||||
"type": "WMD",
|
||||
"config": {
|
||||
"name": "Bewegungsmelder",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-11-04T22:13:28.403Z",
|
||||
"timeOfDiscovery": "2016-11-04T22:12:54.536Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCMotionIdTag",
|
||||
"type": "TMotionDetectorIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/5d41af178a664418ad8ee10b5d906d98",
|
||||
"/capability/2684a9d13ac9410b94eae134ed39826f"
|
||||
],
|
||||
"location": "/location/26f2f33fbe7a4e6abddfc1512a65e4e0"
|
||||
},
|
||||
{
|
||||
"id": "baed452016404d1f8c7d6bf5525fc224",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.1",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914210002474",
|
||||
"type": "ISS2",
|
||||
"config": {
|
||||
"name": "Deckenleuchte",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-11-04T23:33:57.461Z",
|
||||
"timeOfDiscovery": "2016-11-04T23:33:25.954Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCLightId",
|
||||
"type": "TCeilingLightId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/7efeaa246c704713beda52abdd741d45",
|
||||
"/capability/fb8a5e34c3c54ef998579d44bb57b198"
|
||||
],
|
||||
"location": "/location/26f2f33fbe7a4e6abddfc1512a65e4e0"
|
||||
},
|
||||
{
|
||||
"id": "76e68e066e874b9da3403223cbf4b048",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "IRW0020883",
|
||||
"type": "WSD",
|
||||
"config": {
|
||||
"name": "Rauchmelder",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-11-20T21:34:39.905Z",
|
||||
"timeOfDiscovery": "2016-11-20T21:34:34.388Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TSmokeDetectorIdTag",
|
||||
"type": "TOpticalSmokeDetectorIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/aa25dfc37fee4b11978a7c6f76fd2c19",
|
||||
"/capability/56ba36531e4a485ea68a12539fb4cf5e"
|
||||
],
|
||||
"location": "/location/e397695c607846379c76068beac379af"
|
||||
},
|
||||
{
|
||||
"id": "fd6830f0066f4283b5fc7ba1c8f43071",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.1",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914210010378",
|
||||
"type": "ISS2",
|
||||
"config": {
|
||||
"name": "Balkon",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-07T07:37:21.649Z",
|
||||
"timeOfDiscovery": "2016-12-07T07:36:46.033Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCLightId",
|
||||
"type": "TOutsideLightId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/3f2bb031cc1c447aa849e930c7bd4c02",
|
||||
"/capability/5af9f6896e114051b9e3423cf0aa7f20"
|
||||
],
|
||||
"location": "/location/e397695c607846379c76068beac379af"
|
||||
},
|
||||
{
|
||||
"id": "a8282a7de8ff4b19958051814f8d8ad6",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.1",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914110012419",
|
||||
"type": "RST",
|
||||
"config": {
|
||||
"name": "Heizkörperthermostat",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-07T21:36:41.022Z",
|
||||
"timeOfDiscovery": "2016-12-07T21:36:16.215Z",
|
||||
"displayCurrentTemperature": "TargetTemperature"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCHeatingId",
|
||||
"type": "TRadiatorThermostateIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/00a711783dbc4ea0960f923af5c45ad5",
|
||||
"/capability/c8baa78d382649b3995c1eb504469ff4",
|
||||
"/capability/2594a0af3293424e82e19ca64bc84f01"
|
||||
],
|
||||
"location": "/location/fb7593aa398a47508f2072d593cd1bfa"
|
||||
},
|
||||
{
|
||||
"id": "728baded2f4445a6926e7512cd03e6d3",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "fb7593aa398a47508f2072d593cd1bfa",
|
||||
"type": "VRCC",
|
||||
"config": {
|
||||
"name": "Raumklima",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-12-07T21:36:41.372Z",
|
||||
"timeOfDiscovery": "2016-12-07T21:36:41.372Z",
|
||||
"underlyingDeviceIds": "a8282a7de8ff4b19958051814f8d8ad6"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/37a02890ab9f44bb97b403fb01326a46",
|
||||
"/capability/27afb854c4074ecbace3857380ef2a95",
|
||||
"/capability/b636bed0634044428e29c4a768425798"
|
||||
],
|
||||
"location": "/location/fb7593aa398a47508f2072d593cd1bfa"
|
||||
},
|
||||
{
|
||||
"id": "4337389c9c4a416dbeacd826f85edc2a",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430017792",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Dachfenster",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-07T21:41:08.229Z",
|
||||
"timeOfDiscovery": "2016-12-07T21:40:44.48Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCWindowId",
|
||||
"type": "TRoofWindowId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/e60a20b2287d4aa690aaffae6d08aa20"
|
||||
],
|
||||
"location": "/location/fb7593aa398a47508f2072d593cd1bfa"
|
||||
},
|
||||
{
|
||||
"id": "452b3515364d45c49285b99484acde28",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "b09e4978ce8c4be9ad4afcdf6cc09005",
|
||||
"type": "VRCC",
|
||||
"config": {
|
||||
"name": "Raumklima",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-12-07T21:48:09.505Z",
|
||||
"timeOfDiscovery": "2016-12-07T21:48:09.505Z",
|
||||
"underlyingDeviceIds": "e9b272c83d9a488abccb0d404771b6c6"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/a50fba7718ef4fc4be89869e1ce129be",
|
||||
"/capability/67b3bf1bf0da46ca8833debba71a375d",
|
||||
"/capability/1f9a66910ee24b3085e53aeda7e5a4cd"
|
||||
],
|
||||
"location": "/location/b09e4978ce8c4be9ad4afcdf6cc09005"
|
||||
},
|
||||
{
|
||||
"id": "72e753b09fd44a118997bc615351cabd",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914120073945",
|
||||
"type": "PSS",
|
||||
"config": {
|
||||
"name": "Fernseher",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T19:47:03.674Z",
|
||||
"timeOfDiscovery": "2016-12-14T19:46:46.387Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCEntertainmentId",
|
||||
"type": "TTVId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/43e345ee14e94996a04972267b5d0489"
|
||||
],
|
||||
"location": "/location/fb7593aa398a47508f2072d593cd1bfa"
|
||||
},
|
||||
{
|
||||
"id": "cb8f20e7dfa34f76956e4c797dc4c96a",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914130043726",
|
||||
"type": "WSC2",
|
||||
"config": {
|
||||
"name": "Wandsender",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T20:06:16.502Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:06:03.372Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCSwitchIdTag",
|
||||
"type": "TTwoButtonSwitchIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/41468ab7824b443ea493f12bd87653e0"
|
||||
],
|
||||
"location": "/location/fb7593aa398a47508f2072d593cd1bfa"
|
||||
},
|
||||
{
|
||||
"id": "4e79eb7a18cf4a3a94d6b26c6ebdb8cb",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430016160",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Dachfenster",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T20:14:56.433Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:14:34.906Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCWindowId",
|
||||
"type": "TRoofWindowId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/3bb24f7906c043d2ae77bb2ec9f7d2fe"
|
||||
],
|
||||
"location": "/location/24442676b2ea406ea671df22068cc02c"
|
||||
},
|
||||
{
|
||||
"id": "fe51785319854f36a621d0b4f8ea0e25",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.1",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914110165056",
|
||||
"type": "RST",
|
||||
"config": {
|
||||
"name": "Heizkörperthermostat",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T20:22:41.463Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:21:49.681Z",
|
||||
"displayCurrentTemperature": "TargetTemperature"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCHeatingId",
|
||||
"type": "TRadiatorThermostateIdTag"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/5a0f2df3f7064cdbb71c2d6340c985ad",
|
||||
"/capability/8ff9ea5c3233434ba87426e0a23b245e",
|
||||
"/capability/7b98d33e5a15404686b2cbc99f725d01"
|
||||
],
|
||||
"location": "/location/24442676b2ea406ea671df22068cc02c"
|
||||
},
|
||||
{
|
||||
"id": "9756c6b4dcb14fa391e1748d35e286fb",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "24442676b2ea406ea671df22068cc02c",
|
||||
"type": "VRCC",
|
||||
"config": {
|
||||
"name": "Raumklima",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2016-12-14T20:22:41.776Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:22:41.777Z",
|
||||
"underlyingDeviceIds": "fe51785319854f36a621d0b4f8ea0e25"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/f8d4593186694df4a86c325fc914596b",
|
||||
"/capability/0949f28423864bebb6f0ab64a99fa8a1",
|
||||
"/capability/6db429654212467a8661c1dea714c942"
|
||||
],
|
||||
"location": "/location/24442676b2ea406ea671df22068cc02c"
|
||||
},
|
||||
{
|
||||
"id": "9fdeb547d2ca4dd0b28631985d525131",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430019747",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Dachfenster",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T20:27:14.769Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:27:07.685Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCWindowId",
|
||||
"type": "TRoofWindowId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/8f0e726da08e438fa2a7b8d479ffb37d"
|
||||
],
|
||||
"location": "/location/30858fcbea3f4833b4e7b3143ea872f7"
|
||||
},
|
||||
{
|
||||
"id": "e28b3b1d02db474aaf1fd910ce67e67e",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430037338",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Dachfenster",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-14T20:29:34.071Z",
|
||||
"timeOfDiscovery": "2016-12-14T20:29:08.665Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCWindowId",
|
||||
"type": "TRoofWindowId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/a665756005e849c6abb8061d4a848eb8"
|
||||
],
|
||||
"location": "/location/b09e4978ce8c4be9ad4afcdf6cc09005"
|
||||
},
|
||||
{
|
||||
"id": "5b1fe837a6fa4e6587fab1b260adc288",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "914220020108",
|
||||
"type": "ISD2",
|
||||
"config": {
|
||||
"name": "Deckenleuchte",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2016-12-28T18:46:59.916Z",
|
||||
"timeOfDiscovery": "2016-12-28T18:46:39.096Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCLightId",
|
||||
"type": "TCeilingLightId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/0fbb96bde9e24517b5d37d9932b4e24e",
|
||||
"/capability/9a97159073f94470bcb30e4706c0a441"
|
||||
],
|
||||
"location": "/location/26f2f33fbe7a4e6abddfc1512a65e4e0"
|
||||
},
|
||||
{
|
||||
"id": "f78e30ef7098480cbfa096d363085825",
|
||||
"manufacturer": "RWE",
|
||||
"version": "1.0",
|
||||
"product": "core.RWE",
|
||||
"serialNumber": "921430037314",
|
||||
"type": "WDS",
|
||||
"config": {
|
||||
"name": "Dachfenster",
|
||||
"protocolId": "Cosip",
|
||||
"timeOfAcceptance": "2017-05-13T10:16:54.232Z",
|
||||
"timeOfDiscovery": "2017-05-13T10:16:35.025Z"
|
||||
},
|
||||
"tags": {
|
||||
"typeCategory": "TCWindowId",
|
||||
"type": "TRoofWindowId"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/7bc3e21536e64f2d847a09d00b1f28ce"
|
||||
],
|
||||
"location": "/location/d4a54173ba104bec9734e822e303f4a2"
|
||||
},
|
||||
{
|
||||
"id": "949a1b6b254b49e0a1ba593ce7e88f36",
|
||||
"manufacturer": "RWE",
|
||||
"version": "2.0",
|
||||
"product": "VariableActuator.RWE",
|
||||
"serialNumber": "949a1b6b254b49e0a1ba593ce7e88f36",
|
||||
"type": "VariableActuator",
|
||||
"config": {
|
||||
"name": "Sex",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2017-08-28T20:01:49.095Z",
|
||||
"timeOfDiscovery": "2017-08-20T13:39:53.963Z"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/a38daa9e72084ca9950c1f353aeb8ef3"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"sequenceNumber": -1,
|
||||
"type": "ConfigurationChanged",
|
||||
"desc": "/desc/event/ConfigurationChanged",
|
||||
"namespace": "core.RWE",
|
||||
"timestamp": "2019-02-25T19:53:17.1960000Z",
|
||||
"source": "/desc/device/SHC.RWE/1.0",
|
||||
"data": {
|
||||
"devices": [
|
||||
{
|
||||
"id": "0ba965875d37416a935b6552cd6929d9",
|
||||
"manufacturer": "RWE",
|
||||
"version": "2.0",
|
||||
"product": "VariableActuator.RWE",
|
||||
"serialNumber": "0ba965875d37416a935b6552cd6929d9",
|
||||
"type": "VariableActuator",
|
||||
"config": {
|
||||
"name": "Test",
|
||||
"protocolId": "Virtual",
|
||||
"timeOfAcceptance": "2019-02-25T19:53:16.183Z",
|
||||
"timeOfDiscovery": "2019-01-30T01:59:52.451Z"
|
||||
},
|
||||
"capabilities": [
|
||||
"/capability/692d923c583346e2a358db8e32b3c505"
|
||||
]
|
||||
}
|
||||
],
|
||||
"locations": [],
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "692d923c583346e2a358db8e32b3c505",
|
||||
"type": "BooleanStateActuator",
|
||||
"device": "/device/0ba965875d37416a935b6552cd6929d9",
|
||||
"config": {
|
||||
"name": "Boolean State Actuator",
|
||||
"activityLogActive": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"interactions": [],
|
||||
"homeSetups": [],
|
||||
"deleted": [],
|
||||
"configVersion": 246
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user