From caae0539fa6e0bdf6eb984eb8a6ca7968a51b6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Mon, 4 Oct 2021 10:54:23 +0200 Subject: [PATCH] Implemented all?? DPT-Number-Translators at receiving side --- .../ph87/homeautomation/DemoDataService.java | 5 ++-- .../homeautomation/knx/group/KnxGroup.java | 3 +-- .../homeautomation/knx/group/KnxGroupDto.java | 3 +-- .../knx/group/KnxGroupWriteService.java | 26 ++++++++++++++----- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ph87/homeautomation/DemoDataService.java b/src/main/java/de/ph87/homeautomation/DemoDataService.java index 820ee15..afa7ff8 100644 --- a/src/main/java/de/ph87/homeautomation/DemoDataService.java +++ b/src/main/java/de/ph87/homeautomation/DemoDataService.java @@ -40,8 +40,9 @@ public class DemoDataService { final KnxGroupDto wohnzimmer_rollladen_position_anfahren = createKnxGroupIfNotExists("Wohnzimmer Rollladen Position Anfahren", new GroupAddress(0, 4, 24), "5.001", false); final KnxGroupDto schlafzimmer_rollladen_position_anfahren = createKnxGroupIfNotExists("Schlafzimmer Rollladen Position Anfahren", new GroupAddress(0, 3, 3), "5.001", false); final KnxGroupDto flur_rollladen_position_anfahren = createKnxGroupIfNotExists("Flur Rollladen Position Anfahren", new GroupAddress(0, 5, 13), "5.001", false); - final KnxGroupDto badewanne_schalten = createKnxGroupIfNotExists("Badewanne Schalten", new GroupAddress(781), "1.001", false); - final KnxGroupDto badewanne_status = createKnxGroupIfNotExists("Badewanne Status", new GroupAddress(782), "1.001", true); + final KnxGroupDto badewanne_schalten = createKnxGroupIfNotExists("Badewanne Schalten", 781, "1.001", false); + final KnxGroupDto badewanne_status = createKnxGroupIfNotExists("Badewanne Status", 782, "1.001", true); + final KnxGroupDto helligkeit = createKnxGroupIfNotExists("Helligkeit", 1286, "9.004", false); final Schedule scheduleEgAmbiente = new Schedule(); scheduleEgAmbiente.setName("EG Ambiente"); diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java index 2a4340b..a4bd67a 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroup.java @@ -7,7 +7,6 @@ import lombok.ToString; import tuwien.auto.calimero.GroupAddress; import javax.persistence.*; -import java.math.BigDecimal; import java.time.ZonedDateTime; @Getter @@ -35,7 +34,7 @@ public class KnxGroup { private Boolean booleanValue; - private BigDecimal numberValue; + private Double numberValue; private ZonedDateTime valueTimestamp; diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupDto.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupDto.java index ee3f4dc..411dfed 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupDto.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupDto.java @@ -3,7 +3,6 @@ package de.ph87.homeautomation.knx.group; import lombok.Data; import tuwien.auto.calimero.GroupAddress; -import java.math.BigDecimal; import java.time.ZonedDateTime; @Data @@ -21,7 +20,7 @@ public class KnxGroupDto { public final Boolean booleanValue; - public final BigDecimal numberValue; + public final Double numberValue; public final ZonedDateTime valueTimestamp; diff --git a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupWriteService.java b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupWriteService.java index 6d483eb..96826d0 100644 --- a/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupWriteService.java +++ b/src/main/java/de/ph87/homeautomation/knx/group/KnxGroupWriteService.java @@ -8,14 +8,13 @@ import org.springframework.transaction.annotation.Transactional; import tuwien.auto.calimero.GroupAddress; import tuwien.auto.calimero.KNXException; import tuwien.auto.calimero.KNXFormatException; -import tuwien.auto.calimero.dptxlator.DPTXlator; -import tuwien.auto.calimero.dptxlator.DPTXlator8BitUnsigned; -import tuwien.auto.calimero.dptxlator.DPTXlatorBoolean; -import tuwien.auto.calimero.dptxlator.TranslatorTypes; +import tuwien.auto.calimero.dptxlator.*; import java.time.ZonedDateTime; import java.util.Objects; import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Function; @Slf4j @Service @@ -38,9 +37,16 @@ public class KnxGroupWriteService { try { final DPTXlator translator = findTranslator(knxGroup); translator.setData(data); - if (translator instanceof DPTXlatorBoolean) { - knxGroup.setBooleanValue(((DPTXlatorBoolean) translator).getValueBoolean()); - } + translate(DPTXlatorBoolean.class, translator, knxGroup::setBooleanValue, DPTXlatorBoolean::getValueBoolean); + translate(DPTXlator8BitUnsigned.class, translator, knxGroup::setNumberValue, DPTXlator8BitUnsigned::getNumericValue); + translate(DPTXlator2ByteFloat.class, translator, knxGroup::setNumberValue, DPTXlator2ByteFloat::getNumericValue); + translate(DPTXlator2ByteUnsigned.class, translator, knxGroup::setNumberValue, DPTXlator2ByteUnsigned::getNumericValue); + translate(DPTXlator4ByteFloat.class, translator, knxGroup::setNumberValue, DPTXlator4ByteFloat::getNumericValue); + translate(DPTXlator4ByteSigned.class, translator, knxGroup::setNumberValue, DPTXlator4ByteSigned::getNumericValue); + translate(DPTXlator4ByteUnsigned.class, translator, knxGroup::setNumberValue, DPTXlator4ByteUnsigned::getNumericValue); + translate(DPTXlator8BitSigned.class, translator, knxGroup::setNumberValue, DPTXlator8BitSigned::getNumericValue); + translate(DPTXlator64BitSigned.class, translator, knxGroup::setNumberValue, DPTXlator64BitSigned::getNumericValue); + translate(DPTXlatorSceneNumber.class, translator, knxGroup::setNumberValue, DPTXlatorSceneNumber::getNumericValue); // TODO implement all DPTXlator... } catch (NoTranslatorException e) { log.error(e.getMessage()); @@ -49,6 +55,12 @@ public class KnxGroupWriteService { }); } + private void translate(final Class dptXlatorClass, final DPTXlator translator, final Consumer setter, final Function getter) { + if (dptXlatorClass.isInstance(translator)) { + setter.accept(getter.apply(dptXlatorClass.cast(translator))); + } + } + public void markAllForRead() { knxGroupRepository.findAllByRead_AbleTrue().forEach(knxGroup -> knxGroup.getRead().setNextTimestamp(ZonedDateTime.now())); }