From bc5ffb26e2c095dbfb5e63d12b06872717fd943f Mon Sep 17 00:00:00 2001 From: Stefan Triller Date: Wed, 3 Feb 2021 21:37:00 +0100 Subject: [PATCH] [smartmeter] Fix trying to create channels from invalid data (#10008) Fixes #6762 * Fix Unit tests The method was used to create the pattern for a regex and for building the channel id. I ave separated them now. At least the tests are green ;) Signed-off-by: Stefan Triller --- .../binding/smartmeter/SmartMeterBindingConstants.java | 8 ++++++-- .../internal/iec62056/Iec62056_21SerialConnector.java | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/SmartMeterBindingConstants.java b/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/SmartMeterBindingConstants.java index 8738b7471..de2b535b4 100644 --- a/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/SmartMeterBindingConstants.java +++ b/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/SmartMeterBindingConstants.java @@ -36,14 +36,18 @@ public class SmartMeterBindingConstants { public static final String CONFIGURATION_CONVERSION = "conversionRatio"; public static final String CONFIGURATION_CHANNEL_NEGATE = "negate"; public static final String CHANNEL_PROPERTY_OBIS = "obis"; - public static final String OBIS_PATTERN_CHANNELID = getObisChannelId(ObisCode.OBIS_PATTERN); + public static final String OBIS_PATTERN_CHANNELID = getObisChannelIdPattern(ObisCode.OBIS_PATTERN); /** Obis format */ public static final String OBIS_FORMAT_MINIMAL = "%d-%d:%d.%d.%d"; /** Obis format */ public static final String OBIS_FORMAT = OBIS_FORMAT_MINIMAL + "*%d"; public static final String CHANNEL_TYPE_METERREADER_OBIS = "channel-type:" + BINDING_ID + ":obis"; - public static String getObisChannelId(String obis) { + public static String getObisChannelIdPattern(String obis) { return obis.replaceAll("\\.", "-").replaceAll(":|\\*", "_"); } + + public static String getObisChannelId(String obis) { + return getObisChannelIdPattern(obis).replaceAll("[^\\w-]", ""); + } } diff --git a/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/internal/iec62056/Iec62056_21SerialConnector.java b/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/internal/iec62056/Iec62056_21SerialConnector.java index 81f8ba404..f1a06905c 100644 --- a/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/internal/iec62056/Iec62056_21SerialConnector.java +++ b/bundles/org.openhab.binding.smartmeter/src/main/java/org/openhab/binding/smartmeter/internal/iec62056/Iec62056_21SerialConnector.java @@ -100,6 +100,7 @@ public class Iec62056_21SerialConnector extends ConnectorBase { @Override public void newDataMessage(@Nullable DataMessage dataMessage) { logger.debug("Datamessage read: {}", dataMessage); + emitter.onError(new IllegalArgumentException("Error while emitting dataMessage")); emitter.onNext(dataMessage); }