From 08e3d7134478d658a405dd0c895c9067f94be1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Fri, 18 Oct 2024 10:35:44 +0200 Subject: [PATCH] EasyEspReceiver --- .../de/ph87/data/easyEsp/EasyEspInbound.java | 29 +++++++++++ .../de/ph87/data/easyEsp/EasyEspReceiver.java | 49 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/main/java/de/ph87/data/easyEsp/EasyEspInbound.java create mode 100644 src/main/java/de/ph87/data/easyEsp/EasyEspReceiver.java diff --git a/src/main/java/de/ph87/data/easyEsp/EasyEspInbound.java b/src/main/java/de/ph87/data/easyEsp/EasyEspInbound.java new file mode 100644 index 0000000..9d33fe3 --- /dev/null +++ b/src/main/java/de/ph87/data/easyEsp/EasyEspInbound.java @@ -0,0 +1,29 @@ +package de.ph87.data.easyEsp; + +import lombok.Getter; +import lombok.NonNull; +import lombok.ToString; + +import java.time.ZonedDateTime; + +import static de.ph87.data.common.DateTimeHelpers.ZDT; + +@Getter +@ToString +public class EasyEspInbound { + + @NonNull + public final ZonedDateTime date; + + public final double value; + + @NonNull + public final String unit; + + public EasyEspInbound(final long timestamp, final double value, @NonNull final String unit) { + this.date = ZDT(timestamp); + this.value = value; + this.unit = unit; + } + +} diff --git a/src/main/java/de/ph87/data/easyEsp/EasyEspReceiver.java b/src/main/java/de/ph87/data/easyEsp/EasyEspReceiver.java new file mode 100644 index 0000000..43be1fc --- /dev/null +++ b/src/main/java/de/ph87/data/easyEsp/EasyEspReceiver.java @@ -0,0 +1,49 @@ +package de.ph87.data.easyEsp; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.ph87.data.mqtt.MqttEvent; +import de.ph87.data.series.measure.MeasureEvent; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +@Service +@RequiredArgsConstructor +public class EasyEspReceiver { + + private static final Pattern REGEX = Pattern.compile("^(?[^/]+)/sensor/(?[^/]+)$"); + + private final ApplicationEventPublisher applicationEventPublisher; + + private final ObjectMapper objectMapper; + + @EventListener(MqttEvent.class) + public void onEvent(@NonNull final MqttEvent event) { + final Matcher matcher = REGEX.matcher(event.topic); + if (!matcher.find()) { + return; + } + + final EasyEspInbound inbound; + try { + inbound = objectMapper.readValue(event.payload, EasyEspInbound.class); + } catch (JsonProcessingException e) { + log.error("Failed to parse EasyEspInbound: error={}, event={}", e, event); + return; + } + + final String room = matcher.group("room"); + final String property = matcher.group("property"); + final String name = "%s.%s".formatted(room, property); + applicationEventPublisher.publishEvent(new MeasureEvent(name, inbound.unit, inbound.date, inbound.value)); + } + +}