* simplified determination of start/stop as the opMode now has new values (7+8) to show missing authentication (before this was included in value "2")
* refactored ChargerOpState to enum
---------
Signed-off-by: Alexander Friese <af944580@googlemail.com>
Signed-off-by: Alexander Friese <alexf2015@users.noreply.github.com>
Co-authored-by: lsiepel <leosiepel@gmail.com>
public static final String GENERIC_YES = "Yes";
public static final String GENERIC_NO = "No";
- public static final int CHARGER_OP_STATE_WAITING = 2;
- public static final int CHARGER_OP_STATE_CHARGING = 3;
- public static final int CHARGER_OP_STATE_NOT_AUTHENTICATED = 7;
public static final double CHARGER_DYNAMIC_CURRENT_PAUSE = 0;
public static final int CHARGER_REASON_FOR_NO_CURRENT_CIRCUIT_LIMIT = 2;
public static final int CHARGER_REASON_FOR_NO_CURRENT_CHARGER_LIMIT = 52;
--- /dev/null
+/**
+ * Copyright (c) 2010-2023 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.easee.internal.model;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * this enum represents the charger operation states as documented by https://developer.easee.cloud/docs/enumerations
+ *
+ * @author Alexander Friese - initial contribution
+ */
+@NonNullByDefault
+public enum ChargerOpState {
+ OFFLINE(0),
+ DISCONNECTED(1),
+ WAITING(2),
+ CHARGING(3),
+ COMPLETED(4),
+ ERROR(5),
+ READY_TO_CHARGE(6),
+ NOT_AUTHENTICATED(7),
+ DEAUTHENTICATING(8),
+ UNKNOWN_STATE(-1);
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ChargerOpState.class);
+ private final int code;
+
+ private ChargerOpState(int code) {
+ this.code = code;
+ }
+
+ public boolean isAuthenticatedState() {
+ switch (this) {
+ case WAITING:
+ case CHARGING:
+ case COMPLETED:
+ case READY_TO_CHARGE:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public static ChargerOpState fromCode(String code) {
+ try {
+ return ChargerOpState.fromCode(Integer.parseInt(code));
+ } catch (NumberFormatException ex) {
+ LOGGER.warn("caught exception while parsing ChargerOpState code: '{}' - exception: {}", code,
+ ex.getMessage());
+ return UNKNOWN_STATE;
+ }
+ }
+
+ public static ChargerOpState fromCode(int code) {
+ for (ChargerOpState state : ChargerOpState.values()) {
+ if (state.code == code) {
+ return state;
+ }
+ }
+ LOGGER.info("unknown ChargerOpState code: '{}'", code);
+ return UNKNOWN_STATE;
+ }
+}
switch (triggerChannel.getUID().getId()) {
case CHANNEL_GROUP_CHARGER_STATE + "#" + CHANNEL_CHARGER_OP_MODE:
- updateChargerStartStop(result, value, rawData);
+ updateChargerStartStop(result, value);
break;
case CHANNEL_GROUP_CHARGER_STATE + "#" + CHANNEL_CHARGER_DYNAMIC_CURRENT:
updateChargerPauseResume(result, value);
return result;
}
- private void updateChargerStartStop(Map<Channel, State> result, String value, JsonObject rawData) {
+ private void updateChargerStartStop(Map<Channel, State> result, String value) {
Channel channel = channelProvider.getChannel(CHANNEL_GROUP_CHARGER_COMMANDS, CHANNEL_CHARGER_START_STOP);
if (channel != null) {
- int val = Integer.parseInt(value);
- // state >= 3 && state < 7 will mean charging, ready to charge or charging finished
- boolean charging = val >= CHARGER_OP_STATE_CHARGING && val < CHARGER_OP_STATE_NOT_AUTHENTICATED;
-
- String rfnc = Utils.getAsString(rawData, CHANNEL_CHARGER_REASON_FOR_NO_CURRENT);
- int reasonForNoCurrent = Integer.valueOf(rfnc == null ? "-1" : rfnc);
- boolean paused = false;
- if (val == CHARGER_OP_STATE_WAITING) {
- switch (reasonForNoCurrent) {
- case CHARGER_REASON_FOR_NO_CURRENT_CHARGER_LIMIT:
- case CHARGER_REASON_FOR_NO_CURRENT_CIRCUIT_LIMIT:
- paused = true;
- break;
- default:
- paused = false;
- break;
- }
- }
- result.put(channel, OnOffType.from(charging || paused));
+ ChargerOpState state = ChargerOpState.fromCode(value);
+ result.put(channel, OnOffType.from(state.isAuthenticatedState()));
}
}