]> git.basschouten.com Git - openhab-addons.git/commitdiff
[evcc] Adjust to evcc 0.125.0 API changes (#16660)
authorMikeTheTux <44850211+MikeTheTux@users.noreply.github.com>
Sat, 20 Apr 2024 13:00:59 +0000 (15:00 +0200)
committerGitHub <noreply@github.com>
Sat, 20 Apr 2024 13:00:59 +0000 (15:00 +0200)
* avoid deprecated parameters evcc rest API parameters 'batteryConfigured' and 'pvConfigured'

Signed-off-by: Michael Weger <weger.michael@gmx.net>
bundles/org.openhab.binding.evcc/README.md
bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/EvccHandler.java
bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Battery.java [new file with mode: 0644]
bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/PV.java [new file with mode: 0644]
bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Result.java

index fce6304c97784d9a2c81afc003c596dceda10e54..aabeb32f3437e3799ffdf16fbf21b81ecef3298c 100644 (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`.
 
index 3e6131d2a3ae47d6b86d77bb300508c575a46fb5..bf60d17e22d90bea170677eca862715729e261fc 100644 (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));
         }
diff --git a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Battery.java b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/Battery.java
new file mode 100644 (file)
index 0000000..9d21b61
--- /dev/null
@@ -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;
+    }
+}
diff --git a/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/PV.java b/bundles/org.openhab.binding.evcc/src/main/java/org/openhab/binding/evcc/internal/api/dto/PV.java
new file mode 100644 (file)
index 0000000..0261c35
--- /dev/null
@@ -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;
+    }
+}
index 0e3f367bc473a282c7378ff526f1a5cf4c323644..598ee3f7028888eeae984f67c57c0186f57ebfbf 100644 (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;
@@ -90,17 +93,17 @@ public class Result {
     private String availableVersion;
 
     /**
-     * @return battery's capacity
+     * @return all configured batteries
      */
-    public float getBatteryCapacity() {
-        return batteryCapacity;
+    public Battery[] getBattery() {
+        return battery;
     }
 
     /**
-     * @return whether battery is configured
+     * @return battery's capacity
      */
-    public boolean getBatteryConfigured() {
-        return batteryConfigured;
+    public float getBatteryCapacity() {
+        return batteryCapacity;
     }
 
     /**
@@ -160,16 +163,23 @@ public class Result {
     }
 
     /**
-     * @return whether grid is configured
+     * @return grid's currents
+     */
+    public float[] getGridCurrents() {
+        return gridCurrents;
+    }
+
+    /**
+     * @return grid's energy
      */
-    public boolean getGridConfigured() {
-        return gridConfigured;
+    public float getGridEnergy() {
+        return gridEnergy;
     }
 
     /**
-     * @return grid's power
+     * @return grid's power or {@code null} if not available
      */
-    public float getGridPower() {
+    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;
     }
 
     /**