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);
                             }