Implemented all?? DPT-Number-Translators at receiving side

This commit is contained in:
Patrick Haßel 2021-10-04 10:54:23 +02:00
parent 36ee78783c
commit caae0539fa
4 changed files with 24 additions and 13 deletions

View File

@ -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 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 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 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_schalten = createKnxGroupIfNotExists("Badewanne Schalten", 781, "1.001", false);
final KnxGroupDto badewanne_status = createKnxGroupIfNotExists("Badewanne Status", new GroupAddress(782), "1.001", true); 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(); final Schedule scheduleEgAmbiente = new Schedule();
scheduleEgAmbiente.setName("EG Ambiente"); scheduleEgAmbiente.setName("EG Ambiente");

View File

@ -7,7 +7,6 @@ import lombok.ToString;
import tuwien.auto.calimero.GroupAddress; import tuwien.auto.calimero.GroupAddress;
import javax.persistence.*; import javax.persistence.*;
import java.math.BigDecimal;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
@Getter @Getter
@ -35,7 +34,7 @@ public class KnxGroup {
private Boolean booleanValue; private Boolean booleanValue;
private BigDecimal numberValue; private Double numberValue;
private ZonedDateTime valueTimestamp; private ZonedDateTime valueTimestamp;

View File

@ -3,7 +3,6 @@ package de.ph87.homeautomation.knx.group;
import lombok.Data; import lombok.Data;
import tuwien.auto.calimero.GroupAddress; import tuwien.auto.calimero.GroupAddress;
import java.math.BigDecimal;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
@Data @Data
@ -21,7 +20,7 @@ public class KnxGroupDto {
public final Boolean booleanValue; public final Boolean booleanValue;
public final BigDecimal numberValue; public final Double numberValue;
public final ZonedDateTime valueTimestamp; public final ZonedDateTime valueTimestamp;

View File

@ -8,14 +8,13 @@ import org.springframework.transaction.annotation.Transactional;
import tuwien.auto.calimero.GroupAddress; import tuwien.auto.calimero.GroupAddress;
import tuwien.auto.calimero.KNXException; import tuwien.auto.calimero.KNXException;
import tuwien.auto.calimero.KNXFormatException; import tuwien.auto.calimero.KNXFormatException;
import tuwien.auto.calimero.dptxlator.DPTXlator; import tuwien.auto.calimero.dptxlator.*;
import tuwien.auto.calimero.dptxlator.DPTXlator8BitUnsigned;
import tuwien.auto.calimero.dptxlator.DPTXlatorBoolean;
import tuwien.auto.calimero.dptxlator.TranslatorTypes;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
@Slf4j @Slf4j
@Service @Service
@ -38,9 +37,16 @@ public class KnxGroupWriteService {
try { try {
final DPTXlator translator = findTranslator(knxGroup); final DPTXlator translator = findTranslator(knxGroup);
translator.setData(data); translator.setData(data);
if (translator instanceof DPTXlatorBoolean) { translate(DPTXlatorBoolean.class, translator, knxGroup::setBooleanValue, DPTXlatorBoolean::getValueBoolean);
knxGroup.setBooleanValue(((DPTXlatorBoolean) translator).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... // TODO implement all DPTXlator...
} catch (NoTranslatorException e) { } catch (NoTranslatorException e) {
log.error(e.getMessage()); log.error(e.getMessage());
@ -49,6 +55,12 @@ public class KnxGroupWriteService {
}); });
} }
private <X extends DPTXlator, T> void translate(final Class<X> dptXlatorClass, final DPTXlator translator, final Consumer<T> setter, final Function<X, T> getter) {
if (dptXlatorClass.isInstance(translator)) {
setter.accept(getter.apply(dptXlatorClass.cast(translator)));
}
}
public void markAllForRead() { public void markAllForRead() {
knxGroupRepository.findAllByRead_AbleTrue().forEach(knxGroup -> knxGroup.getRead().setNextTimestamp(ZonedDateTime.now())); knxGroupRepository.findAllByRead_AbleTrue().forEach(knxGroup -> knxGroup.getRead().setNextTimestamp(ZonedDateTime.now()));
} }