diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCBindingConstants.java b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCBindingConstants.java index 142fef0aa7e4..eca5c0f6d3a2 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCBindingConstants.java +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCBindingConstants.java @@ -53,6 +53,8 @@ public class E3DCBindingConstants { public static final String AUTARKY_CHANNEL = "autarky"; public static final String SELF_CONSUMPTION_CHANNEL = "self-consumption"; public static final String BATTERY_STATE_OF_CHARGE_CHANNEL = "battery-soc"; + public static final String BATTERY_CHARGED_CHANNEL = "battery-charged"; + public static final String BATTERY_UNCHARGED_CHANNEL = "battery-uncharged"; // Channels for Wallbox Block public static final String WB_AVAILABLE_CHANNEL = "wb-available"; diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCConfiguration.java b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCConfiguration.java index 3e8049b9eb7b..43de046452ec 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCConfiguration.java +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/E3DCConfiguration.java @@ -22,8 +22,6 @@ @NonNullByDefault public class E3DCConfiguration { - /** - * Data refresh interval - */ public int refresh = 2000; + public double batteryCapacity = -1; } diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/handler/E3DCThingHandler.java b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/handler/E3DCThingHandler.java index 4622ad6eb659..f5104dd5adcf 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/handler/E3DCThingHandler.java +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/java/org/openhab/binding/modbus/e3dc/internal/handler/E3DCThingHandler.java @@ -18,6 +18,8 @@ import java.util.ArrayList; import java.util.Optional; +import javax.measure.quantity.Energy; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.modbus.e3dc.internal.E3DCConfiguration; @@ -36,6 +38,8 @@ import org.openhab.core.io.transport.modbus.ModbusReadFunctionCode; import org.openhab.core.io.transport.modbus.ModbusReadRequestBlueprint; import org.openhab.core.io.transport.modbus.PollTask; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.unit.Units; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; @@ -98,6 +102,8 @@ public enum ReadStatus { private ChannelUID autarkyChannel; private ChannelUID selfConsumptionChannel; private ChannelUID batterySOCChannel; + private ChannelUID batteryChargedChannel; + private ChannelUID batteryUnchargedChannel; private ChannelUID string1AmpereChannel; private ChannelUID string1VoltChannel; @@ -157,6 +163,8 @@ public E3DCThingHandler(Bridge thing) { autarkyChannel = channelUID(thing, POWER_GROUP, AUTARKY_CHANNEL); selfConsumptionChannel = channelUID(thing, POWER_GROUP, SELF_CONSUMPTION_CHANNEL); batterySOCChannel = channelUID(thing, POWER_GROUP, BATTERY_STATE_OF_CHARGE_CHANNEL); + batteryChargedChannel = channelUID(thing, POWER_GROUP, BATTERY_CHARGED_CHANNEL); + batteryUnchargedChannel = channelUID(thing, POWER_GROUP, BATTERY_UNCHARGED_CHANNEL); string1AmpereChannel = channelUID(thing, STRINGS_GROUP, STRING1_DC_CURRENT_CHANNEL); string1VoltChannel = channelUID(thing, STRINGS_GROUP, STRING1_DC_VOLTAGE_CHANNEL); @@ -360,6 +368,17 @@ void handleDataResult(AsyncModbusReadResult result) { updateState(autarkyChannel, block.autarky); updateState(selfConsumptionChannel, block.selfConsumption); updateState(batterySOCChannel, block.batterySOC); + if (config != null) { + if (config.batteryCapacity > 0) { + double soc = block.batterySOC.doubleValue(); + QuantityType charged = QuantityType.valueOf(soc * config.batteryCapacity / 100, + Units.KILOWATT_HOUR); + updateState(batteryChargedChannel, charged); + QuantityType uncharged = QuantityType + .valueOf((100 - soc) * config.batteryCapacity / 100, Units.KILOWATT_HOUR); + updateState(batteryUnchargedChannel, uncharged); + } + } } else { logger.debug("Unable to get {} from provider {}", DataType.POWER, dataParser.toString()); } diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/i18n/e3dc.properties b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/i18n/e3dc.properties index dac5178572d4..0a9ea0b70822 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/i18n/e3dc.properties +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/i18n/e3dc.properties @@ -37,6 +37,10 @@ channel-type.modbus.battery-power-supply-channel.label = Battery Discharge channel-type.modbus.battery-power-supply-channel.description = Battery discharges and provides Power channel-type.modbus.battery-soc-channel.label = Battery State Of Charge channel-type.modbus.battery-soc-channel.description = Charge Level of your attached Battery in Percent +channel-type.modbus.battery-charged-channel.label = Battery Charge +channel-type.modbus.battery-charged-channel.description = Charged energy of battery +channel-type.modbus.battery-uncharged-channel.label = Battery Open Capacity +channel-type.modbus.battery-uncharged-channel.description = Open energy capacity of battery channel-type.modbus.charge-lock-time-channel.label = Charge Lock Time Active channel-type.modbus.charge-lock-time-channel.description = Charge Lock Time is currently active channel-type.modbus.discharge-lock-time-channel.label = Discharge Lock Time Active diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/bridge-e3dc.xml b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/bridge-e3dc.xml index 665d207fa04d..839f0e9d6b25 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/bridge-e3dc.xml +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/bridge-e3dc.xml @@ -22,6 +22,10 @@ Refresh Rate of E3DC values in Milliseconds 2000 + + + Capacity of the built in battery in kWh + diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-groups.xml b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-groups.xml index 10f9730ec085..9a59e67f44c5 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-groups.xml +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-groups.xml @@ -20,6 +20,8 @@ + + diff --git a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-types.xml b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-types.xml index 2dde054cbdda..1da9b05e5dfd 100644 --- a/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-types.xml +++ b/bundles/org.openhab.binding.modbus.e3dc/src/main/resources/OH-INF/thing/power-channel-types.xml @@ -75,4 +75,16 @@ Charge Level of your attached Battery in Percent + + Number:Energy + + Charged energy of battery + + + + Number:Energy + + Open energy capacity of battery + +