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/10 15:19:40 UTC
[plc4x] branch feature/knxnet-ip updated: - Implemented a manual
test, that uses the KNX and the ETS5 enricher
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
The following commit(s) were added to refs/heads/feature/knxnet-ip by this push:
new 31be6ee - Implemented a manual test, that uses the KNX and the ETS5 enricher
31be6ee is described below
commit 31be6eeca1f7ae696f2d36a1d2492b770e69f658
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Dec 10 16:19:33 2019 +0100
- Implemented a manual test, that uses the KNX and the ETS5 enricher
---
sandbox/test-java-knxnetip-driver/pom.xml | 7 ++
.../java/knxnetip/ManualKnxNetIpWithEts5.java | 110 +++++++++++++++++++++
2 files changed, 117 insertions(+)
diff --git a/sandbox/test-java-knxnetip-driver/pom.xml b/sandbox/test-java-knxnetip-driver/pom.xml
index 735b440..9cbec28 100644
--- a/sandbox/test-java-knxnetip-driver/pom.xml
+++ b/sandbox/test-java-knxnetip-driver/pom.xml
@@ -97,6 +97,13 @@
<version>0.6.0-SNAPSHOT</version>
<!--scope>test</scope-->
</dependency>
+
+ <dependency>
+ <groupId>org.apache.plc4x.sandbox</groupId>
+ <artifactId>test-java-knxnetip-shared</artifactId>
+ <version>0.6.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
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
new file mode 100644
index 0000000..1b30d0d
--- /dev/null
+++ b/sandbox/test-java-knxnetip-driver/src/test/java/org/apache/plc4x/java/knxnetip/ManualKnxNetIpWithEts5.java
@@ -0,0 +1,110 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.plc4x.java.knxnetip;
+
+import io.netty.channel.ChannelHandlerContext;
+import org.apache.commons.lang3.builder.ToStringStyle;
+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.io.KNXGroupAddressIO;
+import org.apache.plc4x.java.ets5.passive.io.KnxDatapointIO;
+import org.apache.plc4x.java.knxnetip.connection.KnxNetIpConnection;
+import org.apache.plc4x.java.knxnetip.ets5.Ets5Parser;
+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 java.io.File;
+import java.net.InetAddress;
+import java.util.HashMap;
+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();
+
+ InetAddress inetAddress = InetAddress.getByName("192.168.42.11");
+ ChannelFactory channelFactory = new UdpSocketChannelFactory(inetAddress, KnxNetIpConnection.KNXNET_IP_PORT);
+
+ NettyPlcConnection connection = new KnxNetIpConnection(channelFactory, "",
+ new PlcMessageToMessageCodec<KNXNetIPMessage, PlcRequestContainer>() {
+ @Override
+ protected void encode(ChannelHandlerContext ctx, PlcRequestContainer msg, List<Object> out) throws Exception {
+ // Ignore for now ...
+ }
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, KNXNetIPMessage packet, List<Object> out) throws Exception {
+ if(packet instanceof TunnelingRequest) {
+ TunnelingRequest request = (TunnelingRequest) packet;
+ CEMI cemiPayload = request.getCemi();
+ if(cemiPayload instanceof CEMIBusmonInd) {
+ CEMIBusmonInd cemiBusmonInd = (CEMIBusmonInd) cemiPayload;
+ if(cemiBusmonInd.getCemiFrame() instanceof CEMIFrameData) {
+ CEMIFrameData cemiDataFrame = (CEMIFrameData) cemiBusmonInd.getCemiFrame();
+
+ // The first byte is actually just 6 bit long, but we'll treat it as a full one.
+ // So here we create a byte array containing the first and all the following bytes.
+ byte[] payload = new byte[1 + cemiDataFrame.getData().length];
+ payload[0] = cemiDataFrame.getDataFirstByte();
+ System.arraycopy(cemiDataFrame.getData(), 0, payload, 1, cemiDataFrame.getData().length);
+
+ final KNXAddress sourceAddress = cemiDataFrame.getSourceAddress();
+ final byte[] destinationGroupAddress = cemiDataFrame.getDestinationAddress();
+
+ ReadBuffer addressReadBuffer = new ReadBuffer(destinationGroupAddress);
+ // Decode the group address depending on the project settings.
+ KNXGroupAddress destinationAddress =
+ KNXGroupAddressIO.parse(addressReadBuffer, ets5Model.getGroupAddressType());
+ final GroupAddress groupAddress = ets5Model.getGroupAddresses().get(destinationAddress);
+
+ ReadBuffer rawDataReader = new ReadBuffer(payload);
+
+ 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);
+ } else {
+ System.out.println(packet);
+ }
+ } else {
+ System.out.println(packet);
+ }
+ } else {
+ System.out.println(packet);
+ }
+ }
+ });
+
+ connection.connect();
+ TimeUnit.SECONDS.sleep(3000);
+ connection.close();
+ }
+
+}