2 * Copyright (c) 2010-2023 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.
35 class JCsetSceneVelocity extends SetSceneVelocity implements JsonBridgeCommunicationProtocol {
37 private static final String URL = "/api/v1/scenes";
38 private static final String DESCRIPTION = "modify silent mode";
40 private Request request = new Request();
41 private Response response = new Response();
43 private static int productId;
44 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}}}
71 private static class Request {
72 @SuppressWarnings("unused")
73 private String action;
74 @SuppressWarnings("unused")
75 private ParamsRunScene params;
78 this.action = "setSilentMode";
79 this.params = new ParamsRunScene(JCsetSceneVelocity.productId, JCsetSceneVelocity.silentMode);
84 * Bridge I/O Response message used by {@link JsonVeluxBridge} for deserializing with including component access
87 * Expected JSON (sample):
91 * "token":"RHIKGlJyZhidI/JSK0a2RQ==",
93 * "deviceStatus":"IDLE",
99 private static class Response {
100 @SuppressWarnings("unused")
101 private String token = VeluxBindingConstants.UNKNOWN;
102 private boolean result;
103 private String deviceStatus = VeluxBindingConstants.UNKNOWN;
104 @SuppressWarnings("unused")
105 private @Nullable Object data;
106 private String[] errors = {};
108 public boolean getResult() {
114 * Methods required for interface {@link BridgeCommunicationProtocol}.
118 public String name() {
123 public String getURL() {
128 public Object getObjectOfRequest() {
133 public Class<Response> getClassOfResponse() {
134 return Response.class;
138 public void setResponse(Object response) {
139 this.response = (Response) response;
143 public boolean isCommunicationSuccessful() {
144 return response.getResult();
148 public String getDeviceStatus() {
149 return response.deviceStatus;
153 public String[] getErrors() {
154 return response.errors;
158 * Methods in addition to interface {@link BridgeCommunicationProtocol}.
161 public JCsetSceneVelocity setMode(int id, boolean silent) {
162 JCsetSceneVelocity.productId = id;
163 JCsetSceneVelocity.silentMode = silent;