You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2023/03/11 17:42:31 UTC

[plc4x] branch feat/hop updated: Integration with Hop V2.X.X in progress. Action and Transform Read, Write and Events are working, Subscription is missing due to S7 driver problems. The resources for modification are added to the portal.

This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feat/hop by this push:
     new cbc761dbaf Integration with Hop V2.X.X in progress. Action and Transform Read, Write and Events are working, Subscription is missing due to S7 driver problems. The resources for modification are added to the portal.
cbc761dbaf is described below

commit cbc761dbaf92f1b9c0ee30d1a343837951f6489b
Author: César García <ce...@ceos.com.ve>
AuthorDate: Sat Mar 11 13:41:46 2023 -0400

    Integration with Hop V2.X.X in progress. Action and Transform Read, Write and Events are working, Subscription is missing due to S7 driver problems. The resources for modification are added to the portal.
---
 .gitignore                                         |   1 +
 .../java/bacnetip/readwrite/BACnetVendorId.java    |   3 +
 .../java/knxnetip/readwrite/KnxDatapoint.java      |  30 ++
 .../java/knxnetip/readwrite/KnxDatapointType.java  | 460 +++++++++++----------
 .../java/knxnetip/readwrite/KnxManufacturer.java   |   3 +-
 .../plc4x/hop/actions/ActionSampleMetaData.java    |   4 +-
 .../plc4x/hop/actions/Plc4xCheckConnections.java   |  72 +++-
 ...nections.java => Plc4xCheckDisConnections.java} |  18 +-
 .../actions/Plc4xCheckDisConnectionsDialog.java    | 371 +++++++++++++++++
 .../hop/actions/messages/messages_en_US.properties |  13 +-
 .../src/assembly/assembly.xml                      |  33 +-
 .../src/assembly/assembly.xml                      |  49 +++
 .../apache-hop/plc4x-hop-metadata/pom.xml          |  18 +-
 .../apache-hop/plc4x-hop-transformer/pom.xml       |  16 +
 .../hop/transforms/plc4xevent/Plc4xEvent.java      | 165 +++++---
 .../transforms/plc4xevent/Plc4xEventDialog.java    |  17 +-
 .../hop/transforms/plc4xevent/Plc4xEventMeta.java  |  22 +-
 .../plc4x/hop/transforms/plc4xinput/Plc4xRead.java |  28 +-
 .../hop/transforms/plc4xinput/Plc4xReadDialog.java |   2 +-
 .../hop/transforms/plc4xinput/Plc4xReadMeta.java   |  36 +-
 .../hop/transforms/plc4xoutput/Plc4xWrite.java     |  22 +-
 .../hop/transforms/plc4xoutput/Plc4xWriteMeta.java |  36 +-
 .../plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java  |  88 ++--
 .../hop/transforms/plc4xsubs/Plc4xSubsMeta.java    |  34 +-
 ...xPlcField.java => Plc4xPlcSubscriptionTag.java} |  38 +-
 .../util/{Plc4xPlcField.java => Plc4xPlcTag.java}  |  20 +-
 .../plc4xevent/messages/messages_en_US.properties  |  14 +-
 pom.xml                                            |   2 +
 src/site/asciidoc/index.adoc                       |  14 +
 src/site/asciidoc/users/index.adoc                 |  14 +
 .../asciidoc/users/integrations/apache-hop.adoc    |  41 ++
 src/site/resources/images/icons/s7_alert.png       | Bin 0 -> 19948 bytes
 src/site/resources/images/icons/s7_caution.png     | Bin 0 -> 18944 bytes
 src/site/resources/images/icons/s7_danger.png      | Bin 0 -> 20452 bytes
 src/site/resources/images/icons/s7_dont.png        | Bin 0 -> 20067 bytes
 src/site/resources/images/icons/s7_ex.png          | Bin 0 -> 20057 bytes
 src/site/resources/images/icons/s7_important.png   | Bin 0 -> 19667 bytes
 src/site/resources/images/icons/s7_note.png        | Bin 0 -> 19486 bytes
 src/site/resources/images/icons/s7_tip.png         | Bin 0 -> 20231 bytes
 src/site/resources/images/icons/s7_toddy.png       | Bin 0 -> 20356 bytes
 src/site/resources/images/icons/s7_warning.png     | Bin 0 -> 19172 bytes
 .../images/integrations/apache_hop_logo.png        | Bin 0 -> 14041 bytes
 .../images/integrations/plc4x_hop_banner.jpg       | Bin 0 -> 81373 bytes
 src/site/site.xml                                  |   1 +
 44 files changed, 1223 insertions(+), 462 deletions(-)

diff --git a/.gitignore b/.gitignore
index 39a55e142e..d86ce58836 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@ atlassian-ide-plugin.xml
 *.tar.gz
 *.rar
 
+
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 
diff --git a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
index 3a8b12ea1b..f7b08d59f9 100644
--- a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
+++ b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
@@ -1617,6 +1617,9 @@ public enum BACnetVendorId {
   METRONICAKP_SPJ((int) 1406, (int) 1406, (String) "Metronic AKP Sp. J."),
   TECHKNAVE((int) 1407, (int) 1407, (String) "Techknave"),
   ELSNER_ELEKTRONIK((int) 1408, (int) 1408, (String) "Elsner Elektronik"),
+  LEFOO_INDUSTRIAL_HANGZHOU_CO_LTD(
+      (int) 1409, (int) 1409, (String) "LEFOO Industrial (Hangzhou) Co., Ltd."),
+  CALIBRATION_TECHNOLOGIES_INC((int) 1410, (int) 1410, (String) "Calibration Technologies, Inc."),
   UNKNOWN_VENDOR((int) 0xFFFF, (int) 0xFFFF, (String) "Unknown");
   private static final Map<Integer, BACnetVendorId> map;
 
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
index 89e8f23e7b..6c3b3dc30f 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapoint.java
@@ -2156,6 +2156,22 @@ public class KnxDatapoint {
       // Simple Field (value)
       Float value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 16);
 
+      return new PlcREAL(value);
+    } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_Coefficient)) { // REAL
+
+      // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+      {
+        short reserved = /*TODO: migrate me*/ /*TODO: migrate me*/
+            readBuffer.readUnsignedShort("", 8);
+        if (reserved != (short) 0x00) {
+          LOGGER.info(
+              "Expected constant value " + 0x00 + " but got " + reserved + " for reserved field.");
+        }
+      }
+
+      // Simple Field (value)
+      Float value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 16);
+
       return new PlcREAL(value);
     } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_TimeOfDay)) { // Struct
 
@@ -9457,6 +9473,15 @@ public class KnxDatapoint {
       float value = (float) _value.getFloat();
       /*TODO: migrate me*/
       /*TODO: migrate me*/ writeBuffer.writeFloat("", 16, (value));
+    } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_Coefficient)) { // REAL
+      // Reserved Field
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedShort(
+          "", 8, ((Number) (short) 0x00).shortValue());
+      // Simple Field (value)
+      float value = (float) _value.getFloat();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeFloat("", 16, (value));
     } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_TimeOfDay)) { // Struct
       // Reserved Field
       /*TODO: migrate me*/
@@ -14083,6 +14108,11 @@ public class KnxDatapoint {
       sizeInBits += 8;
       // Simple Field (value)
       sizeInBits += 16;
+    } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_Coefficient)) { // REAL
+      // Reserved Field
+      sizeInBits += 8;
+      // Simple Field (value)
+      sizeInBits += 16;
     } else if (EvaluationHelper.equals(datapointType, KnxDatapointType.DPT_TimeOfDay)) { // Struct
       // Reserved Field
       sizeInBits += 8;
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
index ac33240d5f..b615d5c8c8 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxDatapointType.java
@@ -330,831 +330,833 @@ public enum KnxDatapointType {
       (int) 30,
       (String) "concentration (µg/m³)",
       KnxDatapointMainType.DPT_2_BYTE_FLOAT_VALUE),
-  DPT_TimeOfDay((long) 121L, (int) 1, (String) "time of day", KnxDatapointMainType.DPT_TIME),
-  DPT_Date((long) 122L, (int) 1, (String) "date", KnxDatapointMainType.DPT_DATE),
+  DPT_Coefficient(
+      (long) 121L, (int) 31, (String) "coefficient", KnxDatapointMainType.DPT_2_BYTE_FLOAT_VALUE),
+  DPT_TimeOfDay((long) 122L, (int) 1, (String) "time of day", KnxDatapointMainType.DPT_TIME),
+  DPT_Date((long) 123L, (int) 1, (String) "date", KnxDatapointMainType.DPT_DATE),
   DPT_Value_4_Ucount(
-      (long) 123L,
+      (long) 124L,
       (int) 1,
       (String) "counter pulses (unsigned)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_LongTimePeriod_Sec(
-      (long) 124L,
+      (long) 125L,
       (int) 100,
       (String) "counter timesec (s)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_LongTimePeriod_Min(
-      (long) 125L,
+      (long) 126L,
       (int) 101,
       (String) "counter timemin (min)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_LongTimePeriod_Hrs(
-      (long) 126L,
+      (long) 127L,
       (int) 102,
       (String) "counter timehrs (h)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_VolumeLiquid_Litre(
-      (long) 127L,
+      (long) 128L,
       (int) 1200,
       (String) "volume liquid (l)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_Volume_m_3(
-      (long) 128L,
+      (long) 129L,
       (int) 1201,
       (String) "volume (m³)",
       KnxDatapointMainType.DPT_4_BYTE_UNSIGNED_VALUE),
   DPT_Value_4_Count(
-      (long) 129L,
+      (long) 130L,
       (int) 1,
       (String) "counter pulses (signed)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_FlowRate_m3h(
-      (long) 130L,
+      (long) 131L,
       (int) 2,
       (String) "flow rate (m³/h)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ActiveEnergy(
-      (long) 131L,
+      (long) 132L,
       (int) 10,
       (String) "active energy (Wh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ApparantEnergy(
-      (long) 132L,
+      (long) 133L,
       (int) 11,
       (String) "apparant energy (VAh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ReactiveEnergy(
-      (long) 133L,
+      (long) 134L,
       (int) 12,
       (String) "reactive energy (VARh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ActiveEnergy_kWh(
-      (long) 134L,
+      (long) 135L,
       (int) 13,
       (String) "active energy (kWh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ApparantEnergy_kVAh(
-      (long) 135L,
+      (long) 136L,
       (int) 14,
       (String) "apparant energy (kVAh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ReactiveEnergy_kVARh(
-      (long) 136L,
+      (long) 137L,
       (int) 15,
       (String) "reactive energy (kVARh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_ActiveEnergy_MWh(
-      (long) 137L,
+      (long) 138L,
       (int) 16,
       (String) "active energy (MWh)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_LongDeltaTimeSec(
-      (long) 138L,
+      (long) 139L,
       (int) 100,
       (String) "time lag (s)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_DeltaVolumeLiquid_Litre(
-      (long) 139L,
+      (long) 140L,
       (int) 1200,
       (String) "delta volume liquid (l)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_DeltaVolume_m_3(
-      (long) 140L,
+      (long) 141L,
       (int) 1201,
       (String) "delta volume (m³)",
       KnxDatapointMainType.DPT_4_BYTE_SIGNED_VALUE),
   DPT_Value_Acceleration(
-      (long) 141L,
+      (long) 142L,
       (int) 0,
       (String) "acceleration (m/s²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Acceleration_Angular(
-      (long) 142L,
+      (long) 143L,
       (int) 1,
       (String) "angular acceleration (rad/s²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Activation_Energy(
-      (long) 143L,
+      (long) 144L,
       (int) 2,
       (String) "activation energy (J/mol)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Activity(
-      (long) 144L,
+      (long) 145L,
       (int) 3,
       (String) "radioactive activity (1/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Mol(
-      (long) 145L,
+      (long) 146L,
       (int) 4,
       (String) "amount of substance (mol)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Amplitude(
-      (long) 146L, (int) 5, (String) "amplitude", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 147L, (int) 5, (String) "amplitude", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_AngleRad(
-      (long) 147L,
+      (long) 148L,
       (int) 6,
       (String) "angle (radiant)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_AngleDeg(
-      (long) 148L, (int) 7, (String) "angle (degree)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 149L, (int) 7, (String) "angle (degree)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Angular_Momentum(
-      (long) 149L,
+      (long) 150L,
       (int) 8,
       (String) "angular momentum (Js)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Angular_Velocity(
-      (long) 150L,
+      (long) 151L,
       (int) 9,
       (String) "angular velocity (rad/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Area(
-      (long) 151L, (int) 10, (String) "area (m*m)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 152L, (int) 10, (String) "area (m*m)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Capacitance(
-      (long) 152L,
+      (long) 153L,
       (int) 11,
       (String) "capacitance (F)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Charge_DensitySurface(
-      (long) 153L,
+      (long) 154L,
       (int) 12,
       (String) "flux density (C/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Charge_DensityVolume(
-      (long) 154L,
+      (long) 155L,
       (int) 13,
       (String) "charge density (C/m³)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Compressibility(
-      (long) 155L,
+      (long) 156L,
       (int) 14,
       (String) "compressibility (m²/N)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Conductance(
-      (long) 156L,
+      (long) 157L,
       (int) 15,
       (String) "conductance (S)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electrical_Conductivity(
-      (long) 157L,
+      (long) 158L,
       (int) 16,
       (String) "conductivity (S/m)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Density(
-      (long) 158L,
+      (long) 159L,
       (int) 17,
       (String) "density (kg/m³)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Charge(
-      (long) 159L,
+      (long) 160L,
       (int) 18,
       (String) "electric charge (C)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Current(
-      (long) 160L,
+      (long) 161L,
       (int) 19,
       (String) "electric current (A)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_CurrentDensity(
-      (long) 161L,
+      (long) 162L,
       (int) 20,
       (String) "electric current density (A/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_DipoleMoment(
-      (long) 162L,
+      (long) 163L,
       (int) 21,
       (String) "electric dipole moment (Cm)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Displacement(
-      (long) 163L,
+      (long) 164L,
       (int) 22,
       (String) "electric displacement (C/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_FieldStrength(
-      (long) 164L,
+      (long) 165L,
       (int) 23,
       (String) "electric field strength (V/m)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Flux(
-      (long) 165L,
+      (long) 166L,
       (int) 24,
       (String) "electric flux (C)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_FluxDensity(
-      (long) 166L,
+      (long) 167L,
       (int) 25,
       (String) "electric flux density (C/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Polarization(
-      (long) 167L,
+      (long) 168L,
       (int) 26,
       (String) "electric polarization (C/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_Potential(
-      (long) 168L,
+      (long) 169L,
       (int) 27,
       (String) "electric potential (V)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electric_PotentialDifference(
-      (long) 169L,
+      (long) 170L,
       (int) 28,
       (String) "electric potential difference (V)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_ElectromagneticMoment(
-      (long) 170L,
+      (long) 171L,
       (int) 29,
       (String) "electromagnetic moment (Am²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Electromotive_Force(
-      (long) 171L,
+      (long) 172L,
       (int) 30,
       (String) "electromotive force (V)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Energy(
-      (long) 172L, (int) 31, (String) "energy (J)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 173L, (int) 31, (String) "energy (J)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Force(
-      (long) 173L, (int) 32, (String) "force (N)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 174L, (int) 32, (String) "force (N)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Frequency(
-      (long) 174L,
+      (long) 175L,
       (int) 33,
       (String) "frequency (Hz)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Angular_Frequency(
-      (long) 175L,
+      (long) 176L,
       (int) 34,
       (String) "angular frequency (rad/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Heat_Capacity(
-      (long) 176L,
+      (long) 177L,
       (int) 35,
       (String) "heat capacity (J/K)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Heat_FlowRate(
-      (long) 177L,
+      (long) 178L,
       (int) 36,
       (String) "heat flow rate (W)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Heat_Quantity(
-      (long) 178L, (int) 37, (String) "heat quantity", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 179L, (int) 37, (String) "heat quantity", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Impedance(
-      (long) 179L, (int) 38, (String) "impedance (Ω)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 180L, (int) 38, (String) "impedance (Ω)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Length(
-      (long) 180L, (int) 39, (String) "length (m)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 181L, (int) 39, (String) "length (m)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Light_Quantity(
-      (long) 181L,
+      (long) 182L,
       (int) 40,
       (String) "light quantity (J)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Luminance(
-      (long) 182L,
+      (long) 183L,
       (int) 41,
       (String) "luminance (cd/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Luminous_Flux(
-      (long) 183L,
+      (long) 184L,
       (int) 42,
       (String) "luminous flux (lm)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Luminous_Intensity(
-      (long) 184L,
+      (long) 185L,
       (int) 43,
       (String) "luminous intensity (cd)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetic_FieldStrength(
-      (long) 185L,
+      (long) 186L,
       (int) 44,
       (String) "magnetic field strength (A/m)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetic_Flux(
-      (long) 186L,
+      (long) 187L,
       (int) 45,
       (String) "magnetic flux (Wb)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetic_FluxDensity(
-      (long) 187L,
+      (long) 188L,
       (int) 46,
       (String) "magnetic flux density (T)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetic_Moment(
-      (long) 188L,
+      (long) 189L,
       (int) 47,
       (String) "magnetic moment (Am²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetic_Polarization(
-      (long) 189L,
+      (long) 190L,
       (int) 48,
       (String) "magnetic polarization (T)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Magnetization(
-      (long) 190L,
+      (long) 191L,
       (int) 49,
       (String) "magnetization (A/m)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_MagnetomotiveForce(
-      (long) 191L,
+      (long) 192L,
       (int) 50,
       (String) "magnetomotive force (A)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Mass(
-      (long) 192L, (int) 51, (String) "mass (kg)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 193L, (int) 51, (String) "mass (kg)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_MassFlux(
-      (long) 193L,
+      (long) 194L,
       (int) 52,
       (String) "mass flux (kg/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Momentum(
-      (long) 194L,
+      (long) 195L,
       (int) 53,
       (String) "momentum (N/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Phase_AngleRad(
-      (long) 195L,
+      (long) 196L,
       (int) 54,
       (String) "phase angle (rad)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Phase_AngleDeg(
-      (long) 196L,
+      (long) 197L,
       (int) 55,
       (String) "phase angle (°)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Power(
-      (long) 197L, (int) 56, (String) "power (W)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 198L, (int) 56, (String) "power (W)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Power_Factor(
-      (long) 198L,
+      (long) 199L,
       (int) 57,
       (String) "power factor (cos Φ)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Pressure(
-      (long) 199L, (int) 58, (String) "pressure (Pa)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 200L, (int) 58, (String) "pressure (Pa)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Reactance(
-      (long) 200L, (int) 59, (String) "reactance (Ω)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 201L, (int) 59, (String) "reactance (Ω)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Resistance(
-      (long) 201L,
+      (long) 202L,
       (int) 60,
       (String) "resistance (Ω)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Resistivity(
-      (long) 202L,
+      (long) 203L,
       (int) 61,
       (String) "resistivity (Ωm)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_SelfInductance(
-      (long) 203L,
+      (long) 204L,
       (int) 62,
       (String) "self inductance (H)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_SolidAngle(
-      (long) 204L,
+      (long) 205L,
       (int) 63,
       (String) "solid angle (sr)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Sound_Intensity(
-      (long) 205L,
+      (long) 206L,
       (int) 64,
       (String) "sound intensity (W/m²)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Speed(
-      (long) 206L, (int) 65, (String) "speed (m/s)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 207L, (int) 65, (String) "speed (m/s)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Stress(
-      (long) 207L, (int) 66, (String) "stress (Pa)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 208L, (int) 66, (String) "stress (Pa)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Surface_Tension(
-      (long) 208L,
+      (long) 209L,
       (int) 67,
       (String) "surface tension (N/m)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Common_Temperature(
-      (long) 209L,
+      (long) 210L,
       (int) 68,
       (String) "temperature (°C)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Absolute_Temperature(
-      (long) 210L,
+      (long) 211L,
       (int) 69,
       (String) "temperature absolute (K)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_TemperatureDifference(
-      (long) 211L,
+      (long) 212L,
       (int) 70,
       (String) "temperature difference (K)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Thermal_Capacity(
-      (long) 212L,
+      (long) 213L,
       (int) 71,
       (String) "thermal capacity (J/K)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Thermal_Conductivity(
-      (long) 213L,
+      (long) 214L,
       (int) 72,
       (String) "thermal conductivity (W/mK)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_ThermoelectricPower(
-      (long) 214L,
+      (long) 215L,
       (int) 73,
       (String) "thermoelectric power (V/K)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Time(
-      (long) 215L, (int) 74, (String) "time (s)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 216L, (int) 74, (String) "time (s)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Torque(
-      (long) 216L, (int) 75, (String) "torque (Nm)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 217L, (int) 75, (String) "torque (Nm)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Volume(
-      (long) 217L, (int) 76, (String) "volume (m³)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 218L, (int) 76, (String) "volume (m³)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Volume_Flux(
-      (long) 218L,
+      (long) 219L,
       (int) 77,
       (String) "volume flux (m³/s)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Weight(
-      (long) 219L, (int) 78, (String) "weight (N)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 220L, (int) 78, (String) "weight (N)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_Work(
-      (long) 220L, (int) 79, (String) "work (J)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
+      (long) 221L, (int) 79, (String) "work (J)", KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Value_ApparentPower(
-      (long) 221L,
+      (long) 222L,
       (int) 80,
       (String) "apparent power (VA)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Volume_Flux_Meter(
-      (long) 222L,
+      (long) 223L,
       (int) 1200,
       (String) "volume flux for meters (m³/h)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Volume_Flux_ls(
-      (long) 223L,
+      (long) 224L,
       (int) 1201,
       (String) "volume flux for meters (1/ls)",
       KnxDatapointMainType.DPT_4_BYTE_FLOAT_VALUE),
   DPT_Access_Data(
-      (long) 224L, (int) 0, (String) "entrance access", KnxDatapointMainType.DPT_ENTRANCE_ACCESS),
+      (long) 225L, (int) 0, (String) "entrance access", KnxDatapointMainType.DPT_ENTRANCE_ACCESS),
   DPT_String_ASCII(
-      (long) 225L,
+      (long) 226L,
       (int) 0,
       (String) "Character String (ASCII)",
       KnxDatapointMainType.DPT_CHARACTER_STRING),
   DPT_String_8859_1(
-      (long) 226L,
+      (long) 227L,
       (int) 1,
       (String) "Character String (ISO 8859-1)",
       KnxDatapointMainType.DPT_CHARACTER_STRING),
   DPT_SceneNumber(
-      (long) 227L, (int) 1, (String) "scene number", KnxDatapointMainType.DPT_SCENE_NUMBER),
+      (long) 228L, (int) 1, (String) "scene number", KnxDatapointMainType.DPT_SCENE_NUMBER),
   DPT_SceneControl(
-      (long) 228L, (int) 1, (String) "scene control", KnxDatapointMainType.DPT_SCENE_CONTROL),
-  DPT_DateTime((long) 229L, (int) 1, (String) "date time", KnxDatapointMainType.DPT_DATE_TIME),
-  DPT_SCLOMode((long) 230L, (int) 1, (String) "SCLO mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_BuildingMode((long) 231L, (int) 2, (String) "building mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_OccMode((long) 232L, (int) 3, (String) "occupied", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_Priority((long) 233L, (int) 4, (String) "priority", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 229L, (int) 1, (String) "scene control", KnxDatapointMainType.DPT_SCENE_CONTROL),
+  DPT_DateTime((long) 230L, (int) 1, (String) "date time", KnxDatapointMainType.DPT_DATE_TIME),
+  DPT_SCLOMode((long) 231L, (int) 1, (String) "SCLO mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_BuildingMode((long) 232L, (int) 2, (String) "building mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_OccMode((long) 233L, (int) 3, (String) "occupied", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_Priority((long) 234L, (int) 4, (String) "priority", KnxDatapointMainType.DPT_1_BYTE),
   DPT_LightApplicationMode(
-      (long) 234L, (int) 5, (String) "light application mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 235L, (int) 5, (String) "light application mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_ApplicationArea(
-      (long) 235L, (int) 6, (String) "light application area", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_AlarmClassType((long) 236L, (int) 7, (String) "alarm class", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_PSUMode((long) 237L, (int) 8, (String) "PSU mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 236L, (int) 6, (String) "light application area", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_AlarmClassType((long) 237L, (int) 7, (String) "alarm class", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_PSUMode((long) 238L, (int) 8, (String) "PSU mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_ErrorClass_System(
-      (long) 238L, (int) 11, (String) "system error class", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 239L, (int) 11, (String) "system error class", KnxDatapointMainType.DPT_1_BYTE),
   DPT_ErrorClass_HVAC(
-      (long) 239L, (int) 12, (String) "HVAC error class", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_Time_Delay((long) 240L, (int) 13, (String) "time delay", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 240L, (int) 12, (String) "HVAC error class", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_Time_Delay((long) 241L, (int) 13, (String) "time delay", KnxDatapointMainType.DPT_1_BYTE),
   DPT_Beaufort_Wind_Force_Scale(
-      (long) 241L, (int) 14, (String) "wind force scale (0..12)", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_SensorSelect((long) 242L, (int) 17, (String) "sensor mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 242L, (int) 14, (String) "wind force scale (0..12)", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_SensorSelect((long) 243L, (int) 17, (String) "sensor mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_ActuatorConnectType(
-      (long) 243L, (int) 20, (String) "actuator connect type", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_Cloud_Cover((long) 244L, (int) 21, (String) "cloud cover", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 244L, (int) 20, (String) "actuator connect type", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_Cloud_Cover((long) 245L, (int) 21, (String) "cloud cover", KnxDatapointMainType.DPT_1_BYTE),
   DPT_PowerReturnMode(
-      (long) 245L, (int) 22, (String) "power return mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_FuelType((long) 246L, (int) 100, (String) "fuel type", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_BurnerType((long) 247L, (int) 101, (String) "burner type", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_HVACMode((long) 248L, (int) 102, (String) "HVAC mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_DHWMode((long) 249L, (int) 103, (String) "DHW mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 246L, (int) 22, (String) "power return mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_FuelType((long) 247L, (int) 100, (String) "fuel type", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_BurnerType((long) 248L, (int) 101, (String) "burner type", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_HVACMode((long) 249L, (int) 102, (String) "HVAC mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_DHWMode((long) 250L, (int) 103, (String) "DHW mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_LoadPriority(
-      (long) 250L, (int) 104, (String) "load priority", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 251L, (int) 104, (String) "load priority", KnxDatapointMainType.DPT_1_BYTE),
   DPT_HVACContrMode(
-      (long) 251L, (int) 105, (String) "HVAC control mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 252L, (int) 105, (String) "HVAC control mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_HVACEmergMode(
-      (long) 252L, (int) 106, (String) "HVAC emergency mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 253L, (int) 106, (String) "HVAC emergency mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_ChangeoverMode(
-      (long) 253L, (int) 107, (String) "changeover mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_ValveMode((long) 254L, (int) 108, (String) "valve mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_DamperMode((long) 255L, (int) 109, (String) "damper mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_HeaterMode((long) 256L, (int) 110, (String) "heater mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_FanMode((long) 257L, (int) 111, (String) "fan mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 254L, (int) 107, (String) "changeover mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_ValveMode((long) 255L, (int) 108, (String) "valve mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_DamperMode((long) 256L, (int) 109, (String) "damper mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_HeaterMode((long) 257L, (int) 110, (String) "heater mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_FanMode((long) 258L, (int) 111, (String) "fan mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_MasterSlaveMode(
-      (long) 258L, (int) 112, (String) "master/slave mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 259L, (int) 112, (String) "master/slave mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_StatusRoomSetp(
-      (long) 259L, (int) 113, (String) "status room setpoint", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 260L, (int) 113, (String) "status room setpoint", KnxDatapointMainType.DPT_1_BYTE),
   DPT_Metering_DeviceType(
-      (long) 260L, (int) 114, (String) "metering device type", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 261L, (int) 114, (String) "metering device type", KnxDatapointMainType.DPT_1_BYTE),
   DPT_HumDehumMode(
-      (long) 261L, (int) 115, (String) "hum dehum mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 262L, (int) 115, (String) "hum dehum mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_EnableHCStage(
-      (long) 262L, (int) 116, (String) "enable H/C stage", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_ADAType((long) 263L, (int) 120, (String) "ADA type", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_BackupMode((long) 264L, (int) 121, (String) "backup mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 263L, (int) 116, (String) "enable H/C stage", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_ADAType((long) 264L, (int) 120, (String) "ADA type", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_BackupMode((long) 265L, (int) 121, (String) "backup mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_StartSynchronization(
-      (long) 265L,
+      (long) 266L,
       (int) 122,
       (String) "start syncronization type",
       KnxDatapointMainType.DPT_1_BYTE),
   DPT_Behaviour_Lock_Unlock(
-      (long) 266L, (int) 600, (String) "behavior lock/unlock", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 267L, (int) 600, (String) "behavior lock/unlock", KnxDatapointMainType.DPT_1_BYTE),
   DPT_Behaviour_Bus_Power_Up_Down(
-      (long) 267L,
+      (long) 268L,
       (int) 601,
       (String) "behavior bus power up/down",
       KnxDatapointMainType.DPT_1_BYTE),
   DPT_DALI_Fade_Time(
-      (long) 268L, (int) 602, (String) "dali fade time", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_BlinkingMode((long) 269L, (int) 603, (String) "blink mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 269L, (int) 602, (String) "dali fade time", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_BlinkingMode((long) 270L, (int) 603, (String) "blink mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_LightControlMode(
-      (long) 270L, (int) 604, (String) "light control mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 271L, (int) 604, (String) "light control mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_SwitchPBModel(
-      (long) 271L, (int) 605, (String) "PB switch mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_PBAction((long) 272L, (int) 606, (String) "PB action mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_DimmPBModel((long) 273L, (int) 607, (String) "PB dimm mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 272L, (int) 605, (String) "PB switch mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_PBAction((long) 273L, (int) 606, (String) "PB action mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_DimmPBModel((long) 274L, (int) 607, (String) "PB dimm mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_SwitchOnMode(
-      (long) 274L, (int) 608, (String) "switch on mode", KnxDatapointMainType.DPT_1_BYTE),
-  DPT_LoadTypeSet((long) 275L, (int) 609, (String) "load type", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 275L, (int) 608, (String) "switch on mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_LoadTypeSet((long) 276L, (int) 609, (String) "load type", KnxDatapointMainType.DPT_1_BYTE),
   DPT_LoadTypeDetected(
-      (long) 276L, (int) 610, (String) "load type detection", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 277L, (int) 610, (String) "load type detection", KnxDatapointMainType.DPT_1_BYTE),
   DPT_Converter_Test_Control(
-      (long) 277L, (int) 611, (String) "converter test control", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 278L, (int) 611, (String) "converter test control", KnxDatapointMainType.DPT_1_BYTE),
   DPT_SABExcept_Behaviour(
-      (long) 278L, (int) 801, (String) "SAB except behavior", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 279L, (int) 801, (String) "SAB except behavior", KnxDatapointMainType.DPT_1_BYTE),
   DPT_SABBehaviour_Lock_Unlock(
-      (long) 279L,
+      (long) 280L,
       (int) 802,
       (String) "SAB behavior on lock/unlock",
       KnxDatapointMainType.DPT_1_BYTE),
-  DPT_SSSBMode((long) 280L, (int) 803, (String) "SSSB mode", KnxDatapointMainType.DPT_1_BYTE),
+  DPT_SSSBMode((long) 281L, (int) 803, (String) "SSSB mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_BlindsControlMode(
-      (long) 281L, (int) 804, (String) "blinds control mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 282L, (int) 804, (String) "blinds control mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_CommMode(
-      (long) 282L, (int) 1000, (String) "communication mode", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 283L, (int) 1000, (String) "communication mode", KnxDatapointMainType.DPT_1_BYTE),
   DPT_AddInfoTypes(
-      (long) 283L,
+      (long) 284L,
       (int) 1001,
       (String) "additional information type",
       KnxDatapointMainType.DPT_1_BYTE),
   DPT_RF_ModeSelect(
-      (long) 284L, (int) 1002, (String) "RF mode selection", KnxDatapointMainType.DPT_1_BYTE),
+      (long) 285L, (int) 1002, (String) "RF mode selection", KnxDatapointMainType.DPT_1_BYTE),
   DPT_RF_FilterSelect(
-      (long) 285L,
+      (long) 286L,
       (int) 1003,
       (String) "RF filter mode selection",
       KnxDatapointMainType.DPT_1_BYTE),
   DPT_StatusGen(
-      (long) 286L, (int) 1, (String) "general status", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 287L, (int) 1, (String) "general status", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_Device_Control(
-      (long) 287L, (int) 2, (String) "device control", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 288L, (int) 2, (String) "device control", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_ForceSign(
-      (long) 288L, (int) 100, (String) "forcing signal", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 289L, (int) 100, (String) "forcing signal", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_ForceSignCool(
-      (long) 289L, (int) 101, (String) "forcing signal cool", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 290L, (int) 101, (String) "forcing signal cool", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_StatusRHC(
-      (long) 290L,
+      (long) 291L,
       (int) 102,
       (String) "room heating controller status",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_StatusSDHWC(
-      (long) 291L,
+      (long) 292L,
       (int) 103,
       (String) "solar DHW controller status",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_FuelTypeSet(
-      (long) 292L, (int) 104, (String) "fuel type set", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 293L, (int) 104, (String) "fuel type set", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_StatusRCC(
-      (long) 293L,
+      (long) 294L,
       (int) 105,
       (String) "room cooling controller status",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_StatusAHU(
-      (long) 294L,
+      (long) 295L,
       (int) 106,
       (String) "ventilation controller status",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_CombinedStatus_RTSM(
-      (long) 295L, (int) 107, (String) "combined status RTSM", KnxDatapointMainType.DPT_8_BIT_SET),
+      (long) 296L, (int) 107, (String) "combined status RTSM", KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_LightActuatorErrorInfo(
-      (long) 296L,
+      (long) 297L,
       (int) 601,
       (String) "lighting actuator error information",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_RF_ModeInfo(
-      (long) 297L,
+      (long) 298L,
       (int) 1000,
       (String) "RF communication mode info",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_RF_FilterInfo(
-      (long) 298L,
+      (long) 299L,
       (int) 1001,
       (String) "cEMI server supported RF filtering modes",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_Channel_Activation_8(
-      (long) 299L,
+      (long) 300L,
       (int) 1010,
       (String) "channel activation for 8 channels",
       KnxDatapointMainType.DPT_8_BIT_SET),
   DPT_StatusDHWC(
-      (long) 300L,
+      (long) 301L,
       (int) 100,
       (String) "DHW controller status",
       KnxDatapointMainType.DPT_16_BIT_SET),
   DPT_StatusRHCC(
-      (long) 301L, (int) 101, (String) "RHCC status", KnxDatapointMainType.DPT_16_BIT_SET),
+      (long) 302L, (int) 101, (String) "RHCC status", KnxDatapointMainType.DPT_16_BIT_SET),
   DPT_CombinedStatus_HVA(
-      (long) 302L, (int) 102, (String) "combined status HVA", KnxDatapointMainType.DPT_16_BIT_SET),
+      (long) 303L, (int) 102, (String) "combined status HVA", KnxDatapointMainType.DPT_16_BIT_SET),
   DPT_CombinedStatus_RTC(
-      (long) 303L, (int) 103, (String) "combined status RTC", KnxDatapointMainType.DPT_16_BIT_SET),
-  DPT_Media((long) 304L, (int) 1000, (String) "media", KnxDatapointMainType.DPT_16_BIT_SET),
+      (long) 304L, (int) 103, (String) "combined status RTC", KnxDatapointMainType.DPT_16_BIT_SET),
+  DPT_Media((long) 305L, (int) 1000, (String) "media", KnxDatapointMainType.DPT_16_BIT_SET),
   DPT_Channel_Activation_16(
-      (long) 305L,
+      (long) 306L,
       (int) 1010,
       (String) "channel activation for 16 channels",
       KnxDatapointMainType.DPT_16_BIT_SET),
   DPT_OnOffAction(
-      (long) 306L, (int) 1, (String) "on/off action", KnxDatapointMainType.DPT_2_BIT_SET),
+      (long) 307L, (int) 1, (String) "on/off action", KnxDatapointMainType.DPT_2_BIT_SET),
   DPT_Alarm_Reaction(
-      (long) 307L, (int) 2, (String) "alarm reaction", KnxDatapointMainType.DPT_2_BIT_SET),
+      (long) 308L, (int) 2, (String) "alarm reaction", KnxDatapointMainType.DPT_2_BIT_SET),
   DPT_UpDown_Action(
-      (long) 308L, (int) 3, (String) "up/down action", KnxDatapointMainType.DPT_2_BIT_SET),
+      (long) 309L, (int) 3, (String) "up/down action", KnxDatapointMainType.DPT_2_BIT_SET),
   DPT_HVAC_PB_Action(
-      (long) 309L,
+      (long) 310L,
       (int) 102,
       (String) "HVAC push button action",
       KnxDatapointMainType.DPT_2_BIT_SET),
   DPT_DoubleNibble(
-      (long) 310L,
+      (long) 311L,
       (int) 1000,
       (String) "busy/nak repetitions",
       KnxDatapointMainType.DPT_2_NIBBLE_SET),
   DPT_SceneInfo(
-      (long) 311L, (int) 1, (String) "scene information", KnxDatapointMainType.DPT_8_BIT_SET_2),
+      (long) 312L, (int) 1, (String) "scene information", KnxDatapointMainType.DPT_8_BIT_SET_2),
   DPT_CombinedInfoOnOff(
-      (long) 312L,
+      (long) 313L,
       (int) 1,
       (String) "bit-combined info on/off",
       KnxDatapointMainType.DPT_32_BIT_SET),
   DPT_ActiveEnergy_V64(
-      (long) 313L,
+      (long) 314L,
       (int) 10,
       (String) "active energy (Wh)",
       KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
   DPT_ApparantEnergy_V64(
-      (long) 314L,
+      (long) 315L,
       (int) 11,
       (String) "apparant energy (VAh)",
       KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
   DPT_ReactiveEnergy_V64(
-      (long) 315L,
+      (long) 316L,
       (int) 12,
       (String) "reactive energy (VARh)",
       KnxDatapointMainType.DPT_ELECTRICAL_ENERGY),
   DPT_Channel_Activation_24(
-      (long) 316L,
+      (long) 317L,
       (int) 1010,
       (String) "activation state 0..23",
       KnxDatapointMainType.DPT_24_TIMES_CHANNEL_ACTIVATION),
   DPT_HVACModeNext(
-      (long) 317L,
+      (long) 318L,
       (int) 100,
       (String) "time delay & HVAC mode",
       KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
   DPT_DHWModeNext(
-      (long) 318L,
+      (long) 319L,
       (int) 102,
       (String) "time delay & DHW mode",
       KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
   DPT_OccModeNext(
-      (long) 319L,
+      (long) 320L,
       (int) 104,
       (String) "time delay & occupancy mode",
       KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
   DPT_BuildingModeNext(
-      (long) 320L,
+      (long) 321L,
       (int) 105,
       (String) "time delay & building mode",
       KnxDatapointMainType.DPT_16_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
   DPT_StatusLightingActuator(
-      (long) 321L,
+      (long) 322L,
       (int) 600,
       (String) "Status Lighting Actuator",
       KnxDatapointMainType.DPT_8_BIT_UNSIGNED_VALUE_AND_8_BIT_ENUM),
   DPT_Version(
-      (long) 322L,
+      (long) 323L,
       (int) 1,
       (String) "DPT version",
       KnxDatapointMainType.DPT_DATAPOINT_TYPE_VERSION),
-  DPT_AlarmInfo((long) 323L, (int) 1, (String) "alarm info", KnxDatapointMainType.DPT_ALARM_INFO),
+  DPT_AlarmInfo((long) 324L, (int) 1, (String) "alarm info", KnxDatapointMainType.DPT_ALARM_INFO),
   DPT_TempRoomSetpSetF16_3(
-      (long) 324L,
+      (long) 325L,
       (int) 100,
       (String) "room temperature setpoint",
       KnxDatapointMainType.DPT_3X_2_BYTE_FLOAT_VALUE),
   DPT_TempRoomSetpSetShiftF16_3(
-      (long) 325L,
+      (long) 326L,
       (int) 101,
       (String) "room temperature setpoint shift",
       KnxDatapointMainType.DPT_3X_2_BYTE_FLOAT_VALUE),
   DPT_Scaling_Speed(
-      (long) 326L, (int) 1, (String) "scaling speed", KnxDatapointMainType.DPT_SCALING_SPEED),
+      (long) 327L, (int) 1, (String) "scaling speed", KnxDatapointMainType.DPT_SCALING_SPEED),
   DPT_Scaling_Step_Time(
-      (long) 327L, (int) 2, (String) "scaling step time", KnxDatapointMainType.DPT_SCALING_SPEED),
+      (long) 328L, (int) 2, (String) "scaling step time", KnxDatapointMainType.DPT_SCALING_SPEED),
   DPT_MeteringValue(
-      (long) 328L,
+      (long) 329L,
       (int) 1,
       (String) "metering value (value,encoding,cmd)",
       KnxDatapointMainType.DPT_4_1_1_BYTE_COMBINED_INFORMATION),
   DPT_MBus_Address(
-      (long) 329L, (int) 1000, (String) "MBus address", KnxDatapointMainType.DPT_MBUS_ADDRESS),
+      (long) 330L, (int) 1000, (String) "MBus address", KnxDatapointMainType.DPT_MBUS_ADDRESS),
   DPT_Colour_RGB(
-      (long) 330L,
+      (long) 331L,
       (int) 600,
       (String) "RGB value 3x(0..255)",
       KnxDatapointMainType.DPT_3_BYTE_COLOUR_RGB),
   DPT_LanguageCodeAlpha2_ASCII(
-      (long) 331L,
+      (long) 332L,
       (int) 1,
       (String) "language code (ASCII)",
       KnxDatapointMainType.DPT_LANGUAGE_CODE_ISO_639_1),
   DPT_Tariff_ActiveEnergy(
-      (long) 332L,
+      (long) 333L,
       (int) 1,
       (String) "electrical energy with tariff",
       KnxDatapointMainType.DPT_SIGNED_VALUE_WITH_CLASSIFICATION_AND_VALIDITY),
   DPT_Prioritised_Mode_Control(
-      (long) 333L,
+      (long) 334L,
       (int) 1,
       (String) "priority control",
       KnxDatapointMainType.DPT_PRIORITISED_MODE_CONTROL),
   DPT_DALI_Control_Gear_Diagnostic(
-      (long) 334L,
+      (long) 335L,
       (int) 600,
       (String) "diagnostic value",
       KnxDatapointMainType.DPT_CONFIGURATION_DIAGNOSTICS_16_BIT),
   DPT_DALI_Diagnostics(
-      (long) 335L,
+      (long) 336L,
       (int) 600,
       (String) "diagnostic value",
       KnxDatapointMainType.DPT_CONFIGURATION_DIAGNOSTICS_8_BIT),
   DPT_CombinedPosition(
-      (long) 336L, (int) 800, (String) "combined position", KnxDatapointMainType.DPT_POSITIONS),
+      (long) 337L, (int) 800, (String) "combined position", KnxDatapointMainType.DPT_POSITIONS),
   DPT_StatusSAB(
-      (long) 337L,
+      (long) 338L,
       (int) 800,
       (String) "status sunblind & shutter actuator",
       KnxDatapointMainType.DPT_STATUS_32_BIT),
   DPT_Colour_xyY(
-      (long) 338L, (int) 600, (String) "colour xyY", KnxDatapointMainType.DPT_STATUS_48_BIT),
+      (long) 339L, (int) 600, (String) "colour xyY", KnxDatapointMainType.DPT_STATUS_48_BIT),
   DPT_Converter_Status(
-      (long) 339L,
+      (long) 340L,
       (int) 600,
       (String) "DALI converter status",
       KnxDatapointMainType.DPT_CONVERTER_STATUS),
   DPT_Converter_Test_Result(
-      (long) 340L,
+      (long) 341L,
       (int) 600,
       (String) "DALI converter test result",
       KnxDatapointMainType.DPT_CONVERTER_TEST_RESULT),
   DPT_Battery_Info(
-      (long) 341L,
+      (long) 342L,
       (int) 600,
       (String) "Battery Information",
       KnxDatapointMainType.DPT_BATTERY_INFORMATION),
   DPT_Brightness_Colour_Temperature_Transition(
-      (long) 342L,
+      (long) 343L,
       (int) 600,
       (String) "brightness colour temperature transition",
       KnxDatapointMainType.DPT_BRIGHTNESS_COLOUR_TEMPERATURE_TRANSITION),
   DPT_Brightness_Colour_Temperature_Control(
-      (long) 343L,
+      (long) 344L,
       (int) 600,
       (String) "brightness colour temperature control",
       KnxDatapointMainType.DPT_STATUS_24_BIT),
   DPT_Colour_RGBW(
-      (long) 344L,
+      (long) 345L,
       (int) 600,
       (String) "RGBW value 4x(0..100%)",
       KnxDatapointMainType.DPT_COLOUR_RGBW),
   DPT_Relative_Control_RGBW(
-      (long) 345L,
+      (long) 346L,
       (int) 600,
       (String) "RGBW relative control",
       KnxDatapointMainType.DPT_RELATIVE_CONTROL_RGBW),
   DPT_Relative_Control_RGB(
-      (long) 346L,
+      (long) 347L,
       (int) 600,
       (String) "RGB relative control",
       KnxDatapointMainType.DPT_RELATIVE_CONTROL_RGB),
   DPT_GeographicalLocation(
-      (long) 347L,
+      (long) 348L,
       (int) 1,
       (String) "geographical location (longitude and latitude) expressed in degrees",
       KnxDatapointMainType.DPT_F32F32),
   DPT_TempRoomSetpSetF16_4(
-      (long) 348L,
+      (long) 349L,
       (int) 100,
       (String) "Temperature setpoint setting for 4 HVAC Modes",
       KnxDatapointMainType.DPT_F16F16F16F16),
   DPT_TempRoomSetpSetShiftF16_4(
-      (long) 349L,
+      (long) 350L,
       (int) 101,
       (String) "Temperature setpoint shift setting for 4 HVAC Modes",
       KnxDatapointMainType.DPT_F16F16F16F16);
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index a0e26abccd..9b103c629c 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@ -681,8 +681,7 @@ public enum KnxManufacturer {
   M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_(
       (int) 593, (int) 651, (String) "Shanghai Lewin Intelligent Technology Co.,Ltd."),
   M_KG_POWER((int) 594, (int) 652, (String) "KG-POWER"),
-  M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD(
-      (int) 595, (int) 653, (String) "Zhejiang Moorgen Intelligent Technology Co., Ltd"),
+  M_ZHEJIANG_MOORGEN_GROUP_CO__LTD((int) 595, (int) 653, (String) "Zhejiang Moorgen Group Co.,Ltd"),
   M_GUANGDONG_KANWAY((int) 596, (int) 654, (String) "Guangdong Kanway"),
   M_RAMIREZ_ENGINEERING_GMBH((int) 597, (int) 656, (String) "RAMIREZ Engineering GmbH"),
   M_ZHONGSHAN_TAIYANG_IMPANDEXP__CO_LTD(
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java
index ecaaf6efdf..67145901ab 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java
@@ -25,8 +25,8 @@ import org.apache.hop.metadata.api.IHopMetadata;
  * @author cgarcia
  */
 @HopMetadata(
-    key = "Xplc4xconnection",
-    name = "PLC4x Connection",
+    key = "Xplc4xaction",
+    name = "PLC4x Action",
     description = "A shared PLC4x connection to a PLC",
     image = "plc4x_toddy.svg",
     documentationUrl = "/metadata-types/neo4j/neo4j-connection.html")
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
index 752890f7f2..c2aac428f5 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
@@ -31,25 +31,32 @@ import org.apache.hop.workflow.action.IAction;
 
 
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.exception.HopException;
 import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.w3c.dom.Node;
 
 
 @Action(
     id = "CHECK_PLC4X_CONNECTIONS",
-    name = "i18n::Plc4xAction.Name",
-    description = "i18n::Plc4xAction.Description",
+    name = "i18n::Plc4xActionConnections.Name",
+    description = "i18n::Plc4xActionConnections.Description",
     image = "plc4x_toddy.svg",
     categoryDescription = "i18n:org.apache.hop.workflow:ActionCategory.Category.Conditions",
-    keywords = "i18n::Plc4xAction.keyword",
-    documentationUrl = "/workflow/actions/checkdbconnection.html")
+    keywords = "i18n::Plc4xActionConnections.keyword",
+    documentationUrl = "/workflow/actions/plc4x.html")
 public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAction {
   private static final Class<?> PKG = Plc4xCheckConnections.class; // Needed by Translator
 
   
   private Plc4xConnection[] connections;  
+  private boolean connected = false;
+  private PlcConnection plcconn = null;
   
   protected static final String[] unitTimeDesc =
       new String[] {
@@ -241,17 +248,41 @@ public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAct
   }
 
   /**
-   * Execute this action and return the result. In this case it means, just set the result boolean in the Result
+   * Execute this action and return the result. 
+   * In this case it means, just set the result boolean in the Result
    * class.
-   *
-   * @param result The result of the previous execution
+   * Check all conections metadata from the dialog.
+   * @param prevResult The result of the previous execution
    * @return The Result of the execution.
    */
   @Override
-  public Result execute( Result result, int nr ) {
-      result.setResult(true);
-      System.out.println("NR: " + nr);
-
+  public Result execute( Result prevResult, int nr ) {
+    Result result = prevResult;
+    result.setNrErrors(0);
+    connected = true;
+    for (Plc4xConnection connmeta:connections) {
+        try {
+            plcconn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(01)
+            if (!plcconn.isConnected()) {
+                logBasic("Cant connect to: " + connmeta.getUrl());
+                connected = false;
+                plcconn = null;
+                //break;
+            }
+            plcconn.close();
+            plcconn = null;
+        } catch (Exception ex) {
+            Logger.getLogger(Plc4xCheckConnections.class.getName()).log(Level.SEVERE, null, ex);
+            connected = false;
+            plcconn = null;
+            //break;            
+        } finally {
+            
+        }
+          
+    }
+    
+    result.setResult(connected);
     return result;
   }
 
@@ -268,4 +299,23 @@ public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAct
   public void check( List<ICheckResult> remarks, WorkflowMeta workflowMeta, IVariables variables,
                      IHopMetadataProvider metadataProvider ) {
   }
+
+  @Override
+  public boolean resetErrorsBeforeExecution() {
+    return false;
+  }
+
+    @Override
+    public boolean isEvaluation() {
+        return true;
+    }
+
+    @Override
+    public boolean isUnconditional() {
+        return false;
+    }
+  
+  
+  
+  
 }
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnections.java
similarity index 93%
copy from plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
copy to plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnections.java
index 752890f7f2..d4f3f5e253 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnections.java
@@ -38,15 +38,15 @@ import org.w3c.dom.Node;
 
 
 @Action(
-    id = "CHECK_PLC4X_CONNECTIONS",
-    name = "i18n::Plc4xAction.Name",
-    description = "i18n::Plc4xAction.Description",
+    id = "CHECK_PLC4X_DISCONNECTIONS",
+    name = "i18n::Plc4xActionDisConnections.Name",
+    description = "i18n::Plc4xActionDisConnections.Description",
     image = "plc4x_toddy.svg",
     categoryDescription = "i18n:org.apache.hop.workflow:ActionCategory.Category.Conditions",
-    keywords = "i18n::Plc4xAction.keyword",
+    keywords = "i18n::Plc4xActionDisConnections.keyword",
     documentationUrl = "/workflow/actions/checkdbconnection.html")
-public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAction {
-  private static final Class<?> PKG = Plc4xCheckConnections.class; // Needed by Translator
+public class Plc4xCheckDisConnections extends ActionBase implements Cloneable, IAction {
+  private static final Class<?> PKG = Plc4xCheckDisConnections.class; // Needed by Translator
 
   
   private Plc4xConnection[] connections;  
@@ -72,19 +72,19 @@ public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAct
   private long timeStart;
   private long now;  
      
-  public Plc4xCheckConnections( String name) {
+  public Plc4xCheckDisConnections( String name) {
     super(name, "");
     //connections = null;
     waitfors = null;
     waittimes = null;
   }
 
-  public Plc4xCheckConnections() {
+  public Plc4xCheckDisConnections() {
     this( "");
   }
   
   public Object clone() {
-    Plc4xCheckConnections c = (Plc4xCheckConnections) super.clone();
+    Plc4xCheckDisConnections c = (Plc4xCheckDisConnections) super.clone();
     return c;
   }
 
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnectionsDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnectionsDialog.java
new file mode 100644
index 0000000000..7533638799
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckDisConnectionsDialog.java
@@ -0,0 +1,371 @@
+/*
+ * 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.hop.actions;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.gui.WindowProperty;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.workflow.action.ActionDialog;
+import org.apache.hop.ui.workflow.dialog.WorkflowDialog;
+import org.apache.hop.workflow.WorkflowMeta;
+import org.apache.hop.workflow.action.IAction;
+import org.apache.hop.workflow.action.IActionDialog;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.*;
+
+import org.apache.hop.metadata.api.IHopMetadata;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.metadata.MetadataManager;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+
+
+public class Plc4xCheckDisConnectionsDialog extends ActionDialog implements IActionDialog {
+  private static final Class<?> PKG = Plc4xCheckDisConnectionsDialog.class; // Needed by Translator
+
+  private Shell shell;
+
+  private Text wName;
+
+  private Plc4xCheckDisConnections action;
+
+  private boolean changed;
+
+  private TableView wFields;
+  
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+
+  public Plc4xCheckDisConnectionsDialog(Shell parent, IAction action, WorkflowMeta workflowMeta, IVariables variables) {
+    super( parent, workflowMeta, variables );
+    this.action = (Plc4xCheckDisConnections) action;
+    if ( this.action.getName() == null ) {       
+      this.action.setName( BaseMessages.getString( PKG, "Plc4xCheckConnections.Label" ) );
+    }
+  }
+
+  @Override
+  public IAction open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.MIN | SWT.MAX | SWT.RESIZE);
+    props.setLook(shell);
+    WorkflowDialog.setShellImage(shell, action);
+
+    ModifyListener lsMod = (ModifyEvent e) -> action.setChanged();
+    changed = action.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4xCheckonnections.Title"));
+
+    int middle = props.getMiddlePct();
+    int margin = Const.MARGIN;
+
+    // Buttons at the bottom
+    //
+    Button wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, (Event e) -> ok());
+    Button wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, (Event e) -> cancel());
+    BaseTransformDialog.positionBottomButtons(shell, new Button[] {wOk, wCancel}, margin, null);
+
+    // Filename line
+    Label wlName = new Label(shell, SWT.RIGHT);
+    wlName.setText(BaseMessages.getString(PKG, "Plc4xCheckConnections.Name.Label"));
+    props.setLook(wlName);
+    FormData fdlName = new FormData();
+    fdlName.left = new FormAttachment(0, 0);
+    fdlName.right = new FormAttachment(middle, -margin);
+    fdlName.top = new FormAttachment(0, margin);
+    wlName.setLayoutData(fdlName);
+    wName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wName);
+    wName.addModifyListener(lsMod);
+    FormData fdName = new FormData();
+    fdName.left = new FormAttachment(middle, 0);
+    fdName.top = new FormAttachment(0, margin);
+    fdName.right = new FormAttachment(100, 0);
+    wName.setLayoutData(fdName);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    // fdlFields.right= new FormAttachment(middle, -margin);
+    fdlFields.top = new FormAttachment(wName, 2 * margin);
+    wlFields.setLayoutData(fdlFields);
+    
+
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4xCheckConnections.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4xCheckConnections.Connection.Tooltip"));
+    props.setLook(wConnection);
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    //fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);
+
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+
+    // Buttons to the right of the screen...
+    Button wbGetConnections = new Button(shell, SWT.PUSH | SWT.CENTER);
+    props.setLook(wbGetConnections);
+    wbGetConnections.setText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.GetConnections"));
+    wbGetConnections.setToolTipText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.GetConnections.Tooltip"));
+    FormData fdbGetConnections = new FormData();
+    fdbGetConnections.right = new FormAttachment(100, -margin);
+    fdbGetConnections.top = new FormAttachment(wlFields, margin);
+    wbGetConnections.setLayoutData(fdbGetConnections);
+
+    // Buttons to the right of the screen...
+    Button wbdSourceFileFolder = new Button(shell, SWT.PUSH | SWT.CENTER);
+    props.setLook(wbdSourceFileFolder);
+    wbdSourceFileFolder.setText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.DeleteEntry"));
+    wbdSourceFileFolder.setToolTipText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.DeleteSourceFileButton.Label"));
+    FormData fdbdSourceFileFolder = new FormData();
+    fdbdSourceFileFolder.right = new FormAttachment(100, -margin);
+    fdbdSourceFileFolder.top = new FormAttachment(wbGetConnections, margin);
+    wbdSourceFileFolder.setLayoutData(fdbdSourceFileFolder);
+
+    int rows =
+        action.getConnections() == null
+            ? 1
+            : (action.getConnections().length == 0 ? 0 : action.getConnections().length);
+
+    final int FieldsRows = rows;
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Argument.Label"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              this.getWorkflowMeta().getDatabaseNames(),
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.WaitFor.Label"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.WaitForTime.Label"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              Plc4xCheckConnections.unitTimeDesc,
+              false),
+        };
+
+    colinf[0].setToolTip(BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Column"));
+    colinf[1].setUsingVariables(true);
+    colinf[1].setToolTip(BaseMessages.getString(PKG, "Plc4xCheckConnections.WaitFor.ToolTip"));
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            FieldsRows,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(wlFields, margin);
+    fdFields.right = new FormAttachment(wbGetConnections, -margin);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    // Delete files from the list of files...
+    wbdSourceFileFolder.addListener(
+        SWT.Selection,
+        e -> {
+          int[] idx = wFields.getSelectionIndices();
+          wFields.remove(idx);
+          wFields.removeEmptyRows();
+          wFields.setRowNums();
+        });
+
+    // get connections...
+    wbGetConnections.addListener(SWT.Selection, e -> getConnections());
+
+    getData();
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return action;
+  }
+
+  //  public void addDatabases() {
+  //    connections = workflowMeta.getDatabaseNames();
+  //  }
+
+  public void getConnections() {
+      /*
+    this.workflowMeta.getMetadataProvider().getMetadataClasses().forEach(
+           (c) -> {
+               System.out.println("Name: " + c.getName());
+           });
+    IHopMetadataProvider hmdp = this.workflowMeta.getMetadataProvider();
+      */
+    Class<IHopMetadata> metadataClass = null;
+
+    java.util.List<Plc4xConnection> databases = new ArrayList<>(); //this.workflowMeta.getMetadataProvider().
+      try {
+          metadataClass = metadataProvider.getMetadataClassForKey("plc4x-connection");
+            MetadataManager<IHopMetadata> manager = new MetadataManager<>(variables, metadataProvider, metadataClass, null);          
+            manager.getNames().forEach((s)->{
+              try {
+                  databases.add((Plc4xConnection) manager.loadElement(s));
+              } catch (HopException ex) {
+                  Logger.getLogger(Plc4xCheckDisConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+              }
+            });
+          
+      } catch (Exception ex) {
+          Logger.getLogger(Plc4xCheckDisConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+      }
+      
+     
+    wFields.removeAll();
+
+    for (Plc4xConnection ci : databases) {
+      if (ci != null) {
+        wFields.add(new String[] {ci.getName(), "0", Plc4xCheckDisConnections.unitTimeDesc[0]});
+      }
+    }
+    wFields.removeEmptyRows();
+    wFields.setRowNums();
+    wFields.optWidth(true);
+  }
+
+  public void dispose() {
+    WindowProperty winprop = new WindowProperty(shell);
+    props.setScreen(winprop);
+    shell.dispose();
+  }
+
+  /** Copy information from the meta-data input to the dialog fields. */
+  public void getData() {
+    if (action.getName() != null) {
+      wName.setText(action.getName());
+    }
+
+    if (action.getConnections() != null) {
+      for (int i = 0; i < action.getConnections().length; i++) {
+        TableItem ti = wFields.table.getItem(i);
+        if (action.getConnections()[i] != null) {
+          ti.setText(1, action.getConnections()[i].getName());
+          ti.setText(2, "" + Const.toInt(action.getWaitfors()[i], 0));
+          ti.setText(3, Plc4xCheckDisConnections.getWaitTimeDesc(action.getWaittimes()[i]));
+        }
+      }
+      wFields.setRowNums();
+      wFields.optWidth(true);
+    }
+    wName.selectAll();
+    wName.setFocus();
+  }
+
+  private void cancel() {
+    action.setChanged(changed);
+    action = null;
+    dispose();
+  }
+
+  private void ok() {
+    if (Utils.isEmpty(wName.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setText(BaseMessages.getString(PKG, "System.TransformActionNameMissing.Title"));
+      mb.setMessage(BaseMessages.getString(PKG, "System.ActionNameMissing.Msg"));
+      mb.open();
+      return;
+    }
+    Class<IHopMetadata> metadataClass = null;
+    action.setName(wName.getText());
+
+    int nrItems = wFields.nrNonEmpty();
+    System.out.println("Numero de items: " + nrItems);
+    
+    Plc4xConnection[] connections = new Plc4xConnection[nrItems];
+    String[] waitfors = new String[nrItems];
+    int[] waittimes = new int[nrItems];
+    
+    
+      try {
+          metadataClass = metadataProvider.getMetadataClassForKey("plc4x-connection");
+      } catch (HopException ex) {
+          Logger.getLogger(Plc4xCheckDisConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+      }
+    MetadataManager<IHopMetadata> manager = new MetadataManager<>(variables, metadataProvider, metadataClass, null);        
+
+    for (int i = 0; i < nrItems; i++) {
+        String arg = wFields.getNonEmpty(i).getText(1);
+        Plc4xConnection conn;
+        try {
+            conn = (Plc4xConnection) manager.loadElement(arg);
+            if (conn != null) {
+                connections[i] = conn;
+                waitfors[i] = "" + Const.toInt(wFields.getNonEmpty(i).getText(2), 0);
+                waittimes[i] =
+                    Plc4xCheckDisConnections.getWaitTimeByDesc(wFields.getNonEmpty(i).getText(3));
+          }            
+        } catch (HopException ex) {
+            Logger.getLogger(Plc4xCheckDisConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+    }
+    action.setConnections(connections);
+    action.setWaitfors(waitfors);
+    action.setWaittimes(waittimes);
+
+    dispose();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties
index f13f6255eb..ae7eb85d96 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties
@@ -17,6 +17,15 @@
 #
 #
 #
+Plc4xActionConnections.Name=Plc4x Action Connections
+Plc4xActionConnections.Description=Check Plc4x connections
+Plc4xActionConnections.keyword=Plc4x Connections
+
+Plc4xActionDisConnections.Name=Plc4x Action Disconnections
+Plc4xActionDisConnections.Description=Check Plc4x disconnections
+Plc4xActionDisConnections.keyword=Plc4x Disconnections
+
+
 Plc4xCheckConnections.Name=Check PLC connections
 Plc4xCheckConnections.Description=Check if we can connect to one or several databases.
 Plc4xCheckConnections.ConnectionOK=We can successfully connect to database [{0}] (connection [{1}])
@@ -45,5 +54,5 @@ Plc4xCheckConnections.DeleteEntry=Delete
 Plc4xCheckConnections.GetConnections=Get connections
 Plc4xCheckConnections.GetConnections.Tooltip=Get available connections
 Plc4xCheckConnections.keyword=check,plc,database,connection
-Plc4xCheckConnections.Connection.Label
-Plc4xCheckConnections.Connection.Tooltip
\ No newline at end of file
+Plc4xCheckConnections.Connection.Label=
+Plc4xCheckConnections.Connection.Tooltip=
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml
index c79e513518..984455a9bc 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml
@@ -57,11 +57,42 @@
             <includes>
                 <include>com.github.jinahya:bit-io:jar</include>
                 <include>ch.qos.logback:logback-core</include>
+                
                 <include>io.netty:netty-buffer</include>
                 <include>io.netty:netty-codec:jar</include>
+                <include>io.netty:netty-codec-dns:jar</include>  
+                <include>io.netty:netty-codec-haproxy:jar</include>  
+                <include>io.netty:netty-codec-http:jar</include>
+                <include>io.netty:netty-codec-http2:jar</include>
+                <include>io.netty:netty-codec-memcache:jar</include>
+                <include>io.netty:netty-codec-mqtt:jar</include>
+                <include>io.netty:netty-codec-redis:jar</include>
+                <include>io.netty:netty-codec-smtp:jar</include>
+                <include>io.netty:netty-codec-socks:jar</include>
+                <include>io.netty:netty-codec-stomp:jar</include>
+                <include>io.netty:netty-codec-xml:jar</include>
                 <include>io.netty:netty-common:jar</include>
+                <include>io.netty:netty-handler:jar</include>                
+                <include>io.netty:netty-handler-proxy:jar</include>
+                <include>io.netty:netty-ssl-ocsp:jar</include>                                
                 <include>io.netty:netty-resolver:jar</include>
-                <include>io.netty:netty-transport</include>
+                <include>io.netty:netty-resolver-dns:jar</include>
+                <include>io.netty:netty-resolver-dns-classes-macos:jar</include>
+                <include>io.netty:netty-transport:jar</include>
+                <include>io.netty:netty-transport-classes-kqueue:jar</include>                
+                <include>io.netty:netty-transport-native-unix-common:jar</include>
+                <include>io.netty:netty-transport-rxtx:jar</include>
+                <include>io.netty:netty-transport-sctp:jar</include>
+                <include>io.netty:netty-transport-udt:jar</include>
+                
+                <include>io.vavr:vavr:jar</include>
+                <include>io.vavr:vavr-match:jar</include>  
+                
+                <include>org.apache.plc4x:plc4j-api:jar</include>
+                <include>org.apache.plc4x:plc4j-spi:jar</include>
+                <include>org.apache.plc4x:plc4j-spi:jar</include>
+                <include>org.apache.plc4x:plc4j-transport-tcp:jar</include>
+                <include>org.apache.plc4x:plc4j-driver-s7:jar</include>                                    
             </includes>
         </dependencySet>
         
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml
index 3321a4ce6f..bff52ed295 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml
@@ -48,5 +48,54 @@
                 <include>org.apache.plc4x:plc4x-hop-transform:jar</include>
             </includes>
         </dependencySet>
+        
+
+        <dependencySet>
+            <outputDirectory>lib</outputDirectory>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+            <scope>runtime</scope>
+            <includes>
+                <include>com.github.jinahya:bit-io:jar</include>
+                <include>ch.qos.logback:logback-core</include>
+                
+                <include>io.netty:netty-buffer</include>
+                <include>io.netty:netty-codec:jar</include>
+                <include>io.netty:netty-codec-dns:jar</include>  
+                <include>io.netty:netty-codec-haproxy:jar</include>  
+                <include>io.netty:netty-codec-http:jar</include>
+                <include>io.netty:netty-codec-http2:jar</include>
+                <include>io.netty:netty-codec-memcache:jar</include>
+                <include>io.netty:netty-codec-mqtt:jar</include>
+                <include>io.netty:netty-codec-redis:jar</include>
+                <include>io.netty:netty-codec-smtp:jar</include>
+                <include>io.netty:netty-codec-socks:jar</include>
+                <include>io.netty:netty-codec-stomp:jar</include>
+                <include>io.netty:netty-codec-xml:jar</include>
+                <include>io.netty:netty-common:jar</include>
+                <include>io.netty:netty-handler:jar</include>                
+                <include>io.netty:netty-handler-proxy:jar</include>
+                <include>io.netty:netty-ssl-ocsp:jar</include>                                
+                <include>io.netty:netty-resolver:jar</include>
+                <include>io.netty:netty-resolver-dns:jar</include>
+                <include>io.netty:netty-resolver-dns-classes-macos:jar</include>
+                <include>io.netty:netty-transport:jar</include>
+                <include>io.netty:netty-transport-classes-kqueue:jar</include>                
+                <include>io.netty:netty-transport-native-unix-common:jar</include>
+                <include>io.netty:netty-transport-rxtx:jar</include>
+                <include>io.netty:netty-transport-sctp:jar</include>
+                <include>io.netty:netty-transport-udt:jar</include>
+                
+                <include>io.vavr:vavr:jar</include>
+                <include>io.vavr:vavr-match:jar</include>  
+                
+                <include>org.apache.plc4x:plc4j-api:jar</include>
+                <include>org.apache.plc4x:plc4j-spi:jar</include>
+                <include>org.apache.plc4x:plc4j-spi:jar</include>
+                <include>org.apache.plc4x:plc4j-transport-tcp:jar</include>
+                <include>org.apache.plc4x:plc4j-driver-s7:jar</include>                                    
+            </includes>
+        </dependencySet>        
+        
     </dependencySets>
 </assembly>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml
index 22eccd03ab..84000a4fbe 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml
@@ -68,7 +68,23 @@
                         <dependency>javax.annotation:javax.annotation-api:jar:1.2</dependency>
                     </ignoredDependencies>
                 </configuration>
-            </plugin>             
+            </plugin>  
+            
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <!-- <mainClass>main class</mainClass> -->
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+                       
+                                             
         </plugins>         
     </build>    
     
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml
index e707e0d206..3bd9600ebe 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml
@@ -67,6 +67,7 @@
                         <dependency>xml-apis:xml-apis:jar:1.4.01</dependency>
                         <dependency>org.apache.plc4x:plc4j-spi:jar:${project.version}</dependency>
                         <dependency>com.fasterxml.jackson.core:jackson-annotations:jar:2.14.2</dependency>
+                        <dependency>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.14.2</dependency>                        
                     </ignoredDependencies>
                 </configuration>
             </plugin>             
@@ -139,5 +140,20 @@
             <artifactId>commons-lang3</artifactId>
             <version>3.12.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+            <version>2.14.2</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java
index e87262ec01..243aa0120b 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java
@@ -17,11 +17,17 @@
 
 package org.apache.plc4x.hop.transforms.plc4xevent;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
@@ -30,8 +36,11 @@ import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopPluginException;
 import org.apache.hop.core.logging.LogLevel;
 import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
 import org.apache.hop.core.row.RowDataUtil;
 import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.StringUtil;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.Pipeline;
@@ -40,6 +49,7 @@ import org.apache.hop.pipeline.transform.BaseTransform;
 import org.apache.hop.pipeline.transform.ITransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
 import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
 import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
@@ -48,14 +58,20 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.s7.events.S7AlarmEvent;
+import org.apache.plc4x.java.s7.events.S7Event;
 import org.apache.plc4x.java.s7.events.S7ModeEvent;
+import org.apache.plc4x.java.s7.events.S7ModeEvent.Fields;
+import org.apache.plc4x.java.s7.events.S7SysEvent;
+import org.apache.plc4x.java.s7.events.S7UserEvent;
 import org.apache.plc4x.java.s7.readwrite.ModeTransitionType;
 
 /**
- * Transform That contains the basic skeleton needed to create your own plugin
+ * This transform receives an event from the S7 driver, of type MODE, SYS, 
+ * USR or ALM. Only one type can be processed at a time.
  *
  */
-public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> implements ITransform {
+public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> {
 
   public static String FIELD_MODE_EVENT = "MODE";
   public static String FIELD_USER_EVENT = "USR";
@@ -75,6 +91,17 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
   private PlcSubscriptionRequest subsbuild      = null;
   private PlcSubscriptionResponse subresponse   = null;
   
+  private List<ICheckResult> remarks = new ArrayList<>(); // stores the errors...
+  
+  /*
+   * The transfer of events is done from the driver tasks. A delay can be added 
+   * for the execution of this transformer.
+   */
+  private ObjectMapper mapper = new ObjectMapper();
+  private ConcurrentLinkedQueue<S7Event> events = new ConcurrentLinkedQueue();
+  private boolean stopBundle = false;
+  private int index = 0;
+  
   private static final ReentrantLock lock = new ReentrantLock();
   
   private static final String dummy = "dummy";
@@ -91,12 +118,41 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
   * @param remarks Error registers
   * @param origin transform instance name
   */
-  public static final RowMetaAndData buildRow(
-    Plc4xEventMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+  public static final RowMetaAndData buildRow(Plc4xEventMeta meta, 
+          List<ICheckResult> remarks, 
+          String origin) throws HopPluginException {
     IRowMeta rowMeta = new RowMeta();
     Object[] rowData = RowDataUtil.allocateRowData(2);
     int index = 0;
-
+    
+    ArrayList<String> fields = new ArrayList<String>();
+    
+    if (meta.isModeEvent()) {
+        for (S7ModeEvent.Fields field:S7ModeEvent.Fields.values()) {
+            fields.add(field.name());
+        }
+    } else if (meta.isSysEvent()) {
+        for (S7SysEvent.Fields field:S7SysEvent.Fields.values()) {
+            fields.add(field.name());
+        }        
+    } else if (meta.isUserEvent()) {
+        for (S7UserEvent.Fields field:S7UserEvent.Fields.values()) {
+            fields.add(field.name());
+        }        
+    } else if (meta.isAlarmEvent()) {
+        fields.add("ALARM");    
+    }
+    
+    for (String field : fields) {
+        IValueMeta valueMeta =
+            ValueMetaFactory.createValueMeta(field, IValueMeta.TYPE_STRING); // build a  
+          rowData[index] = StringUtil.EMPTY_STRING;
+        // Now add value to the row!
+        // This is in fact a copy from the fields row, but now with data.
+        rowMeta.addValueMeta(valueMeta);
+        index++;        
+    }
+  
     return new RowMetaAndData(rowMeta, rowData);
   }
   
@@ -174,15 +230,7 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
                         subresponse
                         .getSubscriptionHandle(FIELD_MODE_EVENT)
                         .register(msg -> {
-                            System.out.println("******** S7ModeEvent ********");
-                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
-                            map.forEach((x, y) -> { 
-                                System.out.println(x + " : " + y);
-                            });
-                            short currentmode = (short) 
-                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
-                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
-                            System.out.println("****************************");
+                            events.add((S7Event) msg);
                         });
                 }    
                 
@@ -191,15 +239,7 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
                         subresponse
                         .getSubscriptionHandle(FIELD_USER_EVENT)
                         .register(msg -> {
-                            System.out.println("******** S7ModeEvent ********");
-                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
-                            map.forEach((x, y) -> { 
-                                System.out.println(x + " : " + y);
-                            });
-                            short currentmode = (short) 
-                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
-                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
-                            System.out.println("****************************");
+                            events.add((S7Event) msg);                            
                         });
                 } 
 
@@ -208,15 +248,7 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
                         subresponse
                         .getSubscriptionHandle(FIELD_SYS_EVENT)
                         .register(msg -> {
-                            System.out.println("******** S7ModeEvent ********");
-                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
-                            map.forEach((x, y) -> { 
-                                System.out.println(x + " : " + y);
-                            });
-                            short currentmode = (short) 
-                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
-                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
-                            System.out.println("****************************");
+                            events.add((S7Event) msg);                            
                         });
                 } 
 
@@ -225,15 +257,7 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
                         subresponse
                         .getSubscriptionHandle(FIELD_ALARM_EVENT)
                         .register(msg -> {
-                            System.out.println("******** S7ModeEvent ********");
-                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
-                            map.forEach((x, y) -> { 
-                                System.out.println(x + " : " + y);
-                            });
-                            short currentmode = (short) 
-                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
-                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
-                            System.out.println("****************************");
+                            events.add((S7Event) msg);                            
                         });
                 }                 
 
@@ -256,13 +280,39 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
         return false;        
     }
 
+   while (events.size() == 0) {
+        try {          
+            Thread.sleep(100);
+            if (stopBundle) {
+                setOutputDone(); // signal end to receiver(s)
+                return false; 
+            }
+        } catch (InterruptedException ex) {
+            break;
+        }
+   } 
+     
+    S7Event s7event = events.poll();
+    index = 0;
+    r = data.outputRowMeta.cloneRow(data.outputRowData);     
+    for (String name:data.outputRowMeta.getFieldNames()) {
+        System.out.println(name + ": " + s7event.getMap().get(name));
+        if (null != s7event.getMap().get(name)) {
+            r[index++] = s7event.getMap().get(name).toString();
+        } else {
+            try {
+                r[index++] = mapper.writer()
+                                .writeValueAsString(s7event.getMap());
+            } catch (Exception ex) {
+                Logger.getLogger(Plc4xEvent.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+    }
     
-    r = data.outputRowMeta.cloneRow(data.outputRowData); 
-    logBasic("Tamano de los datos: " + r.length);
+
     data.prevDate = data.rowDate;
     data.rowDate = new Date();    
 
-
     putRow(data.outputRowMeta, r ); // return your data
     data.rowsWritten++;
     return true;
@@ -293,7 +343,9 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
             }
 
             data.outputRowData = outputRow.getData();
-            data.outputRowMeta = outputRow.getRowMeta();            
+            data.outputRowMeta = outputRow.getRowMeta();  
+            
+            mapper.findAndRegisterModules();
 
           return true;
         }
@@ -313,8 +365,13 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
     public void cleanup() {
         super.cleanup();
         logBasic("Cleanup. Release connection.");
-        if (connwrapper != null)
-        connwrapper.release();     
+        if (null != connwrapper) {
+            if (null != registerMode )  registerMode.unregister();
+            if (null != registerUser)   registerUser.unregister();
+            if (null != registerSys)    registerSys.unregister();
+            if (null != registerAlarm)  registerAlarm.unregister();           
+            connwrapper.release();    
+        }
     }
 
 
@@ -334,11 +391,21 @@ public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> im
             if (!connwrapper.getConnection().isConnected()){           
                 getPipeline().getExtensionDataMap().remove(meta.getConnection());
             }            
-            connwrapper = null;
-            readRequest = null;
+            connwrapper     = null;
+            readRequest     = null;
+            registerMode    = null;
+            registerUser    = null;
+            registerSys     = null;
+            registerAlarm   = null;
 
         }
     }
+
+    @Override
+    public void stopRunning() throws HopException {
+        super.stopRunning();
+        stopBundle = true;
+    }
  
   
   
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java
index ea369b5cb7..3d24602877 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java
@@ -204,7 +204,7 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     * Mode Events
     ********************/
     Label wlModeEvent = new Label(shell, SWT.RIGHT);
-    wlModeEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    wlModeEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.ModeEvent.Label"));
     props.setLook(wlModeEvent);
     FormData fdlModeEvent = new FormData();
     fdlModeEvent.left = new FormAttachment(0, 0);
@@ -233,7 +233,7 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     * User Events
     ********************/
     Label wlUserEvent = new Label(shell, SWT.RIGHT);
-    wlUserEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    wlUserEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.UserEvent.Label"));
     props.setLook(wlUserEvent);
     FormData fdlUserEvent = new FormData();
     fdlUserEvent.left = new FormAttachment(0, 0);
@@ -262,7 +262,7 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     * Sys Events
     ********************/
     Label wlSysEvent = new Label(shell, SWT.RIGHT);
-    wlSysEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    wlSysEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.SysEvent.Label"));
     props.setLook(wlSysEvent);
     FormData fdlSysEvent = new FormData();
     fdlSysEvent.left = new FormAttachment(0, 0);
@@ -291,7 +291,7 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     * Alarm Events
     ********************/
     Label wlAlarmEvent = new Label(shell, SWT.RIGHT);
-    wlAlarmEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    wlAlarmEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.AlarmEvent.Label"));
     props.setLook(wlAlarmEvent);
     FormData fdlAlarmEvent = new FormData();
     fdlAlarmEvent.left = new FormAttachment(0, 0);
@@ -544,6 +544,10 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     wLimit.setText(input.getRowLimit());
     wNeverEnding.setSelection(input.isNeverEnding());
 
+    wModeEvent.setSelection(input.isModeEvent());
+    wUserEvent.setSelection(input.isUserEvent());
+    wSysEvent.setSelection(input.isSysEvent());
+    wAlarmEvent.setSelection(input.isAlarmEvent());
 
     setActive();
 
@@ -560,6 +564,11 @@ public class Plc4xEventDialog extends BaseTransformDialog implements ITransformD
     meta.setConnection(wConnection.getText());
     meta.setRowLimit(wLimit.getText());
     meta.setNeverEnding(wNeverEnding.getSelection());
+    
+    meta.setModeEvent(wModeEvent.getSelection());
+    meta.setUserEvent(wUserEvent.getSelection());
+    meta.setSysEvent(wSysEvent.getSelection());
+    meta.setAlarmEvent(wAlarmEvent.getSelection());
 
   }
 
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java
index 207adb7824..10de092241 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java
@@ -49,7 +49,7 @@ import org.apache.hop.pipeline.transform.TransformIOMeta;
         categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xevent:Plc4x.Category.plc4x",
         documentationUrl = "https://plc4x.apache.org/users/integrations/apache-hop.html"
 )
-public class Plc4xEventMeta extends BaseTransformMeta implements ITransformMeta {
+public class Plc4xEventMeta extends BaseTransformMeta<Plc4xEvent, Plc4xEventData> {
 
   private static final Class<?> PKG = Plc4xEventMeta.class; // Needed by Translator
 
@@ -70,23 +70,23 @@ public class Plc4xEventMeta extends BaseTransformMeta implements ITransformMeta
   private boolean neverEnding;
   
   @HopMetadataProperty(
-      key = "never_ending",
-      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+      key = "mode_event",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.ModeEvent")
   private boolean modeEvent;
 
   @HopMetadataProperty(
-      key = "never_ending",
-      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+      key = "user_event",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.UserEvent")
   private boolean userEvent;
 
   @HopMetadataProperty(
-      key = "never_ending",
-      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+      key = "sys_event",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.SysEvent")
   private boolean sysEvent;
 
   @HopMetadataProperty(
-      key = "never_ending",
-      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+      key = "alarm_event",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.AlarmEvent")
   private boolean alarmEvent;  
 
 
@@ -205,7 +205,7 @@ public class Plc4xEventMeta extends BaseTransformMeta implements ITransformMeta
   }
   
   public boolean isModeEvent() {
-    return neverEnding;
+    return modeEvent;
   }
 
   public void setModeEvent(boolean modeEvent) {
@@ -213,7 +213,7 @@ public class Plc4xEventMeta extends BaseTransformMeta implements ITransformMeta
   }
   
   public boolean isUserEvent() {
-    return neverEnding;
+    return userEvent;
   }
 
   public void setUserEvent(boolean userEvent) {
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java
index 7b1832c16d..5e9302da02 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java
@@ -50,7 +50,7 @@ import org.apache.hop.pipeline.transform.ITransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
 import org.apache.plc4x.hop.metadata.Plc4xConnection;
 import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
-import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcTag;
 import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
@@ -61,7 +61,7 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
  * Transform That contains the basic skeleton needed to create your own plugin
  *
  */
-public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> implements ITransform {
+public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> {
 
   private static final Class<?> PKG = Plc4xRead.class; // Needed by Translator
   
@@ -75,7 +75,7 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
   private static final String dummy = "dummy";
   
   private Map<String, Integer> index = new HashMap();
-  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+  private Map<String, Plc4xPlcTag> plcfields = new HashMap();  
 
   public Plc4xRead(TransformMeta transformMeta, Plc4xReadMeta meta, Plc4xReadData data, int copyNr, PipelineMeta pipelineMeta,
                 Pipeline pipeline ) {
@@ -89,8 +89,10 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
   * @param remarks Error registers
   * @param origin transform instance name
   */
-  public static final RowMetaAndData buildRow(
-      Plc4xReadMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+  public static final RowMetaAndData buildRow(Plc4xReadMeta meta, 
+          List<ICheckResult> remarks, 
+          String origin) throws HopPluginException {
+      
     IRowMeta rowMeta = new RowMeta();
     Object[] rowData = RowDataUtil.allocateRowData(meta.getFields().size() + 2);
     int index = 0;
@@ -108,7 +110,7 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
     for (Plc4xGeneratorField field : meta.getFields()) {
       int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
       if (StringUtils.isNotEmpty(field.getType())) {
-          System.out.println("typeString: " + typeString); 
+ 
         IValueMeta valueMeta =
             ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
         // value!
@@ -146,7 +148,7 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
             //
             try {
                 System.out.println("stringValue: " + stringValue);
-              rowData[index] = valueMeta.convertData(stringMeta, stringValue);
+                rowData[index] = valueMeta.convertData(stringMeta, stringValue);
             } catch (HopValueException e) {
               switch (valueMeta.getType()) {
                 case IValueMeta.TYPE_NUMBER:
@@ -226,7 +228,6 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
         index++;
       }
     }
-
     return new RowMetaAndData(rowMeta, rowData);
   }
   
@@ -238,17 +239,18 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
   * 4. Register the connection wrapper for global access.
   * 5. If the connection to the PLC is made, then it creates the query 
   *    and executes it.
-  *
+  * TODO: Field validation.
   */
   @Override
   public  boolean processRow() throws HopException {
+  
     Object[] r = getRow(); // Get row from input rowset & set row busy!
     setLogLevel(LogLevel.DEBUG);
     
     if ((!meta.isNeverEnding() && data.rowsWritten >= data.rowLimit) && !isStopped()) {   
       setOutputDone(); // signal end to receiver(s)
       return false;        
-    }    
+    }
     
     if (first) {
         index.clear();
@@ -256,7 +258,7 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
         //This performs a minimal check on the user item.
         //It guarantees that the rates are within those managed by Plc4x.
         meta.getFields().forEach((f) ->{
-            plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+            plcfields.put(f.getName(),Plc4xPlcTag.of(f.getItem()));
         });
         first = false;
     }    
@@ -282,10 +284,12 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
             readRequest = null;
             try{
                 PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
+                
                 if (conn.isConnected()) {
                     connwrapper = new Plc4xWrapperConnection(conn);            
                     getPipeline().getExtensionDataMap().put(meta.getConnection(), connwrapper); //(04)
                 }
+
             } catch (Exception ex){
                 setErrors(1L);
                 logError("Unable to create connection to PLC. " + ex.getMessage());
@@ -342,7 +346,7 @@ public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> imple
     }
     
     r = data.outputRowMeta.cloneRow(data.outputRowData); 
-    logBasic("Tamano de los datos: " + r.length);
+
     data.prevDate = data.rowDate;
     data.rowDate = new Date();    
     int index = 0;
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java
index a736e418da..96a47e5f16 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java
@@ -148,7 +148,7 @@ public class Plc4xReadDialog extends BaseTransformDialog implements ITransformDi
     try {
       wConnection.fillItems();
     } catch (Exception e) {
-      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+      new ErrorDialog(shell, "Error", "Error listing Plc4x connection metadata objects", e);
     }    
     
     Control lastControl = wConnection;    
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java
index 3946c9a310..c43178958a 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java
@@ -50,7 +50,7 @@ import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
         categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xinput:Plc4x.Category.plc4x",
         documentationUrl = "https://plc4x.apache.org/users/integrations/apache-calcite.html"
 )
-public class Plc4xReadMeta extends BaseTransformMeta implements ITransformMeta {
+public class Plc4xReadMeta extends BaseTransformMeta<Plc4xRead, Plc4xReadData> {
 
   private static final Class<?> PKG = Plc4xReadMeta.class; // Needed by Translator
 
@@ -121,39 +121,33 @@ public class Plc4xReadMeta extends BaseTransformMeta implements ITransformMeta {
     }
   }
 
-  @Override
   public Plc4xReadMeta clone() {
     return new Plc4xReadMeta(this);
   }  
   
   
 
-  @Override
   public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
                          IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
     try {
-        logBasic("PASO 1");
         List<ICheckResult> remarks = new ArrayList<>();
         RowMetaAndData rowMetaAndData = Plc4xRead.buildRow(this, remarks, name);
-        logBasic("PASO 2");
-      if (!remarks.isEmpty()) {
-        logBasic("PASO 3");
-        StringBuilder stringRemarks = new StringBuilder();
-        for (ICheckResult remark : remarks) {
-          logBasic("PASO 3x: " + remark.toString());   
-          stringRemarks.append(remark.toString()).append(Const.CR);
+
+        if (!remarks.isEmpty()) {
+            StringBuilder stringRemarks = new StringBuilder();
+            for (ICheckResult remark : remarks) { 
+                stringRemarks.append(remark.toString()).append(Const.CR);
+            }     
+            throw new HopTransformException(stringRemarks.toString());
         }
-        logBasic("PASO 3.1");        
-        throw new HopTransformException(stringRemarks.toString());
-      }
-              logBasic("PASO 4");
-      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
-        valueMeta.setOrigin(name);
-      }
-        logBasic("PASO 5");
-      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+
+        for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+            valueMeta.setOrigin(name);
+        }
+
+        inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
     } catch (Exception e) {
-      throw new HopTransformException(e);
+        throw new HopTransformException(e);
     }
   }
 
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java
index 2381564a75..508831b0a5 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java
@@ -49,7 +49,7 @@ import org.apache.hop.pipeline.transform.ITransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
 import org.apache.plc4x.hop.metadata.Plc4xConnection;
 import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
-import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcTag;
 import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
@@ -60,7 +60,7 @@ import org.apache.plc4x.java.api.messages.PlcWriteResponse;
  * Transform That contains the basic skeleton needed to create your own plugin
  *
  */
-public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> implements ITransform {
+public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> {
 
   private static final Class<?> PKG = Plc4xWrite.class; // Needed by Translator
   
@@ -75,7 +75,7 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
   private static final String dummy = "dummy";
   
   private Map<String, Integer> index = new HashMap();
-  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+  private Map<String, Plc4xPlcTag> plcfields = new HashMap();  
 
   public Plc4xWrite(TransformMeta transformMeta, Plc4xWriteMeta meta, Plc4xWriteData data, int copyNr, PipelineMeta pipelineMeta,
                 Pipeline pipeline ) {
@@ -108,7 +108,6 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
     for (Plc4xGeneratorField field : meta.getFields()) {
       int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
       if (StringUtils.isNotEmpty(field.getType())) {
-          System.out.println("typeString: " + typeString); 
         IValueMeta valueMeta =
             ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
         // value!
@@ -145,7 +144,6 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
             // Convert the data from String to the specified type ...
             //
             try {
-                System.out.println("stringValue: " + stringValue);
               rowData[index] = valueMeta.convertData(stringMeta, stringValue);
             } catch (HopValueException e) {
               switch (valueMeta.getType()) {
@@ -261,7 +259,7 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
             Integer i = getInputRowMeta().indexOfValue(f.getName()); //(01)
             if (i>=0) {
                 index.put(f.getName(), i);
-                plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+                plcfields.put(f.getName(),Plc4xPlcTag.of(f.getItem()));
             }
         });
         first = false;
@@ -309,14 +307,15 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
     } finally {
         lock.unlock();
     }
-    
+
     if ((connmeta != null) && (connwrapper != null)){
         if (connwrapper.getConnection().isConnected()){
-            
+
             builder = null;
             builder = connwrapper.getConnection().writeRequestBuilder(); //(05)
             Integer i;
             for (Plc4xGeneratorField field: meta.getFields()){
+
                 i = index.get(field.getName());
                 if (i != null) {
                     //From Input Type
@@ -329,7 +328,7 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
                         case IValueMeta.TYPE_BIGNUMBER: 
                             builder.addTagAddress(field.getName(), 
                                 field.getItem(),
-                                r[i]);                            
+                                r[i]);    
                             break;
                         case IValueMeta.TYPE_DATE:
                             builder.addTagAddress(field.getName(), 
@@ -369,13 +368,14 @@ public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> im
                 maxwait = (maxwait<100)?100:maxwait;
                 writeResponse = writeRequest.execute().get(maxwait, TimeUnit.MILLISECONDS);
 
+                if (isDebug())
                 index.forEach((n,y)->{
-                    System.out.println("Resultado: " + writeResponse.getResponseCode(n));
+                    logDebug("Result: " + writeResponse.getResponseCode(n));
                 });
 
             } catch (Exception ex) {
                 setErrors(1L);                
-                logError("Unable read from PLC. " + ex.getMessage());
+                logError("Unable write to PLC. " + ex.getMessage());
             }
             
         } else {
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java
index d3996ad4a9..d9461f6d07 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java
@@ -54,7 +54,7 @@ import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
         categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xoutput:Plc4x.Category.plc4x",
         documentationUrl = "https://plc4x.apache.org/users/integrations/apache-calcite.html"
 )
-public class Plc4xWriteMeta extends BaseTransformMeta implements ITransformMeta {
+public class Plc4xWriteMeta extends BaseTransformMeta<Plc4xWrite, Plc4xWriteData>  {
 
   private static final Class<?> PKG = Plc4xWriteMeta.class; // Needed by Translator
 
@@ -130,34 +130,28 @@ public class Plc4xWriteMeta extends BaseTransformMeta implements ITransformMeta
     return new Plc4xWriteMeta(this);
   }  
   
-  
-
+ 
   @Override
   public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
                          IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
     try {
-        logBasic("PASO 1");
         List<ICheckResult> remarks = new ArrayList<>();
         RowMetaAndData rowMetaAndData = Plc4xWrite.buildRow(this, remarks, name);
-        logBasic("PASO 2");
-      if (!remarks.isEmpty()) {
-        logBasic("PASO 3");
-        StringBuilder stringRemarks = new StringBuilder();
-        for (ICheckResult remark : remarks) {
-          logBasic("PASO 3x: " + remark.toString());   
-          stringRemarks.append(remark.toString()).append(Const.CR);
+
+        if (!remarks.isEmpty()) {
+            StringBuilder stringRemarks = new StringBuilder();
+            for (ICheckResult remark : remarks) { 
+                stringRemarks.append(remark.toString()).append(Const.CR);
+            }      
+            throw new HopTransformException(stringRemarks.toString());
+         }
+        for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+            valueMeta.setOrigin(name);
         }
-        logBasic("PASO 3.1");        
-        throw new HopTransformException(stringRemarks.toString());
-      }
-              logBasic("PASO 4");
-      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
-        valueMeta.setOrigin(name);
-      }
-        logBasic("PASO 5");
-      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+
+        inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
     } catch (Exception e) {
-      throw new HopTransformException(e);
+        throw new HopTransformException(e);
     }
   }
 
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java
index 51c6c9d536..67003bf3b5 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java
@@ -17,13 +17,16 @@
 
 package org.apache.plc4x.hop.transforms.plc4xsubs;
 
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.Consumer;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
@@ -50,32 +53,40 @@ import org.apache.hop.pipeline.transform.ITransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
 import org.apache.plc4x.hop.metadata.Plc4xConnection;
 import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
-import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcTag;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcSubscriptionTag;
 import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.s7.events.S7Event;
 
 /**
  * Transform That contains the basic skeleton needed to create your own plugin
  *
  */
-public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> implements ITransform {
+public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> {
 
   private static final Class<?> PKG = Plc4xSubs.class; // Needed by Translator
   
   private Plc4xConnection connmeta = null;
   private Plc4xWrapperConnection connwrapper = null;
-  private PlcReadRequest readRequest = null;
-  private PlcReadResponse readResponse = null;  
+  private PlcSubscriptionRequest subsRequest = null;
+  private PlcSubscriptionResponse subsResponse = null;  
   private int maxwait = 0;
   private static final ReentrantLock lock = new ReentrantLock();
   
+  private ConcurrentLinkedQueue<PlcSubscriptionEvent> events = new ConcurrentLinkedQueue();
+  private boolean stopBundle = false;
+  
   private static final String dummy = "dummy";
   
   private Map<String, Integer> index = new HashMap();
-  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+  private Map<String, Plc4xPlcSubscriptionTag> plctags = new HashMap();  
 
   public Plc4xSubs(TransformMeta transformMeta, Plc4xSubsMeta meta, Plc4xSubsData data, int copyNr, PipelineMeta pipelineMeta,
                 Pipeline pipeline ) {
@@ -108,7 +119,7 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
     for (Plc4xGeneratorField field : meta.getFields()) {
       int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
       if (StringUtils.isNotEmpty(field.getType())) {
-          System.out.println("typeString: " + typeString); 
+
         IValueMeta valueMeta =
             ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
         // value!
@@ -145,7 +156,7 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
             // Convert the data from String to the specified type ...
             //
             try {
-                System.out.println("stringValue: " + stringValue);
+
               rowData[index] = valueMeta.convertData(stringMeta, stringValue);
             } catch (HopValueException e) {
               switch (valueMeta.getType()) {
@@ -252,11 +263,11 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
     
     if (first) {
         index.clear();
-        plcfields.clear();
+        plctags.clear();
         //This performs a minimal check on the user item.
         //It guarantees that the rates are within those managed by Plc4x.
         meta.getFields().forEach((f) ->{
-            plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+            plctags.put(f.getName(),Plc4xPlcSubscriptionTag.of(f.getItem()));
         });
         first = false;
     }    
@@ -266,6 +277,7 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
         IHopMetadataProvider metaprovider = getMetadataProvider();
         connmeta = metaprovider.getSerializer(Plc4xConnection.class).load(meta.getConnection());
         if (connwrapper == null) {
+            System.out.println("PASO 02");
             connwrapper = (Plc4xWrapperConnection) getPipeline().getExtensionDataMap().get(meta.getConnection()); //(02)
             if (connwrapper != null) connwrapper.retain();
         };
@@ -279,7 +291,7 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
         }
 
         if ((connmeta != null) && (connwrapper == null)){
-            readRequest = null;
+            subsRequest = null;
             try{
                 PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
                 if (conn.isConnected()) {
@@ -297,24 +309,28 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
     
     if ((connmeta != null) && (connwrapper != null)){
         if (connwrapper.getConnection().isConnected()){
-            if (readRequest == null){
-                PlcReadRequest.Builder builder = connwrapper.getConnection().readRequestBuilder(); //(05)
+            if (subsRequest == null){
+                PlcSubscriptionRequest.Builder builder = connwrapper.getConnection().subscriptionRequestBuilder(); //(05)
                 for (Plc4xGeneratorField field: meta.getFields()){
-                    builder.addTagAddress(field.getName(), field.getItem());
+                    System.out.println(field.getName() + " : " + field.getItem().toString());
+                    builder.addCyclicTagAddress(field.getName(), field.getItem().toString(),  Duration.ofMillis(1000));                    
                 }                
-                readRequest = builder.build();                  
+                System.out.println("PASO: 05");
+                subsRequest = builder.build();                  
             }            
             try {            
                 maxwait = Integer.parseInt(meta.getMaxwaitInMs());
-                maxwait = (maxwait<100)?100:maxwait;
-                readResponse = readRequest.execute().get(maxwait, TimeUnit.MILLISECONDS);
-
-                for (Plc4xGeneratorField field: meta.getFields()){
-                    field.setValue(readResponse.getString(field.getName()));
-                }                  
+                maxwait = (maxwait<1000)?1000:maxwait;
+                System.out.println("PASO: 06");
+                subsResponse = subsRequest.execute().get();
+                System.out.println("PASO: 07");
+                //Only for Siemens S7
+                subsResponse.getSubscriptionHandles().forEach(a -> a.register(e -> events.add(e)));
+                System.out.println("PASO: 08");
             } catch (Exception ex) {
                 setErrors(1L);                
                 logError("Unable read from PLC. " + ex.getMessage());
+                ex.printStackTrace();
             }
             
         } else {
@@ -332,17 +348,23 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
     }
 
     //
-    int interval = Integer.parseInt(meta.getIntervalInMs());
+    while (events.size() == 0) {
+        try {          
+            Thread.sleep(100);
+            if (stopBundle) {
+                setOutputDone(); // signal end to receiver(s)
+                return false; 
+            }
+        } catch (InterruptedException ex) {
+            break;
+        }
+    } 
     
-    try {
-        Thread.sleep(interval);
-    } catch (InterruptedException ex) {
-        setErrors(1L);                
-        logError(ex.getMessage());
-    }
+    PlcSubscriptionEvent s7event = events.poll();    
+    System.out.println("Ejecuto el consumidor en el cliente..." + s7event.getTagNames());
     
     r = data.outputRowMeta.cloneRow(data.outputRowData); 
-    logBasic("Tamano de los datos: " + r.length);
+
     data.prevDate = data.rowDate;
     data.rowDate = new Date();    
     int index = 0;
@@ -435,12 +457,16 @@ public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> imple
                 getPipeline().getExtensionDataMap().remove(meta.getConnection());
             }            
             connwrapper = null;
-            readRequest = null;
-
+            subsRequest = null;
         }
     }
  
-  
+
+    @Override
+    public void stopRunning() throws HopException {
+        super.stopRunning();
+        stopBundle = true;
+    }  
   
   
 }
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsMeta.java
index 35f15665bd..12943301d7 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsMeta.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsMeta.java
@@ -54,7 +54,7 @@ import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
         categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xinput:Plc4x.Category.plc4x",
         documentationUrl = "https://plc4x.apache.org/users/integrations/apache-calcite.html"
 )
-public class Plc4xSubsMeta extends BaseTransformMeta implements ITransformMeta {
+public class Plc4xSubsMeta extends BaseTransformMeta<Plc4xSubs, Plc4xSubsData>{
 
   private static final Class<?> PKG = Plc4xSubsMeta.class; // Needed by Translator
 
@@ -136,28 +136,24 @@ public class Plc4xSubsMeta extends BaseTransformMeta implements ITransformMeta {
   public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
                          IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
     try {
-        logBasic("PASO 1");
         List<ICheckResult> remarks = new ArrayList<>();
         RowMetaAndData rowMetaAndData = Plc4xSubs.buildRow(this, remarks, name);
-        logBasic("PASO 2");
-      if (!remarks.isEmpty()) {
-        logBasic("PASO 3");
-        StringBuilder stringRemarks = new StringBuilder();
-        for (ICheckResult remark : remarks) {
-          logBasic("PASO 3x: " + remark.toString());   
-          stringRemarks.append(remark.toString()).append(Const.CR);
+
+        if (!remarks.isEmpty()) {
+            StringBuilder stringRemarks = new StringBuilder();
+            for (ICheckResult remark : remarks) {
+              stringRemarks.append(remark.toString()).append(Const.CR);
+            }       
+            throw new HopTransformException(stringRemarks.toString());
+        }
+
+        for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+            valueMeta.setOrigin(name);
         }
-        logBasic("PASO 3.1");        
-        throw new HopTransformException(stringRemarks.toString());
-      }
-              logBasic("PASO 4");
-      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
-        valueMeta.setOrigin(name);
-      }
-        logBasic("PASO 5");
-      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+
+        inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
     } catch (Exception e) {
-      throw new HopTransformException(e);
+        throw new HopTransformException(e);
     }
   }
 
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcSubscriptionTag.java
similarity index 79%
copy from plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java
copy to plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcSubscriptionTag.java
index 295dc9f176..2a261a3906 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcSubscriptionTag.java
@@ -19,17 +19,19 @@
 package org.apache.plc4x.hop.transforms.util;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.time.Duration;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidTagException;
-import org.apache.plc4x.java.api.model.PlcTag;
-import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.api.model.PlcSubscriptionTag;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
 
-import java.nio.charset.StandardCharsets;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.plc4x.java.api.model.PlcTag;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
 
 /*
 * Code taken from the Modbus driver implementation.
@@ -40,7 +42,7 @@ import java.util.regex.Pattern;
 *       the "Integer" fields.
 */
 
-public  class Plc4xPlcField implements PlcTag, Serializable {
+public  class Plc4xPlcSubscriptionTag implements PlcTag, Serializable {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>[\\%a-zA-Z_\\.0-9]+)(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
 
@@ -52,8 +54,8 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
 
     private final Plc4xDataType dataType;
 
-    public static Plc4xPlcField of(String addressString) {
-        if (Plc4xPlcField.matches(addressString)) {
+    public static Plc4xPlcSubscriptionTag of(String addressString) {
+        if (Plc4xPlcSubscriptionTag.matches(addressString)) {
             Matcher matcher = ADDRESS_PATTERN.matcher(addressString); 
 
             matcher.matches();
@@ -66,13 +68,13 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
             Plc4xDataType dataType = (matcher.group("datatype") != null) ? Plc4xDataType.valueOf(matcher.group("datatype")) : Plc4xDataType.BOOL;
 
             
-            return new Plc4xPlcField(address, quantity, dataType);
+            return new Plc4xPlcSubscriptionTag(address, quantity, dataType);
         }
 
         throw new PlcInvalidTagException("Unable to parse address: " + addressString);
     }
 
-    protected Plc4xPlcField(String address, Integer quantity, Plc4xDataType dataType) {
+    protected Plc4xPlcSubscriptionTag(String address, Integer quantity, Plc4xDataType dataType) {
         this.address = address;
 
         this.quantity = quantity != null ? quantity : 1;
@@ -114,10 +116,10 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof Plc4xPlcField)) {
+        if (!(o instanceof Plc4xPlcSubscriptionTag)) {
             return false;
         }
-        Plc4xPlcField that = (Plc4xPlcField) o;
+        Plc4xPlcSubscriptionTag that = (Plc4xPlcSubscriptionTag) o;
         return address == that.address;
     }
 
@@ -128,7 +130,7 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
 
     @Override
     public String toString() {
-        return "Plc4xPlcField{" +
+        return "Plc4xPlcSubscriptionField{" +
             " address=" + address +
             " datatype=" + dataType +
             " quantity=" + quantity +
@@ -137,12 +139,22 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
 
     @Override
     public void serialize(WriteBuffer wb) throws SerializationException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public String getAddressString() {
-        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
+//    @Override
+//    public PlcSubscriptionType getPlcSubscriptionType() {
+//        throw new UnsupportedOperationException("Not supported yet.");
+//    }
+//
+//    @Override
+//    public Optional<Duration> getDuration() {
+//        throw new UnsupportedOperationException("Not supported yet.");
+//    }
+
 }
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcTag.java
similarity index 85%
rename from plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java
rename to plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcTag.java
index 295dc9f176..d89cbfabc7 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcField.java
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/util/Plc4xPlcTag.java
@@ -21,12 +21,10 @@ package org.apache.plc4x.hop.transforms.util;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidTagException;
 import org.apache.plc4x.java.api.model.PlcTag;
-import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
 
-import java.nio.charset.StandardCharsets;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -40,7 +38,7 @@ import java.util.regex.Pattern;
 *       the "Integer" fields.
 */
 
-public  class Plc4xPlcField implements PlcTag, Serializable {
+public  class Plc4xPlcTag implements PlcTag, Serializable {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>[\\%a-zA-Z_\\.0-9]+)(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
 
@@ -52,8 +50,8 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
 
     private final Plc4xDataType dataType;
 
-    public static Plc4xPlcField of(String addressString) {
-        if (Plc4xPlcField.matches(addressString)) {
+    public static Plc4xPlcTag of(String addressString) {
+        if (Plc4xPlcTag.matches(addressString)) {
             Matcher matcher = ADDRESS_PATTERN.matcher(addressString); 
 
             matcher.matches();
@@ -66,13 +64,13 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
             Plc4xDataType dataType = (matcher.group("datatype") != null) ? Plc4xDataType.valueOf(matcher.group("datatype")) : Plc4xDataType.BOOL;
 
             
-            return new Plc4xPlcField(address, quantity, dataType);
+            return new Plc4xPlcTag(address, quantity, dataType);
         }
 
         throw new PlcInvalidTagException("Unable to parse address: " + addressString);
     }
 
-    protected Plc4xPlcField(String address, Integer quantity, Plc4xDataType dataType) {
+    protected Plc4xPlcTag(String address, Integer quantity, Plc4xDataType dataType) {
         this.address = address;
 
         this.quantity = quantity != null ? quantity : 1;
@@ -114,10 +112,10 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof Plc4xPlcField)) {
+        if (!(o instanceof Plc4xPlcTag)) {
             return false;
         }
-        Plc4xPlcField that = (Plc4xPlcField) o;
+        Plc4xPlcTag that = (Plc4xPlcTag) o;
         return address == that.address;
     }
 
@@ -137,12 +135,12 @@ public  class Plc4xPlcField implements PlcTag, Serializable {
 
     @Override
     public void serialize(WriteBuffer wb) throws SerializationException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public String getAddressString() {
-        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
 }
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/resources/org/apache/plc4x/hop/transforms/plc4xevent/messages/messages_en_US.properties b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/resources/org/apache/plc4x/hop/transforms/plc4xevent/messages/messages_en_US.properties
index b6bc8d9f8d..70a5e66f92 100644
--- a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/resources/org/apache/plc4x/hop/transforms/plc4xevent/messages/messages_en_US.properties
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/resources/org/apache/plc4x/hop/transforms/plc4xevent/messages/messages_en_US.properties
@@ -21,7 +21,7 @@ Plc4x.Read.Description=Plc4x Event Transform Description
 Plc4x.Read.Shell.Title=Plc4x Event Transform Title
 Plc4x.Read.TransformName.Label=Plc4x Event Sample Name
 
-Plc4x.Read.Meta.Injection.NeverEnding=Connection
+Plc4x.Read.Meta.Injection.Connection=Connection
 Plc4x.Read.Meta.Injection.NeverEnding=Nerverending
 Plc4x.Read.Meta.Injection.MaxwaitInMs=MaxwaitIn
 Plc4x.Read.Meta.Injection.IntervalInMs=IntervalIn
@@ -30,6 +30,11 @@ Plc4x.Read.Meta.Injection.LastTimeField=LastTimeField
 Plc4x.Read.Meta.Injection.RowLimit=RowLimit
 Plc4x.Read.Meta.Injection.Fields=Fields
 
+Plc4x.Read.Meta.Injection.ModeEvent=ModeEvent
+Plc4x.Read.Meta.Injection.UserEvent=UserEvent
+Plc4x.Read.Meta.Injection.SysEvent=SysEvent
+Plc4x.Read.Meta.Injection.AlarmEvent=AlarmEvent
+
 Plc4x.Read.Meta.Injection.Field.Name=Name
 Plc4x.Read.Meta.Injection.Field.Item=Item
 Plc4x.Read.Meta.Injection.Field.Type=Type
@@ -47,6 +52,13 @@ Plc4x.Read.Meta.Dialog.Settings.Title=Dialog
 Plc4x.Read.Meta.Dialog.DialogTitle=Plc4x Read transformer
 Plc4x.Read.Meta.Dialog.Limit.Label=Limit
 Plc4x.Read.Meta.Dialog.NeverEnding.Label=Never ending
+
+Plc4x.Read.Meta.Dialog.ModeEvent.Label=Mode event
+Plc4x.Read.Meta.Dialog.UserEvent.Label=User event
+Plc4x.Read.Meta.Dialog.SysEvent.Label=Sys event
+Plc4x.Read.Meta.Dialog.UserEvent.Label=User event
+Plc4x.Read.Meta.Dialog.AlarmEvent.Label=Alarm event
+
 Plc4x.Read.Meta.Dialog.Maxwait.Label=Max waiting
 Plc4x.Read.Meta.Dialog.Interval.Label=Interval
 Plc4x.Read.Meta.Dialog.RowTimeField.Label=Time
diff --git a/pom.xml b/pom.xml
index 1485e3f01f..6ca8383719 100644
--- a/pom.xml
+++ b/pom.xml
@@ -820,6 +820,8 @@
             <!-- Exlude core dumps-->
             <exclude>**/hs_err_pid*</exclude>
             <exclude>**/replay_pid*</exclude>
+            
+            <exclude>**/*.svg</exclude>
           </excludes>
         </configuration>
       </plugin>
diff --git a/src/site/asciidoc/index.adoc b/src/site/asciidoc/index.adoc
index 5ecb4db661..cbed626f26 100644
--- a/src/site/asciidoc/index.adoc
+++ b/src/site/asciidoc/index.adoc
@@ -165,6 +165,20 @@
                                        </div>
                                    </div>
                                </div>
+                               <div class="carousel-item">
+                                   <div class="col-md-12 col-lg-4">
+                                       <div class="card h-100 p-5 justify-content-center"
+                                            onclick="location.href='https://hop.apache.org';"
+                                            style="cursor:pointer;">
+                                           <div class="d-flex align-items-center justify-content-center h-100">
+                                               <img src="images/integrations/apache_hop_logo.png" alt="Card image cap">
+                                           </div>
+                                           <div class="card-body">
+                                               <h5 class="card-title"><b>Apache Hop</b></h5>
+                                           </div>
+                                       </div>
+                                   </div>
+                               </div>                               
                                <div class="carousel-item">
                                    <div class="col-md-12 col-lg-4">
                                        <div class="card h-100 p-5 justify-content-center"
diff --git a/src/site/asciidoc/users/index.adoc b/src/site/asciidoc/users/index.adoc
index 305a229077..59592dcfb7 100644
--- a/src/site/asciidoc/users/index.adoc
+++ b/src/site/asciidoc/users/index.adoc
@@ -317,6 +317,20 @@ Besides providing access to devices using one of above protocols, Apache PLC4X a
                                     </div>
                                 </div>
                             </div>
+                            <div class="carousel-item">
+                                <div class="col-md-12 col-lg-4">
+                                    <div class="card h-100 p-5 justify-content-center"
+                                         onclick="location.href='integrations/apache-hop.html';"
+                                         style="cursor:pointer;">
+                                        <div class="d-flex align-items-center justify-content-center h-100">
+                                            <img src="../images/integrations/apache_hop_logo.png" alt="Card image cap">
+                                        </div>
+                                        <div class="card-body">
+                                            <h5 class="card-title"><b>Apache Hop™</b></h5>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>                            
                             <div class="carousel-item">
                                 <div class="col-md-12 col-lg-4">
                                     <div class="card h-100 p-5 justify-content-center"
diff --git a/src/site/asciidoc/users/integrations/apache-hop.adoc b/src/site/asciidoc/users/integrations/apache-hop.adoc
new file mode 100644
index 0000000000..ce9d36ad48
--- /dev/null
+++ b/src/site/asciidoc/users/integrations/apache-hop.adoc
@@ -0,0 +1,41 @@
+//
+//  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
+//
+//      https://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.
+//
+:imagesdir: ../../images/
+:icons: font
+
+image::integrations/plc4x_hop_banner.jpg[]
+
+== Apache Hop
+
+
+
+"__Hop aims to be the future of data integration. Visual development enables developers to be more productive than they can be through code. Our Design once, run anywhere workflows and pipelines can be designed in the Hop Gui and run on the Hop native engine (local or remote), or on Spark, Flink, Google Dataflow or AWS EMR through Beam. Lifecycle Management enables developers and administrators to switch between projects, environments and purposes without leaving your train of thought__."
+
+
+
+
+
+
+.Version control
+[width="100%",options="header,footer"]
+|====================
+| Date | Plc4x  | Comments  
+| 10/03/2023 |0.11.0-SNAPSHOT  | xxx 
+|  |  |  
+|====================
+
+
diff --git a/src/site/resources/images/icons/s7_alert.png b/src/site/resources/images/icons/s7_alert.png
new file mode 100644
index 0000000000..0f6a6950cb
Binary files /dev/null and b/src/site/resources/images/icons/s7_alert.png differ
diff --git a/src/site/resources/images/icons/s7_caution.png b/src/site/resources/images/icons/s7_caution.png
new file mode 100644
index 0000000000..02a2eba4a0
Binary files /dev/null and b/src/site/resources/images/icons/s7_caution.png differ
diff --git a/src/site/resources/images/icons/s7_danger.png b/src/site/resources/images/icons/s7_danger.png
new file mode 100644
index 0000000000..7e6da2e234
Binary files /dev/null and b/src/site/resources/images/icons/s7_danger.png differ
diff --git a/src/site/resources/images/icons/s7_dont.png b/src/site/resources/images/icons/s7_dont.png
new file mode 100644
index 0000000000..21947a27c2
Binary files /dev/null and b/src/site/resources/images/icons/s7_dont.png differ
diff --git a/src/site/resources/images/icons/s7_ex.png b/src/site/resources/images/icons/s7_ex.png
new file mode 100644
index 0000000000..d66ad99785
Binary files /dev/null and b/src/site/resources/images/icons/s7_ex.png differ
diff --git a/src/site/resources/images/icons/s7_important.png b/src/site/resources/images/icons/s7_important.png
new file mode 100644
index 0000000000..d5c189056e
Binary files /dev/null and b/src/site/resources/images/icons/s7_important.png differ
diff --git a/src/site/resources/images/icons/s7_note.png b/src/site/resources/images/icons/s7_note.png
new file mode 100644
index 0000000000..84cf05d47e
Binary files /dev/null and b/src/site/resources/images/icons/s7_note.png differ
diff --git a/src/site/resources/images/icons/s7_tip.png b/src/site/resources/images/icons/s7_tip.png
new file mode 100644
index 0000000000..035093da23
Binary files /dev/null and b/src/site/resources/images/icons/s7_tip.png differ
diff --git a/src/site/resources/images/icons/s7_toddy.png b/src/site/resources/images/icons/s7_toddy.png
new file mode 100644
index 0000000000..0f0cb53cc0
Binary files /dev/null and b/src/site/resources/images/icons/s7_toddy.png differ
diff --git a/src/site/resources/images/icons/s7_warning.png b/src/site/resources/images/icons/s7_warning.png
new file mode 100644
index 0000000000..29f0ad240d
Binary files /dev/null and b/src/site/resources/images/icons/s7_warning.png differ
diff --git a/src/site/resources/images/integrations/apache_hop_logo.png b/src/site/resources/images/integrations/apache_hop_logo.png
new file mode 100644
index 0000000000..95f7d23e1e
Binary files /dev/null and b/src/site/resources/images/integrations/apache_hop_logo.png differ
diff --git a/src/site/resources/images/integrations/plc4x_hop_banner.jpg b/src/site/resources/images/integrations/plc4x_hop_banner.jpg
new file mode 100644
index 0000000000..7eb1967253
Binary files /dev/null and b/src/site/resources/images/integrations/plc4x_hop_banner.jpg differ
diff --git a/src/site/site.xml b/src/site/site.xml
index 81f340ca0c..18964583b1 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -93,6 +93,7 @@
         <item name="Apache Kafka" href="users/integrations/apache-kafka.html"/>
         <item name="Apache NiFi" href="users/integrations/apache-nifi.html"/>
         <item name="Apache StreamPipes" href="users/integrations/apache-streampipes.html"/>
+        <item name="Apache Hop" href="users/integrations/apache-hop.html"/>        
         <item name="Eclipse Ditto" href="users/integrations/eclipse-ditto.html"/>
         <item name="Eclipse Milo OPC UA Server" href="users/integrations/eclipse-milo.html"/>
       </item>