Skip to content

Commit 31cfa9d

Browse files
committed
Round one getting it to work again
1 parent aa6edd2 commit 31cfa9d

File tree

6 files changed

+84
-205
lines changed

6 files changed

+84
-205
lines changed

modules/hivemq-edge-module-s7/src/main/java/com/hivemq/edge/adapters/s7/S7ProtocolAdapter.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
1919
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
2020
import com.hivemq.adapter.sdk.api.data.DataPoint;
21-
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactoryInput;
2221
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
2322
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterStartInput;
2423
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterStartOutput;
@@ -28,12 +27,10 @@
2827
import com.hivemq.adapter.sdk.api.polling.PollingOutput;
2928
import com.hivemq.adapter.sdk.api.polling.PollingProtocolAdapter;
3029
import com.hivemq.adapter.sdk.api.state.ProtocolAdapterState;
31-
import com.hivemq.adapter.sdk.api.tag.Tag;
3230
import com.hivemq.edge.adapters.s7.config.S7AdapterConfig;
3331
import com.hivemq.edge.adapters.s7.config.S7DataType;
3432
import com.hivemq.edge.adapters.s7.config.S7Tag;
3533
import com.hivemq.edge.adapters.s7.config.S7TagDefinition;
36-
import com.hivemq.edge.adapters.s7.config.S7ToMqttConfig;
3734
import org.jetbrains.annotations.NotNull;
3835
import org.slf4j.Logger;
3936
import org.slf4j.LoggerFactory;
@@ -48,7 +45,7 @@
4845
/**
4946
* @author HiveMQ Adapter Generator
5047
*/
51-
public class S7ProtocolAdapter implements PollingProtocolAdapter<S7ToMqttConfig> {
48+
public class S7ProtocolAdapter implements PollingProtocolAdapter {
5249

5350
private static final Logger log = LoggerFactory.getLogger(S7ProtocolAdapter.class);
5451

@@ -57,12 +54,14 @@ public class S7ProtocolAdapter implements PollingProtocolAdapter<S7ToMqttConfig>
5754
private final ProtocolAdapterState protocolAdapterState;
5855
private final S7Client s7Client;
5956
private final Map<String, S7Tag> tags;
57+
private final @NotNull String adapterId;
6058

6159
private final Map<String, DataPoint> dataPoints;
6260

6361
public S7ProtocolAdapter(
6462
final @NotNull ProtocolAdapterInformation adapterInformation,
6563
final @NotNull ProtocolAdapterInput<S7AdapterConfig> input) {
64+
this.adapterId = input.getAdapterId();
6665
this.adapterInformation = adapterInformation;
6766
this.adapterConfig = input.getConfig();
6867
this.tags = input.getTags().stream().map(t -> (S7Tag)t).collect(Collectors.toMap(S7Tag::getName, Function.identity()));
@@ -79,24 +78,19 @@ public S7ProtocolAdapter(
7978
this.dataPoints = new ConcurrentHashMap<>();
8079
}
8180

82-
@Override
83-
public @NotNull List<S7ToMqttConfig> getPollingContexts() {
84-
return adapterConfig.getS7ToMqttMappings();
85-
}
86-
8781
@Override
8882
public int getPollingIntervalMillis() {
89-
return adapterConfig.getPollingIntervalMillis();
83+
return adapterConfig.getS7ToMqttConfig().getPollingIntervalMillis();
9084
}
9185

9286
@Override
9387
public int getMaxPollingErrorsBeforeRemoval() {
94-
return adapterConfig.getMaxPollingErrorsBeforeRemoval();
88+
return adapterConfig.getS7ToMqttConfig().getMaxPollingErrorsBeforeRemoval();
9589
}
9690

9791
@Override
9892
public @NotNull String getId() {
99-
return adapterConfig.getId();
93+
return adapterId;
10094
}
10195

10296
@Override
@@ -130,11 +124,7 @@ public void stop(@NotNull final ProtocolAdapterStopInput input, @NotNull final P
130124
}
131125

132126
@Override
133-
public void poll(
134-
@NotNull final PollingInput<S7ToMqttConfig> pollingInput,
135-
@NotNull final PollingOutput pollingOutput) {
136-
final S7ToMqttConfig s7ToMqtt = pollingInput.getPollingContext();
137-
127+
public void poll(@NotNull final PollingInput pollingInput, @NotNull final PollingOutput pollingOutput) {
138128
S7Tag tagToRead = tags.get(pollingInput.getPollingContext().getTagName());
139129
S7TagDefinition tagDefinition = tagToRead.getDefinition();
140130
//Every S7 address starts with a % but the iot-communications lib doesn't like it, so we are stripping it.
@@ -146,7 +136,7 @@ public void poll(
146136
dataPoint = s7Client.read(tagDefinition.getDataType(), List.of(tagAddress)).get(0);
147137
}
148138

149-
if(adapterConfig.getPublishChangedDataOnly()) {
139+
if(adapterConfig.getS7ToMqttConfig().getPublishChangedDataOnly()) {
150140
if(dataPoints.containsKey(tagAddress)) {
151141
final DataPoint existingDataPoint = dataPoints.get(tagAddress);
152142
if(existingDataPoint != null && existingDataPoint.equals(dataPoint)) {

modules/hivemq-edge-module-s7/src/main/java/com/hivemq/edge/adapters/s7/S7ProtocolAdapterFactory.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,13 @@
1515
*/
1616
package com.hivemq.edge.adapters.s7;
1717

18-
import com.fasterxml.jackson.databind.ObjectMapper;
1918
import com.hivemq.adapter.sdk.api.ProtocolAdapter;
2019
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
21-
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
2220
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactory;
2321
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactoryInput;
2422
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
2523
import com.hivemq.edge.adapters.s7.config.S7AdapterConfig;
2624
import org.jetbrains.annotations.NotNull;
27-
import org.slf4j.Logger;
28-
import org.slf4j.LoggerFactory;
29-
30-
import java.util.Map;
3125

3226
/**
3327
* @author HiveMQ Adapter Generator

modules/hivemq-edge-module-s7/src/main/java/com/hivemq/edge/adapters/s7/S7ProtocolAdapterInformation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
2121
import com.hivemq.adapter.sdk.api.ProtocolAdapterTag;
2222
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
23+
import com.hivemq.adapter.sdk.api.config.ProtocolSpecificAdapterConfig;
2324
import com.hivemq.adapter.sdk.api.tag.Tag;
2425
import com.hivemq.edge.adapters.s7.config.S7AdapterConfig;
2526
import com.hivemq.edge.adapters.s7.config.S7Tag;
@@ -127,12 +128,12 @@ public List<ProtocolAdapterTag> getTags() {
127128
}
128129

129130
@Override
130-
public @NotNull Class<? extends ProtocolAdapterConfig> configurationClassReading() {
131+
public @NotNull Class<? extends ProtocolSpecificAdapterConfig> configurationClassNorthbound() {
131132
return S7AdapterConfig.class;
132133
}
133134

134135
@Override
135-
public @NotNull Class<? extends ProtocolAdapterConfig> configurationClassWriting() {
136+
public @NotNull Class<? extends ProtocolSpecificAdapterConfig> configurationClassNorthAndSouthbound() {
136137
return S7AdapterConfig.class;
137138
}
138139
}

modules/hivemq-edge-module-s7/src/main/java/com/hivemq/edge/adapters/s7/config/S7AdapterConfig.java

Lines changed: 23 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,17 @@
1818
import com.fasterxml.jackson.annotation.JsonCreator;
1919
import com.fasterxml.jackson.annotation.JsonProperty;
2020
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
21-
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
21+
import com.hivemq.adapter.sdk.api.config.ProtocolSpecificAdapterConfig;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
2424

25-
import java.util.List;
26-
import java.util.Objects;
27-
import java.util.Set;
28-
import java.util.stream.Collectors;
29-
30-
public class S7AdapterConfig implements ProtocolAdapterConfig {
25+
public class S7AdapterConfig implements ProtocolSpecificAdapterConfig {
3126

3227
private static final @NotNull String ID_REGEX = "^([a-zA-Z_0-9-_])*$";
3328

3429
private static final int PORT_MIN = 1;
3530
private static final int PORT_MAX = 65535;
3631

37-
public static final String DEFAULT_POLLING_INTERVAL_MS = "1000";
38-
public static final String DEFAULT_MAX_POLLING_ERRORS = "10";
39-
public static final String DEFAULT_PUBLISH_CHANGED_DATA_ONLY = "true";
4032
public static final String DEFAULT_S7_PORT = "102";
4133
public static final String DEFAULT_CONTROLER_TYPE = "S7_300";
4234

@@ -47,9 +39,6 @@ public class S7AdapterConfig implements ProtocolAdapterConfig {
4739
public static final String PROPERTY_REMOTE_RACK = "remoteRack";
4840
public static final String PROPERTY_REMOTE_SLOT = "remoteSlot";
4941
public static final String PROPERTY_PDU_LENGTH = "pduLength";
50-
public static final String PROPERTY_POLLING_INTERVAL_MILLIS = "pollingIntervalMillis";
51-
public static final String PROPERTY_MAX_POLLING_ERRORS_BEFORE_REMOVAL = "maxPollingErrorsBeforeRemoval";
52-
public static final String PROPERTY_PUBLISH_CHANGED_DATA_ONLY = "publishChangedDataOnly";
5342
public static final String PROPERTY_S_7_TO_MQTT_MAPPINGS = "s7ToMqttMappings";
5443

5544
public enum ControllerType {
@@ -62,36 +51,6 @@ public enum ControllerType {
6251
SINUMERIK_828D
6352
}
6453

65-
@JsonProperty(PROPERTY_POLLING_INTERVAL_MILLIS)
66-
@ModuleConfigField(title = "Polling Interval [ms]",
67-
description = "Time in millisecond that this endpoint will be polled",
68-
numberMin = 1,
69-
defaultValue = DEFAULT_POLLING_INTERVAL_MS)
70-
private final int pollingIntervalMillis;
71-
72-
@JsonProperty(PROPERTY_MAX_POLLING_ERRORS_BEFORE_REMOVAL)
73-
@ModuleConfigField(title = "Max. Polling Errors",
74-
description = "Max. errors polling the endpoint before the polling daemon is stopped (-1 for unlimited retries)",
75-
numberMin = -1,
76-
defaultValue = DEFAULT_MAX_POLLING_ERRORS)
77-
private final int maxPollingErrorsBeforeRemoval;
78-
79-
@JsonProperty(PROPERTY_PUBLISH_CHANGED_DATA_ONLY)
80-
@ModuleConfigField(title = "Only publish data items that have changed since last poll",
81-
defaultValue = DEFAULT_PUBLISH_CHANGED_DATA_ONLY,
82-
format = ModuleConfigField.FieldType.BOOLEAN)
83-
private final boolean publishChangedDataOnly;
84-
85-
@JsonProperty(value = PROPERTY_ID, required = true)
86-
@ModuleConfigField(title = "Identifier",
87-
description = "Unique identifier for this protocol adapter",
88-
format = ModuleConfigField.FieldType.IDENTIFIER,
89-
required = true,
90-
stringPattern = ID_REGEX,
91-
stringMinLength = 1,
92-
stringMaxLength = 1024)
93-
private final @NotNull String id;
94-
9554
@JsonProperty(value = PROPERTY_PORT, required = true)
9655
@ModuleConfigField(title = "Port",
9756
description = "The port number on the device to connect to",
@@ -134,7 +93,7 @@ public enum ControllerType {
13493
@ModuleConfigField(title = "S7 To MQTT Config",
13594
description = "The configuration for a data stream from S7 to MQTT",
13695
required = true)
137-
private final @NotNull List<S7ToMqttConfig> s7ToMqttConfig;
96+
private final @NotNull S7ToMqttConfig s7ToMqttConfig;
13897

13998
@JsonCreator
14099
public S7AdapterConfig(
@@ -145,38 +104,16 @@ public S7AdapterConfig(
145104
@JsonProperty(value = PROPERTY_REMOTE_RACK) final @Nullable Integer remoteRack,
146105
@JsonProperty(value = PROPERTY_REMOTE_SLOT) final @Nullable Integer remoteSlot,
147106
@JsonProperty(value = PROPERTY_PDU_LENGTH) final @Nullable Integer pduLength,
148-
@JsonProperty(value = PROPERTY_POLLING_INTERVAL_MILLIS) final @Nullable Integer pollingIntervalMillis,
149-
@JsonProperty(value = PROPERTY_MAX_POLLING_ERRORS_BEFORE_REMOVAL) final @Nullable Integer maxPollingErrorsBeforeRemoval,
150-
@JsonProperty(value = PROPERTY_PUBLISH_CHANGED_DATA_ONLY) final @Nullable Boolean publishChangedDataOnly,
151-
@JsonProperty(value = PROPERTY_S_7_TO_MQTT_MAPPINGS, required = true) final @NotNull List<S7ToMqttConfig> s7ToMqttConfig) {
152-
this.id = id;
107+
@JsonProperty(value = PROPERTY_S_7_TO_MQTT_MAPPINGS, required = true) final @NotNull S7ToMqttConfig s7ToMqttConfig) {
153108
this.host = host;
154109
this.controllerType = controllerType;
155110
this.port = port;
156-
this.pollingIntervalMillis = Objects.requireNonNullElse(pollingIntervalMillis,
157-
Integer.valueOf(DEFAULT_POLLING_INTERVAL_MS));
158-
this.maxPollingErrorsBeforeRemoval = Objects.requireNonNullElse(maxPollingErrorsBeforeRemoval,
159-
Integer.valueOf(DEFAULT_MAX_POLLING_ERRORS));
160-
this.publishChangedDataOnly = Objects.requireNonNullElse(publishChangedDataOnly,
161-
Boolean.valueOf(DEFAULT_PUBLISH_CHANGED_DATA_ONLY));
162111
this.remoteRack = remoteRack;
163112
this.remoteSlot = remoteSlot;
164113
this.pduLength = pduLength;
165114
this.s7ToMqttConfig = s7ToMqttConfig;
166115
}
167116

168-
public int getPollingIntervalMillis() {
169-
return pollingIntervalMillis;
170-
}
171-
172-
public int getMaxPollingErrorsBeforeRemoval() {
173-
return maxPollingErrorsBeforeRemoval;
174-
}
175-
176-
public boolean getPublishChangedDataOnly() {
177-
return publishChangedDataOnly;
178-
}
179-
180117
public int getPort() {
181118
return port;
182119
}
@@ -197,21 +134,32 @@ public int getPort() {
197134
return controllerType;
198135
}
199136

200-
@Override
201-
public @NotNull String getId() {
202-
return id;
203-
}
204-
205137
public @NotNull String getHost() {
206138
return host;
207139
}
208140

209-
public @NotNull List<S7ToMqttConfig> getS7ToMqttMappings() {
141+
public @NotNull S7ToMqttConfig getS7ToMqttConfig() {
210142
return s7ToMqttConfig;
211143
}
212144

213145
@Override
214-
public @NotNull Set<String> calculateAllUsedTags() {
215-
return s7ToMqttConfig.stream().map(S7ToMqttConfig::getTagName).collect(Collectors.toSet());
146+
public String toString() {
147+
return "S7AdapterConfig{" +
148+
"port=" +
149+
port +
150+
", host='" +
151+
host +
152+
'\'' +
153+
", controllerType=" +
154+
controllerType +
155+
", remoteRack=" +
156+
remoteRack +
157+
", remoteSlot=" +
158+
remoteSlot +
159+
", pduLength=" +
160+
pduLength +
161+
", s7ToMqttConfig=" +
162+
s7ToMqttConfig +
163+
'}';
216164
}
217165
}

0 commit comments

Comments
 (0)