Eltern Solar Shelly JSON + Demo Data

This commit is contained in:
Patrick Haßel 2025-10-27 12:33:39 +01:00
parent 524d03174a
commit c781c88147
4 changed files with 78 additions and 49 deletions

View File

@ -14,7 +14,6 @@ import de.ph87.data.topic.TimestampType;
import de.ph87.data.topic.Topic; import de.ph87.data.topic.Topic;
import de.ph87.data.topic.TopicRepository; import de.ph87.data.topic.TopicRepository;
import de.ph87.data.topic.query.TopicQuery; import de.ph87.data.topic.query.TopicQuery;
import de.ph87.data.topic.query.TopicQueryFunction;
import lombok.NonNull; import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -83,9 +82,20 @@ public class DemoService {
"$.timestamp", "$.timestamp",
"\"1ZPA0020300305\"", "\"1ZPA0020300305\"",
new TopicQuery(electricityEnergyPurchase, "$.purchaseWh", 0.001), new TopicQuery(electricityEnergyPurchase, "$.purchaseWh", 0.001),
new TopicQuery(electricityPowerPurchase, "$.powerW", TopicQueryFunction.ONLY_POSITIVE), new TopicQuery(electricityPowerPurchase, "$.powerW", 1, TopicQuery.Function.ONLY_POSITIVE),
new TopicQuery(electricityEnergyDelivery, "$.deliveryWh", 0.001), new TopicQuery(electricityEnergyDelivery, "$.deliveryWh", 0.001),
new TopicQuery(electricityPowerDelivery, "$.powerW", TopicQueryFunction.ONLY_NEGATIVE_BUT_NEGATE) new TopicQuery(electricityPowerDelivery, "$.powerW", 1, TopicQuery.Function.ONLY_NEGATIVE_BUT_NEGATE)
);
final Series elternElectricityEnergyProduce = series("eltern/electricity/energy/produce", "kWh", SeriesType.DELTA, 60);
final Series elternElectricityPowerProduce = series("eltern/electricity/power/produce", "W", SeriesType.VARYING, 60);
topicMeterNumber(
"Eltern/Solar/Shelly/status/switch:0",
TimestampType.EPOCH_SECONDS,
"$.aenergy.minute_ts",
"\"2025-10-27-shelly\"",
new TopicQuery(elternElectricityEnergyProduce, "$.aenergy.total", 0.001),
new TopicQuery(elternElectricityPowerProduce, "$.apower")
); );
final Series elternElectricityEnergyPurchase = series("eltern/electricity/energy/purchase", "kWh", SeriesType.DELTA, 10); final Series elternElectricityEnergyPurchase = series("eltern/electricity/energy/purchase", "kWh", SeriesType.DELTA, 10);
@ -97,10 +107,10 @@ public class DemoService {
TimestampType.ISO_LOCAL_DATE_TIME, TimestampType.ISO_LOCAL_DATE_TIME,
"$.Time", "$.Time",
"sml_meter_number_raw:$.meter.number", "sml_meter_number_raw:$.meter.number",
new TopicQuery(elternElectricityEnergyPurchase, "$.meter.energy_purchased_kwh", 1), new TopicQuery(elternElectricityEnergyPurchase, "$.meter.energy_purchased_kwh"),
new TopicQuery(elternElectricityPowerPurchase, "$.meter.power_w", TopicQueryFunction.ONLY_POSITIVE), new TopicQuery(elternElectricityPowerPurchase, "$.meter.power_w", 1, TopicQuery.Function.ONLY_POSITIVE),
new TopicQuery(elternElectricityEnergyDelivery, "$.meter.energy_delivered_kwh", 1), new TopicQuery(elternElectricityEnergyDelivery, "$.meter.energy_delivered_kwh"),
new TopicQuery(elternElectricityPowerDelivery, "$.meter.power_w", TopicQueryFunction.ONLY_NEGATIVE_BUT_NEGATE) new TopicQuery(elternElectricityPowerDelivery, "$.meter.power_w", 1, TopicQuery.Function.ONLY_NEGATIVE_BUT_NEGATE)
); );
final Series gardenPressure = series("garden/pressure", "hPa", SeriesType.VARYING, 5); final Series gardenPressure = series("garden/pressure", "hPa", SeriesType.VARYING, 5);
@ -230,7 +240,7 @@ public class DemoService {
private void eltern() { private void eltern() {
final Plot plot = plotRepository.save(new Plot(plotRepository.count())); final Plot plot = plotRepository.save(new Plot(plotRepository.count()));
plot.setName("Eltern"); plot.setName("Eltern Energie");
final Axis energy = axisRepository.save(new Axis(plot)); final Axis energy = axisRepository.save(new Axis(plot));
plot.addAxis(energy); plot.addAxis(energy);
@ -256,13 +266,13 @@ public class DemoService {
electricityEnergyDeliveryGraph.setColor("#FF00FF"); electricityEnergyDeliveryGraph.setColor("#FF00FF");
energy.addGraph(electricityEnergyDeliveryGraph); energy.addGraph(electricityEnergyDeliveryGraph);
// final Series electricityEnergyProduce = seriesRepository.findByName("eltern/electricity/energy/produce").orElseThrow(); final Series electricityEnergyProduce = seriesRepository.findByName("eltern/electricity/energy/produce").orElseThrow();
// final Graph electricityEnergyProduceGraph = graphRepository.save(new Graph(energy, electricityEnergyProduce)); final Graph electricityEnergyProduceGraph = graphRepository.save(new Graph(energy, electricityEnergyProduce));
// electricityEnergyProduceGraph.setName("Produktion"); electricityEnergyProduceGraph.setName("Produktion");
// electricityEnergyProduceGraph.setType(GraphType.BAR); electricityEnergyProduceGraph.setType(GraphType.BAR);
// electricityEnergyProduceGraph.setStack("a"); electricityEnergyProduceGraph.setStack("a");
// electricityEnergyProduceGraph.setColor("#0000FF"); electricityEnergyProduceGraph.setColor("#0000FF");
// energy.addGraph(electricityEnergyProduceGraph); energy.addGraph(electricityEnergyProduceGraph);
} }
@NonNull @NonNull

View File

@ -37,28 +37,52 @@ public class TopicQuery {
@NonNull @NonNull
@Column(nullable = false) @Column(nullable = false)
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private TopicQueryFunction function = TopicQueryFunction.NONE; private TopicQuery.Function function = Function.NONE;
@Column(nullable = false) @Column(nullable = false)
private double factor; private double factor;
public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery) { public TopicQuery(
this(series, valueQuery, "", "", TopicQueryFunction.NONE, 1); @Nullable final Series series,
@NonNull final String valueQuery
) {
this(series, valueQuery, "", "");
} }
public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery, @NonNull final String beginQuery, @NonNull final String terminatedQuery) { public TopicQuery(
this(series, valueQuery, beginQuery, terminatedQuery, TopicQueryFunction.NONE, 1); @Nullable final Series series,
@NonNull final String valueQuery,
final double factor
) {
this(series, valueQuery, factor, Function.NONE, "", "");
} }
public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery, final double factor) { public TopicQuery(
this(series, valueQuery, "", "", TopicQueryFunction.NONE, factor); @Nullable final Series series,
@NonNull final String valueQuery,
final double factor,
@NonNull final TopicQuery.Function function
) {
this(series, valueQuery, factor, function, "", "");
} }
public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery, @NonNull final TopicQueryFunction function) { public TopicQuery(
this(series, valueQuery, "", "", function, 1); @Nullable final Series series,
@NonNull final String valueQuery,
@NonNull final String beginQuery,
@NonNull final String terminatedQuery
) {
this(series, valueQuery, 1, Function.NONE, beginQuery, terminatedQuery);
} }
public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery, @NonNull final String beginQuery, @NonNull final String terminatedQuery, @NonNull final TopicQueryFunction function, final double factor) { public TopicQuery(
@Nullable final Series series,
@NonNull final String valueQuery,
final double factor,
@NonNull final TopicQuery.Function function,
@NonNull final String beginQuery,
@NonNull final String terminatedQuery
) {
this.series = series; this.series = series;
this.valueQuery = valueQuery; this.valueQuery = valueQuery;
this.beginQuery = beginQuery; this.beginQuery = beginQuery;
@ -67,4 +91,22 @@ public class TopicQuery {
this.factor = factor; this.factor = factor;
} }
public enum Function {
NONE(v -> v),
ONLY_POSITIVE(v -> v > 0 ? v : 0),
ONLY_NEGATIVE_BUT_NEGATE(v -> v < 0 ? -v : 0),
;
private final java.util.function.Function<Double, Double> function;
Function(@NonNull java.util.function.Function<Double, Double> function) {
this.function = function;
}
public double apply(final double value) {
return function.apply(value);
}
}
} }

View File

@ -25,7 +25,7 @@ public class TopicQueryDto {
public final String terminatedQuery; public final String terminatedQuery;
@NonNull @NonNull
public final TopicQueryFunction function; public final TopicQuery.Function function;
public final double factor; public final double factor;

View File

@ -1,23 +0,0 @@
package de.ph87.data.topic.query;
import lombok.NonNull;
import java.util.function.Function;
public enum TopicQueryFunction {
NONE(v -> v),
ONLY_POSITIVE(v -> v > 0 ? v : 0),
ONLY_NEGATIVE_BUT_NEGATE(v -> v < 0 ? -v : 0),
;
private final Function<Double, Double> function;
TopicQueryFunction(@NonNull Function<Double, Double> function) {
this.function = function;
}
public double apply(final double value) {
return function.apply(value);
}
}