]> git.basschouten.com Git - openhab-addons.git/blob
a2d41996b1a1257e714e85937af6b57d39b32afb
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.easee.internal.command.site;
14
15 import static org.openhab.binding.easee.internal.EaseeBindingConstants.*;
16
17 import java.util.Map;
18
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.eclipse.jdt.annotation.Nullable;
21 import org.eclipse.jetty.client.api.Request;
22 import org.eclipse.jetty.http.HttpMethod;
23 import org.openhab.binding.easee.internal.Utils;
24 import org.openhab.binding.easee.internal.command.AbstractCommand;
25 import org.openhab.binding.easee.internal.command.JsonResultProcessor;
26 import org.openhab.binding.easee.internal.handler.EaseeChargerHandler;
27 import org.openhab.binding.easee.internal.handler.EaseeThingHandler;
28 import org.openhab.binding.easee.internal.model.GenericResponseTransformer;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 import com.google.gson.JsonArray;
33 import com.google.gson.JsonElement;
34 import com.google.gson.JsonObject;
35
36 /**
37  * implements the state api call of the site in order to retrieve charger states.
38  *
39  * @author Alexander Friese - initial contribution
40  */
41 @NonNullByDefault
42 public class SiteState extends AbstractCommand {
43     private final String url;
44     private final Map<String, EaseeChargerHandler> chargerHandlers;
45
46     /**
47      * logger
48      */
49     private final Logger logger = LoggerFactory.getLogger(SiteState.class);
50
51     public SiteState(EaseeThingHandler handler, String siteId, Map<String, EaseeChargerHandler> chargerHandlers,
52             JsonResultProcessor resultProcessor) {
53         // retry does not make much sense as it is a polling command, command should always succeed therefore update
54         // handler on failure.
55         super(handler, RetryOnFailure.NO, ProcessFailureResponse.YES, resultProcessor);
56         this.url = SITE_STATE_URL.replaceAll("\\{siteId\\}", siteId);
57         this.chargerHandlers = chargerHandlers;
58     }
59
60     @Override
61     protected Request prepareRequest(Request requestToPrepare) {
62         requestToPrepare.method(HttpMethod.GET);
63         return requestToPrepare;
64     }
65
66     @Override
67     protected String getURL() {
68         return url;
69     }
70
71     @Override
72     protected String getChannelGroup() {
73         return CHANNEL_GROUP_CHARGER_STATE;
74     }
75
76     /**
77      * override default behaviour: extract ChargerState from SiteState
78      */
79     @Override
80     protected void onCompleteCodeOk(@Nullable String json) {
81         JsonObject jsonObject = transform(json);
82
83         if (jsonObject != null) {
84             logger.debug("success");
85             JsonArray circuitStates = jsonObject.getAsJsonArray(JSON_KEY_CIRCUIT_STATES);
86             for (JsonElement circuitState : circuitStates) {
87                 JsonArray chargerDataArray = circuitState.getAsJsonObject().getAsJsonArray(JSON_KEY_CHARGER_STATES);
88                 for (JsonElement chargerData : chargerDataArray) {
89                     processChargerStateData(chargerData.getAsJsonObject());
90                 }
91             }
92         }
93     }
94
95     /**
96      * processes charger data, also sets online status retrieved from API.
97      *
98      * @param chargerData
99      */
100     private void processChargerStateData(JsonObject chargerData) {
101         JsonElement chargerId = chargerData.get(JSON_KEY_CHARGER_ID);
102         String id = chargerId != null ? chargerId.getAsString() : null;
103         if (id != null) {
104             EaseeChargerHandler handler = chargerHandlers.get(id);
105             if (handler != null) {
106                 GenericResponseTransformer transformer = new GenericResponseTransformer(handler);
107                 JsonElement chargerState = chargerData.getAsJsonObject().get(JSON_KEY_CHARGER_STATE);
108                 JsonObject jsonObject = chargerState.getAsJsonObject();
109                 Boolean isOnline = Utils.getAsBool(jsonObject, JSON_KEY_ONLINE);
110
111                 handler.updateChannelStatus(transformer.transform(jsonObject, getChannelGroup()));
112                 handler.setOnline(isOnline == null ? false : isOnline);
113             }
114         }
115     }
116 }