2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.velux.internal.bridge.json;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.openhab.binding.velux.internal.VeluxBindingConstants;
18 import org.openhab.binding.velux.internal.bridge.common.SetSceneVelocity;
21 * Specific bridge communication message supported by the Velux bridge.
23 * Message semantic: setting of scene silent mode, resulting in a return of current bridge state.
26 * It defines information how to send query and receive answer through the
27 * {@link org.openhab.binding.velux.internal.bridge.VeluxBridgeProvider VeluxBridgeProvider}
28 * as described by the {@link org.openhab.binding.velux.internal.bridge.json.JsonBridgeCommunicationProtocol
29 * BridgeCommunicationProtocol}.
31 * @author Guenther Schreiner - Initial contribution.
34 class JCsetSceneVelocity extends SetSceneVelocity implements JsonBridgeCommunicationProtocol {
36 private static final String URL = "/api/v1/scenes";
37 private static final String DESCRIPTION = "modify silent mode";
39 private Request request = new Request();
40 private Response response = new Response();
42 private static int productId;
43 private static boolean silentMode;
48 private static class ParamsRunScene {
49 @SuppressWarnings("unused")
51 @SuppressWarnings("unused")
52 private boolean silent;
54 private ParamsRunScene(int id, boolean silent) {
61 * Bridge I/O Request message used by {@link JsonVeluxBridge}
64 * Resulting JSON (sample):
67 * {"action":"setSilentMode","params":{"id":9,"silent":false}}}
70 private static class Request {
71 @SuppressWarnings("unused")
72 private String action;
73 @SuppressWarnings("unused")
74 private ParamsRunScene params;
77 this.action = "setSilentMode";
78 this.params = new ParamsRunScene(JCsetSceneVelocity.productId, JCsetSceneVelocity.silentMode);
83 * Bridge I/O Response message used by {@link JsonVeluxBridge} for deserializing with including component access
86 * Expected JSON (sample):
90 * "token":"RHIKGlJyZhidI/JSK0a2RQ==",
92 * "deviceStatus":"IDLE",
98 private static class Response {
99 @SuppressWarnings("unused")
100 private String token = VeluxBindingConstants.UNKNOWN;
101 private boolean result;
102 private String deviceStatus = VeluxBindingConstants.UNKNOWN;
103 @SuppressWarnings("unused")
104 private @Nullable Object data;
105 private String[] errors = {};
107 public boolean getResult() {
113 * Methods required for interface {@link BridgeCommunicationProtocol}.
117 public String name() {
122 public String getURL() {
127 public Object getObjectOfRequest() {
132 public Class<Response> getClassOfResponse() {
133 return Response.class;
137 public void setResponse(Object response) {
138 this.response = (Response) response;
142 public boolean isCommunicationSuccessful() {
143 return response.getResult();
147 public String getDeviceStatus() {
148 return response.deviceStatus;
152 public String[] getErrors() {
153 return response.errors;
157 * Methods in addition to interface {@link BridgeCommunicationProtocol}.
160 public JCsetSceneVelocity setMode(int id, boolean silent) {
161 JCsetSceneVelocity.productId = id;
162 JCsetSceneVelocity.silentMode = silent;