[evcc] Adjust to evcc 0.125.0 API changes (#16660)

* avoid deprecated parameters evcc rest API parameters 'batteryConfigured' and 'pvConfigured'

Signed-off-by: Michael Weger <weger.michael@gmx.net>
Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
MikeTheTux 2024-04-20 15:00:59 +02:00 committed by Ciprian Pascu
parent 627cc9d590
commit 173e124278
5 changed files with 147 additions and 29 deletions

View File

@ -1,7 +1,7 @@
# evcc Binding
This binding integrates [evcc - electric vehicle charging control](https://evcc.io), a project that provides a control center for electric vehicle charging.
The binding requires evcc [version 0.123.1](https://github.com/evcc-io/evcc/releases/tag/0.123.1) or newer and is tested with this version.
This binding integrates [evcc](https://evcc.io), an extensible **E**lectric **V**ehicle **C**harge **C**ontroller and home energy management system.
The binding is compatible to evcc [version 0.123.1](https://github.com/evcc-io/evcc/releases/tag/0.123.1) or newer and was tested with [version 0.125.0](https://github.com/evcc-io/evcc/releases/tag/0.125.0).
You can easily install and upgrade evcc on openHABian using `sudo openhabian-config`.

View File

@ -27,7 +27,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.evcc.internal.api.EvccAPI;
import org.openhab.binding.evcc.internal.api.EvccApiException;
import org.openhab.binding.evcc.internal.api.dto.Battery;
import org.openhab.binding.evcc.internal.api.dto.Loadpoint;
import org.openhab.binding.evcc.internal.api.dto.PV;
import org.openhab.binding.evcc.internal.api.dto.Plan;
import org.openhab.binding.evcc.internal.api.dto.Result;
import org.openhab.binding.evcc.internal.api.dto.Vehicle;
@ -216,7 +218,6 @@ public class EvccHandler extends BaseThingHandler {
return;
}
}
} else if (groupId.startsWith(CHANNEL_GROUP_ID_VEHICLE) || groupId.startsWith(CHANNEL_GROUP_ID_HEATING)
|| (groupId.startsWith(CHANNEL_GROUP_ID_LOADPOINT)
&& groupId.endsWith(CHANNEL_GROUP_ID_CURRENT))) {
@ -412,9 +413,11 @@ public class EvccHandler extends BaseThingHandler {
Map<String, Vehicle> vehicles = result.getVehicles();
logger.debug("Found {} vehicles on site {}.", vehicles.size(), sitename);
updateStatus(ThingStatus.ONLINE);
batteryConfigured = result.getBatteryConfigured();
gridConfigured = result.getGridConfigured();
pvConfigured = result.getPvConfigured();
Battery[] batteries = result.getBattery();
batteryConfigured = ((batteries != null) && (batteries.length > 0));
gridConfigured = (result.getGridPower() != null);
PV[] pvs = result.getPV();
pvConfigured = ((pvs != null) && (pvs.length > 0));
createChannelsGeneral();
updateChannelsGeneral();
for (int i = 0; i < numberOfLoadpoints; i++) {
@ -704,7 +707,7 @@ public class EvccHandler extends BaseThingHandler {
}
boolean gridConfigured = this.gridConfigured;
if (gridConfigured) {
float gridPower = result.getGridPower();
float gridPower = ((result.getGridPower() == null) ? 0.0f : result.getGridPower());
channel = new ChannelUID(uid, CHANNEL_GROUP_ID_GENERAL, CHANNEL_GRID_POWER);
updateState(channel, new QuantityType<>(gridPower, Units.WATT));
}

View File

@ -0,0 +1,69 @@
/**
* Copyright (c) 2010-2024 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.evcc.internal.api.dto;
import com.google.gson.annotations.SerializedName;
/**
* This class represents a battery object of the status response (/api/state).
* This DTO was written for evcc version 0.123.1
*
* @author MikeTheTux - Initial contribution
*/
public class Battery {
// Data types from https://github.com/evcc-io/evcc/blob/master/api/api.go
// and from https://docs.evcc.io/docs/reference/configuration/messaging/#msg
@SerializedName("power")
private float power;
@SerializedName("energy")
private float energy;
@SerializedName("soc")
private float soc;
@SerializedName("capacity")
private float capacity;
@SerializedName("controllable")
private boolean controllable;
/**
* @return battery's capacity
*/
public float getCapacity() {
return capacity;
}
/**
* @return battery's power
*/
public float getPower() {
return power;
}
/**
* @return battery's state of charge
*/
public float getSoC() {
return soc;
}
/**
* @return battery discharge controlable
*/
public boolean getControllable() {
return controllable;
}
}

View File

@ -0,0 +1,36 @@
/**
* Copyright (c) 2010-2024 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.evcc.internal.api.dto;
import com.google.gson.annotations.SerializedName;
/**
* This class represents a PV object of the status response (/api/state).
* This DTO was written for evcc version 0.123.1
*
* @author MikeTheTux - Initial contribution
*/
public class PV {
// Data types from https://github.com/evcc-io/evcc/blob/master/api/api.go
// and from https://docs.evcc.io/docs/reference/configuration/messaging/#msg
@SerializedName("power")
private float power;
/**
* @return PV power
*/
public float getPower() {
return power;
}
}

View File

@ -32,8 +32,8 @@ public class Result {
@SerializedName("batteryCapacity")
private float batteryCapacity;
@SerializedName("batteryConfigured")
private boolean batteryConfigured;
@SerializedName("battery")
private Battery[] battery;
@SerializedName("batteryPower")
private float batteryPower;
@ -47,11 +47,14 @@ public class Result {
@SerializedName("batteryMode")
private String batteryMode;
@SerializedName("gridConfigured")
private boolean gridConfigured;
@SerializedName("gridCurrents")
private float[] gridCurrents;
@SerializedName("gridEnergy")
private float gridEnergy;
@SerializedName("gridPower")
private float gridPower;
private Float gridPower;
@SerializedName("homePower")
private float homePower;
@ -71,8 +74,8 @@ public class Result {
@SerializedName("residualPower")
private float residualPower;
@SerializedName("pvConfigured")
private boolean pvConfigured;
@SerializedName("pv")
private PV[] pv;
@SerializedName("pvPower")
private float pvPower;
@ -89,6 +92,13 @@ public class Result {
@SerializedName("availableVersion")
private String availableVersion;
/**
* @return all configured batteries
*/
public Battery[] getBattery() {
return battery;
}
/**
* @return battery's capacity
*/
@ -96,13 +106,6 @@ public class Result {
return batteryCapacity;
}
/**
* @return whether battery is configured
*/
public boolean getBatteryConfigured() {
return batteryConfigured;
}
/**
* @return battery's power
*/
@ -160,16 +163,23 @@ public class Result {
}
/**
* @return whether grid is configured
* @return grid's currents
*/
public boolean getGridConfigured() {
return gridConfigured;
public float[] getGridCurrents() {
return gridCurrents;
}
/**
* @return grid's power
* @return grid's energy
*/
public float getGridPower() {
public float getGridEnergy() {
return gridEnergy;
}
/**
* @return grid's power or {@code null} if not available
*/
public Float getGridPower() {
return gridPower;
}
@ -188,10 +198,10 @@ public class Result {
}
/**
* @return whether pv is configured
* @return all configured PVs
*/
public boolean getPvConfigured() {
return pvConfigured;
public PV[] getPV() {
return pv;
}
/**