Hi Community,
I am using a custom battery with Kaco bpg 92 inverter to make a generic managed symmetric ess. The bms does not seem to show a stable and correct soc. I want to implement a soc calculator that would take charge/discharge energy from _sum and use that to calculate a more correct soc and map that to the Battery Soc channel.
I need guidance on how can I implement this the best way? Should I create a class in the Battery Implementation or in the GenericManagedSymmetricEss and import _sum/ActiveCharge/Discharge Energy in that and do the calculation? or make a separate sort of api to do this?
Currently I have made this class. It does not work at all though
Pardon me Java Gurus for this:
public class BatterySocCalculator extends GenericManagedSymmetricEssImpl {
private int initialSoc;
private int batteryCapacity;
private double cumulativeCharge = 0;
private double cumulativeDischarge = 0;
private int soc_new;
private BatterySocCalculator(int initialSoC, int batteryCapacity) {
this.initialSoc = initialSoc;
this.batteryCapacity = batteryCapacity;
}
private int updateEnergy(double chargeEnergy, double dischargeEnergy) {
cumulativeCharge += chargeEnergy;
cumulativeDischarge += dischargeEnergy;
return 0;
}
private int calculateSoC() {
double currentEnergy = cumulativeCharge - cumulativeDischarge;
int soc = (int)((currentEnergy / batteryCapacity) * 100.0);
// soc = Math.max(0, Math.min(100, soc));
return soc;
}
public static int calSoc() {
// int initialSoC = this.getSoc().get(); // Initial state of charge (%)
int initialSoC = 85; // Initial state of charge (%)
int batteryCapacity = 100; // Example battery capacity (Wh)
GenericManagedSymmetricEssImpl ess = new GenericManagedSymmetricEssImpl();
BatterySocCalculator socCalculator = ess.new BatterySocCalculator(initialSoC, batteryCapacity);
double chargeEnergy = 1; // Example charge energy (Wh)
double dischargeEnergy = 0; // Example discharge energy (Wh)
socCalculator.updateEnergy(chargeEnergy, dischargeEnergy);
int soc_new = socCalculator.calculateSoC();
return soc_new;
}
}
public void calcSoc() {
this.channel(Battery.ChannelId.SOC).setNextValue(GenericManagedSymmetricEssImpl.BatterySocCalculator.calSoc());
}
Thanks in advance!
Regards
Hafiz