From 0926e949fa75963ca71f1f6200019caf06b23416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Wed, 16 Oct 2024 13:32:21 +0200 Subject: [PATCH] Series.unit --- .../data/aggregation/AggregationConstants.java | 16 +++++++++++++++- .../data/aggregation/AggregationReceiver.java | 8 +++++--- .../ph87/data/electricity/grid/GridReceiver.java | 8 ++++---- .../photovoltaic/PhotovoltaicReceiver.java | 4 ++-- src/main/java/de/ph87/data/series/Series.java | 7 ++++++- .../java/de/ph87/data/series/SeriesService.java | 4 ++-- .../series/consumption/ConsumptionEvent.java | 3 +++ .../series/consumption/ConsumptionService.java | 2 +- .../ph87/data/series/counter/CounterEvent.java | 3 +++ .../ph87/data/series/counter/CounterService.java | 2 +- .../ph87/data/series/measure/MeasureEvent.java | 3 +++ .../ph87/data/series/measure/MeasureService.java | 2 +- 12 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/ph87/data/aggregation/AggregationConstants.java b/src/main/java/de/ph87/data/aggregation/AggregationConstants.java index 7a5824e..7ebdb1c 100644 --- a/src/main/java/de/ph87/data/aggregation/AggregationConstants.java +++ b/src/main/java/de/ph87/data/aggregation/AggregationConstants.java @@ -6,7 +6,7 @@ import static de.ph87.data.heating.HeatingConstants.*; public class AggregationConstants { - public static final Map HEATING_TOPIC_MAP = Map.of( + public static final Map HEATING_SERIES_MAP = Map.of( "aggregation/heizung/abgas/temperatur", HEATING_EXHAUST_TEMPERATURE_SERIES_NAME, "aggregation/heizung/puffer/vorlauf/temperatur", HEATING_BUFFER_SUPPLY_TEMPERATURE_SERIES_NAME, "aggregation/heizung/puffer/ruecklauf/temperatur", HEATING_BUFFER_RETURN_TEMPERATURE_SERIES_NAME, @@ -18,4 +18,18 @@ public class AggregationConstants { "aggregation/heizung/heizkreis/ruecklauf/temperatur", HEATING_LOOP_RETURN_TEMPERATURE_SERIES_NAME ); + public static final String TEMPERATURE_UNIT = "°C"; + + public static final Map HEATING_UNIT_MAP = Map.of( + "aggregation/heizung/abgas/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/vorlauf/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/ruecklauf/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/eingang/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/speicher/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/ausgang/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/puffer/zirkulation/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/heizkreis/vorlauf/temperatur", TEMPERATURE_UNIT, + "aggregation/heizung/heizkreis/ruecklauf/temperatur", TEMPERATURE_UNIT + ); + } diff --git a/src/main/java/de/ph87/data/aggregation/AggregationReceiver.java b/src/main/java/de/ph87/data/aggregation/AggregationReceiver.java index 237b7c7..8b2d620 100644 --- a/src/main/java/de/ph87/data/aggregation/AggregationReceiver.java +++ b/src/main/java/de/ph87/data/aggregation/AggregationReceiver.java @@ -11,7 +11,8 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import static de.ph87.data.aggregation.AggregationConstants.HEATING_TOPIC_MAP; +import static de.ph87.data.aggregation.AggregationConstants.HEATING_SERIES_MAP; +import static de.ph87.data.aggregation.AggregationConstants.HEATING_UNIT_MAP; @Slf4j @Service @@ -24,7 +25,8 @@ public class AggregationReceiver { @EventListener(MqttEvent.class) public void onEvent(@NonNull final MqttEvent event) { - final String seriesName = HEATING_TOPIC_MAP.get(event.topic); + final String seriesName = HEATING_SERIES_MAP.get(event.topic); + final String unit = HEATING_UNIT_MAP.get(event.topic); if (seriesName == null) { return; } @@ -37,7 +39,7 @@ public class AggregationReceiver { return; } - applicationEventPublisher.publishEvent(new MeasureEvent(seriesName, aggregation.lastTime, aggregation.lastValue)); + applicationEventPublisher.publishEvent(new MeasureEvent(seriesName, unit, aggregation.lastTime, aggregation.lastValue)); } } diff --git a/src/main/java/de/ph87/data/electricity/grid/GridReceiver.java b/src/main/java/de/ph87/data/electricity/grid/GridReceiver.java index 92397a2..8452588 100644 --- a/src/main/java/de/ph87/data/electricity/grid/GridReceiver.java +++ b/src/main/java/de/ph87/data/electricity/grid/GridReceiver.java @@ -18,9 +18,9 @@ import static de.ph87.data.electricity.ElectricityHelpers.energyToKWh; @RequiredArgsConstructor public class GridReceiver { - public static final String GRID_PURCHASE_SERIES_NAME = "grid.purchaseKWh"; + public static final String GRID_PURCHASE_SERIES_NAME = "electricity.grid.purchase"; - public static final String GRID_DELIVERY_SERIES_NAME = "grid.deliveryKWh"; + public static final String GRID_DELIVERY_SERIES_NAME = "electricity.grid.delivery"; private final ApplicationEventPublisher applicationEventPublisher; @@ -41,10 +41,10 @@ public class GridReceiver { } final double purchaseKWh = energyToKWh(inbound.purchaseWh, "Wh"); - applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_PURCHASE_SERIES_NAME, true, inbound.meter, inbound.date, purchaseKWh)); + applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_PURCHASE_SERIES_NAME, "kWh", true, inbound.meter, inbound.date, purchaseKWh)); final double deliveryKWh = energyToKWh(inbound.deliveryWh, "Wh"); - applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_DELIVERY_SERIES_NAME, true, inbound.meter, inbound.date, deliveryKWh)); + applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_DELIVERY_SERIES_NAME, "kWh", true, inbound.meter, inbound.date, deliveryKWh)); } } diff --git a/src/main/java/de/ph87/data/electricity/photovoltaic/PhotovoltaicReceiver.java b/src/main/java/de/ph87/data/electricity/photovoltaic/PhotovoltaicReceiver.java index a77be18..8d3a543 100644 --- a/src/main/java/de/ph87/data/electricity/photovoltaic/PhotovoltaicReceiver.java +++ b/src/main/java/de/ph87/data/electricity/photovoltaic/PhotovoltaicReceiver.java @@ -21,7 +21,7 @@ import static de.ph87.data.electricity.ElectricityHelpers.energyToKWh; @RequiredArgsConstructor public class PhotovoltaicReceiver { - public static final String PHOTOVOLTAIC_ENERGY_SERIES_NAME = "photovoltaic.energyKWh"; + public static final String PHOTOVOLTAIC_ENERGY_SERIES_NAME = "electricity.photovoltaic.energy"; private static final Pattern REGEX = Pattern.compile("^(?\\S+) (?\\d+) (?\\d+(:?\\.\\d+)?)(?\\S+) (?\\d+(:?\\.\\d+)?)(?\\S+)$"); @@ -43,7 +43,7 @@ public class PhotovoltaicReceiver { final double producedValue = Double.parseDouble(matcher.group("producedValue")); final String producedUnit = matcher.group("producedUnit"); final double producedKWh = energyToKWh(producedValue, producedUnit); - applicationEventPublisher.publishEvent(new ConsumptionEvent(PHOTOVOLTAIC_ENERGY_SERIES_NAME, true, serial, date, producedKWh)); + applicationEventPublisher.publishEvent(new ConsumptionEvent(PHOTOVOLTAIC_ENERGY_SERIES_NAME, "kWh", true, serial, date, producedKWh)); } } diff --git a/src/main/java/de/ph87/data/series/Series.java b/src/main/java/de/ph87/data/series/Series.java index 6b7e4de..abbdd8b 100644 --- a/src/main/java/de/ph87/data/series/Series.java +++ b/src/main/java/de/ph87/data/series/Series.java @@ -22,6 +22,10 @@ public class Series { @Column(nullable = false, unique = true) private String name; + @NonNull + @Column(nullable = false) + private String unit; + @NonNull @Enumerated(EnumType.STRING) private SeriesMode mode; @@ -36,9 +40,10 @@ public class Series { @ElementCollection private Set aliases = new HashSet<>(); - public Series(@NonNull final String name, @NonNull final SeriesMode mode) { + public Series(@NonNull final String name, @NonNull final SeriesMode mode, @NonNull final String unit) { this.name = name; this.mode = mode; + this.unit = unit; } } diff --git a/src/main/java/de/ph87/data/series/SeriesService.java b/src/main/java/de/ph87/data/series/SeriesService.java index 0ec30c3..01fda83 100644 --- a/src/main/java/de/ph87/data/series/SeriesService.java +++ b/src/main/java/de/ph87/data/series/SeriesService.java @@ -15,8 +15,8 @@ public class SeriesService { private final SeriesRepository seriesRepository; @NonNull - public Series getOrCreateByName(@NonNull final String name, @NonNull final SeriesMode mode) { - final Series series = seriesRepository.findByNameOrAliasesContains(name, name).orElseGet(() -> seriesRepository.save(new Series(name, mode))); + public Series getOrCreateByName(@NonNull final String name, @NonNull final SeriesMode mode, @NonNull final String unit) { + final Series series = seriesRepository.findByNameOrAliasesContains(name, name).orElseGet(() -> seriesRepository.save(new Series(name, mode, unit))); if (series.getMode() != mode) { throw new RuntimeException("'mode' argument for getOrCreateByName does not match 'mode' of existing Series: mode=%s, series=%s".formatted(mode, series)); } diff --git a/src/main/java/de/ph87/data/series/consumption/ConsumptionEvent.java b/src/main/java/de/ph87/data/series/consumption/ConsumptionEvent.java index 3c1bfc6..fd0c612 100644 --- a/src/main/java/de/ph87/data/series/consumption/ConsumptionEvent.java +++ b/src/main/java/de/ph87/data/series/consumption/ConsumptionEvent.java @@ -15,6 +15,9 @@ public class ConsumptionEvent { @NonNull private final String name; + @NonNull + private final String unit; + private final boolean increasing; @NonNull diff --git a/src/main/java/de/ph87/data/series/consumption/ConsumptionService.java b/src/main/java/de/ph87/data/series/consumption/ConsumptionService.java index 2a5364c..24ce736 100644 --- a/src/main/java/de/ph87/data/series/consumption/ConsumptionService.java +++ b/src/main/java/de/ph87/data/series/consumption/ConsumptionService.java @@ -31,7 +31,7 @@ public class ConsumptionService { @EventListener(ConsumptionEvent.class) public void onConsumptionEvent(@NonNull final ConsumptionEvent event) { log.debug("Handling ConsumptionEvent: {}", event); - final Series series = seriesService.getOrCreateByName(event.getName(), event.isIncreasing() ? SeriesMode.INCREASING : SeriesMode.DECREASING); + final Series series = seriesService.getOrCreateByName(event.getName(), event.isIncreasing() ? SeriesMode.INCREASING : SeriesMode.DECREASING, event.getUnit()); final Period period = periodService.getOrCreatePeriod(series, event); period.setLastDate(event.getDate()); period.setLastValue(event.getValue()); diff --git a/src/main/java/de/ph87/data/series/counter/CounterEvent.java b/src/main/java/de/ph87/data/series/counter/CounterEvent.java index 620e8c7..7491bd3 100644 --- a/src/main/java/de/ph87/data/series/counter/CounterEvent.java +++ b/src/main/java/de/ph87/data/series/counter/CounterEvent.java @@ -15,6 +15,9 @@ public class CounterEvent { @NonNull private final String name; + @NonNull + private final String unit; + @NonNull private final ZonedDateTime date; diff --git a/src/main/java/de/ph87/data/series/counter/CounterService.java b/src/main/java/de/ph87/data/series/counter/CounterService.java index 60c673f..78a4603 100644 --- a/src/main/java/de/ph87/data/series/counter/CounterService.java +++ b/src/main/java/de/ph87/data/series/counter/CounterService.java @@ -24,7 +24,7 @@ public class CounterService { @EventListener(CounterEvent.class) public void onCounterEvent(@NonNull final CounterEvent event) { - final Series series = seriesService.getOrCreateByName(event.getName(), SeriesMode.COUNTER); + final Series series = seriesService.getOrCreateByName(event.getName(), SeriesMode.COUNTER, event.getUnit()); for (final Unit unit : Unit.values()) { final SeriesIntervalKey id = new SeriesIntervalKey(series, unit, event.getDate()); counterRepository.findById(id) diff --git a/src/main/java/de/ph87/data/series/measure/MeasureEvent.java b/src/main/java/de/ph87/data/series/measure/MeasureEvent.java index 3d1edad..13bb427 100644 --- a/src/main/java/de/ph87/data/series/measure/MeasureEvent.java +++ b/src/main/java/de/ph87/data/series/measure/MeasureEvent.java @@ -15,6 +15,9 @@ public class MeasureEvent { @NonNull private final String name; + @NonNull + private final String unit; + @NonNull private final ZonedDateTime date; diff --git a/src/main/java/de/ph87/data/series/measure/MeasureService.java b/src/main/java/de/ph87/data/series/measure/MeasureService.java index 09c1bac..27aacca 100644 --- a/src/main/java/de/ph87/data/series/measure/MeasureService.java +++ b/src/main/java/de/ph87/data/series/measure/MeasureService.java @@ -24,7 +24,7 @@ public class MeasureService { @EventListener(MeasureEvent.class) public void onMeasureEvent(@NonNull final MeasureEvent event) { - final Series series = seriesService.getOrCreateByName(event.getName(), SeriesMode.MEASURE); + final Series series = seriesService.getOrCreateByName(event.getName(), SeriesMode.MEASURE, event.getUnit()); for (final Unit unit : Unit.values()) { final SeriesIntervalKey id = new SeriesIntervalKey(series, unit, event.getDate()); measureRepository.findById(id)