Eltern Solar Shelly JSON + Demo Data
This commit is contained in:
parent
524d03174a
commit
c781c88147
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user