From c781c88147a732588cbc3f155aca700204630947 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Mon, 27 Oct 2025 12:33:39 +0100 Subject: [PATCH] Eltern Solar Shelly JSON + Demo Data --- src/main/java/de/ph87/data/DemoService.java | 40 +++++++----- .../de/ph87/data/topic/query/TopicQuery.java | 62 ++++++++++++++++--- .../ph87/data/topic/query/TopicQueryDto.java | 2 +- .../data/topic/query/TopicQueryFunction.java | 23 ------- 4 files changed, 78 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/de/ph87/data/topic/query/TopicQueryFunction.java diff --git a/src/main/java/de/ph87/data/DemoService.java b/src/main/java/de/ph87/data/DemoService.java index 5e8d34e..c813417 100644 --- a/src/main/java/de/ph87/data/DemoService.java +++ b/src/main/java/de/ph87/data/DemoService.java @@ -14,7 +14,6 @@ import de.ph87.data.topic.TimestampType; import de.ph87.data.topic.Topic; import de.ph87.data.topic.TopicRepository; import de.ph87.data.topic.query.TopicQuery; -import de.ph87.data.topic.query.TopicQueryFunction; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -83,9 +82,20 @@ public class DemoService { "$.timestamp", "\"1ZPA0020300305\"", 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(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); @@ -97,10 +107,10 @@ public class DemoService { TimestampType.ISO_LOCAL_DATE_TIME, "$.Time", "sml_meter_number_raw:$.meter.number", - new TopicQuery(elternElectricityEnergyPurchase, "$.meter.energy_purchased_kwh", 1), - new TopicQuery(elternElectricityPowerPurchase, "$.meter.power_w", TopicQueryFunction.ONLY_POSITIVE), - new TopicQuery(elternElectricityEnergyDelivery, "$.meter.energy_delivered_kwh", 1), - new TopicQuery(elternElectricityPowerDelivery, "$.meter.power_w", TopicQueryFunction.ONLY_NEGATIVE_BUT_NEGATE) + new TopicQuery(elternElectricityEnergyPurchase, "$.meter.energy_purchased_kwh"), + new TopicQuery(elternElectricityPowerPurchase, "$.meter.power_w", 1, TopicQuery.Function.ONLY_POSITIVE), + new TopicQuery(elternElectricityEnergyDelivery, "$.meter.energy_delivered_kwh"), + new TopicQuery(elternElectricityPowerDelivery, "$.meter.power_w", 1, TopicQuery.Function.ONLY_NEGATIVE_BUT_NEGATE) ); final Series gardenPressure = series("garden/pressure", "hPa", SeriesType.VARYING, 5); @@ -230,7 +240,7 @@ public class DemoService { private void eltern() { final Plot plot = plotRepository.save(new Plot(plotRepository.count())); - plot.setName("Eltern"); + plot.setName("Eltern Energie"); final Axis energy = axisRepository.save(new Axis(plot)); plot.addAxis(energy); @@ -256,13 +266,13 @@ public class DemoService { electricityEnergyDeliveryGraph.setColor("#FF00FF"); energy.addGraph(electricityEnergyDeliveryGraph); -// final Series electricityEnergyProduce = seriesRepository.findByName("eltern/electricity/energy/produce").orElseThrow(); -// final Graph electricityEnergyProduceGraph = graphRepository.save(new Graph(energy, electricityEnergyProduce)); -// electricityEnergyProduceGraph.setName("Produktion"); -// electricityEnergyProduceGraph.setType(GraphType.BAR); -// electricityEnergyProduceGraph.setStack("a"); -// electricityEnergyProduceGraph.setColor("#0000FF"); -// energy.addGraph(electricityEnergyProduceGraph); + final Series electricityEnergyProduce = seriesRepository.findByName("eltern/electricity/energy/produce").orElseThrow(); + final Graph electricityEnergyProduceGraph = graphRepository.save(new Graph(energy, electricityEnergyProduce)); + electricityEnergyProduceGraph.setName("Produktion"); + electricityEnergyProduceGraph.setType(GraphType.BAR); + electricityEnergyProduceGraph.setStack("a"); + electricityEnergyProduceGraph.setColor("#0000FF"); + energy.addGraph(electricityEnergyProduceGraph); } @NonNull diff --git a/src/main/java/de/ph87/data/topic/query/TopicQuery.java b/src/main/java/de/ph87/data/topic/query/TopicQuery.java index bd8f3d6..af72ae7 100644 --- a/src/main/java/de/ph87/data/topic/query/TopicQuery.java +++ b/src/main/java/de/ph87/data/topic/query/TopicQuery.java @@ -37,28 +37,52 @@ public class TopicQuery { @NonNull @Column(nullable = false) @Enumerated(EnumType.STRING) - private TopicQueryFunction function = TopicQueryFunction.NONE; + private TopicQuery.Function function = Function.NONE; @Column(nullable = false) private double factor; - public TopicQuery(@Nullable final Series series, @NonNull final String valueQuery) { - this(series, valueQuery, "", "", TopicQueryFunction.NONE, 1); + public TopicQuery( + @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) { - this(series, valueQuery, beginQuery, terminatedQuery, TopicQueryFunction.NONE, 1); + public TopicQuery( + @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) { - this(series, valueQuery, "", "", TopicQueryFunction.NONE, factor); + public TopicQuery( + @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) { - this(series, valueQuery, "", "", function, 1); + public TopicQuery( + @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.valueQuery = valueQuery; this.beginQuery = beginQuery; @@ -67,4 +91,22 @@ public class TopicQuery { 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 function; + + Function(@NonNull java.util.function.Function function) { + this.function = function; + } + + public double apply(final double value) { + return function.apply(value); + } + + } + } diff --git a/src/main/java/de/ph87/data/topic/query/TopicQueryDto.java b/src/main/java/de/ph87/data/topic/query/TopicQueryDto.java index 606a99b..d36f7e7 100644 --- a/src/main/java/de/ph87/data/topic/query/TopicQueryDto.java +++ b/src/main/java/de/ph87/data/topic/query/TopicQueryDto.java @@ -25,7 +25,7 @@ public class TopicQueryDto { public final String terminatedQuery; @NonNull - public final TopicQueryFunction function; + public final TopicQuery.Function function; public final double factor; diff --git a/src/main/java/de/ph87/data/topic/query/TopicQueryFunction.java b/src/main/java/de/ph87/data/topic/query/TopicQueryFunction.java deleted file mode 100644 index 3704395..0000000 --- a/src/main/java/de/ph87/data/topic/query/TopicQueryFunction.java +++ /dev/null @@ -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 function; - - TopicQueryFunction(@NonNull Function function) { - this.function = function; - } - - public double apply(final double value) { - return function.apply(value); - } - -}