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.RunScene;
21 * Specific bridge communication message supported by the Velux bridge.
23 * Message semantic: Trigger activation of a specific scene, 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 JCrunScene extends RunScene implements JsonBridgeCommunicationProtocol {
36 private static final String URL = "/api/v1/scenes";
37 private static final String DESCRIPTION = "run Scene";
39 private Request request = new Request();
40 private Response response = new Response();
45 private static class ParamsRunScene {
46 @SuppressWarnings("unused")
51 * Bridge I/O Request message used by {@link JsonVeluxBridge}
54 * Resulting JSON (sample):
57 * {"action":"run","params":{"id":9}}
60 private static class Request {
61 @SuppressWarnings("unused")
62 private String action;
63 private ParamsRunScene params;
67 this.params = new ParamsRunScene();
72 * Bridge I/O Response message used by {@link JsonVeluxBridge} for deserializing with including component access
75 * Expected JSON (sample):
79 * "token":"RHIKGlJyZhidI/JSK0a2RQ==",
81 * "deviceStatus":"IDLE",
87 private static class Response {
88 @SuppressWarnings("unused")
89 private String token = VeluxBindingConstants.UNKNOWN;
90 private boolean result;
91 private String deviceStatus = VeluxBindingConstants.UNKNOWN;
92 @SuppressWarnings("unused")
93 private @Nullable Object data;
94 private String[] errors = {};
96 public boolean getResult() {
102 * Methods required for interface {@link BridgeCommunicationProtocol}.
106 public String name() {
111 public String getURL() {
116 public Object getObjectOfRequest() {
121 public Class<Response> getClassOfResponse() {
122 return Response.class;
126 public void setResponse(Object response) {
127 this.response = (Response) response;
131 public boolean isCommunicationSuccessful() {
132 return response.getResult();
136 public String getDeviceStatus() {
137 return response.deviceStatus;
141 public String[] getErrors() {
142 return response.errors;
146 * Methods in addition to interface {@link BridgeCommunicationProtocol}.
149 public JCrunScene setSceneId(int id) {
150 request.params.id = id;