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;
49 private static class ParamsRunScene {
50 @SuppressWarnings("unused")
52 @SuppressWarnings("unused")
53 private boolean silent;
55 private ParamsRunScene(int id, boolean silent) {
62 * Bridge I/O Request message used by {@link JsonVeluxBridge}
65 * Resulting JSON (sample):
68 * {"action":"setSilentMode","params":{"id":9,"silent":false}}}
72 private static class Request {
73 @SuppressWarnings("unused")
74 private String action;
75 @SuppressWarnings("unused")
76 private ParamsRunScene params;
79 this.action = "setSilentMode";
80 this.params = new ParamsRunScene(JCsetSceneVelocity.productId, JCsetSceneVelocity.silentMode);
85 * Bridge I/O Response message used by {@link JsonVeluxBridge} for deserializing with including component access
88 * Expected JSON (sample):
92 * "token":"RHIKGlJyZhidI/JSK0a2RQ==",
94 * "deviceStatus":"IDLE",
101 private static class Response {
102 @SuppressWarnings("unused")
103 private String token = VeluxBindingConstants.UNKNOWN;
104 private boolean result;
105 private String deviceStatus = VeluxBindingConstants.UNKNOWN;
106 @SuppressWarnings("unused")
107 private @Nullable Object data;
108 private String[] errors = {};
110 public boolean getResult() {
116 * Methods required for interface {@link BridgeCommunicationProtocol}.
120 public String name() {
125 public String getURL() {
130 public Object getObjectOfRequest() {
135 public Class<Response> getClassOfResponse() {
136 return Response.class;
140 public void setResponse(Object response) {
141 this.response = (Response) response;
145 public boolean isCommunicationSuccessful() {
146 return response.getResult();
150 public String getDeviceStatus() {
151 return response.deviceStatus;
155 public String[] getErrors() {
156 return response.errors;
160 * Methods in addition to interface {@link BridgeCommunicationProtocol}.
163 public JCsetSceneVelocity setMode(int id, boolean silent) {
164 JCsetSceneVelocity.productId = id;
165 JCsetSceneVelocity.silentMode = silent;