JSON-Ausgabe eingebaut

This commit is contained in:
tobias 2025-03-18 22:05:41 +01:00
parent a8d65c21b2
commit ed7c8d6d34
2 changed files with 65 additions and 15 deletions

View File

@ -5,6 +5,8 @@ import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoField;
import java.util.List;
import java.util.Locale;
@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import info.peper.vz.rest.bo.Statistics;
import info.peper.vz.rest.bo.db.Aggregate;
import info.peper.vz.rest.bo.db.EnergyPrice;
@ -76,8 +79,8 @@ class VzRestController {
return prices;
}
@GetMapping(value="/rest-vz/summary", produces = {"text/plain"})
String getSummary(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart,
@GetMapping(value="/rest-vz/stats", produces = {"application/json"})
Statistics getStats(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart,
@RequestParam(name = "timestampEnd", defaultValue = "-1")long timestampEnd,
@RequestParam(name = "duration", defaultValue = "")final String duration,
@RequestParam("houseId")final int houseId,
@ -96,9 +99,6 @@ class VzRestController {
}
}
final NumberFormat formatCurrency = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final NumberFormat formatPercent = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final NumberFormat formatEnergy = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final List<EnergyPrice> prices = this.getPrices(timestampStart, timestampEnd, houseId);
float savedMoney = 0;
@ -122,16 +122,31 @@ class VzRestController {
timestampMax = aggregate.getTimestampEnd();
}
}
return new Statistics(timestampMin, timestampMax, totalProduced, totalInjected, totalObtained, (long)(savedMoney*100));
}
@GetMapping(value="/rest-vz/summary", produces = {"text/plain"})
String getSummary(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart,
@RequestParam(name = "timestampEnd", defaultValue = "-1")long timestampEnd,
@RequestParam(name = "duration", defaultValue = "")final String duration,
@RequestParam("houseId")final int houseId,
@RequestParam(name = "solarFactor", defaultValue = "1.0")final float solarFactor) {
final Statistics stats = this.getStats(timestampStart, timestampEnd, duration, houseId, solarFactor);
final NumberFormat formatCurrency = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final NumberFormat formatPercent = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final NumberFormat formatEnergy = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN));
final StringBuilder sb = new StringBuilder();
sb.append("Start: " + Instant.ofEpochMilli(timestampMin).toString() + "\n");
sb.append("Ende: " + Instant.ofEpochMilli(timestampMax).toString() + "\n");
sb.append("Erzeugter Strom von der Photovoltaik: " + formatEnergy.format((float)totalProduced/1000000) + " kWh\n");
sb.append("Eingespeister Strom von der Photovoltaik: " + formatEnergy.format((float)totalInjected/1000000) + " kWh\n");
sb.append("Genutzter Strom von der Photovoltaik: " + formatEnergy.format((float)(totalProduced-totalInjected)/1000000) + " kWh (=");
sb.append(formatPercent.format((float)(totalProduced-totalInjected)/(float)totalProduced*100) + " %)\n");
sb.append("Bezogener Strom: " + formatEnergy.format((float)totalObtained/1000000) + " kWh\n");
sb.append("Autakie: " + formatPercent.format((float)(totalProduced-totalInjected)/(float)(totalObtained+totalProduced-totalInjected)*100) + " %\n");
sb.append("Eingespartes Geld: " + formatCurrency.format(savedMoney) + "\n");
sb.append("Start: .................................. " + ZonedDateTime.ofInstant(Instant.ofEpochMilli(stats.getTimestampStart()), ZoneId.systemDefault()).toString() + "\n");
sb.append("Ende: ................................... " + ZonedDateTime.ofInstant(Instant.ofEpochMilli(stats.getTimestampEnd()), ZoneId.systemDefault()).toString() + "\n");
sb.append("Erzeugter Strom von der Photovoltaik: ... " + formatEnergy.format((float)stats.getProducedEnergy()/1000000) + " kWh\n");
sb.append("Eingespeister Strom von der Photovoltaik: " + formatEnergy.format((float)stats.getInjectedEnergy()/1000000) + " kWh\n");
sb.append("Genutzter Strom von der Photovoltaik: ... " + formatEnergy.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/1000000) + " kWh (=");
sb.append(formatPercent.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/(float)stats.getProducedEnergy()*100) + " %)\n");
sb.append("Bezogener Strom: ........................ " + formatEnergy.format((float)stats.getObtainedEnergy()/1000000) + " kWh\n");
sb.append("Autakie: ................................ " + formatPercent.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/(float)(stats.getObtainedEnergy()+stats.getProducedEnergy()-stats.getInjectedEnergy())*100) + " %\n");
sb.append("Eingespartes Geld: ...................... " + formatCurrency.format(((float)stats.getSavedMoney())/100) + "\n");
return sb.toString();
}

View File

@ -1,5 +1,40 @@
package info.peper.vz.rest.bo;
public class Statistics {
private final long timestampStart;
private final long timestampEnd;
private final long producedEnergy;
private final long injectedEnergy;
private final long obtainedEnergy;
private final long savedMoney;
public Statistics(long timestampStart, long timestampEnd, long producedEnergy, long injectedEnergy,
long obtainedEnergy, long savedMoney) {
super();
this.timestampStart = timestampStart;
this.timestampEnd = timestampEnd;
this.producedEnergy = producedEnergy;
this.injectedEnergy = injectedEnergy;
this.obtainedEnergy = obtainedEnergy;
this.savedMoney = savedMoney;
}
public long getTimestampStart() {
return timestampStart;
}
public long getTimestampEnd() {
return timestampEnd;
}
public long getProducedEnergy() {
return producedEnergy;
}
public long getInjectedEnergy() {
return injectedEnergy;
}
public long getObtainedEnergy() {
return obtainedEnergy;
}
public long getSavedMoney() {
return savedMoney;
}
}