Skip to content

Commit 984de60

Browse files
committed
Removed nrRegistersToRead since it isn't needed with our predefined datatypes
1 parent c5d210b commit 984de60

17 files changed

+47
-131
lines changed

modules/hivemq-edge-module-modbus/src/main/java/com/hivemq/edge/adapters/modbus/ModbusProtocolAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ private void calculateDelta(@NotNull final ModBusData modBusData, @NotNull final
209209
final @NotNull ModbusClient modbusClient) {
210210
final AddressRange addressRange = modbusToMqttMapping.getAddressRange();
211211

212-
return doRead(addressRange.startIdx, addressRange.nrRegistersToRead, addressRange.unitId, modbusToMqttMapping.getDataType(), addressRange.readType, modbusClient)
212+
return doRead(addressRange.startIdx, modbusToMqttMapping.getDataType().nrOfRegistersToRead, addressRange.unitId, modbusToMqttMapping.getDataType(), addressRange.readType, modbusClient)
213213
.thenApply(dataPoint -> {
214214
final ModBusData data = new ModBusData(modbusToMqttMapping);
215215
data.addDataPoint(dataPoint);

modules/hivemq-edge-module-modbus/src/main/java/com/hivemq/edge/adapters/modbus/ModbusProtocolAdapterFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public ModbusProtocolAdapterFactory(final boolean writingEnabled) {
105105
context.getIncludeTimestamp(),
106106
context.getIncludeTagNames(),
107107
context.getLegacyProperties(),
108-
new AddressRange(context.getAddressRange().startIdx, context.getAddressRange().endIdx - context.getAddressRange().startIdx, ModbusAdu.HOLDING_REGISTERS, 0),
108+
new AddressRange(context.getAddressRange().startIdx, ModbusAdu.HOLDING_REGISTERS, 0),
109109
ModbusDataType.INT_32))
110110
.collect(Collectors.toList());
111111

modules/hivemq-edge-module-modbus/src/main/java/com/hivemq/edge/adapters/modbus/config/AddressRange.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,6 @@ public class AddressRange {
3030
required = true)
3131
public final int startIdx;
3232

33-
@JsonProperty(value = "nrRegistersToRead", required = true)
34-
@ModuleConfigField(title = "# of registers to read",
35-
description = "Number of registers to read",
36-
numberMin = 1,
37-
numberMax = ModbusAdapterConfig.PORT_MAX,
38-
required = true)
39-
public final int nrRegistersToRead;
40-
4133
@JsonProperty(value = "readType", required = true)
4234
@ModuleConfigField(title = "The way the register range should be read",
4335
description = "Type of read to performe on the registers",
@@ -52,11 +44,9 @@ public class AddressRange {
5244

5345
public AddressRange(
5446
@JsonProperty(value = "startIdx", required = true) final int startIdx,
55-
@JsonProperty(value = "nrRegistersToRead", required = true) final int nrRegistersToRead,
5647
@JsonProperty(value = "readType", required = true) final ModbusAdu readType,
5748
@JsonProperty(value = "unitId", required = true) final int unitId) {
5849
this.startIdx = startIdx;
59-
this.nrRegistersToRead = nrRegistersToRead;
6050
this.readType = readType;
6151
this.unitId = unitId;
6252
}
Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,45 @@
11
package com.hivemq.edge.adapters.modbus.config;
22

3+
import java.util.Collections;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
37
public enum ModbusDataType {
4-
BOOL,
5-
INT_16,
6-
UINT_16,
7-
INT_32,
8-
UINT_32,
9-
INT_64,
10-
FLOAT_32,
11-
UTF_8
8+
BOOL("BOOL", 1),
9+
INT_16("INT_16", 1),
10+
UINT_16("UINT_16", 1),
11+
INT_32("INT_32", 2),
12+
UINT_32("UINT_32", 2),
13+
INT_64("INT_64", 4),
14+
FLOAT_32("FLOAT_32", 2),
15+
FLOAT_64("FLOAT_64", 4),
16+
UTF_8("UTF_8", 4);
17+
18+
private static final Map<String, ModbusDataType> BY_LABEL;
19+
20+
static {
21+
final Map<String, ModbusDataType> temp = new HashMap<>();
22+
for (ModbusDataType e : values()) {
23+
temp.put(e.label, e);
24+
}
25+
BY_LABEL = Collections.unmodifiableMap(temp);
26+
}
27+
28+
public final String label;
29+
public final int nrOfRegistersToRead;
30+
31+
ModbusDataType(String label, int nrOfRegistersToRead) {
32+
this.label = label;
33+
this.nrOfRegistersToRead = nrOfRegistersToRead;
34+
}
35+
36+
37+
public static ModbusDataType valueOfLabel(String label) {
38+
return BY_LABEL.get(label);
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return this.label;
44+
}
1245
}

modules/hivemq-edge-module-modbus/src/main/java/com/hivemq/edge/adapters/modbus/config/ModbusToMqttMapping.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -104,42 +104,6 @@ public ModbusToMqttMapping(
104104
this.addressRange = addressRange;
105105
this.userProperties = requireNonNullElseGet(userProperties, List::of);
106106
this.dataType = requireNonNullElse(dataType, ModbusDataType.INT_16);
107-
108-
final int registerCount = addressRange.nrRegistersToRead;
109-
switch (this.dataType) {
110-
case INT_16:
111-
case UINT_16:
112-
if (registerCount != 1) {
113-
throw new IllegalArgumentException("The data type " +
114-
this.dataType +
115-
" needs exactly 1 register, but " +
116-
registerCount +
117-
" registers were configured.");
118-
}
119-
break;
120-
case INT_32:
121-
case UINT_32:
122-
case FLOAT_32:
123-
if (registerCount != 2) {
124-
throw new IllegalArgumentException("The data type " +
125-
this.dataType +
126-
" needs exactly 2 registers, but " +
127-
registerCount +
128-
" registers were configured.");
129-
}
130-
break;
131-
case INT_64:
132-
if (registerCount != 4) {
133-
throw new IllegalArgumentException("The data type " +
134-
this.dataType +
135-
" needs exactly 4 registers, but " +
136-
registerCount +
137-
" registers were configured.");
138-
}
139-
break;
140-
case UTF_8:
141-
default:
142-
}
143107
}
144108

145109
public @NotNull AddressRange getAddressRange() {

modules/hivemq-edge-module-modbus/src/test/java/com/hivemq/edge/adapters/modbus/ModbusProtocolAdapterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ protected static ModBusData createSampleData() {
6868
true,
6969
false,
7070
List.of(),
71-
new AddressRange(1, 1, ModbusAdu.HOLDING_REGISTERS, 0),
71+
new AddressRange(1, ModbusAdu.HOLDING_REGISTERS, 0),
7272
ModbusDataType.INT_16);
7373
final ModBusData data = new ModBusData(pollingContext);
7474
IntStream.range(0, 10).forEach(i -> data.addDataPoint(new DataPointImpl("register-" + i, i)));

modules/hivemq-edge-module-modbus/src/test/java/com/hivemq/edge/adapters/modbus/config/ModbusAdapterConfigTest.java

Lines changed: 3 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
7777
});
7878

7979
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(11);
80-
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(4);
8180
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_64);
8281

8382
}, modbusToMqttMapping -> {
@@ -96,7 +95,6 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
9695
});
9796

9897
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(16);
99-
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(2);
10098
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_32);
10199
});
102100
}
@@ -128,7 +126,6 @@ public void convertConfigObject_defaults_valid() throws Exception {
128126
assertThat(modbusToMqttMapping.getIncludeTagNames()).isFalse();
129127
assertThat(modbusToMqttMapping.getUserProperties()).isEmpty();
130128
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(11);
131-
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(1);
132129
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_16);
133130
});
134131
}
@@ -211,58 +208,6 @@ public void convertConfigObject_startIdxMissing_exception() throws Exception {
211208
(Map) adapters.get("modbus"))).hasMessageContaining("Missing required creator property 'startIdx'");
212209
}
213210

214-
@Test
215-
public void convertConfigObject_nrRegistersToReadMissing_exception() throws Exception {
216-
final URL resource = getClass().getResource("/modbus-adapter-missing-endIdx-config.xml");
217-
final File path = Path.of(resource.toURI()).toFile();
218-
219-
final HiveMQConfigEntity configEntity = loadConfig(path);
220-
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
221-
222-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
223-
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
224-
(Map) adapters.get("modbus"))).hasMessageContaining("Missing required creator property 'nrRegistersToRead'");
225-
}
226-
227-
@Test
228-
public void convertConfigObject_wrongRegisterRange_INT_16_exception() throws Exception {
229-
final URL resource = getClass().getResource("/modbus-adapter-wrong-register-count-INT_16.xml");
230-
final File path = Path.of(resource.toURI()).toFile();
231-
232-
final HiveMQConfigEntity configEntity = loadConfig(path);
233-
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
234-
235-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
236-
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
237-
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_16 needs exactly 1 register, but 2 registers were configured.");
238-
}
239-
240-
@Test
241-
public void convertConfigObject_wrongRegisterRange_INT_32_exception() throws Exception {
242-
final URL resource = getClass().getResource("/modbus-adapter-wrong-register-count-INT_32.xml");
243-
final File path = Path.of(resource.toURI()).toFile();
244-
245-
final HiveMQConfigEntity configEntity = loadConfig(path);
246-
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
247-
248-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
249-
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
250-
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_32 needs exactly 2 registers, but 5 registers were configured.");
251-
}
252-
253-
@Test
254-
public void convertConfigObject_wrongRegisterRange_INT_64_exception() throws Exception {
255-
final URL resource = getClass().getResource("/modbus-adapter-wrong-register-count-INT_64.xml");
256-
final File path = Path.of(resource.toURI()).toFile();
257-
258-
final HiveMQConfigEntity configEntity = loadConfig(path);
259-
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
260-
261-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
262-
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
263-
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_64 needs exactly 4 registers, but 5 registers were configured.");
264-
}
265-
266211
@Test
267212
public void unconvertConfigObject_full_valid() throws Exception {
268213
final ModbusToMqttMapping pollingContext = new ModbusToMqttMapping("my/destination",
@@ -271,7 +216,7 @@ public void unconvertConfigObject_full_valid() throws Exception {
271216
false,
272217
true,
273218
List.of(new MqttUserProperty("my-name", "my-value")),
274-
new AddressRange(1, 1, ModbusAdu.HOLDING_REGISTERS, 0),
219+
new AddressRange(1, ModbusAdu.HOLDING_REGISTERS, 0),
275220
ModbusDataType.UINT_16);
276221

277222
final ModbusAdapterConfig modbusAdapterConfig = new ModbusAdapterConfig("my-modbus-adapter",
@@ -306,7 +251,6 @@ public void unconvertConfigObject_full_valid() throws Exception {
306251
});
307252
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
308253
assertThat(addressRange.get("startIdx")).isEqualTo(1);
309-
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
310254
});
311255
assertThat(mapping.get("dataType")).isEqualTo("UINT_16");
312256
});
@@ -320,7 +264,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
320264
null,
321265
null,
322266
null,
323-
new AddressRange(1, 1, ModbusAdu.HOLDING_REGISTERS, 0),
267+
new AddressRange(1, ModbusAdu.HOLDING_REGISTERS, 0),
324268
null);
325269

326270
final ModbusToMqttMapping pollingContext2 = new ModbusToMqttMapping("my/destination/2",
@@ -329,7 +273,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
329273
null,
330274
null,
331275
null,
332-
new AddressRange(10, 1, ModbusAdu.HOLDING_REGISTERS, 0),
276+
new AddressRange(10, ModbusAdu.HOLDING_REGISTERS, 0),
333277
null);
334278

335279

@@ -361,7 +305,6 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
361305
assertThat((List<Map<String, Object>>) mapping.get("mqttUserProperties")).isEmpty();
362306
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
363307
assertThat(addressRange.get("startIdx")).isEqualTo(1);
364-
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
365308
});
366309
}, mapping -> {
367310
assertThat(mapping.get("mqttTopic")).isEqualTo("my/destination/2");
@@ -372,7 +315,6 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
372315
assertThat((List<Map<String, Object>>) mapping.get("mqttUserProperties")).isEmpty();
373316
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
374317
assertThat(addressRange.get("startIdx")).isEqualTo(10);
375-
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
376318
});
377319
assertThat(mapping.get("dataType")).isEqualTo("INT_16");
378320
});

modules/hivemq-edge-module-modbus/src/test/java/com/hivemq/edge/adapters/modbus/config/legacy/LegacyModbusAdapterConfigTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
7777
});
7878

7979
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
80-
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
8180
}, subscription -> {
8281
assertThat(subscription.getMqttTopic()).isEqualTo("my/topic/2");
8382
assertThat(subscription.getMqttQos()).isEqualTo(1);
@@ -94,7 +93,6 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
9493
});
9594

9695
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
97-
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
9896
});
9997
}
10098

@@ -125,7 +123,6 @@ public void convertConfigObject_defaults_valid() throws Exception {
125123
assertThat(subscription.getIncludeTagNames()).isFalse();
126124
assertThat(subscription.getUserProperties()).isEmpty();
127125
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
128-
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
129126
});
130127
}
131128

modules/hivemq-edge-module-modbus/src/test/resources/modbus-adapter-full-config.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
<messageHandlingOptions>MQTTMessagePerSubscription</messageHandlingOptions>
3434
<addressRange>
3535
<startIdx>11</startIdx>
36-
<nrRegistersToRead>4</nrRegistersToRead>
3736
<readType>HOLDING_REGISTERS</readType>
3837
<unitId>0</unitId>
3938
</addressRange>
@@ -57,7 +56,6 @@
5756
<messageHandlingOptions>MQTTMessagePerSubscription</messageHandlingOptions>
5857
<addressRange>
5958
<startIdx>16</startIdx>
60-
<nrRegistersToRead>2</nrRegistersToRead>
6159
<readType>HOLDING_REGISTERS</readType>
6260
<unitId>0</unitId>
6361
</addressRange>

modules/hivemq-edge-module-modbus/src/test/resources/modbus-adapter-minimal-config.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
<mqttTopic>my/topic</mqttTopic>
2828
<addressRange>
2929
<startIdx>11</startIdx>
30-
<nrRegistersToRead>1</nrRegistersToRead>
3130
<readType>HOLDING_REGISTERS</readType>
3231
<unitId>0</unitId>
3332
</addressRange>

0 commit comments

Comments
 (0)