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.easee.internal.command.site;
15 import static org.openhab.binding.easee.internal.EaseeBindingConstants.*;
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;
32 import com.google.gson.JsonArray;
33 import com.google.gson.JsonElement;
34 import com.google.gson.JsonObject;
37 * implements the state api call of the site in order to retrieve charger states.
39 * @author Alexander Friese - initial contribution
42 public class SiteState extends AbstractCommand {
43 private final String url;
44 private final Map<String, EaseeChargerHandler> chargerHandlers;
49 private final Logger logger = LoggerFactory.getLogger(SiteState.class);
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;
61 protected Request prepareRequest(Request requestToPrepare) {
62 requestToPrepare.method(HttpMethod.GET);
63 return requestToPrepare;
67 protected String getURL() {
72 protected String getChannelGroup() {
73 return CHANNEL_GROUP_CHARGER_STATE;
77 * override default behaviour: extract ChargerState from SiteState
80 protected void onCompleteCodeOk(@Nullable String json) {
81 JsonObject jsonObject = transform(json);
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());
96 * processes charger data, also sets online status retrieved from API.
100 private void processChargerStateData(JsonObject chargerData) {
101 JsonElement chargerId = chargerData.get(JSON_KEY_CHARGER_ID);
102 String id = chargerId != null ? chargerId.getAsString() : 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);
111 handler.updateChannelStatus(transformer.transform(jsonObject, getChannelGroup()));
112 handler.setOnline(isOnline == null ? false : isOnline);