Skip to content

Commit

Permalink
Update Gen Port
Browse files Browse the repository at this point in the history
  • Loading branch information
Sn0w3y committed Apr 15, 2024
1 parent 740d843 commit da67180
Showing 1 changed file with 27 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,36 +79,36 @@ public Doc doc() {
}

/**
* Initializes Channel listeners to calculate the
* {@link ElectricityMeter.ChannelId#ACTIVE_POWER}-Channel value as the sum of
* {@link ElectricityMeter.ChannelId#ACTIVE_POWER_L1},
* {@link ElectricityMeter.ChannelId#ACTIVE_POWER_L2} and
* {@link ElectricityMeter.ChannelId#ACTIVE_POWER_L3}.
* Updates the total active power of the meter by summing the individual phase powers
* and adjusting for generator power. This method assumes all necessary values are always
* present and uses a simple fallback for any missing data.
*
* @param meter the {@link ElectricityMeter}
* @param meter the {@link PvInverterDeye} instance being updated
*/
public static void calculateSumActivePowerFromPhases(PvInverterDeye meter) {
final Consumer<Value<Integer>> calculate = ignore -> {
final Integer generatorPower = meter.getActivePowerGen().getNextValue().get();
Integer generatorPowerToSet = 0;

if (generatorPower > 32768) {
generatorPowerToSet = generatorPower - 65536;
} else {
generatorPowerToSet = generatorPower;
}

meter._setActivePower(TypeUtils.sum(//
meter.getActivePowerS1Channel().getNextValue().get(), //
meter.getActivePowerS2Channel().getNextValue().get(), //
meter.getActivePowerS3Channel().getNextValue().get(), //
meter.getActivePowerS4Channel().getNextValue().get(), generatorPowerToSet)); //
};
meter.getActivePowerS1Channel().onSetNextValue(calculate);
meter.getActivePowerS2Channel().onSetNextValue(calculate);
meter.getActivePowerS3Channel().onSetNextValue(calculate);
meter.getActivePowerS4Channel().onSetNextValue(calculate);
meter.getActivePowerGen().onSetNextValue(calculate);
final Consumer<Value<Integer>> calculate = ignore -> {
// Adjust generator power if it overflows
Integer generatorPower = meter.getActivePowerGen().getNextValue().orElse(0);
Integer adjustedGeneratorPower = (generatorPower > 32768) ? generatorPower - 65536 : generatorPower;

// Sum phase powers and include adjusted generator power
Integer totalPower = TypeUtils.sum(
meter.getActivePowerS1Channel().getNextValue().orElse(0),
meter.getActivePowerS2Channel().getNextValue().orElse(0),
meter.getActivePowerS3Channel().getNextValue().orElse(0),
meter.getActivePowerS4Channel().getNextValue().orElse(0),
adjustedGeneratorPower
);

meter._setActivePower(totalPower);
};

// Attach the calculation method to each relevant channel
meter.getActivePowerS1Channel().onSetNextValue(calculate);
meter.getActivePowerS2Channel().onSetNextValue(calculate);
meter.getActivePowerS3Channel().onSetNextValue(calculate);
meter.getActivePowerS4Channel().onSetNextValue(calculate);
meter.getActivePowerGen().onSetNextValue(calculate);
}

public default IntegerReadChannel getActivePowerS1Channel() {
Expand Down

0 comments on commit da67180

Please sign in to comment.