From d7ee5062e41c62679e26a70ee26acf3e5a29fa7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Thu, 17 Apr 2025 11:55:25 +0200 Subject: [PATCH] PatrixJsonHandler + Unit.VOLUME_L + Unit.LENGTH_CM --- application.properties | 2 +- .../message/handler/PatrixJsonHandler.java | 73 +++++++++++++++++++ src/main/java/de/ph87/data/value/Unit.java | 16 ++-- 3 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/ph87/data/message/handler/PatrixJsonHandler.java diff --git a/application.properties b/application.properties index 7e90d91..500bfd0 100644 --- a/application.properties +++ b/application.properties @@ -5,7 +5,7 @@ spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password #- -#spring.jpa.hibernate.ddl-auto=create +spring.jpa.hibernate.ddl-auto=create #- de.ph87.data.message.receive.mqtt.host=10.0.0.50 de.ph87.data.message.receive.mqtt.topic=# diff --git a/src/main/java/de/ph87/data/message/handler/PatrixJsonHandler.java b/src/main/java/de/ph87/data/message/handler/PatrixJsonHandler.java new file mode 100644 index 0000000..02ad895 --- /dev/null +++ b/src/main/java/de/ph87/data/message/handler/PatrixJsonHandler.java @@ -0,0 +1,73 @@ +package de.ph87.data.message.handler; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.ph87.data.message.IMessageHandler; +import de.ph87.data.message.Message; +import de.ph87.data.series.meter.MeterInbound; +import de.ph87.data.series.varying.VaryingInbound; +import de.ph87.data.value.Unit; +import de.ph87.data.value.Value; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +@Slf4j +@Service +@RequiredArgsConstructor +public class PatrixJsonHandler implements IMessageHandler { + + private final ObjectMapper objectMapper; + + private final ApplicationEventPublisher applicationEventPublisher; + + @Override + public void handle(@NonNull final Message message) throws Exception { + if (!message.topic.endsWith("/PatrixJson")) { + return; + } + final Inbound inbound = objectMapper.readValue(message.payload, Inbound.class); + applicationEventPublisher.publishEvent(inbound); + } + + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") + @JsonSubTypes({ + @JsonSubTypes.Type(name = "VARYING", value = Varying.class), + @JsonSubTypes.Type(name = "METER", value = Meter.class), + }) + private interface Inbound { + + enum Type { + VARYING, + METER, + } + + } + + @ToString(callSuper = true) + public static class Varying extends VaryingInbound implements Inbound { + + protected Varying(@NonNull final String name, final long date, final double value, @NonNull final Unit unit) { + super(name, ZonedDateTime.ofInstant(Instant.ofEpochSecond(date), ZoneId.systemDefault()), new Value(value, unit)); + } + + } + + @ToString(callSuper = true) + public static class Meter extends MeterInbound implements Inbound { + + protected Meter(@NonNull final String name, @NonNull final String number, final long date, final double value, @NonNull final Unit unit) { + super(name, number, ZonedDateTime.ofInstant(Instant.ofEpochSecond(date), ZoneId.systemDefault()), new Value(value, unit)); + } + + } + +} diff --git a/src/main/java/de/ph87/data/value/Unit.java b/src/main/java/de/ph87/data/value/Unit.java index 394dd22..79b3b54 100644 --- a/src/main/java/de/ph87/data/value/Unit.java +++ b/src/main/java/de/ph87/data/value/Unit.java @@ -1,11 +1,13 @@ package de.ph87.data.value; -import com.fasterxml.jackson.core.*; -import com.fasterxml.jackson.databind.*; -import lombok.*; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import lombok.NonNull; -import java.io.*; -import java.util.*; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; public enum Unit { TEMPERATURE_C("°C"), @@ -50,7 +52,9 @@ public enum Unit { DOOR_BOOLEAN("", 1, BOOLEAN), WINDOW_BOOLEAN("", 1, BOOLEAN), LIGHT_BOOLEAN("", 1, BOOLEAN), - ; + + VOLUME_L("l"), + LENGTH_CM("cm"); public final String unit;