Skip to content

Commit

Permalink
Removed a Packet bound, created DailyCalc
Browse files Browse the repository at this point in the history
  • Loading branch information
retrodaredevil committed May 8, 2020
1 parent eacfca8 commit 37ad29a
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import me.retrodaredevil.solarthing.pvoutput.SimpleTime;
import me.retrodaredevil.solarthing.pvoutput.data.AddStatusParameters;
import me.retrodaredevil.solarthing.pvoutput.data.AddStatusParametersBuilder;
import me.retrodaredevil.solarthing.solar.common.DailyData;
import me.retrodaredevil.solarthing.solar.daily.DailyCalc;
import me.retrodaredevil.solarthing.solar.daily.DailyConfig;
import me.retrodaredevil.solarthing.solar.daily.DailyPair;
import me.retrodaredevil.solarthing.solar.daily.DailyUtil;
Expand Down Expand Up @@ -118,32 +118,16 @@ private static AddStatusParametersBuilder setStatusEnergyValues(AddStatusParamet
Map<IdentifierFragment, List<DailyPair<RoverStatusPacket>>> roverMap = DailyUtil.getDailyPairs(DailyUtil.mapPackets(RoverStatusPacket.class, packetGroups), dailyConfig);
Map<IdentifierFragment, List<DailyPair<DailyFXPacket>>> dailyFXMap = DailyUtil.getDailyPairs(DailyUtil.mapPackets(DailyFXPacket.class, packetGroups), dailyConfig);
if (!mxMap.isEmpty() || !roverMap.isEmpty()) { // energy produced
float generationKWH = getTotal(mxMap.values(), MXStatusPacket::getDailyKWH) +
getTotal(roverMap.values(), RoverStatusPacket::getDailyKWH);
float generationKWH = DailyCalc.getSumTotal(mxMap.values(), MXStatusPacket::getDailyKWH) +
DailyCalc.getSumTotal(roverMap.values(), RoverStatusPacket::getDailyKWH);
builder.setEnergyGeneration(Math.round(generationKWH * 1000.0f));
}
if (!dailyFXMap.isEmpty()) { // energy consumed // right now, only do this if there are fx dailies
float consumptionKWH = getTotal(roverMap.values(), RoverStatusPacket::getDailyKWHConsumption) +
getTotal(dailyFXMap.values(), dailyFXPacket -> dailyFXPacket.getInverterKWH() + dailyFXPacket.getBuyKWH() - dailyFXPacket.getChargerKWH());
float consumptionKWH = DailyCalc.getSumTotal(roverMap.values(), RoverStatusPacket::getDailyKWHConsumption) +
DailyCalc.getSumTotal(dailyFXMap.values(), dailyFXPacket -> dailyFXPacket.getInverterKWH() + dailyFXPacket.getBuyKWH() - dailyFXPacket.getChargerKWH());
builder.setEnergyConsumption(Math.round(consumptionKWH * 1000.0f));
}
return builder;
}
private static <T extends Packet & DailyData> float getTotal(Collection<List<DailyPair<T>>> dailyPairListCollection, TotalGetter<T> totalGetter) {
float total = 0;
for (List<DailyPair<T>> dailyPairs : dailyPairListCollection) {
for (DailyPair<T> dailyPair : dailyPairs) {
if (dailyPair.getStartPacketType() == DailyPair.StartPacketType.CUT_OFF) {
total += totalGetter.getTotal(dailyPair.getLatestPacket().getPacket()) - totalGetter.getTotal(dailyPair.getStartPacket().getPacket());
} else {
total += totalGetter.getTotal(dailyPair.getLatestPacket().getPacket());
}
}
}
return total;
}
private interface TotalGetter<T> {
float getTotal(T t);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package me.retrodaredevil.solarthing.solar.daily;

import me.retrodaredevil.solarthing.solar.common.DailyData;

import java.util.Collection;
import java.util.List;

public final class DailyCalc {
private DailyCalc() { throw new UnsupportedOperationException(); }

public static <T extends DailyData> float getSumTotal(Collection<? extends List<DailyPair<T>>> dailyPairListCollection, TotalGetter<T> totalGetter) {
float total = 0;
for (List<DailyPair<T>> dailyPairs : dailyPairListCollection) {
total += getTotal(dailyPairs, totalGetter);
}
return total;
}
public static <T extends DailyData> float getTotal(List<? extends DailyPair<T>> dailyPairs, TotalGetter<T> totalGetter) {
float total = 0;
for (DailyPair<T> dailyPair : dailyPairs) {
if (dailyPair.getStartPacketType() == DailyPair.StartPacketType.CUT_OFF) {
total += totalGetter.getTotal(dailyPair.getLatestPacket().getPacket()) - totalGetter.getTotal(dailyPair.getStartPacket().getPacket());
} else {
total += totalGetter.getTotal(dailyPair.getLatestPacket().getPacket());
}
}
return total;
}
@FunctionalInterface
public interface TotalGetter<T> {
float getTotal(T t);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
import java.util.Map;

@SuppressWarnings("Java8MapApi") // needs to compatible with Android SDK 19
public class DailyUtil {
public final class DailyUtil {
private DailyUtil(){ throw new UnsupportedOperationException(); }
private static <T extends DailyData> DailyPair<T> createDailyPair(boolean isFirst, TimestampedPacket<T> firstPacket, TimestampedPacket<T> endPacket, DailyConfig dailyConfig) {
final DailyPair.StartPacketType startPacketType;
if (isFirst) {
Expand Down Expand Up @@ -58,7 +59,7 @@ public static <T extends DailyData> Map<IdentifierFragment, List<DailyPair<T>>>
return r;
}
@SuppressWarnings("unchecked")
public static <T extends Packet & Identifiable> Map<IdentifierFragment, List<TimestampedPacket<T>>> mapPackets(Class<T> clazz, List<FragmentedPacketGroup> packetGroups) {
public static <T extends Identifiable> Map<IdentifierFragment, List<TimestampedPacket<T>>> mapPackets(Class<T> clazz, List<FragmentedPacketGroup> packetGroups) {
Map<IdentifierFragment, List<TimestampedPacket<T>>> packetMap = new HashMap<>();
for (FragmentedPacketGroup packetGroup : packetGroups) {
for (Packet packet : packetGroup.getPackets()) {
Expand Down

0 comments on commit 37ad29a

Please sign in to comment.