Skip to content

Commit a606123

Browse files
committed
From endIdx to nrRegistersToRead
1 parent 50817c7 commit a606123

19 files changed

+91
-43
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
@@ -222,7 +222,7 @@ private void calculateDelta(@NotNull final ModBusData modBusData, @NotNull final
222222
try {
223223
final AddressRange addressRange = modbusToMqttMapping.getAddressRange();
224224
final DataPoint dataPoint = modbusClient.readHoldingRegisters(addressRange.startIdx,
225-
addressRange.endIdx - addressRange.startIdx, modbusToMqttMapping.getDataType());
225+
addressRange.nrRegistersToRead, modbusToMqttMapping.getDataType());
226226
final ModBusData data = new ModBusData(modbusToMqttMapping);
227227
data.addDataPoint(dataPoint);
228228
return data;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactory;
2222
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
2323
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
24+
import com.hivemq.edge.adapters.modbus.config.AddressRange;
2425
import com.hivemq.edge.adapters.modbus.config.ModbusAdapterConfig;
2526
import com.hivemq.edge.adapters.modbus.config.ModbusDataType;
2627
import com.hivemq.edge.adapters.modbus.config.ModbusToMqttConfig;
@@ -103,7 +104,7 @@ public ModbusProtocolAdapterFactory(final boolean writingEnabled) {
103104
context.getIncludeTimestamp(),
104105
context.getIncludeTagNames(),
105106
context.getLegacyProperties(),
106-
context.getAddressRange(),
107+
new AddressRange(context.getAddressRange().startIdx, context.getAddressRange().endIdx - context.getAddressRange().startIdx),
107108
ModbusDataType.INT_32))
108109
.collect(Collectors.toList());
109110

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
2020
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
2121

22-
@JsonPropertyOrder({"startIdx", "endIdx"})
22+
@JsonPropertyOrder({"startIdx", "nrRegistersToRead"})
2323
public class AddressRange {
2424

2525
@JsonProperty(value = "startIdx", required = true)
@@ -30,18 +30,18 @@ public class AddressRange {
3030
required = true)
3131
public final int startIdx;
3232

33-
@JsonProperty(value = "endIdx", required = true)
34-
@ModuleConfigField(title = "End Index",
35-
description = "The Finishing Index (Excl.) of the Address Range",
33+
@JsonProperty(value = "nrRegistersToRead", required = true)
34+
@ModuleConfigField(title = "# of registers to read",
35+
description = "Number of registers to read",
3636
numberMin = 1,
3737
numberMax = ModbusAdapterConfig.PORT_MAX,
3838
required = true)
39-
public final int endIdx;
39+
public final int nrRegistersToRead;
4040

4141
public AddressRange(
4242
@JsonProperty(value = "startIdx", required = true) final int startIdx,
43-
@JsonProperty(value = "endIdx", required = true) final int endIdx) {
43+
@JsonProperty(value = "nrRegistersToRead", required = true) final int nrRegistersToRead) {
4444
this.startIdx = startIdx;
45-
this.endIdx = endIdx;
45+
this.nrRegistersToRead = nrRegistersToRead;
4646
}
4747
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public ModbusToMqttMapping(
105105
this.userProperties = requireNonNullElseGet(userProperties, List::of);
106106
this.dataType = requireNonNullElse(dataType, ModbusDataType.INT_16);
107107

108-
final int registerCount = addressRange.endIdx - addressRange.startIdx;
108+
final int registerCount = addressRange.nrRegistersToRead;
109109
switch (this.dataType) {
110110
case INT_16:
111111
case UINT_16:
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright 2023-present HiveMQ GmbH
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.hivemq.edge.adapters.modbus.config.legacy;
17+
18+
import com.fasterxml.jackson.annotation.JsonProperty;
19+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
20+
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
21+
import com.hivemq.edge.adapters.modbus.config.ModbusAdapterConfig;
22+
23+
@JsonPropertyOrder({"startIdx", "endIdx"})
24+
public class AddressRange {
25+
26+
@JsonProperty(value = "startIdx", required = true)
27+
@ModuleConfigField(title = "Start Index",
28+
description = "The Starting Index (Incl.) of the Address Range",
29+
numberMin = 0,
30+
numberMax = ModbusAdapterConfig.PORT_MAX,
31+
required = true)
32+
public final int startIdx;
33+
34+
@JsonProperty(value = "endIdx", required = true)
35+
@ModuleConfigField(title = "End Index",
36+
description = "The Finishing Index (Excl.) of the Address Range",
37+
numberMin = 1,
38+
numberMax = ModbusAdapterConfig.PORT_MAX,
39+
required = true)
40+
public final int endIdx;
41+
42+
public AddressRange(
43+
@JsonProperty(value = "startIdx", required = true) final int startIdx,
44+
@JsonProperty(value = "endIdx", required = true) final int endIdx) {
45+
this.startIdx = startIdx;
46+
this.endIdx = endIdx;
47+
}
48+
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.fasterxml.jackson.annotation.JsonAlias;
1919
import com.fasterxml.jackson.annotation.JsonCreator;
2020
import com.fasterxml.jackson.annotation.JsonProperty;
21-
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
2221
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
2322
import org.jetbrains.annotations.NotNull;
2423
import org.jetbrains.annotations.Nullable;

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import com.fasterxml.jackson.annotation.JsonAlias;
44
import com.fasterxml.jackson.annotation.JsonCreator;
55
import com.fasterxml.jackson.annotation.JsonProperty;
6-
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
76
import com.hivemq.adapter.sdk.api.config.MessageHandlingOptions;
87
import com.hivemq.adapter.sdk.api.config.MqttUserProperty;
9-
import com.hivemq.edge.adapters.modbus.config.AddressRange;
108
import org.jetbrains.annotations.NotNull;
119
import org.jetbrains.annotations.Nullable;
1210

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.junit.jupiter.api.Test;
2727

2828
import java.util.List;
29+
import java.util.stream.IntStream;
2930

3031
import static org.junit.jupiter.api.Assertions.assertEquals;
3132

@@ -66,8 +67,10 @@ protected static ModBusData createSampleData() {
6667
true,
6768
false,
6869
List.of(),
69-
new AddressRange(1, 2),
70+
new AddressRange(1, 1),
7071
ModbusDataType.INT_16);
71-
return new ModBusData(pollingContext);
72+
final ModBusData data = new ModBusData(pollingContext);
73+
IntStream.range(0, 10).forEach(i -> data.addDataPoint(new DataPointImpl("register-" + i, i)));
74+
return data;
7275
}
7376
}

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import static com.hivemq.protocols.ProtocolAdapterUtils.createProtocolAdapterMapper;
3636
import static org.assertj.core.api.Assertions.assertThat;
3737
import static org.assertj.core.api.Assertions.assertThatThrownBy;
38-
import static org.assertj.core.api.Assertions.atIndex;
3938
import static org.mockito.Mockito.mock;
4039

4140
@SuppressWarnings({"unchecked", "rawtypes"})
@@ -78,7 +77,7 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
7877
});
7978

8079
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(11);
81-
assertThat(modbusToMqttMapping.getAddressRange().endIdx).isEqualTo(15);
80+
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(4);
8281
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_64);
8382

8483
}, modbusToMqttMapping -> {
@@ -97,7 +96,7 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
9796
});
9897

9998
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(16);
100-
assertThat(modbusToMqttMapping.getAddressRange().endIdx).isEqualTo(18);
99+
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(2);
101100
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_32);
102101
});
103102
}
@@ -129,7 +128,7 @@ public void convertConfigObject_defaults_valid() throws Exception {
129128
assertThat(modbusToMqttMapping.getIncludeTagNames()).isFalse();
130129
assertThat(modbusToMqttMapping.getUserProperties()).isEmpty();
131130
assertThat(modbusToMqttMapping.getAddressRange().startIdx).isEqualTo(11);
132-
assertThat(modbusToMqttMapping.getAddressRange().endIdx).isEqualTo(12);
131+
assertThat(modbusToMqttMapping.getAddressRange().nrRegistersToRead).isEqualTo(1);
133132
assertThat(modbusToMqttMapping.getDataType()).isEqualTo(ModbusDataType.INT_16);
134133
});
135134
}
@@ -213,7 +212,7 @@ public void convertConfigObject_startIdxMissing_exception() throws Exception {
213212
}
214213

215214
@Test
216-
public void convertConfigObject_endIdxMissing_exception() throws Exception {
215+
public void convertConfigObject_nrRegistersToReadMissing_exception() throws Exception {
217216
final URL resource = getClass().getResource("/modbus-adapter-missing-endIdx-config.xml");
218217
final File path = Path.of(resource.toURI()).toFile();
219218

@@ -222,7 +221,7 @@ public void convertConfigObject_endIdxMissing_exception() throws Exception {
222221

223222
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
224223
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
225-
(Map) adapters.get("modbus"))).hasMessageContaining("Missing required creator property 'endIdx'");
224+
(Map) adapters.get("modbus"))).hasMessageContaining("Missing required creator property 'nrRegistersToRead'");
226225
}
227226

228227
@Test
@@ -233,7 +232,7 @@ public void convertConfigObject_wrongRegisterRange_INT_16_exception() throws Exc
233232
final HiveMQConfigEntity configEntity = loadConfig(path);
234233
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
235234

236-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory();
235+
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
237236
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
238237
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_16 needs exactly 1 register, but 2 registers were configured.");
239238
}
@@ -246,7 +245,7 @@ public void convertConfigObject_wrongRegisterRange_INT_32_exception() throws Exc
246245
final HiveMQConfigEntity configEntity = loadConfig(path);
247246
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
248247

249-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory();
248+
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
250249
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
251250
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_32 needs exactly 2 registers, but 5 registers were configured.");
252251
}
@@ -259,7 +258,7 @@ public void convertConfigObject_wrongRegisterRange_INT_64_exception() throws Exc
259258
final HiveMQConfigEntity configEntity = loadConfig(path);
260259
final Map<String, Object> adapters = configEntity.getProtocolAdapterConfig();
261260

262-
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory();
261+
final ModbusProtocolAdapterFactory modbusProtocolAdapterFactory = new ModbusProtocolAdapterFactory(false);
263262
assertThatThrownBy(() -> modbusProtocolAdapterFactory.convertConfigObject(mapper,
264263
(Map) adapters.get("modbus"))).hasMessageContaining("The data type INT_64 needs exactly 4 registers, but 5 registers were configured.");
265264
}
@@ -272,7 +271,7 @@ public void unconvertConfigObject_full_valid() throws Exception {
272271
false,
273272
true,
274273
List.of(new MqttUserProperty("my-name", "my-value")),
275-
new AddressRange(1, 2),
274+
new AddressRange(1, 1),
276275
ModbusDataType.UINT_16);
277276

278277
final ModbusAdapterConfig modbusAdapterConfig = new ModbusAdapterConfig("my-modbus-adapter",
@@ -307,7 +306,7 @@ public void unconvertConfigObject_full_valid() throws Exception {
307306
});
308307
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
309308
assertThat(addressRange.get("startIdx")).isEqualTo(1);
310-
assertThat(addressRange.get("endIdx")).isEqualTo(2);
309+
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
311310
});
312311
assertThat(mapping.get("dataType")).isEqualTo("UINT_16");
313312
});
@@ -321,7 +320,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
321320
null,
322321
null,
323322
null,
324-
new AddressRange(1, 2),
323+
new AddressRange(1, 1),
325324
null);
326325

327326
final ModbusToMqttMapping pollingContext2 = new ModbusToMqttMapping("my/destination/2",
@@ -330,7 +329,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
330329
null,
331330
null,
332331
null,
333-
new AddressRange(10, 11),
332+
new AddressRange(10, 1),
334333
null);
335334

336335

@@ -362,7 +361,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
362361
assertThat((List<Map<String, Object>>) mapping.get("mqttUserProperties")).isEmpty();
363362
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
364363
assertThat(addressRange.get("startIdx")).isEqualTo(1);
365-
assertThat(addressRange.get("endIdx")).isEqualTo(2);
364+
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
366365
});
367366
}, mapping -> {
368367
assertThat(mapping.get("mqttTopic")).isEqualTo("my/destination/2");
@@ -373,7 +372,7 @@ public void unconvertConfigObject_defaults() throws ProtocolAdapterException {
373372
assertThat((List<Map<String, Object>>) mapping.get("mqttUserProperties")).isEmpty();
374373
assertThat((Map<String, Object>) mapping.get("addressRange")).satisfies((addressRange) -> {
375374
assertThat(addressRange.get("startIdx")).isEqualTo(10);
376-
assertThat(addressRange.get("endIdx")).isEqualTo(11);
375+
assertThat(addressRange.get("nrRegistersToRead")).isEqualTo(1);
377376
});
378377
assertThat(mapping.get("dataType")).isEqualTo("INT_16");
379378
});

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

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

7979
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
80-
assertThat(subscription.getAddressRange().endIdx).isEqualTo(13);
80+
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
8181
}, subscription -> {
8282
assertThat(subscription.getMqttTopic()).isEqualTo("my/topic/2");
8383
assertThat(subscription.getMqttQos()).isEqualTo(1);
@@ -94,7 +94,7 @@ public void convertConfigObject_fullConfig_valid() throws Exception {
9494
});
9595

9696
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
97-
assertThat(subscription.getAddressRange().endIdx).isEqualTo(13);
97+
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
9898
});
9999
}
100100

@@ -125,7 +125,7 @@ public void convertConfigObject_defaults_valid() throws Exception {
125125
assertThat(subscription.getIncludeTagNames()).isFalse();
126126
assertThat(subscription.getUserProperties()).isEmpty();
127127
assertThat(subscription.getAddressRange().startIdx).isEqualTo(11);
128-
assertThat(subscription.getAddressRange().endIdx).isEqualTo(13);
128+
assertThat(subscription.getAddressRange().nrRegistersToRead).isEqualTo(2);
129129
});
130130
}
131131

0 commit comments

Comments
 (0)