You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2019/12/11 10:46:25 UTC
[plc4x] 02/02: - Made the Adapter not log the Tunneling Ack
messages to the console - Improved the Manual ManualKnxNetIpWithEts5
example
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/knxnet-ip
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit d846c275dd21097a7fe2fcde6a82c9f7d98d60d8
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Dec 11 11:46:16 2019 +0100
- Made the Adapter not log the Tunneling Ack messages to the console
- Improved the Manual ManualKnxNetIpWithEts5 example
---
.../java/knxnetip/ManualKnxNetIpWithEts5.java | 75 ++++++++++++++++++----
.../adapters/source/knxnetip/KnxNetIpAdapter.java | 2 +
2 files changed, 65 insertions(+), 12 deletions(-)
diff --git a/sandbox/test-java-knxnetip-driver/src/test/java/org/apache/plc4x/java/knxnetip/ManualKnxNetIpWithEts5.java b/sandbox/test-java-knxnetip-driver/src/test/java/org/apache/plc4x/java/knxnetip/ManualKnxNetIpWithEts5.java
index 1b30d0d..ecaa75c 100644
--- a/sandbox/test-java-knxnetip-driver/src/test/java/org/apache/plc4x/java/knxnetip/ManualKnxNetIpWithEts5.java
+++ b/sandbox/test-java-knxnetip-driver/src/test/java/org/apache/plc4x/java/knxnetip/ManualKnxNetIpWithEts5.java
@@ -20,13 +20,13 @@ package org.apache.plc4x.java.knxnetip;
import io.netty.channel.ChannelHandlerContext;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.base.PlcMessageToMessageCodec;
import org.apache.plc4x.java.base.connection.ChannelFactory;
import org.apache.plc4x.java.base.connection.NettyPlcConnection;
import org.apache.plc4x.java.base.connection.UdpSocketChannelFactory;
import org.apache.plc4x.java.base.messages.PlcRequestContainer;
-import org.apache.plc4x.java.ets5.passive.KNXGroupAddress;
-import org.apache.plc4x.java.ets5.passive.KnxDatapoint;
+import org.apache.plc4x.java.ets5.passive.*;
import org.apache.plc4x.java.ets5.passive.io.KNXGroupAddressIO;
import org.apache.plc4x.java.ets5.passive.io.KnxDatapointIO;
import org.apache.plc4x.java.knxnetip.connection.KnxNetIpConnection;
@@ -35,22 +35,32 @@ import org.apache.plc4x.java.knxnetip.ets5.model.Ets5Model;
import org.apache.plc4x.java.knxnetip.ets5.model.GroupAddress;
import org.apache.plc4x.java.knxnetip.readwrite.*;
import org.apache.plc4x.java.utils.ReadBuffer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.net.InetAddress;
-import java.util.HashMap;
+import java.net.UnknownHostException;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.TimeUnit;
public class ManualKnxNetIpWithEts5 {
- public static void main(String[] args) throws Exception {
- Ets5Model ets5Model = new Ets5Parser().parse(new File("/Users/christofer.dutz/Projects/Apache/PLC4X-Documents/KNX/Stettiner Str. 13/StettinerStr-Soll-Ist-Temperatur.knxproj"));;
- final byte groupAddressType = ets5Model.getGroupAddressType();
+ private static final Logger LOGGER = LoggerFactory.getLogger(ManualKnxNetIpWithEts5.class);
+
+ private final InetAddress gatewayInetAddress;
+ private final Ets5Model ets5Model;
+ private final byte groupAddressType;
+
+ private ManualKnxNetIpWithEts5(String gatewayAddress, String knxprojFilePath) throws UnknownHostException {
+ gatewayInetAddress = InetAddress.getByName(gatewayAddress);
+ ets5Model = new Ets5Parser().parse(new File(knxprojFilePath));
+ groupAddressType = ets5Model.getGroupAddressType();
+ }
- InetAddress inetAddress = InetAddress.getByName("192.168.42.11");
- ChannelFactory channelFactory = new UdpSocketChannelFactory(inetAddress, KnxNetIpConnection.KNXNET_IP_PORT);
+ private void start() throws PlcConnectionException {
+ ChannelFactory channelFactory = new UdpSocketChannelFactory(
+ gatewayInetAddress, KnxNetIpConnection.KNXNET_IP_PORT);
NettyPlcConnection connection = new KnxNetIpConnection(channelFactory, "",
new PlcMessageToMessageCodec<KNXNetIPMessage, PlcRequestContainer>() {
@@ -81,7 +91,7 @@ public class ManualKnxNetIpWithEts5 {
ReadBuffer addressReadBuffer = new ReadBuffer(destinationGroupAddress);
// Decode the group address depending on the project settings.
KNXGroupAddress destinationAddress =
- KNXGroupAddressIO.parse(addressReadBuffer, ets5Model.getGroupAddressType());
+ KNXGroupAddressIO.parse(addressReadBuffer, groupAddressType);
final GroupAddress groupAddress = ets5Model.getGroupAddresses().get(destinationAddress);
ReadBuffer rawDataReader = new ReadBuffer(payload);
@@ -89,7 +99,18 @@ public class ManualKnxNetIpWithEts5 {
final KnxDatapoint datapoint = KnxDatapointIO.parse(rawDataReader, groupAddress.getType().getMainType(), groupAddress.getType().getSubType());
final String jsonDatapoint = datapoint.toString(ToStringStyle.JSON_STYLE);
- System.out.println(destinationAddress.toString() + " " + jsonDatapoint);
+ if("Isttemperatur".equals(groupAddress.getName())) {
+ LOGGER.info("Message from: " + ManualKnxNetIpWithEts5.toString(sourceAddress) +
+ " to: '" + ManualKnxNetIpWithEts5.toString(destinationAddress) + "'" +
+ "\n location: '" + groupAddress.getFunction().getSpaceName() + "'" +
+ " function: '" + groupAddress.getFunction().getName() + "'" +
+ " meaning: '" + groupAddress.getName() + "'" +
+ " type: '" + groupAddress.getType().getName() + "'" +
+ "\n value: '" + jsonDatapoint + "'"
+ );
+ }
+ } else if (cemiBusmonInd.getCemiFrame() instanceof CEMIFrameAck){
+ // Just ignore this ...
} else {
System.out.println(packet);
}
@@ -103,8 +124,38 @@ public class ManualKnxNetIpWithEts5 {
});
connection.connect();
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ try {
+ connection.close();
+ } catch (PlcConnectionException e) {
+ // Just ignore this.
+ }
+ }));
+ }
+
+ protected static String toString(KNXAddress knxAddress) {
+ return knxAddress.getMainGroup() + "." + knxAddress.getMiddleGroup() + "." + knxAddress.getSubGroup();
+ }
+
+ protected static String toString(KNXGroupAddress groupAddress) {
+ if(groupAddress instanceof KNXGroupAddress3Level) {
+ KNXGroupAddress3Level level3 = (KNXGroupAddress3Level) groupAddress;
+ return level3.getMainGroup() + "/" + level3.getMiddleGroup() + "/" + level3.getSubGroup();
+ } else if(groupAddress instanceof KNXGroupAddress2Level) {
+ KNXGroupAddress2Level level2 = (KNXGroupAddress2Level) groupAddress;
+ return level2.getMainGroup() + "/" + level2.getSubGroup();
+ } else if(groupAddress instanceof KNXGroupAddressFreeLevel) {
+ KNXGroupAddressFreeLevel free = (KNXGroupAddressFreeLevel) groupAddress;
+ return free.getSubGroup() + "";
+ }
+ throw new RuntimeException("Unsupported Group Address Type " + groupAddress.getClass().getName());
+ }
+
+ public static void main(String[] args) throws Exception {
+ ManualKnxNetIpWithEts5 connection = new ManualKnxNetIpWithEts5("192.168.42.11",
+ "/Users/christofer.dutz/Projects/Apache/PLC4X-Documents/KNX/Stettiner Str. 13/StettinerStr-Soll-Ist-Temperatur.knxproj");
+ connection.start();
TimeUnit.SECONDS.sleep(3000);
- connection.close();
}
}
diff --git a/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java b/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
index 6f49822..a54b11c 100644
--- a/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
+++ b/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
@@ -166,6 +166,8 @@ public class KnxNetIpAdapter extends SpecificDataStreamAdapter {
// Send it to StreamPipes
adapterPipeline.process(event);
+ } else if (cemiBusmonInd.getCemiFrame() instanceof CEMIFrameAck){
+ // Just ignore this ...
} else {
System.out.println(packet);
}