From 5e8e097ad4d0e348d3442dc6a8ccde2ac7f449b8 Mon Sep 17 00:00:00 2001 From: andrexp Date: Mon, 4 Sep 2023 08:53:33 +0200 Subject: [PATCH] [LCN] Fixes problems with fingerprint codes which were received in decimal (#15488) * fixed problems with fingerprint codes which were received in decimal instead of hex Signed-off-by: Andre Jendrysseck * correct format issues Signed-off-by: Andre Jendrysseck * add test file for fingerprint codes Signed-off-by: Andre Jendrysseck * Delete openhab-addons.code-workspace Signed-off-by: Andre Jendrysseck --------- Signed-off-by: Andre Jendrysseck Co-authored-by: Andre Jendrysseck --- .../subhandler/LcnModuleCodeSubHandler.java | 13 +++-- .../LcnModuleCodeSubHandlerTest.java | 49 +++++++++++++++++++ 2 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 bundles/org.openhab.binding.lcn/src/test/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandlerTest.java diff --git a/bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandler.java b/bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandler.java index b4e6750af..0fdc13281 100644 --- a/bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandler.java +++ b/bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandler.java @@ -33,8 +33,10 @@ import org.openhab.binding.lcn.internal.connection.ModInfo; public class LcnModuleCodeSubHandler extends AbstractLcnModuleSubHandler { private static final Pattern TRANSPONDER_PATTERN = Pattern .compile(LcnBindingConstants.ADDRESS_REGEX + "\\.ZT(?\\d{3})(?\\d{3})(?\\d{3})"); - private static final Pattern FINGERPRINT_PATTERN = Pattern.compile(LcnBindingConstants.ADDRESS_REGEX - + "\\.ZF(?[0-9A-Fa-f]{2})(?[0-9A-Fa-f]{2})(?[0-9A-Fa-f]{2})"); + private static final Pattern FINGERPRINT_PATTERN_HEX = Pattern.compile(LcnBindingConstants.ADDRESS_REGEX + + "\\.ZF(?[0-9A-Fa-f]{2})(?[0-9A-Fa-f]{2})(?[0-9A-Fa-f]{2})$"); + private static final Pattern FINGERPRINT_PATTERN_DEC = Pattern + .compile(LcnBindingConstants.ADDRESS_REGEX + "\\.ZF(?\\d{3})(?\\d{3})(?\\d{3})"); private static final Pattern REMOTE_CONTROL_PATTERN = Pattern.compile(LcnBindingConstants.ADDRESS_REGEX + "\\.ZI(?\\d{3})(?\\d{3})(?\\d{3})(?\\d{3})(?\\d{3})"); @@ -51,7 +53,7 @@ public class LcnModuleCodeSubHandler extends AbstractLcnModuleSubHandler { public void handleStatusMessage(Matcher matcher) { String code; - if (matcher.pattern() == FINGERPRINT_PATTERN) { + if (matcher.pattern() == FINGERPRINT_PATTERN_HEX) { code = String.format("%02X%02X%02X", Integer.parseInt(matcher.group("byte0"), 16), Integer.parseInt(matcher.group("byte1"), 16), Integer.parseInt(matcher.group("byte2"), 16)); } else { @@ -61,7 +63,7 @@ public class LcnModuleCodeSubHandler extends AbstractLcnModuleSubHandler { if (matcher.pattern() == TRANSPONDER_PATTERN) { handler.triggerChannel(LcnChannelGroup.CODE, "transponder", code); - } else if (matcher.pattern() == FINGERPRINT_PATTERN) { + } else if (matcher.pattern() == FINGERPRINT_PATTERN_HEX || matcher.pattern() == FINGERPRINT_PATTERN_DEC) { handler.triggerChannel(LcnChannelGroup.CODE, "fingerprint", code); } else if (matcher.pattern() == REMOTE_CONTROL_PATTERN) { int keyNumber = Integer.parseInt(matcher.group("key")); @@ -114,6 +116,7 @@ public class LcnModuleCodeSubHandler extends AbstractLcnModuleSubHandler { @Override public Collection getPckStatusMessagePatterns() { - return Arrays.asList(TRANSPONDER_PATTERN, FINGERPRINT_PATTERN, REMOTE_CONTROL_PATTERN); + return Arrays.asList(TRANSPONDER_PATTERN, FINGERPRINT_PATTERN_HEX, FINGERPRINT_PATTERN_DEC, + REMOTE_CONTROL_PATTERN); } } diff --git a/bundles/org.openhab.binding.lcn/src/test/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandlerTest.java b/bundles/org.openhab.binding.lcn/src/test/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandlerTest.java new file mode 100644 index 000000000..e6824fe93 --- /dev/null +++ b/bundles/org.openhab.binding.lcn/src/test/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleCodeSubHandlerTest.java @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.lcn.internal.subhandler; + +import static org.mockito.Mockito.*; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openhab.binding.lcn.internal.common.LcnChannelGroup; + +/** + * Test class. + * + * @author Andre Jendrysseck - Initial contribution + */ +@NonNullByDefault +public class LcnModuleCodeSubHandlerTest extends AbstractTestLcnModuleSubHandler { + + @Override + @BeforeEach + public void setUp() { + super.setUp(); + } + + @Test + public void testHexFingerprint() { + tryParseAllHandlers("=M000005.ZFABCDEF"); + verify(handler).triggerChannel(LcnChannelGroup.CODE, "fingerprint", "ABCDEF"); + verify(handler).triggerChannel(any(), any(), any()); + } + + @Test + public void testDecFingerprint() { + tryParseAllHandlers("=M000005.ZF255255255"); + verify(handler).triggerChannel(LcnChannelGroup.CODE, "fingerprint", "FFFFFF"); + verify(handler).triggerChannel(any(), any(), any()); + } +}