diff --git a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/EvccHandler.java b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/EvccHandler.java index f7ca71973662e..e7600b04d3a0d 100644 --- a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/EvccHandler.java +++ b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/EvccHandler.java @@ -29,12 +29,7 @@ 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; +import org.openhab.binding.evcc.internal.api.dto.*; import org.openhab.core.i18n.TimeZoneProvider; import org.openhab.core.library.CoreItemFactory; import org.openhab.core.library.types.DateTimeType; @@ -420,7 +415,7 @@ private void refresh() { updateStatus(ThingStatus.ONLINE); Battery[] batteries = result.getBattery(); batteryConfigured = ((batteries != null) && (batteries.length > 0)); - gridConfigured = (result.getGridPower() != null); + gridConfigured = result.getGridConfigured(); PV[] pvs = result.getPV(); pvConfigured = ((pvs != null) && (pvs.length > 0)); createChannelsGeneral(); @@ -712,7 +707,12 @@ private void updateChannelsGeneral() { } boolean gridConfigured = this.gridConfigured; if (gridConfigured) { + // handling gridPower prior to changes in evcc version 0.133.0 float gridPower = ((result.getGridPower() == null) ? 0.0f : result.getGridPower()); + Grid grid = result.getGrid(); + if (grid != null) { + gridPower = ((grid.getPower() == null) ? 0.0f : grid.getPower()); + } channel = new ChannelUID(uid, CHANNEL_GROUP_ID_GENERAL, CHANNEL_GRID_POWER); updateState(channel, new QuantityType<>(gridPower, Units.WATT)); } diff --git a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Grid.java b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Grid.java new file mode 100755 index 0000000000000..d170c4f35883f --- /dev/null +++ b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Grid.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2010-2025 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 the grid response (/api/state). + * This DTO was written for evcc version 0.133.0 + * + * @author Daniel Kötting - Initial contribution + */ +public class Grid { + // 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("currents") + private float[] currents; + + @SerializedName("energy") + private float energy; + + @SerializedName("power") + private Float power; + + /** + * @return grid's currents + */ + public float[] getCurrents() { + return currents; + } + + /** + * @return grid's energy + */ + public float getEnergy() { + return energy; + } + + /** + * @return grid's power or {@code null} if not available + */ + public Float getPower() { + return power; + } +} diff --git a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Result.java b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Result.java index 991b868afef5d..6f55489daf207 100644 --- a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Result.java +++ b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Result.java @@ -49,15 +49,15 @@ public class Result { @SerializedName("batteryMode") private String batteryMode; - @SerializedName("gridCurrents") - private float[] gridCurrents; - - @SerializedName("gridEnergy") - private float gridEnergy; - @SerializedName("gridPower") private Float gridPower; + @SerializedName("grid") + private Grid grid; + + @SerializedName("gridConfigured") + private boolean gridConfigured; + @SerializedName("homePower") private float homePower; @@ -165,24 +165,24 @@ public String getBatteryMode() { } /** - * @return grid's currents + * @return gridPower (before evcc version 0.133.0) */ - public float[] getGridCurrents() { - return gridCurrents; + public Float getGridPower() { + return gridPower; } /** - * @return grid's energy + * @return all grid related values */ - public float getGridEnergy() { - return gridEnergy; + public Grid getGrid() { + return grid; } /** - * @return grid's power or {@code null} if not available + * @return is grid configured */ - public Float getGridPower() { - return gridPower; + public boolean getGridConfigured() { + return gridConfigured; } /**