You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2021/01/24 16:45:10 UTC

[plc4x] 07/07: - Finished migrating the Go KNX client to the new model.

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit d9b9ddd1dfe98eef126b6f3f7f3d5f9d84877828
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Jan 24 17:38:40 2021 +0100

    - Finished migrating the Go KNX client to the new model.
---
 .../BaseFreemarkerLanguageTemplateHelper.java      |    4 +
 .../language/go/GoLanguageTemplateHelper.java      |  208 +-
 .../resources/templates/go/data-io-template.ftlh   |    8 +-
 .../knxnetip/ParserSerializerTestsuite.xml         |   35 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |    3 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpField.go   |   33 +-
 .../plc4go/knxnetip/KnxNetIpFieldHandler.go        |   16 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go  |  902 +-
 .../internal/plc4go/knxnetip/KnxNetIpSubscriber.go |    9 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |    3 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |    2 +-
 .../model/ApduDataDeviceDescriptorRead.go          |   31 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |   79 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |    6 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       | 9604 +++++++++++---------
 .../readwrite/model/KnxDatapointMainType.go        |  988 ++
 .../readwrite/model/KnxDatapointSubtype.go         | 5260 -----------
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 1298 +--
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |   39 +-
 .../plc4x/java/knxnetip/ets5/Ets5Parser.java       |   10 +-
 .../java/knxnetip/ets5/model/GroupAddress.java     |    8 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |   92 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |    9 +-
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |   52 +-
 .../knxnetip/ParserSerializerTestsuite.xml         |   35 +-
 25 files changed, 8002 insertions(+), 10732 deletions(-)

diff --git a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
index 2d35bf5..bd767b2 100644
--- a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
+++ b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
@@ -150,6 +150,10 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker
         return typeReference instanceof ComplexTypeReference;
     }
 
+    public boolean isEnumTypeReference(TypeReference typeReference) {
+        return getTypeDefinitionForTypeReference(typeReference) instanceof EnumTypeDefinition;
+    }
+
     public boolean isStringTypeReference(TypeReference typeReference) {
         return typeReference instanceof StringTypeReference;
     }
diff --git a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index 40d0bbc..324adc9 100644
--- a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -51,12 +51,12 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     public String getLanguageTypeNameForField(Field field) {
         boolean optional = field instanceof OptionalField;
         // If the referenced type is a DataIo type, the value is of type PlcValue.
-        if(field instanceof PropertyField) {
+        if (field instanceof PropertyField) {
             PropertyField propertyField = (PropertyField) field;
-            if(propertyField.getType() instanceof ComplexTypeReference) {
+            if (propertyField.getType() instanceof ComplexTypeReference) {
                 ComplexTypeReference complexTypeReference = (ComplexTypeReference) propertyField.getType();
                 final TypeDefinition typeDefinition = getTypeDefinitions().get(complexTypeReference.getName());
-                if(typeDefinition instanceof DataIoTypeDefinition) {
+                if (typeDefinition instanceof DataIoTypeDefinition) {
                     return "PlcValue";
                 }
             }
@@ -66,7 +66,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
 
     @Override
     public String getLanguageTypeNameForTypeReference(TypeReference typeReference) {
-        if(typeReference instanceof SimpleTypeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
             SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
             switch (simpleTypeReference.getBaseType()) {
                 case BIT: {
@@ -137,7 +137,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public String getPlcValueTypeForTypeReference(TypeReference typeReference) {
-        if(typeReference instanceof SimpleTypeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
             SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
             switch (simpleTypeReference.getBaseType()) {
                 case BIT: {
@@ -209,7 +209,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
 
     @Override
     public String getNullValueForTypeReference(TypeReference typeReference) {
-        if(typeReference instanceof SimpleTypeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
             SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
             switch (simpleTypeReference.getBaseType()) {
                 case BIT: {
@@ -226,7 +226,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                     return "\"\"";
                 }
             }
-        } else if(typeReference instanceof ComplexTypeReference) {
+        } else if (typeReference instanceof ComplexTypeReference) {
             return "0";
         }
         return "nil";
@@ -407,9 +407,9 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     String getCastExpressionForTypeReference(TypeReference typeReference) {
-        if(typeReference instanceof SimpleTypeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
             return getLanguageTypeNameForTypeReference(typeReference);
-        } else if(typeReference != null) {
+        } else if (typeReference != null) {
             return "Cast" + getLanguageTypeNameForTypeReference(typeReference);
         } else {
             return "";
@@ -417,19 +417,19 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     private String toExpression(TypeReference fieldType, Term term, Argument[] parserArguments, Argument[] serializerArguments, boolean serialize, boolean suppressPointerAccess) {
-        if(term == null) {
+        if (term == null) {
             return "";
         }
-        if(term instanceof Literal) {
-            if(term instanceof NullLiteral) {
+        if (term instanceof Literal) {
+            if (term instanceof NullLiteral) {
                 return "nil";
-            } else if(term instanceof BooleanLiteral) {
+            } else if (term instanceof BooleanLiteral) {
                 return getCastExpressionForTypeReference(fieldType) + "(" + ((BooleanLiteral) term).getValue() + ")";
-            } else if(term instanceof NumericLiteral) {
+            } else if (term instanceof NumericLiteral) {
                 return getCastExpressionForTypeReference(fieldType) + "(" + ((NumericLiteral) term).getNumber().toString() + ")";
-            } else if(term instanceof StringLiteral) {
+            } else if (term instanceof StringLiteral) {
                 return "\"" + ((StringLiteral) term).getValue() + "\"";
-            } else if(term instanceof VariableLiteral) {
+            } else if (term instanceof VariableLiteral) {
                 return toVariableExpression(fieldType, (VariableLiteral) term, parserArguments, serializerArguments, serialize, suppressPointerAccess);
             } else {
                 throw new RuntimeException("Unsupported Literal type " + term.getClass().getName());
@@ -437,7 +437,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         } else if (term instanceof UnaryTerm) {
             UnaryTerm ut = (UnaryTerm) term;
             Term a = ut.getA();
-            switch(ut.getOperation()) {
+            switch (ut.getOperation()) {
                 case "!":
                     return "!(" + toExpression(fieldType, a, parserArguments, serializerArguments, serialize, false) + ")";
                 case "-":
@@ -474,7 +474,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                 default:
                     return getCastExpressionForTypeReference(fieldType) + "(" + toExpression(fieldType, a, parserArguments, serializerArguments, serialize, false) + ") " +
                         operation + " " +
-                        getCastExpressionForTypeReference(fieldType) +"(" + toExpression(fieldType, b, parserArguments, serializerArguments, serialize, false) + ")";
+                        getCastExpressionForTypeReference(fieldType) + "(" + toExpression(fieldType, b, parserArguments, serializerArguments, serialize, false) + ")";
             }
         } else if (term instanceof TernaryTerm) {
             TernaryTerm tt = (TernaryTerm) term;
@@ -543,7 +543,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             // Cut off the double-quotes
             staticCall = staticCall.substring(1, staticCall.length() - 1);
             // Remove all the previous parts prior to the Class name (Which starts with an uppercase letter)
-            while(staticCall.contains(".") && !StringUtils.isAllUpperCase(staticCall.substring(0,1))) {
+            while (staticCall.contains(".") && !StringUtils.isAllUpperCase(staticCall.substring(0, 1))) {
                 staticCall = staticCall.substring(staticCall.indexOf(".") + 1);
             }
             String className = staticCall.substring(0, staticCall.indexOf("."));
@@ -568,7 +568,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                         }
                     }
                     if (isParserArg) {
-                        if(va.getName().equals("_value")) {
+                        if (va.getName().equals("_value")) {
                             sb.append(va.getName().substring(1) + ((va.getChild() != null) ?
                                 "." + toVariableExpression(typeReference, vl.getChild(), parserArguments, serializerArguments, false, suppressPointerAccess) : ""));
                         } else {
@@ -625,8 +625,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                 sb.append(toVariableExpression(typeReference, va, parserArguments, serializerArguments, true, suppressPointerAccess));
             }
             return getCastExpressionForTypeReference(typeReference) + "(" + ((VariableLiteral) vl.getArgs().get(0)).getName() + "ArraySizeInBytes(" + sb.toString() + "))";
-        }
-        else if("CEIL".equals(vl.getName())) {
+        } else if ("CEIL".equals(vl.getName())) {
             Term va = vl.getArgs().get(0);
             // The Ceil function expects 64 bit floating point values.
             TypeReference tr = new DefaultFloatTypeReference(SimpleTypeReference.SimpleBaseType.FLOAT, 11, 52);
@@ -661,21 +660,21 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         // If the current property references a parserArguments property and that is a discriminator property, we also have to serialize it differently..
         else if ((vl.getChild() != null) && (getTypeReferenceForProperty(((ComplexTypeDefinition) getThisTypeDefinition()), vl.getName()) != null)) {
             final Optional<TypeReference> typeReferenceForProperty = getTypeReferenceForProperty(((ComplexTypeDefinition) getThisTypeDefinition()), vl.getName());
-            if(typeReferenceForProperty.isPresent() && typeReferenceForProperty.get() instanceof ComplexTypeReference) {
+            if (typeReferenceForProperty.isPresent() && typeReferenceForProperty.get() instanceof ComplexTypeReference) {
                 final TypeReference complexTypeReference = typeReferenceForProperty.get();
                 TypeDefinition typeDefinition = getTypeDefinitionForTypeReference(complexTypeReference);
-                if(typeDefinition instanceof ComplexTypeDefinition) {
+                if (typeDefinition instanceof ComplexTypeDefinition) {
                     ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) typeDefinition;
                     String childProperty = vl.getChild().getName();
                     final Optional<Field> matchingDiscriminatorField = complexTypeDefinition.getFields().stream().filter(field -> (field instanceof DiscriminatorField) && ((DiscriminatorField) field).getName().equals(childProperty)).findFirst();
-                    if(matchingDiscriminatorField.isPresent()) {
+                    if (matchingDiscriminatorField.isPresent()) {
                         return "Cast" + getLanguageTypeNameForTypeReference(complexTypeReference) + "(" + vl.getName() + ")." + StringUtils.capitalize(childProperty) + "()";
                     }
                 }
             }
         }
         // If the current term references a serialization argument, handle it differently (don't prefix it with "m.")
-        else if((serializerArguments != null) && Arrays.stream(serializerArguments).anyMatch(argument -> argument.getName().equals(vl.getName()))) {
+        else if ((serializerArguments != null) && Arrays.stream(serializerArguments).anyMatch(argument -> argument.getName().equals(vl.getName()))) {
             return vl.getName() + ((vl.getChild() != null) ?
                 "." + toVariableExpression(typeReference, vl.getChild(), parserArguments, serializerArguments, false, suppressPointerAccess) : "");
         }
@@ -687,7 +686,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         int sizeInBits = 0;
         StringBuilder sb = new StringBuilder("");
         for (Field field : complexTypeDefinition.getFields()) {
-            if(field instanceof ArrayField) {
+            if (field instanceof ArrayField) {
                 ArrayField arrayField = (ArrayField) field;
                 final SimpleTypeReference type = (SimpleTypeReference) arrayField.getType();
                 switch (arrayField.getLoopType()) {
@@ -701,14 +700,13 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                         // No terminated.
                         break;
                 }
-            } else if(field instanceof TypedField) {
+            } else if (field instanceof TypedField) {
                 TypedField typedField = (TypedField) field;
                 final TypeReference type = typedField.getType();
-                if(field instanceof ManualField) {
+                if (field instanceof ManualField) {
                     ManualField manualField = (ManualField) field;
                     sb.append("(").append(toSerializationExpression(manualField, manualField.getLengthExpression(), parserArguments)).append(") + ");
-                }
-                else if(type instanceof SimpleTypeReference) {
+                } else if (type instanceof SimpleTypeReference) {
                     SimpleTypeReference simpleTypeReference = (SimpleTypeReference) type;
                     sizeInBits += simpleTypeReference.getSizeInBits();
                 } else {
@@ -720,16 +718,16 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public String escapeValue(TypeReference typeReference, String valueString) {
-        if(valueString == null) {
+        if (valueString == null) {
             return null;
         }
-        if(typeReference instanceof SimpleTypeReference) {
+        if (typeReference instanceof SimpleTypeReference) {
             SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
             switch (simpleTypeReference.getBaseType()) {
                 case UINT:
                 case INT:
                     // If it's a one character string and is numeric, output it as char.
-                    if(!NumberUtils.isParsable(valueString) && (valueString.length() == 1)) {
+                    if (!NumberUtils.isParsable(valueString) && (valueString.length() == 1)) {
                         return "'" + valueString + "'";
                     }
                     break;
@@ -747,7 +745,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             if ("null".equals(valueString)) {
                 return "0";
             }
-            if(valueString.contains(".")) {
+            if (valueString.contains(".")) {
                 String typeName = valueString.substring(0, valueString.indexOf('.'));
                 String constantName = valueString.substring(valueString.indexOf('.') + 1);
                 return typeName + "_" + constantName;
@@ -771,7 +769,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     public List<DiscriminatedComplexTypeDefinition> getUniqueSwitchCases(List<DiscriminatedComplexTypeDefinition> allSwitchCases) {
         Map<String, DiscriminatedComplexTypeDefinition> switchCases = new LinkedHashMap<>();
         for (DiscriminatedComplexTypeDefinition switchCase : allSwitchCases) {
-            if(!switchCases.containsKey(switchCase.getName())) {
+            if (!switchCases.containsKey(switchCase.getName())) {
                 switchCases.put(switchCase.getName(), switchCase);
             }
         }
@@ -782,21 +780,21 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) getThisTypeDefinition();
         List<String> imports = new ArrayList<>();
 
-        if(complexTypeDefinition.getAllPropertyFields().stream().anyMatch(field -> isArrayField(field) && getLanguageTypeNameForField(field).equals("int8"))) {
+        if (complexTypeDefinition.getAllPropertyFields().stream().anyMatch(field -> isArrayField(field) && getLanguageTypeNameForField(field).equals("int8"))) {
             imports.add("\"encoding/base64\"");
         }
 
         imports.add("\"encoding/xml\"");
 
         // For "Fields with complex type", constant, typeSwitch,  fields: "errors"
-        if(!complexTypeDefinition.getFields().isEmpty()) {
+        if (!complexTypeDefinition.getFields().isEmpty()) {
             imports.add("\"errors\"");
         }
 
         imports.add("\"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils\"");
 
         // At least one reserved field or simple field with complex type
-        if(complexTypeDefinition.getFields().stream().anyMatch(field ->
+        if (complexTypeDefinition.getFields().stream().anyMatch(field ->
             (field instanceof ReservedField))) {
             imports.add("log \"github.com/sirupsen/logrus\"");
         }
@@ -804,19 +802,19 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         imports.add("\"io\"");
 
         // For CEIL functions: "math"
-        if(complexTypeDefinition.getFields().stream().anyMatch(field ->
+        if (complexTypeDefinition.getFields().stream().anyMatch(field ->
             FieldUtils.contains(field, "CEIL"))) {
             imports.add("\"math\"");
         }
 
         // For Constant field: "strconv"
-        if(complexTypeDefinition.getFields().stream().anyMatch(field ->
+        if (complexTypeDefinition.getFields().stream().anyMatch(field ->
             (field instanceof ConstField))/* || complexTypeDefinition.getAllPropertyFields().stream().anyMatch(
                 propertyField -> isSimpleField(propertyField))*/) {
             imports.add("\"strconv\"");
         }
 
-        if(isDiscriminatedParentTypeDefinition()) {
+        if (isDiscriminatedParentTypeDefinition()) {
             imports.add("\"reflect\"");
             imports.add("\"strings\"");
         }
@@ -834,7 +832,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         imports.add("\"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils\"");
         imports.add("api \"github.com/apache/plc4x/plc4go/pkg/plc4go/values\"");
 
-        if(dataIo.getSwitchField().getCases().stream().anyMatch(typeCase ->
+        if (dataIo.getSwitchField().getCases().stream().anyMatch(typeCase ->
             (typeCase.getName().equals("TIME_OF_DAY") && hasFieldsWithNames(typeCase.getFields(), "hour", "minutes", "seconds")) ||
                 (typeCase.getName().equals("DATE") && hasFieldsWithNames(typeCase.getFields(), "year", "month", "day")) ||
                 (typeCase.getName().equals("DATE_AND_TIME") && hasFieldsWithNames(typeCase.getFields(), "year", "month", "day", "hour", "minutes", "seconds")))) {
@@ -844,84 +842,84 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public String getVariableName(Field field) {
-        if(!(field instanceof NamedField)) {
+        if (!(field instanceof NamedField)) {
             return "_";
         }
         NamedField namedField = (NamedField) field;
 
         String name = null;
         for (Field curField : ((ComplexTypeDefinition) getThisTypeDefinition()).getFields()) {
-            if(curField == field) {
+            if (curField == field) {
                 name = namedField.getName();
-            } else if(name != null) {
-                if(curField instanceof ArrayField) {
+            } else if (name != null) {
+                if (curField instanceof ArrayField) {
                     ArrayField arrayField = (ArrayField) curField;
-                    if(arrayField.getLoopExpression().contains(name)) {
+                    if (arrayField.getLoopExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof ChecksumField) {
+                } else if (curField instanceof ChecksumField) {
                     ChecksumField checksumField = (ChecksumField) curField;
-                    if(checksumField.getChecksumExpression().contains(name)) {
+                    if (checksumField.getChecksumExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof ImplicitField) {
+                } else if (curField instanceof ImplicitField) {
                     ImplicitField implicitField = (ImplicitField) curField;
-                    if(implicitField.getSerializeExpression().contains(name)) {
+                    if (implicitField.getSerializeExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof ManualArrayField) {
+                } else if (curField instanceof ManualArrayField) {
                     ManualArrayField manualArrayField = (ManualArrayField) curField;
-                    if(manualArrayField.getLengthExpression().contains(name)) {
+                    if (manualArrayField.getLengthExpression().contains(name)) {
                         return name;
                     }
-                    if(manualArrayField.getLoopExpression().contains(name)) {
+                    if (manualArrayField.getLoopExpression().contains(name)) {
                         return name;
                     }
-                    if(manualArrayField.getParseExpression().contains(name)) {
+                    if (manualArrayField.getParseExpression().contains(name)) {
                         return name;
                     }
-                    if(manualArrayField.getSerializeExpression().contains(name)) {
+                    if (manualArrayField.getSerializeExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof ManualField) {
+                } else if (curField instanceof ManualField) {
                     ManualField manualField = (ManualField) curField;
-                    if(manualField.getLengthExpression().contains(name)) {
+                    if (manualField.getLengthExpression().contains(name)) {
                         return name;
                     }
-                    if(manualField.getParseExpression().contains(name)) {
+                    if (manualField.getParseExpression().contains(name)) {
                         return name;
                     }
-                    if(manualField.getSerializeExpression().contains(name)) {
+                    if (manualField.getSerializeExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof OptionalField) {
+                } else if (curField instanceof OptionalField) {
                     OptionalField optionalField = (OptionalField) curField;
-                    if(optionalField.getConditionExpression().contains(name)) {
+                    if (optionalField.getConditionExpression().contains(name)) {
                         return name;
                     }
-                } else if(curField instanceof SwitchField) {
+                } else if (curField instanceof SwitchField) {
                     SwitchField switchField = (SwitchField) curField;
                     for (Term discriminatorExpression : switchField.getDiscriminatorExpressions()) {
-                        if(discriminatorExpression.contains(name)) {
+                        if (discriminatorExpression.contains(name)) {
                             return name;
                         }
                     }
                     for (DiscriminatedComplexTypeDefinition curCase : switchField.getCases()) {
                         for (Argument parserArgument : curCase.getParserArguments()) {
-                            if(parserArgument.getName().equals(name)) {
+                            if (parserArgument.getName().equals(name)) {
                                 return name;
                             }
                         }
                     }
-                } else if(curField instanceof VirtualField) {
+                } else if (curField instanceof VirtualField) {
                     VirtualField virtualField = (VirtualField) curField;
-                    if(virtualField.getValueExpression().contains(name)) {
+                    if (virtualField.getValueExpression().contains(name)) {
                         return name;
                     }
                 }
-                if(curField.getParams() != null) {
+                if (curField.getParams() != null) {
                     for (Term param : curField.getParams()) {
-                        if(param.contains(name)) {
+                        if (param.contains(name)) {
                             return name;
                         }
                     }
@@ -933,14 +931,14 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public boolean needsVariable(ArrayField field, String variableName, boolean serialization) {
-        if(!serialization) {
+        if (!serialization) {
             if (field.getLoopExpression().contains(variableName)) {
                 return true;
             }
         }
-        if((field.getParams() != null) && (field.getParams().length > 0)){
+        if ((field.getParams() != null) && (field.getParams().length > 0)) {
             for (Term param : field.getParams()) {
-                if(param.contains(variableName)) {
+                if (param.contains(variableName)) {
                     return true;
                 }
             }
@@ -962,20 +960,20 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         boolean usesFunction = false;
         // As the ARRAY_SIZE_IN_BYTES only applies to ArrayFields, search for these
         for (Field curField : ((ComplexTypeDefinition) getThisTypeDefinition()).getFields()) {
-            if(curField instanceof ArrayField) {
+            if (curField instanceof ArrayField) {
                 ArrayField arrayField = (ArrayField) curField;
-                if(arrayField.getLoopExpression().contains(functionName)) {
+                if (arrayField.getLoopExpression().contains(functionName)) {
                     usesFunction = true;
                 }
                 result.put(arrayField.getName(), getLanguageTypeNameForField(arrayField));
-            } else if(curField instanceof ImplicitField) {
+            } else if (curField instanceof ImplicitField) {
                 ImplicitField implicitField = (ImplicitField) curField;
-                if(implicitField.getSerializeExpression().contains(functionName)) {
+                if (implicitField.getSerializeExpression().contains(functionName)) {
                     usesFunction = true;
                 }
             }
         }
-        if(usesFunction) {
+        if (usesFunction) {
             return result;
         } else {
             return Collections.emptyMap();
@@ -983,7 +981,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public boolean requiresStartPosAndCurPos() {
-        if(getThisTypeDefinition() instanceof ComplexTypeDefinition) {
+        if (getThisTypeDefinition() instanceof ComplexTypeDefinition) {
             for (Field curField : ((ComplexTypeDefinition) getThisTypeDefinition()).getFields()) {
                 if (requiresVariable(curField, "curPos")) {
                     return true;
@@ -994,18 +992,18 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public boolean requiresVariable(Field curField, String variable) {
-        if(curField instanceof ArrayField) {
+        if (curField instanceof ArrayField) {
             ArrayField arrayField = (ArrayField) curField;
-            if(arrayField.getLoopExpression().contains(variable)) {
+            if (arrayField.getLoopExpression().contains(variable)) {
                 return true;
             }
-        } else if(curField instanceof OptionalField) {
+        } else if (curField instanceof OptionalField) {
             OptionalField optionalField = (OptionalField) curField;
-            if(optionalField.getConditionExpression().contains(variable)) {
+            if (optionalField.getConditionExpression().contains(variable)) {
                 return true;
             }
         }
-        if(curField.getParams() != null) {
+        if (curField.getParams() != null) {
             for (Term paramTerm : curField.getParams()) {
                 if (paramTerm.contains(variable)) {
                     return true;
@@ -1016,55 +1014,69 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     }
 
     public Term findTerm(Term baseTerm, String name) {
-        if(baseTerm instanceof VariableLiteral) {
+        if (baseTerm instanceof VariableLiteral) {
             VariableLiteral variableLiteral = (VariableLiteral) baseTerm;
-            if(variableLiteral.getName().equals(name)) {
+            if (variableLiteral.getName().equals(name)) {
                 return variableLiteral;
             }
-            if(variableLiteral.getChild() != null) {
+            if (variableLiteral.getChild() != null) {
                 Term found = findTerm(variableLiteral.getChild(), name);
-                if(found != null) {
+                if (found != null) {
                     return found;
                 }
             }
             for (Term arg : variableLiteral.getArgs()) {
                 Term found = findTerm(arg, name);
-                if(found != null) {
+                if (found != null) {
                     return found;
                 }
             }
-        } else if(baseTerm instanceof UnaryTerm) {
+        } else if (baseTerm instanceof UnaryTerm) {
             UnaryTerm unaryTerm = (UnaryTerm) baseTerm;
             Term found = findTerm(unaryTerm.getA(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
-        } else if(baseTerm instanceof BinaryTerm) {
+        } else if (baseTerm instanceof BinaryTerm) {
             BinaryTerm binaryTerm = (BinaryTerm) baseTerm;
             Term found = findTerm(binaryTerm.getA(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
             found = findTerm(binaryTerm.getB(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
-        } else if(baseTerm instanceof TernaryTerm) {
+        } else if (baseTerm instanceof TernaryTerm) {
             TernaryTerm ternaryTerm = (TernaryTerm) baseTerm;
             Term found = findTerm(ternaryTerm.getA(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
             found = findTerm(ternaryTerm.getB(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
             found = findTerm(ternaryTerm.getC(), name);
-            if(found != null) {
+            if (found != null) {
                 return found;
             }
         }
         return null;
     }
 
+    public boolean isEnumExpression(String expression) {
+        if (!expression.contains(".")) {
+            return false;
+        }
+        String enumName = expression.substring(0, expression.indexOf('.'));
+        TypeDefinition typeDefinition = this.getTypeDefinitions().get(enumName);
+        return (typeDefinition instanceof EnumTypeDefinition);
+    }
+
+    public String getEnumExpression(String expression) {
+        String enumName = expression.substring(0, expression.indexOf('.'));
+        String enumConstant = expression.substring(expression.indexOf('.') + 1);
+        return enumName + "_" + enumConstant;
+    }
 }
diff --git a/build-utils/language-go/src/main/resources/templates/go/data-io-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/data-io-template.ftlh
index 6750649..ff1d417 100644
--- a/build-utils/language-go/src/main/resources/templates/go/data-io-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/data-io-template.ftlh
@@ -70,10 +70,10 @@ import (
     </#if>
 )
 
-func ${type.name}Parse(io *utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (api.PlcValue, error) {
+func ${type.name}Parse(io *utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (api.PlcValue, error) {
     switch {
     <#list type.switchField.cases as case>
-        case <#if case.discriminatorValues?has_content><#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#else>${discriminatorValue}</#if><#sep> && </#sep></#list></#if>: // ${case.name}
+        case <#if case.discriminatorValues?has_content><#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isEnumExpression(discriminatorValue)>${helper.getEnumExpression(discriminatorValue)}<#else>$ [...]
         <#assign valueDefined=false>
         <#if case.name == "Struct">
             _map := map[string]api.PlcValue{}
@@ -167,10 +167,10 @@ func ${type.name}Parse(io *utils.ReadBuffer<#if type.parserArguments?has_content
     return nil, errors.New("unsupported type")
 }
 
-func ${type.name}Serialize(io *utils.WriteBuffer, value api.PlcValue<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
+func ${type.name}Serialize(io *utils.WriteBuffer, value api.PlcValue<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
     switch {
     <#list type.switchField.cases as case>
-        case <#if case.discriminatorValues?has_content><#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#else>${discriminatorValue}</#if><#sep> && </#sep></#list></#if>: // ${case.name}
+        case <#if case.discriminatorValues?has_content><#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isEnumExpression(discriminatorValue)>${helper.getEnumExpression(discriminatorValue)}<#else>$ [...]
         <#list case.fields as field>
             <#switch field.typeName>
                 <#case "array">
diff --git a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
index e79846d..6ad045f 100644
--- a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
+++ b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
@@ -416,6 +416,7 @@
           <additionalInformation/>
           <dataFrame className="org.apache.plc4x.java.knxnetip.readwrite.LDataFrameDataExt">
             <repeated>true</repeated>
+            <notAckFrame>true</notAckFrame>
             <priority>LOW</priority>
             <acknowledgeRequested>false</acknowledgeRequested>
             <errorFlag>false</errorFlag>
@@ -428,15 +429,15 @@
               <subGroup>10</subGroup>
             </sourceAddress>
             <destinationAddress>Egw=</destinationAddress>
-            <dataLength>1</dataLength>
-            <control>false</control>
-            <numbered>false</numbered>
-            <counter>0</counter>
-            <controlType/>
-            <apci>GROUP_VALUE_WRITE_PDU</apci>
-            <extendedApci/>
-            <dataFirstByte>1</dataFirstByte>
-            <data></data>
+            <apdu className="org.apache.plc4x.java.knxnetip.readwrite.ApduDataContainer">
+              <dataLength>1</dataLength>
+              <numbered>false</numbered>
+              <counter>0</counter>
+              <dataApdu className="org.apache.plc4x.java.knxnetip.readwrite.ApduDataGroupValueWrite">
+                <dataFirstByte>1</dataFirstByte>
+                <data></data>
+              </dataApdu>
+            </apdu>
           </dataFrame>
         </cemi>
       </TunnelingRequest>
@@ -476,6 +477,7 @@
           </additionalInformation>
           <dataFrame className="org.apache.plc4x.java.knxnetip.readwrite.LDataFrameDataExt">
             <repeated>true</repeated>
+            <notAckFrame>true</notAckFrame>
             <priority>LOW</priority>
             <acknowledgeRequested>false</acknowledgeRequested>
             <errorFlag>false</errorFlag>
@@ -488,15 +490,12 @@
               <subGroup>30</subGroup>
             </sourceAddress>
             <destinationAddress>DOE=</destinationAddress>
-            <dataLength>0</dataLength>
-            <control>true</control>
-            <numbered>false</numbered>
-            <counter>0</counter>
-            <controlType>DISCONNECT</controlType>
-            <apci/>
-            <extendedApci/>
-            <dataFirstByte/>
-            <data></data>
+            <apdu className="org.apache.plc4x.java.knxnetip.readwrite.ApduControlContainer">
+              <dataLength>0</dataLength>
+              <numbered>false</numbered>
+              <counter>0</counter>
+              <controlApdu className="org.apache.plc4x.java.knxnetip.readwrite.ApduControlDisconnect"/>
+            </apdu>
           </dataFrame>
           <crc>13</crc>
         </cemi>
diff --git a/plc4go/cmd/main/drivers/knxnetip_test.go b/plc4go/cmd/main/drivers/knxnetip_test.go
index 1ac5f96..5e42309 100644
--- a/plc4go/cmd/main/drivers/knxnetip_test.go
+++ b/plc4go/cmd/main/drivers/knxnetip_test.go
@@ -279,9 +279,8 @@ func TestKnxNetIpPlc4goPropertyRead(t *testing.T) {
 	defer connection.Close()
 
 	readRequestBuilder := connection.ReadRequestBuilder()
-	readRequestBuilder.AddItem("manufacturerId", "1.1.10/0/12")
+    readRequestBuilder.AddItem("manufacturerId", "1.1.10/0/12")
 	readRequestBuilder.AddItem("programVersion", "1.1.10/3/13")
-	//readRequestBuilder.AddItem("hardwareType", "1.1.10/0/78")
 	readRequest, _ := readRequestBuilder.Build()
 
 	rrr := readRequest.Execute()
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
index 1d255c6..49f7eba 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
@@ -28,13 +28,14 @@ import (
 
 type KnxNetIpField interface {
 	IsPatternField() bool
+    GetFieldType() *driverModel.KnxDatapointType
 	matches(knxGroupAddress *driverModel.KnxGroupAddress) bool
 	toGroupAddress() *driverModel.KnxGroupAddress
 	apiModel.PlcField
 }
 
 type KnxNetIpGroupAddress3LevelPlcField struct {
-	FieldType *driverModel.KnxDatapointSubtype
+	FieldType *driverModel.KnxDatapointType
 	// 5 Bits: Values 0-31
 	MainGroup string
 	// 3 Bits: values 0-7
@@ -44,7 +45,7 @@ type KnxNetIpGroupAddress3LevelPlcField struct {
 	KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress3LevelPlcField(fieldType *driverModel.KnxDatapointSubtype, mainGroup string, middleGroup string, subGroup string) KnxNetIpGroupAddress3LevelPlcField {
+func NewKnxNetIpGroupAddress3LevelPlcField(fieldType *driverModel.KnxDatapointType, mainGroup string, middleGroup string, subGroup string) KnxNetIpGroupAddress3LevelPlcField {
 	return KnxNetIpGroupAddress3LevelPlcField{
 		FieldType:   fieldType,
 		MainGroup:   mainGroup,
@@ -57,6 +58,10 @@ func (k KnxNetIpGroupAddress3LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
+func (k KnxNetIpGroupAddress3LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+    return k.FieldType
+}
+
 func (k KnxNetIpGroupAddress3LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
@@ -110,7 +115,7 @@ func (k KnxNetIpGroupAddress3LevelPlcField) toGroupAddress() *driverModel.KnxGro
 }
 
 type KnxNetIpGroupAddress2LevelPlcField struct {
-	FieldType *driverModel.KnxDatapointSubtype
+	FieldType *driverModel.KnxDatapointType
 	// 5 Bits: Values 0-31
 	MainGroup string
 	// 11 Bits
@@ -118,7 +123,7 @@ type KnxNetIpGroupAddress2LevelPlcField struct {
 	KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress2LevelPlcField(fieldType *driverModel.KnxDatapointSubtype, mainGroup string, subGroup string) KnxNetIpGroupAddress2LevelPlcField {
+func NewKnxNetIpGroupAddress2LevelPlcField(fieldType *driverModel.KnxDatapointType, mainGroup string, subGroup string) KnxNetIpGroupAddress2LevelPlcField {
 	return KnxNetIpGroupAddress2LevelPlcField{
 		FieldType: fieldType,
 		MainGroup: mainGroup,
@@ -130,6 +135,10 @@ func (k KnxNetIpGroupAddress2LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
+func (k KnxNetIpGroupAddress2LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+    return k.FieldType
+}
+
 func (k KnxNetIpGroupAddress2LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
@@ -174,13 +183,13 @@ func (k KnxNetIpGroupAddress2LevelPlcField) toGroupAddress() *driverModel.KnxGro
 }
 
 type KnxNetIpGroupAddress1LevelPlcField struct {
-	FieldType *driverModel.KnxDatapointSubtype
+	FieldType *driverModel.KnxDatapointType
 	// 16 Bits
 	MainGroup string
 	KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress1LevelPlcField(fieldType *driverModel.KnxDatapointSubtype, mainGroup string) KnxNetIpGroupAddress1LevelPlcField {
+func NewKnxNetIpGroupAddress1LevelPlcField(fieldType *driverModel.KnxDatapointType, mainGroup string) KnxNetIpGroupAddress1LevelPlcField {
 	return KnxNetIpGroupAddress1LevelPlcField{
 		FieldType: fieldType,
 		MainGroup: mainGroup,
@@ -191,6 +200,10 @@ func (k KnxNetIpGroupAddress1LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
+func (k KnxNetIpGroupAddress1LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+    return k.FieldType
+}
+
 func (k KnxNetIpGroupAddress1LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
@@ -226,7 +239,7 @@ func (k KnxNetIpGroupAddress1LevelPlcField) toGroupAddress() *driverModel.KnxGro
 }
 
 type KnxNetIpDevicePropertyAddressPlcField struct {
-	FieldType *driverModel.KnxDatapointSubtype
+	FieldType *driverModel.KnxDatapointType
 	// 5 Bits: Values 0-31
 	MainGroup string
 	// 3 Bits: values 0-7
@@ -238,7 +251,7 @@ type KnxNetIpDevicePropertyAddressPlcField struct {
 	KnxNetIpField
 }
 
-func NewKnxNetIpDevicePropertyAddressPlcField(fieldType *driverModel.KnxDatapointSubtype, mainGroup string, middleGroup string, subGroup string, objectId string, propertyId string) KnxNetIpDevicePropertyAddressPlcField {
+func NewKnxNetIpDevicePropertyAddressPlcField(fieldType *driverModel.KnxDatapointType, mainGroup string, middleGroup string, subGroup string, objectId string, propertyId string) KnxNetIpDevicePropertyAddressPlcField {
 	return KnxNetIpDevicePropertyAddressPlcField{
 		FieldType:   fieldType,
 		MainGroup:   mainGroup,
@@ -253,6 +266,10 @@ func (k KnxNetIpDevicePropertyAddressPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
+func (k KnxNetIpDevicePropertyAddressPlcField) GetFieldType() *driverModel.KnxDatapointType {
+    return k.FieldType
+}
+
 func (k KnxNetIpDevicePropertyAddressPlcField) GetQuantity() uint16 {
 	return 1
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
index 8490018..2971763 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
@@ -63,30 +63,30 @@ func NewFieldHandler() FieldHandler {
 func (m FieldHandler) ParseQuery(query string) (apiModel.PlcField, error) {
 	if match := utils.GetSubgroupMatches(m.knxNetIpDeviceQuery, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
-		var fieldType driverModel.KnxDatapointSubtype
+		var fieldType driverModel.KnxDatapointType
 		if ok {
-			fieldType = driverModel.KnxDatapointSubtypeByName(fieldTypeName)
+			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
 		return NewKnxNetIpDevicePropertyAddressPlcField(&fieldType, match["mainGroup"], match["middleGroup"], match["subGroup"], match["objectId"], match["propertyId"]), nil
 	} else if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress3Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
-		var fieldType driverModel.KnxDatapointSubtype
+		var fieldType driverModel.KnxDatapointType
 		if ok {
-			fieldType = driverModel.KnxDatapointSubtypeByName(fieldTypeName)
+			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
 		return NewKnxNetIpGroupAddress3LevelPlcField(&fieldType, match["mainGroup"], match["middleGroup"], match["subGroup"]), nil
 	} else if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress2Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
-		var fieldType driverModel.KnxDatapointSubtype
+		var fieldType driverModel.KnxDatapointType
 		if ok {
-			fieldType = driverModel.KnxDatapointSubtypeByName(fieldTypeName)
+			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
 		return NewKnxNetIpGroupAddress2LevelPlcField(&fieldType, match["mainGroup"], match["subGroup"]), nil
 	} else if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress1Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
-		var fieldType driverModel.KnxDatapointSubtype
+		var fieldType driverModel.KnxDatapointType
 		if ok {
-			fieldType = driverModel.KnxDatapointSubtypeByName(fieldTypeName)
+			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
 		return NewKnxNetIpGroupAddress1LevelPlcField(&fieldType, match["mainGroup"]), nil
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
index d658b5f..7eb29bc 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
@@ -19,380 +19,384 @@
 package knxnetip
 
 import (
-	"errors"
-	"github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite"
-	driverModel "github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite/model"
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
-	internalModel "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	internalValues "github.com/apache/plc4x/plc4go/internal/plc4go/spi/values"
-	apiModel "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
-	apiValues "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
-	"strconv"
-	"time"
+    "errors"
+    "github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite"
+    driverModel "github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite/model"
+    "github.com/apache/plc4x/plc4go/internal/plc4go/spi"
+    internalModel "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
+    "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+    internalValues "github.com/apache/plc4x/plc4go/internal/plc4go/spi/values"
+    apiModel "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
+    apiValues "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+    "strconv"
+    "time"
 )
 
 type KnxNetIpReader struct {
-	connection *KnxNetIpConnection
-	spi.PlcReader
+    connection *KnxNetIpConnection
+    spi.PlcReader
 }
 
 func NewKnxNetIpReader(connection *KnxNetIpConnection) *KnxNetIpReader {
-	return &KnxNetIpReader{
-		connection: connection,
-	}
+    return &KnxNetIpReader{
+        connection: connection,
+    }
 }
 
 func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiModel.PlcReadRequestResult {
-	resultChan := make(chan apiModel.PlcReadRequestResult)
-	go func() {
-		responseCodes := map[string]apiModel.PlcResponseCode{}
-		plcValues := map[string]apiValues.PlcValue{}
-
-		// Sort the fields in direct properties, which will have to be actively read from the devices
-		// and group-addresses which will be locally processed from the local cache.
-		directProperties := map[driverModel.KnxAddress]map[string]KnxNetIpDevicePropertyAddressPlcField{}
-		groupAddresses := map[string]KnxNetIpField{}
-		for _, fieldName := range readRequest.GetFieldNames() {
-			// Get the knx field
-			field, err := CastToKnxNetIpFieldFromPlcField(readRequest.GetField(fieldName))
-			if err != nil {
-				responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
-				plcValues[fieldName] = nil
-				continue
-			}
-
-			switch field.(type) {
-			case KnxNetIpDevicePropertyAddressPlcField:
-				propertyField := field.(KnxNetIpDevicePropertyAddressPlcField)
-				knxAddress := FieldToKnxAddress(propertyField)
-				if knxAddress == nil {
-					continue
-				}
-				if _, ok := directProperties[*knxAddress]; !ok {
-					directProperties[*knxAddress] = map[string]KnxNetIpDevicePropertyAddressPlcField{}
-				}
-				directProperties[*knxAddress][fieldName] = propertyField
-			default:
-				groupAddresses[fieldName] = field
-			}
-		}
-
-		// Process the direct properties.
-		// Connect to each knx device and read all of the properties on that particular device.
-		// Finish up by explicitly disconnecting after all properties on the device have been read.
-		for deviceAddress, fields := range directProperties {
-			// Connect to the device
-			err := m.connectToDevice(deviceAddress)
-			// If something went wrong all field for this device are equally failed
-			if err != nil {
-				for fieldName := range fields {
-					responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
-					plcValues[fieldName] = nil
-				}
-				continue
-			}
-
-			// Collect all the properties on this device
-			counter := uint8(1)
-			for fieldName, field := range fields {
-				responseCode, plcValue := m.readDeviceProperty(field, counter)
-				responseCodes[fieldName] = responseCode
-				plcValues[fieldName] = plcValue
-				counter++
-			}
-
-			// Disconnect from the device
-			_ = m.disconnectFromDevice(*m.connection.ClientKnxAddress, deviceAddress)
-			// In this case we ignore if something goes wrong
-		}
-
-		// Get the group address values from the cache
-		for fieldName, field := range groupAddresses {
-			responseCode, plcValue := m.readGroupAddress(field)
-			responseCodes[fieldName] = responseCode
-			plcValues[fieldName] = plcValue
-		}
-
-		// Assemble the results
-		result := internalModel.NewDefaultPlcReadResponse(readRequest, responseCodes, plcValues)
-		resultChan <- apiModel.PlcReadRequestResult{
-			Request:  readRequest,
-			Response: result,
-			Err:      nil,
-		}
-	}()
-	return resultChan
+    resultChan := make(chan apiModel.PlcReadRequestResult)
+    go func() {
+        responseCodes := map[string]apiModel.PlcResponseCode{}
+        plcValues := map[string]apiValues.PlcValue{}
+
+        // Sort the fields in direct properties, which will have to be actively read from the devices
+        // and group-addresses which will be locally processed from the local cache.
+        directProperties := map[driverModel.KnxAddress]map[string]KnxNetIpDevicePropertyAddressPlcField{}
+        groupAddresses := map[string]KnxNetIpField{}
+        for _, fieldName := range readRequest.GetFieldNames() {
+            // Get the knx field
+            field, err := CastToKnxNetIpFieldFromPlcField(readRequest.GetField(fieldName))
+            if err != nil {
+                responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
+                plcValues[fieldName] = nil
+                continue
+            }
+
+            switch field.(type) {
+            case KnxNetIpDevicePropertyAddressPlcField:
+                propertyField := field.(KnxNetIpDevicePropertyAddressPlcField)
+                knxAddress := FieldToKnxAddress(propertyField)
+                if knxAddress == nil {
+                    continue
+                }
+                if _, ok := directProperties[*knxAddress]; !ok {
+                    directProperties[*knxAddress] = map[string]KnxNetIpDevicePropertyAddressPlcField{}
+                }
+                directProperties[*knxAddress][fieldName] = propertyField
+            default:
+                groupAddresses[fieldName] = field
+            }
+        }
+
+        // Process the direct properties.
+        // Connect to each knx device and read all of the properties on that particular device.
+        // Finish up by explicitly disconnecting after all properties on the device have been read.
+        for deviceAddress, fields := range directProperties {
+            // Connect to the device
+            err := m.connectToDevice(deviceAddress)
+            // If something went wrong all field for this device are equally failed
+            if err != nil {
+                for fieldName := range fields {
+                    responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
+                    plcValues[fieldName] = nil
+                }
+                continue
+            }
+
+            // Collect all the properties on this device
+            counter := uint8(1)
+            for fieldName, field := range fields {
+                responseCode, plcValue := m.readDeviceProperty(field, counter)
+                responseCodes[fieldName] = responseCode
+                plcValues[fieldName] = plcValue
+                counter++
+            }
+
+            // Disconnect from the device
+            _ = m.disconnectFromDevice(*m.connection.ClientKnxAddress, deviceAddress)
+            // In this case we ignore if something goes wrong
+        }
+
+        // Get the group address values from the cache
+        for fieldName, field := range groupAddresses {
+            responseCode, plcValue := m.readGroupAddress(field)
+            responseCodes[fieldName] = responseCode
+            plcValues[fieldName] = plcValue
+        }
+
+        // Assemble the results
+        result := internalModel.NewDefaultPlcReadResponse(readRequest, responseCodes, plcValues)
+        resultChan <- apiModel.PlcReadRequestResult{
+            Request:  readRequest,
+            Response: result,
+            Err:      nil,
+        }
+    }()
+    return resultChan
 }
 
 func (m KnxNetIpReader) connectToDevice(targetAddress driverModel.KnxAddress) error {
-	connectionSuccess := make(chan bool)
-	deviceConnectionRequest := driverModel.NewTunnelingRequest(
-		driverModel.NewTunnelingRequestDataBlock(0, 0),
-		driverModel.NewLDataReq(0, nil,
-			driverModel.NewLDataFrameDataExt(false, 6, 0,
-				driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
-				driverModel.NewApduControlContainer(driverModel.NewApduControlConnect(), 0, false, 0),
-				true, true, driverModel.CEMIPriority_SYSTEM,  false, false)))
-
-	// Send the request
-	err := m.connection.SendRequest(
-		deviceConnectionRequest,
-		// The Gateway is now supposed to send an Ack to this request.
-		func(message interface{}) bool {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			if tunnelingRequest == nil ||
-				tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
-				return false
-			}
-			lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
-			return lDataCon != nil
-		},
-		func(message interface{}) error {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
-			// If the error flag is set, there was an error connecting
-			if lDataCon.DataFrame.ErrorFlag {
-				connectionSuccess <- false
-			}
-
-			// Now for some reason it seems as if we need to implement a Device Descriptor read.
-			deviceDescriptorReadRequest := driverModel.NewTunnelingRequest(
-				driverModel.NewTunnelingRequestDataBlock(0, 0),
-				driverModel.NewLDataReq(0, nil,
-					driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
-						driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
-                        driverModel.NewApduDataContainer(driverModel.NewApduDataDeviceDescriptorRead(), 0, false, 0),
-						true, true, driverModel.CEMIPriority_LOW, false, false)))
-			_ = m.connection.SendRequest(
-				deviceDescriptorReadRequest,
-				func(message interface{}) bool {
-					tunnelingRequest := driverModel.CastTunnelingRequest(message)
-					if tunnelingRequest == nil ||
-						tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
-						return false
-					}
-					lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
-					if lDataInd == nil {
-						return false
-					}
-					dataFrame := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
-					if dataFrame == nil {
-						return false
-					}
-					if dataFrame.Apdu == nil {
-						return false
-					}
-					return true
-					//return *dataFrame.Apdu.Apci == driverModel.APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU
-					// TODO: Do something with the request ...
-				},
-				func(message interface{}) error {
-					// Send back an ACK
-					_ = m.connection.Send(
-						driverModel.NewTunnelingRequest(
-							driverModel.NewTunnelingRequestDataBlock(0, 0),
-							driverModel.NewLDataReq(0, nil,
-								driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
-									driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
-									driverModel.NewApduControlContainer(driverModel.NewApduControlAck(), 0, false, 0),
-									true, true, driverModel.CEMIPriority_SYSTEM, false, false))))
-					// Now we can finally read properties.
-					connectionSuccess <- true
-					return nil
-				},
-				time.Second*5)
-			return nil
-		},
-		time.Second*1)
-
-	if err != nil {
-		return errors.New("could not connect to device (Error sending connection request)")
-	}
-	select {
-	case result := <-connectionSuccess:
-		if !result {
-			return errors.New("could not connect to device (NACK)")
-		}
-	case <-time.After(time.Second * 5):
-		return errors.New("could not connect to device (Timeout)")
-	}
-	return nil
+    connectionSuccess := make(chan bool)
+    deviceConnectionRequest := driverModel.NewTunnelingRequest(
+        driverModel.NewTunnelingRequestDataBlock(0, 0),
+        driverModel.NewLDataReq(0, nil,
+            driverModel.NewLDataFrameDataExt(false, 6, 0,
+                driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
+                driverModel.NewApduControlContainer(driverModel.NewApduControlConnect(), 0, false, 0),
+                true, true, driverModel.CEMIPriority_SYSTEM, false, false)))
+
+    // Send the request
+    err := m.connection.SendRequest(
+        deviceConnectionRequest,
+        // The Gateway is now supposed to send an Ack to this request.
+        func(message interface{}) bool {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            if tunnelingRequest == nil ||
+                tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
+                return false
+            }
+            lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
+            return lDataCon != nil
+        },
+        func(message interface{}) error {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
+            // If the error flag is set, there was an error connecting
+            if lDataCon.DataFrame.ErrorFlag {
+                connectionSuccess <- false
+            }
+
+            // Now for some reason it seems as if we need to implement a Device Descriptor read.
+            deviceDescriptorReadRequest := driverModel.NewTunnelingRequest(
+                driverModel.NewTunnelingRequestDataBlock(0, 0),
+                driverModel.NewLDataReq(0, nil,
+                    driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
+                        driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
+                        driverModel.NewApduDataContainer(driverModel.NewApduDataDeviceDescriptorRead(0), 1, true, 0),
+                        true, true, driverModel.CEMIPriority_LOW, false, false)))
+            _ = m.connection.SendRequest(
+                deviceDescriptorReadRequest,
+                func(message interface{}) bool {
+                    tunnelingRequest := driverModel.CastTunnelingRequest(message)
+                    if tunnelingRequest == nil ||
+                        tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
+                        return false
+                    }
+                    lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
+                    if lDataInd == nil {
+                        return false
+                    }
+                    dataFrame := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
+                    if dataFrame == nil {
+                        return false
+                    }
+                    dataContainer := driverModel.CastApduDataContainer(dataFrame.Apdu)
+                    if dataContainer == nil {
+                        return false
+                    }
+                    deviceDescriptorResponse := driverModel.CastApduDataDeviceDescriptorResponse(dataContainer.DataApdu)
+                    if deviceDescriptorResponse == nil {
+                        return false
+                    }
+                    return true
+                    //return *dataFrame.Apdu.Apci == driverModel.APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU
+                    // TODO: Do something with the request ...
+                },
+                func(message interface{}) error {
+                    // Send back an ACK
+                    _ = m.connection.Send(
+                        driverModel.NewTunnelingRequest(
+                            driverModel.NewTunnelingRequestDataBlock(0, 0),
+                            driverModel.NewLDataReq(0, nil,
+                                driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
+                                    driverModel.NewKnxAddress(0, 0, 0), KnxAddressToInt8Array(targetAddress),
+                                    driverModel.NewApduControlContainer(driverModel.NewApduControlAck(), 0, true, 0),
+                                    true, true, driverModel.CEMIPriority_SYSTEM, false, false))))
+                    // Now we can finally read properties.
+                    connectionSuccess <- true
+                    return nil
+                },
+                time.Second*5)
+            return nil
+        },
+        time.Second*1)
+
+    if err != nil {
+        return errors.New("could not connect to device (Error sending connection request)")
+    }
+    select {
+    case result := <-connectionSuccess:
+        if !result {
+            return errors.New("could not connect to device (NACK)")
+        }
+    case <-time.After(time.Second * 5):
+        return errors.New("could not connect to device (Timeout)")
+    }
+    return nil
 }
 
 func (m KnxNetIpReader) disconnectFromDevice(sourceAddress driverModel.KnxAddress, targetAddress driverModel.KnxAddress) error {
-	deviceConnectionRequest := driverModel.NewTunnelingRequest(
-		driverModel.NewTunnelingRequestDataBlock(0, 0),
-		driverModel.NewLDataReq(0, nil,
-			driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
-				&sourceAddress, KnxAddressToInt8Array(targetAddress),
-                driverModel.NewApduControlContainer(driverModel.NewApduControlDisconnect(), 0, false,0),
+    deviceConnectionRequest := driverModel.NewTunnelingRequest(
+        driverModel.NewTunnelingRequestDataBlock(0, 0),
+        driverModel.NewLDataReq(0, nil,
+            driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
+                &sourceAddress, KnxAddressToInt8Array(targetAddress),
+                driverModel.NewApduControlContainer(driverModel.NewApduControlDisconnect(), 0, false, 0),
                 true, true, driverModel.CEMIPriority_SYSTEM, false, false)))
 
-	// Send the request
-	connectionSuccess := make(chan bool)
-	err := m.connection.SendRequest(
-		deviceConnectionRequest,
-		// The Gateway is now supposed to send an Ack to this request.
-		func(message interface{}) bool {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			if tunnelingRequest == nil ||
-				tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
-				return false
-			}
-			lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
-			if lDataCon == nil {
-				return false
-			}
-			frameDataExt := driverModel.CastLDataFrameDataExt(lDataCon.DataFrame)
-			if frameDataExt == nil {
-				return false
-			}
-			return true
-			//return frameDataExt.Control == true && frameDataExt.ControlType == nil
-		},
-		func(message interface{}) error {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
-			_ = driverModel.CastLDataFrameDataExt(lDataCon.DataFrame)
-			//if *frameDataExt.ControlType == driverModel.ControlType_DISCONNECT {
-				connectionSuccess <- false
-			//}
-			return nil
-		},
-		time.Second*1)
-
-	if err != nil {
-		return errors.New("could not connect to device (Error sending connection request)")
-	}
-	select {
-	case result := <-connectionSuccess:
-		if !result {
-			return errors.New("could not connect to device (NACK)")
-		}
-	case <-time.After(time.Second * 5):
-		return errors.New("could not connect to device (Timeout)")
-	}
-	return nil
+    // Send the request
+    connectionSuccess := make(chan bool)
+    err := m.connection.SendRequest(
+        deviceConnectionRequest,
+        // The Gateway is now supposed to send an Ack to this request.
+        func(message interface{}) bool {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            if tunnelingRequest == nil ||
+                tunnelingRequest.TunnelingRequestDataBlock.CommunicationChannelId != m.connection.CommunicationChannelId {
+                return false
+            }
+            lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
+            if lDataCon == nil {
+                return false
+            }
+            frameDataExt := driverModel.CastLDataFrameDataExt(lDataCon.DataFrame)
+            if frameDataExt == nil {
+                return false
+            }
+            return true
+            //return frameDataExt.Control == true && frameDataExt.ControlType == nil
+        },
+        func(message interface{}) error {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            lDataCon := driverModel.CastLDataCon(tunnelingRequest.Cemi)
+            _ = driverModel.CastLDataFrameDataExt(lDataCon.DataFrame)
+            //if *frameDataExt.ControlType == driverModel.ControlType_DISCONNECT {
+            connectionSuccess <- false
+            //}
+            return nil
+        },
+        time.Second*1)
+
+    if err != nil {
+        return errors.New("could not connect to device (Error sending connection request)")
+    }
+    select {
+    case result := <-connectionSuccess:
+        if !result {
+            return errors.New("could not connect to device (NACK)")
+        }
+    case <-time.After(time.Second * 5):
+        return errors.New("could not connect to device (Timeout)")
+    }
+    return nil
 }
 
 type readPropertyResult struct {
-	plcValue     apiValues.PlcValue
-	responseCode apiModel.PlcResponseCode
+    plcValue     apiValues.PlcValue
+    responseCode apiModel.PlcResponseCode
 }
 
 func (m KnxNetIpReader) readDeviceProperty(field KnxNetIpDevicePropertyAddressPlcField, counter uint8) (apiModel.PlcResponseCode, apiValues.PlcValue) {
-	// TODO: We'll add this as time progresses, for now we only support fully qualified addresses
-	if field.IsPatternField() {
-		return apiModel.PlcResponseCode_UNSUPPORTED, nil
-	}
-
-	destinationAddress := FieldToKnxAddress(field)
-	destinationAddressBuffer := utils.NewWriteBuffer()
-	err := destinationAddress.Serialize(*destinationAddressBuffer)
-	if err != nil {
-		return apiModel.PlcResponseCode_INTERNAL_ERROR, nil
-	}
-	destinationAddressData := utils.Uint8ArrayToInt8Array(destinationAddressBuffer.GetBytes())
-	objectId, _ := strconv.Atoi(field.ObjectId)
-	propertyId, _ := strconv.Atoi(field.PropertyId)
-
-	request := driverModel.NewTunnelingRequest(
-		driverModel.NewTunnelingRequestDataBlock(0, 0),
-		driverModel.NewLDataReq(0, nil,
-			driverModel.NewLDataFrameDataExt(false, 6, 0,
-				driverModel.NewKnxAddress(0, 0, 0),
+    // TODO: We'll add this as time progresses, for now we only support fully qualified addresses
+    if field.IsPatternField() {
+        return apiModel.PlcResponseCode_UNSUPPORTED, nil
+    }
+
+    destinationAddress := FieldToKnxAddress(field)
+    destinationAddressBuffer := utils.NewWriteBuffer()
+    err := destinationAddress.Serialize(*destinationAddressBuffer)
+    if err != nil {
+        return apiModel.PlcResponseCode_INTERNAL_ERROR, nil
+    }
+    destinationAddressData := utils.Uint8ArrayToInt8Array(destinationAddressBuffer.GetBytes())
+    objectId, _ := strconv.Atoi(field.ObjectId)
+    propertyId, _ := strconv.Atoi(field.PropertyId)
+
+    request := driverModel.NewTunnelingRequest(
+        driverModel.NewTunnelingRequestDataBlock(0, 0),
+        driverModel.NewLDataReq(0, nil,
+            driverModel.NewLDataFrameDataExt(false, 6, 0,
+                driverModel.NewKnxAddress(0, 0, 0),
                 destinationAddressData,
-				driverModel.NewApduDataContainer(driverModel.NewApduDataOther(
-				    // TODO: The counter should be incremented per KNX individual address
-				    driverModel.NewApduDataExtPropertyValueRead(uint8(objectId), uint8(propertyId), 1, 1)), 0, true, 1),
-				 true, true,  driverModel.CEMIPriority_SYSTEM, false, false)))
-
-	result := make(chan readPropertyResult)
-	err = m.connection.SendRequest(
-		request,
-		// Even if there are multiple messages being exchanged because of the request
-		// We are not interested in most of them. The one containing the response is
-		// an LData.ind from the destination address to our client address with the given
-		// object-id and property-id.
-		func(message interface{}) bool {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			if tunnelingRequest == nil {
-				return false
-			}
-			lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
-			if lDataInd == nil {
-				return false
-			}
-			dataFrameExt := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
-			if dataFrameExt != nil && dataFrameExt.Apdu != nil {
-                otherPdu := driverModel.CastApduDataOther(*dataFrameExt.Apdu)
+                driverModel.NewApduDataContainer(
+                    driverModel.NewApduDataOther(
+                        // TODO: The counter should be incremented per KNX individual address
+                        driverModel.NewApduDataExtPropertyValueRead(uint8(objectId), uint8(propertyId), 1, 1)), 5, true, counter),
+                true, true, driverModel.CEMIPriority_LOW, false, false)))
+
+    result := make(chan readPropertyResult)
+    err = m.connection.SendRequest(
+        request,
+        // Even if there are multiple messages being exchanged because of the request
+        // We are not interested in most of them. The one containing the response is
+        // an LData.ind from the destination address to our client address with the given
+        // object-id and property-id.
+        func(message interface{}) bool {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            if tunnelingRequest == nil {
+                return false
+            }
+            lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
+            if lDataInd == nil {
+                return false
+            }
+            dataFrameExt := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
+            if dataFrameExt != nil && dataFrameExt.Apdu != nil {
+                apduDataContainer := driverModel.CastApduDataContainer(dataFrameExt.Apdu)
+                if apduDataContainer == nil {
+                    return false
+                }
+                otherPdu := driverModel.CastApduDataOther(apduDataContainer.DataApdu)
                 if otherPdu == nil {
-					return false
-				}
-
+                    return false
+                }
                 propertyValueResponse := driverModel.CastApduDataExtPropertyValueResponse(otherPdu.ExtendedApdu)
                 if propertyValueResponse == nil {
-					return false
-				}
-				if *dataFrameExt.SourceAddress != *destinationAddress {
-					return false
-				}
-				if *Int8ArrayToKnxAddress(dataFrameExt.DestinationAddress) != *m.connection.ClientKnxAddress {
-					return false
-				}
-                readBuffer := utils.NewReadBuffer(propertyValueResponse.Data)
-                curObjectId, _ := readBuffer.ReadUint8(8)
-                curPropertyId, _ := readBuffer.ReadUint8(8)
+                    return false
+                }
+                if *dataFrameExt.SourceAddress != *destinationAddress {
+                    return false
+                }
+                if *Int8ArrayToKnxAddress(dataFrameExt.DestinationAddress) != *m.connection.ClientKnxAddress {
+                    return false
+                }
+                curObjectId := propertyValueResponse.ObjectIndex
+                curPropertyId := propertyValueResponse.PropertyId
                 if curObjectId == uint8(objectId) && curPropertyId == uint8(propertyId) {
                     return true
                 }
-			}
-			return false
-		},
-		func(message interface{}) error {
-			tunnelingRequest := driverModel.CastTunnelingRequest(message)
-			lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
-			dataFrameExt := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
-            otherPdu := driverModel.CastApduDataOther(*dataFrameExt.Apdu)
+            }
+            return false
+        },
+        func(message interface{}) error {
+            tunnelingRequest := driverModel.CastTunnelingRequest(message)
+            lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi)
+            dataFrameExt := driverModel.CastLDataFrameDataExt(lDataInd.DataFrame)
+            apduDataContainer := driverModel.CastApduDataContainer(dataFrameExt.Apdu)
+            otherPdu := driverModel.CastApduDataOther(apduDataContainer.DataApdu)
             propertyValueResponse := driverModel.CastApduDataExtPropertyValueResponse(otherPdu.ExtendedApdu)
 
-			readBuffer := utils.NewReadBuffer(propertyValueResponse.Data)
-			// Skip the object id and property id as we already checked them
-			_, _ = readBuffer.ReadUint8(8)
-			_, _ = readBuffer.ReadUint8(8)
-
-			propertyCount, _ := readBuffer.ReadUint8(4)
-			_ /*index*/, _ = readBuffer.ReadUint16(12)
-
-			// If the return is a count of 0, then we can't access this property (Doesn't exist or not allowed to)
-			// As we don't have a return code for "doesn't exist or doesn't have access to" we'll stick to "not found"
-			// as this can be understood as "found no property we have access to"
-			// ("03_03_07 Application Layer v01.06.02 AS" Page 52)
-			var propResult readPropertyResult
-			if propertyCount == 0 {
-				propResult = readPropertyResult{
-					responseCode: apiModel.PlcResponseCode_NOT_FOUND,
-				}
-			} else {
-				// Depending on the object id and property id, parse the remaining data accordingly.
-				property := driverModel.KnxInterfaceObjectProperty_PID_UNKNOWN
-				for i := driverModel.KnxInterfaceObjectProperty_PID_UNKNOWN; i < driverModel.KnxInterfaceObjectProperty_PID_SUNBLIND_SENSOR_BASIC_ENABLE_TOGGLE_MODE; i++ {
-					// If the propertyId matches and this is either a general object or the object id matches, add it to the result
-					if i.PropertyId() == uint8(propertyId) && (i.ObjectType().Code() == "G" || i.ObjectType().Code() == strconv.Itoa(objectId)) {
-						property = i
-						break
-					}
-				}
-
-				// Parse the payload according to the specified datatype
-				dataType := property.PropertyDataType()
-				plcValue := readwrite.ParsePropertyDataType(*readBuffer, dataType, dataType.SizeInBytes())
-				propResult = readPropertyResult{
-					plcValue:     plcValue,
-					responseCode: apiModel.PlcResponseCode_OK,
-				}
-			}
+            readBuffer := utils.NewReadBuffer(propertyValueResponse.Data)
+            propertyCount := propertyValueResponse.Count
+
+            // If the return is a count of 0, then we can't access this property (Doesn't exist or not allowed to)
+            // As we don't have a return code for "doesn't exist or doesn't have access to" we'll stick to "not found"
+            // as this can be understood as "found no property we have access to"
+            // ("03_03_07 Application Layer v01.06.02 AS" Page 52)
+            var propResult readPropertyResult
+            if propertyCount == 0 {
+                propResult = readPropertyResult{
+                    responseCode: apiModel.PlcResponseCode_NOT_FOUND,
+                }
+            } else {
+                // Depending on the object id and property id, parse the remaining data accordingly.
+                property := driverModel.KnxInterfaceObjectProperty_PID_UNKNOWN
+                for i := driverModel.KnxInterfaceObjectProperty_PID_UNKNOWN; i < driverModel.KnxInterfaceObjectProperty_PID_SUNBLIND_SENSOR_BASIC_ENABLE_TOGGLE_MODE; i++ {
+                    // If the propertyId matches and this is either a general object or the object id matches, add it to the result
+                    if i.PropertyId() == uint8(propertyId) && (i.ObjectType().Code() == "G" || i.ObjectType().Code() == strconv.Itoa(objectId)) {
+                        property = i
+                        break
+                    }
+                }
+
+                // Parse the payload according to the specified datatype
+                dataType := property.PropertyDataType()
+                plcValue := readwrite.ParsePropertyDataType(*readBuffer, dataType, dataType.SizeInBytes())
+                propResult = readPropertyResult{
+                    plcValue:     plcValue,
+                    responseCode: apiModel.PlcResponseCode_OK,
+                }
+            }
 
             // Send back an ACK
             _ = m.connection.Send(
@@ -401,113 +405,119 @@ func (m KnxNetIpReader) readDeviceProperty(field KnxNetIpDevicePropertyAddressPl
                     driverModel.NewLDataReq(0, nil,
                         driverModel.NewLDataFrameDataExt(false, 6, uint8(0),
                             driverModel.NewKnxAddress(0, 0, 0), destinationAddressData,
-                            driverModel.NewApduControlContainer(driverModel.NewApduControlAck(), 0, false, 0),
+                            driverModel.NewApduControlContainer(driverModel.NewApduControlAck(), 0, true, dataFrameExt.Apdu.Counter),
                             true, true, driverModel.CEMIPriority_SYSTEM, false, false))))
 
-			result <- propResult
-			return nil
-		},
-		time.Second*5)
-
-	select {
-	case value := <-result:
-		responseCode := value.responseCode
-		plcValue := value.plcValue
-		return responseCode, plcValue
-		/*case <-time.After(time.Second * 5):
-		  return apiModel.PlcResponseCode_REMOTE_ERROR, nil*/
-	}
+            result <- propResult
+            return nil
+        },
+        time.Second*5)
+
+    select {
+    case value := <-result:
+        responseCode := value.responseCode
+        plcValue := value.plcValue
+        return responseCode, plcValue
+        /*case <-time.After(time.Second * 5):
+          return apiModel.PlcResponseCode_REMOTE_ERROR, nil*/
+    }
 }
 
 func (m KnxNetIpReader) readGroupAddress(field KnxNetIpField) (apiModel.PlcResponseCode, apiValues.PlcValue) {
-	// Pattern fields can match more than one value, therefore we have to handle things differently
-	if field.IsPatternField() {
-		// Depending on the type of field, get the uint16 ids of all values that match the current field
-		matchedAddresses := map[uint16]*driverModel.KnxGroupAddress{}
-		switch field.(type) {
-		case KnxNetIpGroupAddress3LevelPlcField:
-			for key, value := range m.connection.leve3AddressCache {
-				if field.matches(value.Parent) {
-					matchedAddresses[key] = value.Parent
-				}
-			}
-		case KnxNetIpGroupAddress2LevelPlcField:
-			for key, value := range m.connection.leve2AddressCache {
-				if field.matches(value.Parent) {
-					matchedAddresses[key] = value.Parent
-				}
-			}
-		case KnxNetIpGroupAddress1LevelPlcField:
-			for key, value := range m.connection.leve1AddressCache {
-				if field.matches(value.Parent) {
-					matchedAddresses[key] = value.Parent
-				}
-			}
-		}
-
-		// If not a single match was found, we'll return a "not found" message
-		if len(matchedAddresses) == 0 {
-			return apiModel.PlcResponseCode_NOT_FOUND, nil
-		}
-
-		// Go through all of the values and create a plc-struct from them
-		// where the string version of the address becomes the property name
-		// and the property value is the corresponding value (Other wise it
-		// would be impossible to know which of the fields the pattern matched
-		// a given value belongs to)
-		values := map[string]apiValues.PlcValue{}
-		for numericAddress, address := range matchedAddresses {
-			// Get the raw data from the cache
-			m.connection.valueCacheMutex.RLock()
-			int8s, _ := m.connection.valueCache[numericAddress]
-			m.connection.valueCacheMutex.RUnlock()
-
-			// If we don't have any field-type information, add the raw data
-			if field.GetTypeName() == "" {
-				values[GroupAddressToString(address)] =
-					internalValues.NewPlcByteArray(utils.Int8ArrayToByteArray(int8s))
-			} else {
-				// Decode the data according to the fields type
-				rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
-				plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
-				// If any of the values doesn't decode correctly, we can't return any
-				if err != nil {
-					return apiModel.PlcResponseCode_INVALID_DATA, nil
-				}
-				values[GroupAddressToString(address)] = plcValue
-			}
-		}
-
-		// Add it to the result
-		return apiModel.PlcResponseCode_OK, internalValues.NewPlcStruct(values)
-	} else {
-		// If it's not a pattern field, we can access the cached value a lot simpler
-
-		// Serialize the field to an uint16
-		wb := utils.NewWriteBuffer()
-		err := field.toGroupAddress().Serialize(*wb)
-		if err != nil {
-			return apiModel.PlcResponseCode_INVALID_ADDRESS, nil
-		}
-		rawAddress := wb.GetBytes()
-		address := (uint16(rawAddress[0]) << 8) | uint16(rawAddress[1]&0xFF)
-
-		// Get the value form the cache
-		m.connection.valueCacheMutex.RLock()
-		int8s, ok := m.connection.valueCache[address]
-		m.connection.valueCacheMutex.RUnlock()
-		if !ok {
-			return apiModel.PlcResponseCode_NOT_FOUND, nil
-		}
-
-		// Decode the data according to the fields type
-		rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
-		plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
-		if err != nil {
-			return apiModel.PlcResponseCode_INVALID_DATA, nil
-		}
-
-		// Add it to the result
-		return apiModel.PlcResponseCode_OK, plcValue
-	}
+    // Pattern fields can match more than one value, therefore we have to handle things differently
+    if field.IsPatternField() {
+        // Depending on the type of field, get the uint16 ids of all values that match the current field
+        matchedAddresses := map[uint16]*driverModel.KnxGroupAddress{}
+        switch field.(type) {
+        case KnxNetIpGroupAddress3LevelPlcField:
+            for key, value := range m.connection.leve3AddressCache {
+                if field.matches(value.Parent) {
+                    matchedAddresses[key] = value.Parent
+                }
+            }
+        case KnxNetIpGroupAddress2LevelPlcField:
+            for key, value := range m.connection.leve2AddressCache {
+                if field.matches(value.Parent) {
+                    matchedAddresses[key] = value.Parent
+                }
+            }
+        case KnxNetIpGroupAddress1LevelPlcField:
+            for key, value := range m.connection.leve1AddressCache {
+                if field.matches(value.Parent) {
+                    matchedAddresses[key] = value.Parent
+                }
+            }
+        }
+
+        // If not a single match was found, we'll return a "not found" message
+        if len(matchedAddresses) == 0 {
+            return apiModel.PlcResponseCode_NOT_FOUND, nil
+        }
+
+        // Go through all of the values and create a plc-struct from them
+        // where the string version of the address becomes the property name
+        // and the property value is the corresponding value (Other wise it
+        // would be impossible to know which of the fields the pattern matched
+        // a given value belongs to)
+        values := map[string]apiValues.PlcValue{}
+        for numericAddress, address := range matchedAddresses {
+            // Get the raw data from the cache
+            m.connection.valueCacheMutex.RLock()
+            int8s, _ := m.connection.valueCache[numericAddress]
+            m.connection.valueCacheMutex.RUnlock()
+
+            // If we don't have any field-type information, add the raw data
+            if field.GetTypeName() == "" {
+                values[GroupAddressToString(address)] =
+                    internalValues.NewPlcByteArray(utils.Int8ArrayToByteArray(int8s))
+            } else {
+                // Decode the data according to the fields type
+                rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
+                if field.GetFieldType() == nil {
+                    return apiModel.PlcResponseCode_INVALID_DATATYPE, nil
+                }
+                plcValue, err := driverModel.KnxDatapointParse(rb, *field.GetFieldType())
+                // If any of the values doesn't decode correctly, we can't return any
+                if err != nil {
+                    return apiModel.PlcResponseCode_INVALID_DATA, nil
+                }
+                values[GroupAddressToString(address)] = plcValue
+            }
+        }
+
+        // Add it to the result
+        return apiModel.PlcResponseCode_OK, internalValues.NewPlcStruct(values)
+    } else {
+        // If it's not a pattern field, we can access the cached value a lot simpler
+
+        // Serialize the field to an uint16
+        wb := utils.NewWriteBuffer()
+        err := field.toGroupAddress().Serialize(*wb)
+        if err != nil {
+            return apiModel.PlcResponseCode_INVALID_ADDRESS, nil
+        }
+        rawAddress := wb.GetBytes()
+        address := (uint16(rawAddress[0]) << 8) | uint16(rawAddress[1]&0xFF)
+
+        // Get the value form the cache
+        m.connection.valueCacheMutex.RLock()
+        int8s, ok := m.connection.valueCache[address]
+        m.connection.valueCacheMutex.RUnlock()
+        if !ok {
+            return apiModel.PlcResponseCode_NOT_FOUND, nil
+        }
+
+        // Decode the data according to the fields type
+        rb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(int8s))
+        if field.GetFieldType() == nil {
+            return apiModel.PlcResponseCode_INVALID_DATATYPE, nil
+        }
+        plcValue, err := driverModel.KnxDatapointParse(rb, *field.GetFieldType())
+        if err != nil {
+            return apiModel.PlcResponseCode_INVALID_DATA, nil
+        }
+
+        // Add it to the result
+        return apiModel.PlcResponseCode_OK, plcValue
+    }
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
index 0a630f9..acd7892 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
@@ -133,12 +133,17 @@ func (m *KnxNetIpSubscriber) handleValueChange(lDataFrame *driverModel.LDataFram
                         payload = append(payload, groupValueWrite.DataFirstByte)
                         payload = append(payload, groupValueWrite.Data...)
                         rb := utils.NewReadBuffer(utils.Int8ArrayToByteArray(payload))
-                        plcValue, err := driverModel.KnxDatapointParse(rb, field.GetTypeName())
+                        if field.GetFieldType() == nil {
+                            responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_DATATYPE
+                            plcValues[fieldName] = nil
+                            continue
+                        }
+                        plcValue, err2 := driverModel.KnxDatapointParse(rb, *field.GetFieldType())
                         fields[fieldName] = field
                         types[fieldName] = subscriptionRequest.GetType(fieldName)
                         intervals[fieldName] = subscriptionRequest.GetInterval(fieldName)
                         addresses[fieldName] = destinationAddress
-                        if err == nil {
+                        if err2 == nil {
                             responseCodes[fieldName] = apiModel.PlcResponseCode_OK
                             plcValues[fieldName] = plcValue
                         } else {
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
index 7fa3399..6e1e137 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
@@ -58,7 +58,8 @@ func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.P
 		// Get the value from the request and serialize it to a byte array
 		value := writeRequest.GetValue(fieldName)
 		io := utils.NewWriteBuffer()
-		if err := knxnetipModel.KnxDatapointSerialize(io, value, knxNetIpField.GetTypeName()); err != nil {
+        fieldType := knxnetipModel.KnxDatapointTypeByName(knxNetIpField.GetTypeName())
+        if err := knxnetipModel.KnxDatapointSerialize(io, value, fieldType); err != nil {
 			result <- model.PlcWriteRequestResult{
 				Request:  writeRequest,
 				Response: nil,
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
index c0df68f..56ab5aa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
@@ -131,7 +131,7 @@ func ApduDataParse(io *utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
     case apciType == 0xC:
         _parent, typeSwitchError = ApduDataDeviceDescriptorReadParse(io)
     case apciType == 0xD:
-        _parent, typeSwitchError = ApduDataDeviceDescriptorResponseParse(io)
+        _parent, typeSwitchError = ApduDataDeviceDescriptorResponseParse(io, dataLength)
     case apciType == 0xE:
         _parent, typeSwitchError = ApduDataRestartParse(io)
     case apciType == 0xF:
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
index 8fc976e..bfcc2a6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
@@ -20,12 +20,14 @@ package model
 
 import (
     "encoding/xml"
+    "errors"
     "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
     "io"
 )
 
 // The data-structure of this message
 type ApduDataDeviceDescriptorRead struct {
+    DescriptorType uint8
     Parent *ApduData
     IApduDataDeviceDescriptorRead
 }
@@ -49,8 +51,9 @@ func (m *ApduDataDeviceDescriptorRead) ApciType() uint8 {
 func (m *ApduDataDeviceDescriptorRead) InitializeParent(parent *ApduData) {
 }
 
-func NewApduDataDeviceDescriptorRead() *ApduData {
+func NewApduDataDeviceDescriptorRead(descriptorType uint8, ) *ApduData {
     child := &ApduDataDeviceDescriptorRead{
+        DescriptorType: descriptorType,
         Parent: NewApduData(),
     }
     child.Parent.Child = child
@@ -83,6 +86,9 @@ func (m *ApduDataDeviceDescriptorRead) GetTypeName() string {
 func (m *ApduDataDeviceDescriptorRead) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
+    // Simple field (descriptorType)
+    lengthInBits += 6
+
     return lengthInBits
 }
 
@@ -92,8 +98,15 @@ func (m *ApduDataDeviceDescriptorRead) LengthInBytes() uint16 {
 
 func ApduDataDeviceDescriptorReadParse(io *utils.ReadBuffer) (*ApduData, error) {
 
+    // Simple Field (descriptorType)
+    descriptorType, _descriptorTypeErr := io.ReadUint8(6)
+    if _descriptorTypeErr != nil {
+        return nil, errors.New("Error parsing 'descriptorType' field " + _descriptorTypeErr.Error())
+    }
+
     // Create a partially initialized instance
     _child := &ApduDataDeviceDescriptorRead{
+        DescriptorType: descriptorType,
         Parent: &ApduData{},
     }
     _child.Parent.Child = _child
@@ -103,6 +116,13 @@ func ApduDataDeviceDescriptorReadParse(io *utils.ReadBuffer) (*ApduData, error)
 func (m *ApduDataDeviceDescriptorRead) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
+    // Simple Field (descriptorType)
+    descriptorType := uint8(m.DescriptorType)
+    _descriptorTypeErr := io.WriteUint8(6, (descriptorType))
+    if _descriptorTypeErr != nil {
+        return errors.New("Error serializing 'descriptorType' field " + _descriptorTypeErr.Error())
+    }
+
         return nil
     }
     return m.Parent.SerializeParent(io, m, ser)
@@ -117,6 +137,12 @@ func (m *ApduDataDeviceDescriptorRead) UnmarshalXML(d *xml.Decoder, start xml.St
         case xml.StartElement:
             tok := token.(xml.StartElement)
             switch tok.Name.Local {
+            case "descriptorType":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DescriptorType = data
             }
         }
         token, err = d.Token()
@@ -130,6 +156,9 @@ func (m *ApduDataDeviceDescriptorRead) UnmarshalXML(d *xml.Decoder, start xml.St
 }
 
 func (m *ApduDataDeviceDescriptorRead) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.DescriptorType, xml.StartElement{Name: xml.Name{Local: "descriptorType"}}); err != nil {
+        return err
+    }
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
index f694429..bad1554 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
@@ -19,13 +19,17 @@
 package model
 
 import (
+    "encoding/base64"
     "encoding/xml"
+    "errors"
     "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
     "io"
 )
 
 // The data-structure of this message
 type ApduDataDeviceDescriptorResponse struct {
+    DescriptorType uint8
+    Data []int8
     Parent *ApduData
     IApduDataDeviceDescriptorResponse
 }
@@ -49,8 +53,10 @@ func (m *ApduDataDeviceDescriptorResponse) ApciType() uint8 {
 func (m *ApduDataDeviceDescriptorResponse) InitializeParent(parent *ApduData) {
 }
 
-func NewApduDataDeviceDescriptorResponse() *ApduData {
+func NewApduDataDeviceDescriptorResponse(descriptorType uint8, data []int8, ) *ApduData {
     child := &ApduDataDeviceDescriptorResponse{
+        DescriptorType: descriptorType,
+        Data: data,
         Parent: NewApduData(),
     }
     child.Parent.Child = child
@@ -83,6 +89,14 @@ func (m *ApduDataDeviceDescriptorResponse) GetTypeName() string {
 func (m *ApduDataDeviceDescriptorResponse) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
+    // Simple field (descriptorType)
+    lengthInBits += 6
+
+    // Array field
+    if len(m.Data) > 0 {
+        lengthInBits += 8 * uint16(len(m.Data))
+    }
+
     return lengthInBits
 }
 
@@ -90,10 +104,29 @@ func (m *ApduDataDeviceDescriptorResponse) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ApduDataDeviceDescriptorResponseParse(io *utils.ReadBuffer) (*ApduData, error) {
+func ApduDataDeviceDescriptorResponseParse(io *utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
+
+    // Simple Field (descriptorType)
+    descriptorType, _descriptorTypeErr := io.ReadUint8(6)
+    if _descriptorTypeErr != nil {
+        return nil, errors.New("Error parsing 'descriptorType' field " + _descriptorTypeErr.Error())
+    }
+
+    // Array field (data)
+    // Count array
+    data := make([]int8, utils.InlineIf(bool(bool((dataLength) < ((1)))), uint16(uint16(0)), uint16(uint16(dataLength) - uint16(uint16(1)))))
+    for curItem := uint16(0); curItem < uint16(utils.InlineIf(bool(bool((dataLength) < ((1)))), uint16(uint16(0)), uint16(uint16(dataLength) - uint16(uint16(1))))); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'data' field " + _err.Error())
+        }
+        data[curItem] = _item
+    }
 
     // Create a partially initialized instance
     _child := &ApduDataDeviceDescriptorResponse{
+        DescriptorType: descriptorType,
+        Data: data,
         Parent: &ApduData{},
     }
     _child.Parent.Child = _child
@@ -103,6 +136,23 @@ func ApduDataDeviceDescriptorResponseParse(io *utils.ReadBuffer) (*ApduData, err
 func (m *ApduDataDeviceDescriptorResponse) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
+    // Simple Field (descriptorType)
+    descriptorType := uint8(m.DescriptorType)
+    _descriptorTypeErr := io.WriteUint8(6, (descriptorType))
+    if _descriptorTypeErr != nil {
+        return errors.New("Error serializing 'descriptorType' field " + _descriptorTypeErr.Error())
+    }
+
+    // Array Field (data)
+    if m.Data != nil {
+        for _, _element := range m.Data {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'data' field " + _elementErr.Error())
+            }
+        }
+    }
+
         return nil
     }
     return m.Parent.SerializeParent(io, m, ser)
@@ -117,6 +167,23 @@ func (m *ApduDataDeviceDescriptorResponse) UnmarshalXML(d *xml.Decoder, start xm
         case xml.StartElement:
             tok := token.(xml.StartElement)
             switch tok.Name.Local {
+            case "descriptorType":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DescriptorType = data
+            case "data":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
             }
         }
         token, err = d.Token()
@@ -130,6 +197,14 @@ func (m *ApduDataDeviceDescriptorResponse) UnmarshalXML(d *xml.Decoder, start xm
 }
 
 func (m *ApduDataDeviceDescriptorResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.DescriptorType, xml.StartElement{Name: xml.Name{Local: "descriptorType"}}); err != nil {
+        return err
+    }
+    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ArrayToByteArray(m.Data))
+    if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
+        return err
+    }
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
index bd3821e..dfb0c8b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
@@ -80,7 +80,7 @@ func (m *ApduDataExt) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     // Discriminator Field (extApciType)
-    lengthInBits += 8
+    lengthInBits += 6
 
     // Length of sub-type elements will be added by sub-type...
     lengthInBits += m.Child.LengthInBits()
@@ -95,7 +95,7 @@ func (m *ApduDataExt) LengthInBytes() uint16 {
 func ApduDataExtParse(io *utils.ReadBuffer, length uint8) (*ApduDataExt, error) {
 
     // Discriminator Field (extApciType) (Used as input to a switch field)
-    extApciType, _extApciTypeErr := io.ReadUint8(8)
+    extApciType, _extApciTypeErr := io.ReadUint8(6)
     if _extApciTypeErr != nil {
         return nil, errors.New("Error parsing 'extApciType' field " + _extApciTypeErr.Error())
     }
@@ -204,7 +204,7 @@ func (m *ApduDataExt) SerializeParent(io utils.WriteBuffer, child IApduDataExt,
 
     // Discriminator Field (extApciType) (Used as input to a switch field)
     extApciType := uint8(child.ExtApciType())
-    _extApciTypeErr := io.WriteUint8(8, (extApciType))
+    _extApciTypeErr := io.WriteUint8(6, (extApciType))
     if _extApciTypeErr != nil {
         return errors.New("Error serializing 'extApciType' field " + _extApciTypeErr.Error())
     }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
index 8df878f..04e41e4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapoint.go
@@ -25,9 +25,9 @@ import (
             api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
 )
 
-func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (api.PlcValue, error) {
+func KnxDatapointParse(io *utils.ReadBuffer, datapointType KnxDatapointType) (api.PlcValue, error) {
     switch {
-        case datapointType == KnxDatapointType.DPT_Switch: // BOOL
+        case datapointType == KnxDatapointType_DPT_Switch: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -40,7 +40,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Bool: // BOOL
+        case datapointType == KnxDatapointType_DPT_Bool: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -53,7 +53,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Enable: // BOOL
+        case datapointType == KnxDatapointType_DPT_Enable: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -66,7 +66,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Ramp: // BOOL
+        case datapointType == KnxDatapointType_DPT_Ramp: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -79,7 +79,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Alarm: // BOOL
+        case datapointType == KnxDatapointType_DPT_Alarm: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -92,7 +92,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_BinaryValue: // BOOL
+        case datapointType == KnxDatapointType_DPT_BinaryValue: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -105,7 +105,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Step: // BOOL
+        case datapointType == KnxDatapointType_DPT_Step: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -118,7 +118,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_UpDown: // BOOL
+        case datapointType == KnxDatapointType_DPT_UpDown: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -131,7 +131,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_OpenClose: // BOOL
+        case datapointType == KnxDatapointType_DPT_OpenClose: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -144,7 +144,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Start: // BOOL
+        case datapointType == KnxDatapointType_DPT_Start: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -157,7 +157,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_State: // BOOL
+        case datapointType == KnxDatapointType_DPT_State: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -170,7 +170,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Invert: // BOOL
+        case datapointType == KnxDatapointType_DPT_Invert: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -183,7 +183,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_DimSendStyle: // BOOL
+        case datapointType == KnxDatapointType_DPT_DimSendStyle: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -196,7 +196,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_InputSource: // BOOL
+        case datapointType == KnxDatapointType_DPT_InputSource: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -209,7 +209,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Reset: // BOOL
+        case datapointType == KnxDatapointType_DPT_Reset: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -222,7 +222,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Ack: // BOOL
+        case datapointType == KnxDatapointType_DPT_Ack: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -235,7 +235,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Trigger: // BOOL
+        case datapointType == KnxDatapointType_DPT_Trigger: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -248,7 +248,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Occupancy: // BOOL
+        case datapointType == KnxDatapointType_DPT_Occupancy: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -261,7 +261,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Window_Door: // BOOL
+        case datapointType == KnxDatapointType_DPT_Window_Door: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -274,7 +274,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_LogicalFunction: // BOOL
+        case datapointType == KnxDatapointType_DPT_LogicalFunction: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -287,7 +287,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Scene_AB: // BOOL
+        case datapointType == KnxDatapointType_DPT_Scene_AB: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -300,7 +300,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_ShutterBlinds_Mode: // BOOL
+        case datapointType == KnxDatapointType_DPT_ShutterBlinds_Mode: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -313,7 +313,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_DayNight: // BOOL
+        case datapointType == KnxDatapointType_DPT_DayNight: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -326,7 +326,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Heat_Cool: // BOOL
+        case datapointType == KnxDatapointType_DPT_Heat_Cool: // BOOL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
@@ -339,7 +339,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_Switch_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Switch_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -347,21 +347,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (On)
-            On, _OnErr := io.ReadBit()
-            if _OnErr != nil {
-                return nil, errors.New("Error parsing 'On' field " + _OnErr.Error())
+            // Simple Field (on)
+            on, _onErr := io.ReadBit()
+            if _onErr != nil {
+                return nil, errors.New("Error parsing 'on' field " + _onErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(On)
+            _map["Struct"] = values.NewPlcBOOL(on)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Bool_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Bool_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -369,21 +369,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (True)
-            True, _TrueErr := io.ReadBit()
-            if _TrueErr != nil {
-                return nil, errors.New("Error parsing 'True' field " + _TrueErr.Error())
+            // Simple Field (valueTrue)
+            valueTrue, _valueTrueErr := io.ReadBit()
+            if _valueTrueErr != nil {
+                return nil, errors.New("Error parsing 'valueTrue' field " + _valueTrueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(True)
+            _map["Struct"] = values.NewPlcBOOL(valueTrue)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Enable_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Enable_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -391,21 +391,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Enable)
-            Enable, _EnableErr := io.ReadBit()
-            if _EnableErr != nil {
-                return nil, errors.New("Error parsing 'Enable' field " + _EnableErr.Error())
+            // Simple Field (enable)
+            enable, _enableErr := io.ReadBit()
+            if _enableErr != nil {
+                return nil, errors.New("Error parsing 'enable' field " + _enableErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Enable)
+            _map["Struct"] = values.NewPlcBOOL(enable)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Ramp_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Ramp_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -413,21 +413,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Ramp)
-            Ramp, _RampErr := io.ReadBit()
-            if _RampErr != nil {
-                return nil, errors.New("Error parsing 'Ramp' field " + _RampErr.Error())
+            // Simple Field (ramp)
+            ramp, _rampErr := io.ReadBit()
+            if _rampErr != nil {
+                return nil, errors.New("Error parsing 'ramp' field " + _rampErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Ramp)
+            _map["Struct"] = values.NewPlcBOOL(ramp)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Alarm_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Alarm_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -435,21 +435,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Alarm)
-            Alarm, _AlarmErr := io.ReadBit()
-            if _AlarmErr != nil {
-                return nil, errors.New("Error parsing 'Alarm' field " + _AlarmErr.Error())
+            // Simple Field (alarm)
+            alarm, _alarmErr := io.ReadBit()
+            if _alarmErr != nil {
+                return nil, errors.New("Error parsing 'alarm' field " + _alarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Alarm)
+            _map["Struct"] = values.NewPlcBOOL(alarm)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_BinaryValue_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_BinaryValue_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -457,21 +457,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (High)
-            High, _HighErr := io.ReadBit()
-            if _HighErr != nil {
-                return nil, errors.New("Error parsing 'High' field " + _HighErr.Error())
+            // Simple Field (high)
+            high, _highErr := io.ReadBit()
+            if _highErr != nil {
+                return nil, errors.New("Error parsing 'high' field " + _highErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(High)
+            _map["Struct"] = values.NewPlcBOOL(high)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Step_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Step_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -479,21 +479,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Increase)
-            Increase, _IncreaseErr := io.ReadBit()
-            if _IncreaseErr != nil {
-                return nil, errors.New("Error parsing 'Increase' field " + _IncreaseErr.Error())
+            // Simple Field (increase)
+            increase, _increaseErr := io.ReadBit()
+            if _increaseErr != nil {
+                return nil, errors.New("Error parsing 'increase' field " + _increaseErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Increase)
+            _map["Struct"] = values.NewPlcBOOL(increase)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Direction1_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Direction1_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -501,21 +501,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Down)
-            Down, _DownErr := io.ReadBit()
-            if _DownErr != nil {
-                return nil, errors.New("Error parsing 'Down' field " + _DownErr.Error())
+            // Simple Field (down)
+            down, _downErr := io.ReadBit()
+            if _downErr != nil {
+                return nil, errors.New("Error parsing 'down' field " + _downErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Down)
+            _map["Struct"] = values.NewPlcBOOL(down)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Direction2_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Direction2_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -523,21 +523,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Close)
-            Close, _CloseErr := io.ReadBit()
-            if _CloseErr != nil {
-                return nil, errors.New("Error parsing 'Close' field " + _CloseErr.Error())
+            // Simple Field (close)
+            close, _closeErr := io.ReadBit()
+            if _closeErr != nil {
+                return nil, errors.New("Error parsing 'close' field " + _closeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Close)
+            _map["Struct"] = values.NewPlcBOOL(close)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Start_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Start_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -545,21 +545,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Start)
-            Start, _StartErr := io.ReadBit()
-            if _StartErr != nil {
-                return nil, errors.New("Error parsing 'Start' field " + _StartErr.Error())
+            // Simple Field (start)
+            start, _startErr := io.ReadBit()
+            if _startErr != nil {
+                return nil, errors.New("Error parsing 'start' field " + _startErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Start)
+            _map["Struct"] = values.NewPlcBOOL(start)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_State_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_State_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -567,21 +567,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Active)
-            Active, _ActiveErr := io.ReadBit()
-            if _ActiveErr != nil {
-                return nil, errors.New("Error parsing 'Active' field " + _ActiveErr.Error())
+            // Simple Field (active)
+            active, _activeErr := io.ReadBit()
+            if _activeErr != nil {
+                return nil, errors.New("Error parsing 'active' field " + _activeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Active)
+            _map["Struct"] = values.NewPlcBOOL(active)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Invert_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_Invert_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -589,21 +589,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Control)
-            Control, _ControlErr := io.ReadBit()
-            if _ControlErr != nil {
-                return nil, errors.New("Error parsing 'Control' field " + _ControlErr.Error())
+            // Simple Field (control)
+            control, _controlErr := io.ReadBit()
+            if _controlErr != nil {
+                return nil, errors.New("Error parsing 'control' field " + _controlErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Control)
+            _map["Struct"] = values.NewPlcBOOL(control)
 
-            // Simple Field (Inverted)
-            Inverted, _InvertedErr := io.ReadBit()
-            if _InvertedErr != nil {
-                return nil, errors.New("Error parsing 'Inverted' field " + _InvertedErr.Error())
+            // Simple Field (inverted)
+            inverted, _invertedErr := io.ReadBit()
+            if _invertedErr != nil {
+                return nil, errors.New("Error parsing 'inverted' field " + _invertedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Inverted)
+            _map["Struct"] = values.NewPlcBOOL(inverted)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Control_Dimming: // Struct
+        case datapointType == KnxDatapointType_DPT_Control_Dimming: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -611,21 +611,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Increase)
-            Increase, _IncreaseErr := io.ReadBit()
-            if _IncreaseErr != nil {
-                return nil, errors.New("Error parsing 'Increase' field " + _IncreaseErr.Error())
+            // Simple Field (increase)
+            increase, _increaseErr := io.ReadBit()
+            if _increaseErr != nil {
+                return nil, errors.New("Error parsing 'increase' field " + _increaseErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Increase)
+            _map["Struct"] = values.NewPlcBOOL(increase)
 
-            // Simple Field (Stepcode)
-            Stepcode, _StepcodeErr := io.ReadUint8(3)
-            if _StepcodeErr != nil {
-                return nil, errors.New("Error parsing 'Stepcode' field " + _StepcodeErr.Error())
+            // Simple Field (stepcode)
+            stepcode, _stepcodeErr := io.ReadUint8(3)
+            if _stepcodeErr != nil {
+                return nil, errors.New("Error parsing 'stepcode' field " + _stepcodeErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Stepcode)
+            _map["Struct"] = values.NewPlcUSINT(stepcode)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Control_Blinds: // Struct
+        case datapointType == KnxDatapointType_DPT_Control_Blinds: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -633,21 +633,21 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Down)
-            Down, _DownErr := io.ReadBit()
-            if _DownErr != nil {
-                return nil, errors.New("Error parsing 'Down' field " + _DownErr.Error())
+            // Simple Field (down)
+            down, _downErr := io.ReadBit()
+            if _downErr != nil {
+                return nil, errors.New("Error parsing 'down' field " + _downErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Down)
+            _map["Struct"] = values.NewPlcBOOL(down)
 
-            // Simple Field (Stepcode)
-            Stepcode, _StepcodeErr := io.ReadUint8(3)
-            if _StepcodeErr != nil {
-                return nil, errors.New("Error parsing 'Stepcode' field " + _StepcodeErr.Error())
+            // Simple Field (stepcode)
+            stepcode, _stepcodeErr := io.ReadUint8(3)
+            if _stepcodeErr != nil {
+                return nil, errors.New("Error parsing 'stepcode' field " + _stepcodeErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Stepcode)
+            _map["Struct"] = values.NewPlcUSINT(stepcode)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Char_ASCII: // STRING
+        case datapointType == KnxDatapointType_DPT_Char_ASCII: // STRING
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -660,7 +660,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSTRING(value), nil
-        case datapointType == KnxDatapointType.DPT_Char_8859_1: // STRING
+        case datapointType == KnxDatapointType_DPT_Char_8859_1: // STRING
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -673,7 +673,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSTRING(value), nil
-        case datapointType == KnxDatapointType.DPT_Scaling: // USINT
+        case datapointType == KnxDatapointType_DPT_Scaling: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -686,7 +686,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Angle: // USINT
+        case datapointType == KnxDatapointType_DPT_Angle: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -699,7 +699,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Percent_U8: // USINT
+        case datapointType == KnxDatapointType_DPT_Percent_U8: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -712,7 +712,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DecimalFactor: // USINT
+        case datapointType == KnxDatapointType_DPT_DecimalFactor: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -725,7 +725,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Tariff: // USINT
+        case datapointType == KnxDatapointType_DPT_Tariff: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -738,7 +738,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_1_Ucount: // USINT
+        case datapointType == KnxDatapointType_DPT_Value_1_Ucount: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -751,7 +751,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_FanStage: // USINT
+        case datapointType == KnxDatapointType_DPT_FanStage: // USINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -764,7 +764,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Percent_V8: // SINT
+        case datapointType == KnxDatapointType_DPT_Percent_V8: // SINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -777,7 +777,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_1_Count: // SINT
+        case datapointType == KnxDatapointType_DPT_Value_1_Count: // SINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -790,7 +790,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Status_Mode3: // Struct
+        case datapointType == KnxDatapointType_DPT_Status_Mode3: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -798,49 +798,49 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (StatusA)
-            StatusA, _StatusAErr := io.ReadBit()
-            if _StatusAErr != nil {
-                return nil, errors.New("Error parsing 'StatusA' field " + _StatusAErr.Error())
+            // Simple Field (statusA)
+            statusA, _statusAErr := io.ReadBit()
+            if _statusAErr != nil {
+                return nil, errors.New("Error parsing 'statusA' field " + _statusAErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusA)
+            _map["Struct"] = values.NewPlcBOOL(statusA)
 
-            // Simple Field (StatusB)
-            StatusB, _StatusBErr := io.ReadBit()
-            if _StatusBErr != nil {
-                return nil, errors.New("Error parsing 'StatusB' field " + _StatusBErr.Error())
+            // Simple Field (statusB)
+            statusB, _statusBErr := io.ReadBit()
+            if _statusBErr != nil {
+                return nil, errors.New("Error parsing 'statusB' field " + _statusBErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusB)
+            _map["Struct"] = values.NewPlcBOOL(statusB)
 
-            // Simple Field (StatusC)
-            StatusC, _StatusCErr := io.ReadBit()
-            if _StatusCErr != nil {
-                return nil, errors.New("Error parsing 'StatusC' field " + _StatusCErr.Error())
+            // Simple Field (statusC)
+            statusC, _statusCErr := io.ReadBit()
+            if _statusCErr != nil {
+                return nil, errors.New("Error parsing 'statusC' field " + _statusCErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusC)
+            _map["Struct"] = values.NewPlcBOOL(statusC)
 
-            // Simple Field (StatusD)
-            StatusD, _StatusDErr := io.ReadBit()
-            if _StatusDErr != nil {
-                return nil, errors.New("Error parsing 'StatusD' field " + _StatusDErr.Error())
+            // Simple Field (statusD)
+            statusD, _statusDErr := io.ReadBit()
+            if _statusDErr != nil {
+                return nil, errors.New("Error parsing 'statusD' field " + _statusDErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusD)
+            _map["Struct"] = values.NewPlcBOOL(statusD)
 
-            // Simple Field (StatusE)
-            StatusE, _StatusEErr := io.ReadBit()
-            if _StatusEErr != nil {
-                return nil, errors.New("Error parsing 'StatusE' field " + _StatusEErr.Error())
+            // Simple Field (statusE)
+            statusE, _statusEErr := io.ReadBit()
+            if _statusEErr != nil {
+                return nil, errors.New("Error parsing 'statusE' field " + _statusEErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusE)
+            _map["Struct"] = values.NewPlcBOOL(statusE)
 
-            // Simple Field (Mode)
-            Mode, _ModeErr := io.ReadUint8(3)
-            if _ModeErr != nil {
-                return nil, errors.New("Error parsing 'Mode' field " + _ModeErr.Error())
+            // Simple Field (mode)
+            mode, _modeErr := io.ReadUint8(3)
+            if _modeErr != nil {
+                return nil, errors.New("Error parsing 'mode' field " + _modeErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Mode)
+            _map["Struct"] = values.NewPlcUSINT(mode)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Value_2_Ucount: // UINT
+        case datapointType == KnxDatapointType_DPT_Value_2_Ucount: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -853,7 +853,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriodMsec: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriodMsec: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -866,7 +866,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriod10Msec: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriod10Msec: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -879,7 +879,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriod100Msec: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriod100Msec: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -892,7 +892,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriodSec: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriodSec: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -905,7 +905,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriodMin: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriodMin: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -918,7 +918,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_TimePeriodHrs: // UINT
+        case datapointType == KnxDatapointType_DPT_TimePeriodHrs: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -931,7 +931,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_PropDataType: // UINT
+        case datapointType == KnxDatapointType_DPT_PropDataType: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -944,7 +944,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Length_mm: // UINT
+        case datapointType == KnxDatapointType_DPT_Length_mm: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -957,7 +957,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_UElCurrentmA: // UINT
+        case datapointType == KnxDatapointType_DPT_UElCurrentmA: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -970,7 +970,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Brightness: // UINT
+        case datapointType == KnxDatapointType_DPT_Brightness: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -983,7 +983,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Absolute_Colour_Temperature: // UINT
+        case datapointType == KnxDatapointType_DPT_Absolute_Colour_Temperature: // UINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -996,7 +996,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_2_Count: // INT
+        case datapointType == KnxDatapointType_DPT_Value_2_Count: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1009,7 +1009,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTimeMsec: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTimeMsec: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1022,7 +1022,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTime10Msec: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTime10Msec: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1035,7 +1035,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTime100Msec: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTime100Msec: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1048,7 +1048,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTimeSec: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTimeSec: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1061,7 +1061,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTimeMin: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTimeMin: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1074,7 +1074,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaTimeHrs: // INT
+        case datapointType == KnxDatapointType_DPT_DeltaTimeHrs: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1087,7 +1087,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Percent_V16: // INT
+        case datapointType == KnxDatapointType_DPT_Percent_V16: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1100,7 +1100,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Rotation_Angle: // INT
+        case datapointType == KnxDatapointType_DPT_Rotation_Angle: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1113,7 +1113,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Length_m: // INT
+        case datapointType == KnxDatapointType_DPT_Length_m: // INT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1126,7 +1126,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Temp: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Temp: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1139,7 +1139,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Tempd: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Tempd: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1152,7 +1152,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Tempa: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Tempa: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1165,7 +1165,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Lux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Lux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1178,7 +1178,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Wsp: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Wsp: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1191,7 +1191,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Pres: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Pres: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1204,7 +1204,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Humidity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Humidity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1217,7 +1217,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_AirQuality: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_AirQuality: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1230,7 +1230,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_AirFlow: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_AirFlow: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1243,7 +1243,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Time1: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Time1: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1256,7 +1256,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Time2: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Time2: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1269,7 +1269,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Volt: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Volt: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1282,7 +1282,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Curr: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Curr: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1295,7 +1295,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_PowerDensity: // REAL
+        case datapointType == KnxDatapointType_DPT_PowerDensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1308,7 +1308,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_KelvinPerPercent: // REAL
+        case datapointType == KnxDatapointType_DPT_KelvinPerPercent: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1321,7 +1321,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Power: // REAL
+        case datapointType == KnxDatapointType_DPT_Power: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1334,7 +1334,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Volume_Flow: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Volume_Flow: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1347,7 +1347,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Rain_Amount: // REAL
+        case datapointType == KnxDatapointType_DPT_Rain_Amount: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1360,7 +1360,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Temp_F: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Temp_F: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1373,7 +1373,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Wsp_kmh: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Wsp_kmh: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1386,7 +1386,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Absolute_Humidity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Absolute_Humidity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1399,7 +1399,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Concentration_ygm3: // REAL
+        case datapointType == KnxDatapointType_DPT_Concentration_ygm3: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1412,7 +1412,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_TimeOfDay: // Struct
+        case datapointType == KnxDatapointType_DPT_TimeOfDay: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -1420,45 +1420,45 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Day)
-            Day, _DayErr := io.ReadUint8(3)
-            if _DayErr != nil {
-                return nil, errors.New("Error parsing 'Day' field " + _DayErr.Error())
+            // Simple Field (day)
+            day, _dayErr := io.ReadUint8(3)
+            if _dayErr != nil {
+                return nil, errors.New("Error parsing 'day' field " + _dayErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Day)
+            _map["Struct"] = values.NewPlcUSINT(day)
 
-            // Simple Field (Hour)
-            Hour, _HourErr := io.ReadUint8(5)
-            if _HourErr != nil {
-                return nil, errors.New("Error parsing 'Hour' field " + _HourErr.Error())
+            // Simple Field (hour)
+            hour, _hourErr := io.ReadUint8(5)
+            if _hourErr != nil {
+                return nil, errors.New("Error parsing 'hour' field " + _hourErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Hour)
+            _map["Struct"] = values.NewPlcUSINT(hour)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(2); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Minutes)
-            Minutes, _MinutesErr := io.ReadUint8(6)
-            if _MinutesErr != nil {
-                return nil, errors.New("Error parsing 'Minutes' field " + _MinutesErr.Error())
+            // Simple Field (minutes)
+            minutes, _minutesErr := io.ReadUint8(6)
+            if _minutesErr != nil {
+                return nil, errors.New("Error parsing 'minutes' field " + _minutesErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Minutes)
+            _map["Struct"] = values.NewPlcUSINT(minutes)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(2); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Seconds)
-            Seconds, _SecondsErr := io.ReadUint8(6)
-            if _SecondsErr != nil {
-                return nil, errors.New("Error parsing 'Seconds' field " + _SecondsErr.Error())
+            // Simple Field (seconds)
+            seconds, _secondsErr := io.ReadUint8(6)
+            if _secondsErr != nil {
+                return nil, errors.New("Error parsing 'seconds' field " + _secondsErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Seconds)
+            _map["Struct"] = values.NewPlcUSINT(seconds)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Date: // Struct
+        case datapointType == KnxDatapointType_DPT_Date: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -1466,38 +1466,38 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (DayOfMonth)
-            DayOfMonth, _DayOfMonthErr := io.ReadUint8(5)
-            if _DayOfMonthErr != nil {
-                return nil, errors.New("Error parsing 'DayOfMonth' field " + _DayOfMonthErr.Error())
+            // Simple Field (dayOfMonth)
+            dayOfMonth, _dayOfMonthErr := io.ReadUint8(5)
+            if _dayOfMonthErr != nil {
+                return nil, errors.New("Error parsing 'dayOfMonth' field " + _dayOfMonthErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(DayOfMonth)
+            _map["Struct"] = values.NewPlcUSINT(dayOfMonth)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Month)
-            Month, _MonthErr := io.ReadUint8(4)
-            if _MonthErr != nil {
-                return nil, errors.New("Error parsing 'Month' field " + _MonthErr.Error())
+            // Simple Field (month)
+            month, _monthErr := io.ReadUint8(4)
+            if _monthErr != nil {
+                return nil, errors.New("Error parsing 'month' field " + _monthErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Month)
+            _map["Struct"] = values.NewPlcUSINT(month)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(1); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Year)
-            Year, _YearErr := io.ReadUint8(7)
-            if _YearErr != nil {
-                return nil, errors.New("Error parsing 'Year' field " + _YearErr.Error())
+            // Simple Field (year)
+            year, _yearErr := io.ReadUint8(7)
+            if _yearErr != nil {
+                return nil, errors.New("Error parsing 'year' field " + _yearErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Year)
+            _map["Struct"] = values.NewPlcUSINT(year)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Value_4_Ucount: // UDINT
+        case datapointType == KnxDatapointType_DPT_Value_4_Ucount: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1510,7 +1510,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_LongTimePeriod_Sec: // UDINT
+        case datapointType == KnxDatapointType_DPT_LongTimePeriod_Sec: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1523,7 +1523,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_LongTimePeriod_Min: // UDINT
+        case datapointType == KnxDatapointType_DPT_LongTimePeriod_Min: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1536,7 +1536,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_LongTimePeriod_Hrs: // UDINT
+        case datapointType == KnxDatapointType_DPT_LongTimePeriod_Hrs: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1549,7 +1549,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_VolumeLiquid_Litre: // UDINT
+        case datapointType == KnxDatapointType_DPT_VolumeLiquid_Litre: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1562,7 +1562,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Volume_m_3: // UDINT
+        case datapointType == KnxDatapointType_DPT_Volume_m_3: // UDINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1575,7 +1575,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_4_Count: // DINT
+        case datapointType == KnxDatapointType_DPT_Value_4_Count: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1588,7 +1588,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_FlowRate_m3h: // DINT
+        case datapointType == KnxDatapointType_DPT_FlowRate_m3h: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1601,7 +1601,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ActiveEnergy: // DINT
+        case datapointType == KnxDatapointType_DPT_ActiveEnergy: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1614,7 +1614,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ApparantEnergy: // DINT
+        case datapointType == KnxDatapointType_DPT_ApparantEnergy: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1627,7 +1627,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ReactiveEnergy: // DINT
+        case datapointType == KnxDatapointType_DPT_ReactiveEnergy: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1640,7 +1640,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ActiveEnergy_kWh: // DINT
+        case datapointType == KnxDatapointType_DPT_ActiveEnergy_kWh: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1653,7 +1653,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ApparantEnergy_kVAh: // DINT
+        case datapointType == KnxDatapointType_DPT_ApparantEnergy_kVAh: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1666,7 +1666,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ReactiveEnergy_kVARh: // DINT
+        case datapointType == KnxDatapointType_DPT_ReactiveEnergy_kVARh: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1679,7 +1679,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ActiveEnergy_MWh: // DINT
+        case datapointType == KnxDatapointType_DPT_ActiveEnergy_MWh: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1692,7 +1692,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_LongDeltaTimeSec: // DINT
+        case datapointType == KnxDatapointType_DPT_LongDeltaTimeSec: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1705,7 +1705,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaVolumeLiquid_Litre: // DINT
+        case datapointType == KnxDatapointType_DPT_DeltaVolumeLiquid_Litre: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1718,7 +1718,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_DeltaVolume_m_3: // DINT
+        case datapointType == KnxDatapointType_DPT_DeltaVolume_m_3: // DINT
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1731,7 +1731,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcDINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Acceleration: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Acceleration: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1744,7 +1744,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Acceleration_Angular: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Acceleration_Angular: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1757,7 +1757,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Activation_Energy: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Activation_Energy: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1770,7 +1770,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Activity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Activity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1783,7 +1783,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Mol: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Mol: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1796,7 +1796,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Amplitude: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Amplitude: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1809,7 +1809,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_AngleRad: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_AngleRad: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1822,7 +1822,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_AngleDeg: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_AngleDeg: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1835,7 +1835,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Angular_Momentum: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Angular_Momentum: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1848,7 +1848,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Angular_Velocity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Angular_Velocity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1861,7 +1861,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Area: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Area: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1874,7 +1874,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Capacitance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Capacitance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1887,7 +1887,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Charge_DensitySurface: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Charge_DensitySurface: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1900,7 +1900,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Charge_DensityVolume: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Charge_DensityVolume: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1913,7 +1913,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Compressibility: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Compressibility: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1926,7 +1926,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Conductance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Conductance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1939,7 +1939,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electrical_Conductivity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electrical_Conductivity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1952,7 +1952,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Density: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Density: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1965,7 +1965,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Charge: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Charge: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1978,7 +1978,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Current: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Current: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -1991,7 +1991,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_CurrentDensity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_CurrentDensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2004,7 +2004,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_DipoleMoment: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_DipoleMoment: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2017,7 +2017,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Displacement: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Displacement: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2030,7 +2030,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_FieldStrength: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_FieldStrength: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2043,7 +2043,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Flux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Flux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2056,7 +2056,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_FluxDensity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_FluxDensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2069,7 +2069,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Polarization: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Polarization: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2082,7 +2082,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_Potential: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_Potential: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2095,7 +2095,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electric_PotentialDifference: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electric_PotentialDifference: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2108,7 +2108,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_ElectromagneticMoment: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_ElectromagneticMoment: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2121,7 +2121,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Electromotive_Force: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Electromotive_Force: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2134,7 +2134,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Energy: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Energy: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2147,7 +2147,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Force: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Force: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2160,7 +2160,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Frequency: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Frequency: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2173,7 +2173,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Angular_Frequency: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Angular_Frequency: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2186,7 +2186,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Heat_Capacity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Heat_Capacity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2199,7 +2199,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Heat_FlowRate: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Heat_FlowRate: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2212,7 +2212,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Heat_Quantity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Heat_Quantity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2225,7 +2225,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Impedance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Impedance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2238,7 +2238,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Length: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Length: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2251,7 +2251,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Light_Quantity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Light_Quantity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2264,7 +2264,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Luminance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Luminance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2277,7 +2277,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Luminous_Flux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Luminous_Flux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2290,7 +2290,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Luminous_Intensity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Luminous_Intensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2303,7 +2303,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetic_FieldStrength: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetic_FieldStrength: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2316,7 +2316,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetic_Flux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetic_Flux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2329,7 +2329,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetic_FluxDensity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetic_FluxDensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2342,7 +2342,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetic_Moment: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetic_Moment: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2355,7 +2355,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetic_Polarization: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetic_Polarization: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2368,7 +2368,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Magnetization: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Magnetization: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2381,7 +2381,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_MagnetomotiveForce: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_MagnetomotiveForce: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2394,7 +2394,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Mass: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Mass: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2407,7 +2407,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_MassFlux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_MassFlux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2420,7 +2420,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Momentum: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Momentum: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2433,7 +2433,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Phase_AngleRad: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Phase_AngleRad: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2446,7 +2446,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Phase_AngleDeg: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Phase_AngleDeg: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2459,7 +2459,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Power: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Power: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2472,7 +2472,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Power_Factor: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Power_Factor: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2485,7 +2485,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Pressure: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Pressure: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2498,7 +2498,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Reactance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Reactance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2511,7 +2511,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Resistance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Resistance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2524,7 +2524,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Resistivity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Resistivity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2537,7 +2537,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_SelfInductance: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_SelfInductance: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2550,7 +2550,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_SolidAngle: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_SolidAngle: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2563,7 +2563,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Sound_Intensity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Sound_Intensity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2576,7 +2576,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Speed: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Speed: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2589,7 +2589,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Stress: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Stress: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2602,7 +2602,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Surface_Tension: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Surface_Tension: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2615,7 +2615,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Common_Temperature: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Common_Temperature: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2628,7 +2628,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Absolute_Temperature: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Absolute_Temperature: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2641,7 +2641,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_TemperatureDifference: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_TemperatureDifference: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2654,7 +2654,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Thermal_Capacity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Thermal_Capacity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2667,7 +2667,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Thermal_Conductivity: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Thermal_Conductivity: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2680,7 +2680,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_ThermoelectricPower: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_ThermoelectricPower: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2693,7 +2693,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Time: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Time: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2706,7 +2706,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Torque: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Torque: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2719,7 +2719,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Volume: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Volume: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2732,7 +2732,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Volume_Flux: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Volume_Flux: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2745,7 +2745,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Weight: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Weight: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2758,7 +2758,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Value_Work: // REAL
+        case datapointType == KnxDatapointType_DPT_Value_Work: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2771,7 +2771,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Volume_Flux_Meter: // REAL
+        case datapointType == KnxDatapointType_DPT_Volume_Flux_Meter: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2784,7 +2784,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Volume_Flux_ls: // REAL
+        case datapointType == KnxDatapointType_DPT_Volume_Flux_ls: // REAL
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2797,7 +2797,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcREAL(value), nil
-        case datapointType == KnxDatapointType.DPT_Access_Data: // Struct
+        case datapointType == KnxDatapointType_DPT_Access_Data: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -2805,84 +2805,84 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (hurz)
+            hurz, _hurzErr := io.ReadUint8(4)
+            if _hurzErr != nil {
+                return nil, errors.New("Error parsing 'hurz' field " + _hurzErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(hurz)
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (value1)
+            value1, _value1Err := io.ReadUint8(4)
+            if _value1Err != nil {
+                return nil, errors.New("Error parsing 'value1' field " + _value1Err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(value1)
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (value2)
+            value2, _value2Err := io.ReadUint8(4)
+            if _value2Err != nil {
+                return nil, errors.New("Error parsing 'value2' field " + _value2Err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(value2)
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (value3)
+            value3, _value3Err := io.ReadUint8(4)
+            if _value3Err != nil {
+                return nil, errors.New("Error parsing 'value3' field " + _value3Err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(value3)
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (value4)
+            value4, _value4Err := io.ReadUint8(4)
+            if _value4Err != nil {
+                return nil, errors.New("Error parsing 'value4' field " + _value4Err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(value4)
 
-            // Simple Field (Value1)
-            Value1, _Value1Err := io.ReadUint8(4)
-            if _Value1Err != nil {
-                return nil, errors.New("Error parsing 'Value1' field " + _Value1Err.Error())
+            // Simple Field (value5)
+            value5, _value5Err := io.ReadUint8(4)
+            if _value5Err != nil {
+                return nil, errors.New("Error parsing 'value5' field " + _value5Err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Value1)
+            _map["Struct"] = values.NewPlcUSINT(value5)
 
-            // Simple Field (DetectionError)
-            DetectionError, _DetectionErrorErr := io.ReadBit()
-            if _DetectionErrorErr != nil {
-                return nil, errors.New("Error parsing 'DetectionError' field " + _DetectionErrorErr.Error())
+            // Simple Field (detectionError)
+            detectionError, _detectionErrorErr := io.ReadBit()
+            if _detectionErrorErr != nil {
+                return nil, errors.New("Error parsing 'detectionError' field " + _detectionErrorErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(DetectionError)
+            _map["Struct"] = values.NewPlcBOOL(detectionError)
 
-            // Simple Field (Permission)
-            Permission, _PermissionErr := io.ReadBit()
-            if _PermissionErr != nil {
-                return nil, errors.New("Error parsing 'Permission' field " + _PermissionErr.Error())
+            // Simple Field (permission)
+            permission, _permissionErr := io.ReadBit()
+            if _permissionErr != nil {
+                return nil, errors.New("Error parsing 'permission' field " + _permissionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Permission)
+            _map["Struct"] = values.NewPlcBOOL(permission)
 
-            // Simple Field (ReadDirection)
-            ReadDirection, _ReadDirectionErr := io.ReadBit()
-            if _ReadDirectionErr != nil {
-                return nil, errors.New("Error parsing 'ReadDirection' field " + _ReadDirectionErr.Error())
+            // Simple Field (readDirection)
+            readDirection, _readDirectionErr := io.ReadBit()
+            if _readDirectionErr != nil {
+                return nil, errors.New("Error parsing 'readDirection' field " + _readDirectionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ReadDirection)
+            _map["Struct"] = values.NewPlcBOOL(readDirection)
 
-            // Simple Field (EncryptionOfAccessInformation)
-            EncryptionOfAccessInformation, _EncryptionOfAccessInformationErr := io.ReadBit()
-            if _EncryptionOfAccessInformationErr != nil {
-                return nil, errors.New("Error parsing 'EncryptionOfAccessInformation' field " + _EncryptionOfAccessInformationErr.Error())
+            // Simple Field (encryptionOfAccessInformation)
+            encryptionOfAccessInformation, _encryptionOfAccessInformationErr := io.ReadBit()
+            if _encryptionOfAccessInformationErr != nil {
+                return nil, errors.New("Error parsing 'encryptionOfAccessInformation' field " + _encryptionOfAccessInformationErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(EncryptionOfAccessInformation)
+            _map["Struct"] = values.NewPlcBOOL(encryptionOfAccessInformation)
 
-            // Simple Field (IndexOfAccessIdentificationCode)
-            IndexOfAccessIdentificationCode, _IndexOfAccessIdentificationCodeErr := io.ReadUint8(4)
-            if _IndexOfAccessIdentificationCodeErr != nil {
-                return nil, errors.New("Error parsing 'IndexOfAccessIdentificationCode' field " + _IndexOfAccessIdentificationCodeErr.Error())
+            // Simple Field (indexOfAccessIdentificationCode)
+            indexOfAccessIdentificationCode, _indexOfAccessIdentificationCodeErr := io.ReadUint8(4)
+            if _indexOfAccessIdentificationCodeErr != nil {
+                return nil, errors.New("Error parsing 'indexOfAccessIdentificationCode' field " + _indexOfAccessIdentificationCodeErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(IndexOfAccessIdentificationCode)
+            _map["Struct"] = values.NewPlcUSINT(indexOfAccessIdentificationCode)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_String_ASCII: // STRING
+        case datapointType == KnxDatapointType_DPT_String_ASCII: // STRING
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2895,7 +2895,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSTRING(value), nil
-        case datapointType == KnxDatapointType.DPT_String_8859_1: // STRING
+        case datapointType == KnxDatapointType_DPT_String_8859_1: // STRING
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
@@ -2908,7 +2908,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcSTRING(value), nil
-        case datapointType == KnxDatapointType.DPT_SceneNumber: // USINT
+        case datapointType == KnxDatapointType_DPT_SceneNumber: // USINT
 
             // Simple Field (value)
             value, _valueErr := io.ReadUint8(6)
@@ -2916,7 +2916,7 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
             return values.NewPlcUSINT(value), nil
-        case datapointType == KnxDatapointType.DPT_SceneControl: // Struct
+        case datapointType == KnxDatapointType_DPT_SceneControl: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -2924,26 +2924,26 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (LearnTheSceneCorrespondingToTheFieldSceneNumber)
-            LearnTheSceneCorrespondingToTheFieldSceneNumber, _LearnTheSceneCorrespondingToTheFieldSceneNumberErr := io.ReadBit()
-            if _LearnTheSceneCorrespondingToTheFieldSceneNumberErr != nil {
-                return nil, errors.New("Error parsing 'LearnTheSceneCorrespondingToTheFieldSceneNumber' field " + _LearnTheSceneCorrespondingToTheFieldSceneNumberErr.Error())
+            // Simple Field (learnTheSceneCorrespondingToTheFieldSceneNumber)
+            learnTheSceneCorrespondingToTheFieldSceneNumber, _learnTheSceneCorrespondingToTheFieldSceneNumberErr := io.ReadBit()
+            if _learnTheSceneCorrespondingToTheFieldSceneNumberErr != nil {
+                return nil, errors.New("Error parsing 'learnTheSceneCorrespondingToTheFieldSceneNumber' field " + _learnTheSceneCorrespondingToTheFieldSceneNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(LearnTheSceneCorrespondingToTheFieldSceneNumber)
+            _map["Struct"] = values.NewPlcBOOL(learnTheSceneCorrespondingToTheFieldSceneNumber)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(1); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (SceneNumber)
-            SceneNumber, _SceneNumberErr := io.ReadUint8(6)
-            if _SceneNumberErr != nil {
-                return nil, errors.New("Error parsing 'SceneNumber' field " + _SceneNumberErr.Error())
+            // Simple Field (sceneNumber)
+            sceneNumber, _sceneNumberErr := io.ReadUint8(6)
+            if _sceneNumberErr != nil {
+                return nil, errors.New("Error parsing 'sceneNumber' field " + _sceneNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(SceneNumber)
+            _map["Struct"] = values.NewPlcUSINT(sceneNumber)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_DateTime: // Struct
+        case datapointType == KnxDatapointType_DPT_DateTime: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -2951,272 +2951,1483 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Year)
-            Year, _YearErr := io.ReadUint8(8)
-            if _YearErr != nil {
-                return nil, errors.New("Error parsing 'Year' field " + _YearErr.Error())
+            // Simple Field (year)
+            year, _yearErr := io.ReadUint8(8)
+            if _yearErr != nil {
+                return nil, errors.New("Error parsing 'year' field " + _yearErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Year)
+            _map["Struct"] = values.NewPlcUSINT(year)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Month)
-            Month, _MonthErr := io.ReadUint8(4)
-            if _MonthErr != nil {
-                return nil, errors.New("Error parsing 'Month' field " + _MonthErr.Error())
+            // Simple Field (month)
+            month, _monthErr := io.ReadUint8(4)
+            if _monthErr != nil {
+                return nil, errors.New("Error parsing 'month' field " + _monthErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Month)
+            _map["Struct"] = values.NewPlcUSINT(month)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(3); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Dayofmonth)
-            Dayofmonth, _DayofmonthErr := io.ReadUint8(5)
-            if _DayofmonthErr != nil {
-                return nil, errors.New("Error parsing 'Dayofmonth' field " + _DayofmonthErr.Error())
+            // Simple Field (dayofmonth)
+            dayofmonth, _dayofmonthErr := io.ReadUint8(5)
+            if _dayofmonthErr != nil {
+                return nil, errors.New("Error parsing 'dayofmonth' field " + _dayofmonthErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Dayofmonth)
+            _map["Struct"] = values.NewPlcUSINT(dayofmonth)
 
-            // Simple Field (Dayofweek)
-            Dayofweek, _DayofweekErr := io.ReadUint8(3)
-            if _DayofweekErr != nil {
-                return nil, errors.New("Error parsing 'Dayofweek' field " + _DayofweekErr.Error())
+            // Simple Field (dayofweek)
+            dayofweek, _dayofweekErr := io.ReadUint8(3)
+            if _dayofweekErr != nil {
+                return nil, errors.New("Error parsing 'dayofweek' field " + _dayofweekErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Dayofweek)
+            _map["Struct"] = values.NewPlcUSINT(dayofweek)
 
-            // Simple Field (Hourofday)
-            Hourofday, _HourofdayErr := io.ReadUint8(5)
-            if _HourofdayErr != nil {
-                return nil, errors.New("Error parsing 'Hourofday' field " + _HourofdayErr.Error())
+            // Simple Field (hourofday)
+            hourofday, _hourofdayErr := io.ReadUint8(5)
+            if _hourofdayErr != nil {
+                return nil, errors.New("Error parsing 'hourofday' field " + _hourofdayErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Hourofday)
+            _map["Struct"] = values.NewPlcUSINT(hourofday)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(2); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Minutes)
-            Minutes, _MinutesErr := io.ReadUint8(6)
-            if _MinutesErr != nil {
-                return nil, errors.New("Error parsing 'Minutes' field " + _MinutesErr.Error())
+            // Simple Field (minutes)
+            minutes, _minutesErr := io.ReadUint8(6)
+            if _minutesErr != nil {
+                return nil, errors.New("Error parsing 'minutes' field " + _minutesErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Minutes)
+            _map["Struct"] = values.NewPlcUSINT(minutes)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(2); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Seconds)
-            Seconds, _SecondsErr := io.ReadUint8(6)
-            if _SecondsErr != nil {
-                return nil, errors.New("Error parsing 'Seconds' field " + _SecondsErr.Error())
+            // Simple Field (seconds)
+            seconds, _secondsErr := io.ReadUint8(6)
+            if _secondsErr != nil {
+                return nil, errors.New("Error parsing 'seconds' field " + _secondsErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Seconds)
+            _map["Struct"] = values.NewPlcUSINT(seconds)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
+            _map["Struct"] = values.NewPlcBOOL(fault)
 
-            // Simple Field (WorkingDay)
-            WorkingDay, _WorkingDayErr := io.ReadBit()
-            if _WorkingDayErr != nil {
-                return nil, errors.New("Error parsing 'WorkingDay' field " + _WorkingDayErr.Error())
+            // Simple Field (workingDay)
+            workingDay, _workingDayErr := io.ReadBit()
+            if _workingDayErr != nil {
+                return nil, errors.New("Error parsing 'workingDay' field " + _workingDayErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(WorkingDay)
+            _map["Struct"] = values.NewPlcBOOL(workingDay)
 
-            // Simple Field (NoWd)
-            NoWd, _NoWdErr := io.ReadBit()
-            if _NoWdErr != nil {
-                return nil, errors.New("Error parsing 'NoWd' field " + _NoWdErr.Error())
+            // Simple Field (noWd)
+            noWd, _noWdErr := io.ReadBit()
+            if _noWdErr != nil {
+                return nil, errors.New("Error parsing 'noWd' field " + _noWdErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(NoWd)
+            _map["Struct"] = values.NewPlcBOOL(noWd)
 
-            // Simple Field (NoYear)
-            NoYear, _NoYearErr := io.ReadBit()
-            if _NoYearErr != nil {
-                return nil, errors.New("Error parsing 'NoYear' field " + _NoYearErr.Error())
+            // Simple Field (noYear)
+            noYear, _noYearErr := io.ReadBit()
+            if _noYearErr != nil {
+                return nil, errors.New("Error parsing 'noYear' field " + _noYearErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(NoYear)
+            _map["Struct"] = values.NewPlcBOOL(noYear)
 
-            // Simple Field (NoDate)
-            NoDate, _NoDateErr := io.ReadBit()
-            if _NoDateErr != nil {
-                return nil, errors.New("Error parsing 'NoDate' field " + _NoDateErr.Error())
+            // Simple Field (noDate)
+            noDate, _noDateErr := io.ReadBit()
+            if _noDateErr != nil {
+                return nil, errors.New("Error parsing 'noDate' field " + _noDateErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(NoDate)
+            _map["Struct"] = values.NewPlcBOOL(noDate)
 
-            // Simple Field (NoDayOfWeek)
-            NoDayOfWeek, _NoDayOfWeekErr := io.ReadBit()
-            if _NoDayOfWeekErr != nil {
-                return nil, errors.New("Error parsing 'NoDayOfWeek' field " + _NoDayOfWeekErr.Error())
+            // Simple Field (noDayOfWeek)
+            noDayOfWeek, _noDayOfWeekErr := io.ReadBit()
+            if _noDayOfWeekErr != nil {
+                return nil, errors.New("Error parsing 'noDayOfWeek' field " + _noDayOfWeekErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(NoDayOfWeek)
+            _map["Struct"] = values.NewPlcBOOL(noDayOfWeek)
 
-            // Simple Field (NoTime)
-            NoTime, _NoTimeErr := io.ReadBit()
-            if _NoTimeErr != nil {
-                return nil, errors.New("Error parsing 'NoTime' field " + _NoTimeErr.Error())
+            // Simple Field (noTime)
+            noTime, _noTimeErr := io.ReadBit()
+            if _noTimeErr != nil {
+                return nil, errors.New("Error parsing 'noTime' field " + _noTimeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(NoTime)
+            _map["Struct"] = values.NewPlcBOOL(noTime)
 
-            // Simple Field (StandardSummerTime)
-            StandardSummerTime, _StandardSummerTimeErr := io.ReadBit()
-            if _StandardSummerTimeErr != nil {
-                return nil, errors.New("Error parsing 'StandardSummerTime' field " + _StandardSummerTimeErr.Error())
+            // Simple Field (standardSummerTime)
+            standardSummerTime, _standardSummerTimeErr := io.ReadBit()
+            if _standardSummerTimeErr != nil {
+                return nil, errors.New("Error parsing 'standardSummerTime' field " + _standardSummerTimeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StandardSummerTime)
+            _map["Struct"] = values.NewPlcBOOL(standardSummerTime)
 
-            // Simple Field (QualityOfClock)
-            QualityOfClock, _QualityOfClockErr := io.ReadBit()
-            if _QualityOfClockErr != nil {
-                return nil, errors.New("Error parsing 'QualityOfClock' field " + _QualityOfClockErr.Error())
+            // Simple Field (qualityOfClock)
+            qualityOfClock, _qualityOfClockErr := io.ReadBit()
+            if _qualityOfClockErr != nil {
+                return nil, errors.New("Error parsing 'qualityOfClock' field " + _qualityOfClockErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(QualityOfClock)
+            _map["Struct"] = values.NewPlcBOOL(qualityOfClock)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_SCLOMode: // STRING
-        case datapointType == KnxDatapointType.DPT_BuildingMode: // STRING
-        case datapointType == KnxDatapointType.DPT_OccMode: // STRING
-        case datapointType == KnxDatapointType.DPT_Priority: // STRING
-        case datapointType == KnxDatapointType.DPT_LightApplicationMode: // STRING
-        case datapointType == KnxDatapointType.DPT_ApplicationArea: // STRING
-        case datapointType == KnxDatapointType.DPT_AlarmClassType: // STRING
-        case datapointType == KnxDatapointType.DPT_PSUMode: // STRING
-        case datapointType == KnxDatapointType.DPT_ErrorClass_System: // STRING
-        case datapointType == KnxDatapointType.DPT_ErrorClass_HVAC: // STRING
-        case datapointType == KnxDatapointType.DPT_Time_Delay: // STRING
-        case datapointType == KnxDatapointType.DPT_Beaufort_Wind_Force_Scale: // STRING
-        case datapointType == KnxDatapointType.DPT_SensorSelect: // STRING
-        case datapointType == KnxDatapointType.DPT_ActuatorConnectType: // STRING
-        case datapointType == KnxDatapointType.DPT_Cloud_Cover: // STRING
-        case datapointType == KnxDatapointType.DPT_PowerReturnMode: // STRING
-        case datapointType == KnxDatapointType.DPT_FuelType: // STRING
-        case datapointType == KnxDatapointType.DPT_BurnerType: // STRING
-        case datapointType == KnxDatapointType.DPT_HVACMode: // STRING
-        case datapointType == KnxDatapointType.DPT_DHWMode: // STRING
-        case datapointType == KnxDatapointType.DPT_LoadPriority: // STRING
-        case datapointType == KnxDatapointType.DPT_HVACContrMode: // STRING
-        case datapointType == KnxDatapointType.DPT_HVACEmergMode: // STRING
-        case datapointType == KnxDatapointType.DPT_ChangeoverMode: // STRING
-        case datapointType == KnxDatapointType.DPT_ValveMode: // STRING
-        case datapointType == KnxDatapointType.DPT_DamperMode: // STRING
-        case datapointType == KnxDatapointType.DPT_HeaterMode: // STRING
-        case datapointType == KnxDatapointType.DPT_FanMode: // STRING
-        case datapointType == KnxDatapointType.DPT_MasterSlaveMode: // STRING
-        case datapointType == KnxDatapointType.DPT_StatusRoomSetp: // STRING
-        case datapointType == KnxDatapointType.DPT_Metering_DeviceType: // STRING
-        case datapointType == KnxDatapointType.DPT_HumDehumMode: // STRING
-        case datapointType == KnxDatapointType.DPT_EnableHCStage: // STRING
-        case datapointType == KnxDatapointType.DPT_ADAType: // STRING
-        case datapointType == KnxDatapointType.DPT_BackupMode: // STRING
-        case datapointType == KnxDatapointType.DPT_StartSynchronization: // STRING
-        case datapointType == KnxDatapointType.DPT_Behaviour_Lock_Unlock: // STRING
-        case datapointType == KnxDatapointType.DPT_Behaviour_Bus_Power_Up_Down: // STRING
-        case datapointType == KnxDatapointType.DPT_DALI_Fade_Time: // STRING
-        case datapointType == KnxDatapointType.DPT_BlinkingMode: // STRING
-        case datapointType == KnxDatapointType.DPT_LightControlMode: // STRING
-        case datapointType == KnxDatapointType.DPT_SwitchPBModel: // STRING
-        case datapointType == KnxDatapointType.DPT_PBAction: // STRING
-        case datapointType == KnxDatapointType.DPT_DimmPBModel: // STRING
-        case datapointType == KnxDatapointType.DPT_SwitchOnMode: // STRING
-        case datapointType == KnxDatapointType.DPT_LoadTypeSet: // STRING
-        case datapointType == KnxDatapointType.DPT_LoadTypeDetected: // STRING
-        case datapointType == KnxDatapointType.DPT_Converter_Test_Control: // STRING
-        case datapointType == KnxDatapointType.DPT_SABExcept_Behaviour: // STRING
-        case datapointType == KnxDatapointType.DPT_SABBehaviour_Lock_Unlock: // STRING
-        case datapointType == KnxDatapointType.DPT_SSSBMode: // STRING
-        case datapointType == KnxDatapointType.DPT_BlindsControlMode: // STRING
-        case datapointType == KnxDatapointType.DPT_CommMode: // STRING
-        case datapointType == KnxDatapointType.DPT_AddInfoTypes: // STRING
-        case datapointType == KnxDatapointType.DPT_RF_ModeSelect: // STRING
-        case datapointType == KnxDatapointType.DPT_RF_FilterSelect: // STRING
-        case datapointType == KnxDatapointType.DPT_StatusGen: // Struct
+        case datapointType == KnxDatapointType_DPT_SCLOMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_BuildingMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_OccMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Priority: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_LightApplicationMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ApplicationArea: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_AlarmClassType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_PSUMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ErrorClass_System: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ErrorClass_HVAC: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Time_Delay: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Beaufort_Wind_Force_Scale: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SensorSelect: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ActuatorConnectType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Cloud_Cover: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_PowerReturnMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_FuelType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_BurnerType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HVACMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_DHWMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_LoadPriority: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HVACContrMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HVACEmergMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ChangeoverMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ValveMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_DamperMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HeaterMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_FanMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_MasterSlaveMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_StatusRoomSetp: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Metering_DeviceType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HumDehumMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_EnableHCStage: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ADAType: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_BackupMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_StartSynchronization: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Behaviour_Lock_Unlock: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Behaviour_Bus_Power_Up_Down: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_DALI_Fade_Time: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_BlinkingMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_LightControlMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SwitchPBModel: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_PBAction: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_DimmPBModel: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SwitchOnMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_LoadTypeSet: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_LoadTypeDetected: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Converter_Test_Control: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SABExcept_Behaviour: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SABBehaviour_Lock_Unlock: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_SSSBMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_BlindsControlMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_CommMode: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_AddInfoTypes: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_RF_ModeSelect: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_RF_FilterSelect: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(8)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_StatusGen: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(3); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (alarmStatusOfCorrespondingDatapointIsNotAcknowledged)
+            alarmStatusOfCorrespondingDatapointIsNotAcknowledged, _alarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr := io.ReadBit()
+            if _alarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr != nil {
+                return nil, errors.New("Error parsing 'alarmStatusOfCorrespondingDatapointIsNotAcknowledged' field " + _alarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(alarmStatusOfCorrespondingDatapointIsNotAcknowledged)
+
+            // Simple Field (correspondingDatapointIsInAlarm)
+            correspondingDatapointIsInAlarm, _correspondingDatapointIsInAlarmErr := io.ReadBit()
+            if _correspondingDatapointIsInAlarmErr != nil {
+                return nil, errors.New("Error parsing 'correspondingDatapointIsInAlarm' field " + _correspondingDatapointIsInAlarmErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(correspondingDatapointIsInAlarm)
+
+            // Simple Field (correspondingDatapointMainValueIsOverridden)
+            correspondingDatapointMainValueIsOverridden, _correspondingDatapointMainValueIsOverriddenErr := io.ReadBit()
+            if _correspondingDatapointMainValueIsOverriddenErr != nil {
+                return nil, errors.New("Error parsing 'correspondingDatapointMainValueIsOverridden' field " + _correspondingDatapointMainValueIsOverriddenErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(correspondingDatapointMainValueIsOverridden)
+
+            // Simple Field (correspondingDatapointMainValueIsCorruptedDueToFailure)
+            correspondingDatapointMainValueIsCorruptedDueToFailure, _correspondingDatapointMainValueIsCorruptedDueToFailureErr := io.ReadBit()
+            if _correspondingDatapointMainValueIsCorruptedDueToFailureErr != nil {
+                return nil, errors.New("Error parsing 'correspondingDatapointMainValueIsCorruptedDueToFailure' field " + _correspondingDatapointMainValueIsCorruptedDueToFailureErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(correspondingDatapointMainValueIsCorruptedDueToFailure)
+
+            // Simple Field (correspondingDatapointValueIsOutOfService)
+            correspondingDatapointValueIsOutOfService, _correspondingDatapointValueIsOutOfServiceErr := io.ReadBit()
+            if _correspondingDatapointValueIsOutOfServiceErr != nil {
+                return nil, errors.New("Error parsing 'correspondingDatapointValueIsOutOfService' field " + _correspondingDatapointValueIsOutOfServiceErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(correspondingDatapointValueIsOutOfService)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Device_Control: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (verifyModeIsOn)
+            verifyModeIsOn, _verifyModeIsOnErr := io.ReadBit()
+            if _verifyModeIsOnErr != nil {
+                return nil, errors.New("Error parsing 'verifyModeIsOn' field " + _verifyModeIsOnErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(verifyModeIsOn)
+
+            // Simple Field (aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived)
+            aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived, _aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr := io.ReadBit()
+            if _aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr != nil {
+                return nil, errors.New("Error parsing 'aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived' field " + _aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(aDatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived)
+
+            // Simple Field (theUserApplicationIsStopped)
+            theUserApplicationIsStopped, _theUserApplicationIsStoppedErr := io.ReadBit()
+            if _theUserApplicationIsStoppedErr != nil {
+                return nil, errors.New("Error parsing 'theUserApplicationIsStopped' field " + _theUserApplicationIsStoppedErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(theUserApplicationIsStopped)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_ForceSign: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (roomhmax)
+            roomhmax, _roomhmaxErr := io.ReadBit()
+            if _roomhmaxErr != nil {
+                return nil, errors.New("Error parsing 'roomhmax' field " + _roomhmaxErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(roomhmax)
+
+            // Simple Field (roomhconf)
+            roomhconf, _roomhconfErr := io.ReadBit()
+            if _roomhconfErr != nil {
+                return nil, errors.New("Error parsing 'roomhconf' field " + _roomhconfErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(roomhconf)
+
+            // Simple Field (dhwlegio)
+            dhwlegio, _dhwlegioErr := io.ReadBit()
+            if _dhwlegioErr != nil {
+                return nil, errors.New("Error parsing 'dhwlegio' field " + _dhwlegioErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(dhwlegio)
+
+            // Simple Field (dhwnorm)
+            dhwnorm, _dhwnormErr := io.ReadBit()
+            if _dhwnormErr != nil {
+                return nil, errors.New("Error parsing 'dhwnorm' field " + _dhwnormErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(dhwnorm)
+
+            // Simple Field (overrun)
+            overrun, _overrunErr := io.ReadBit()
+            if _overrunErr != nil {
+                return nil, errors.New("Error parsing 'overrun' field " + _overrunErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(overrun)
+
+            // Simple Field (oversupply)
+            oversupply, _oversupplyErr := io.ReadBit()
+            if _oversupplyErr != nil {
+                return nil, errors.New("Error parsing 'oversupply' field " + _oversupplyErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(oversupply)
+
+            // Simple Field (protection)
+            protection, _protectionErr := io.ReadBit()
+            if _protectionErr != nil {
+                return nil, errors.New("Error parsing 'protection' field " + _protectionErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(protection)
+
+            // Simple Field (forcerequest)
+            forcerequest, _forcerequestErr := io.ReadBit()
+            if _forcerequestErr != nil {
+                return nil, errors.New("Error parsing 'forcerequest' field " + _forcerequestErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(forcerequest)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_ForceSignCool: // BOOL
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(7); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadBit()
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcBOOL(value), nil
+        case datapointType == KnxDatapointType_DPT_StatusRHC: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (summermode)
+            summermode, _summermodeErr := io.ReadBit()
+            if _summermodeErr != nil {
+                return nil, errors.New("Error parsing 'summermode' field " + _summermodeErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(summermode)
+
+            // Simple Field (statusstopoptim)
+            statusstopoptim, _statusstopoptimErr := io.ReadBit()
+            if _statusstopoptimErr != nil {
+                return nil, errors.New("Error parsing 'statusstopoptim' field " + _statusstopoptimErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusstopoptim)
+
+            // Simple Field (statusstartoptim)
+            statusstartoptim, _statusstartoptimErr := io.ReadBit()
+            if _statusstartoptimErr != nil {
+                return nil, errors.New("Error parsing 'statusstartoptim' field " + _statusstartoptimErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusstartoptim)
+
+            // Simple Field (statusmorningboost)
+            statusmorningboost, _statusmorningboostErr := io.ReadBit()
+            if _statusmorningboostErr != nil {
+                return nil, errors.New("Error parsing 'statusmorningboost' field " + _statusmorningboostErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusmorningboost)
+
+            // Simple Field (tempreturnlimit)
+            tempreturnlimit, _tempreturnlimitErr := io.ReadBit()
+            if _tempreturnlimitErr != nil {
+                return nil, errors.New("Error parsing 'tempreturnlimit' field " + _tempreturnlimitErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(tempreturnlimit)
+
+            // Simple Field (tempflowlimit)
+            tempflowlimit, _tempflowlimitErr := io.ReadBit()
+            if _tempflowlimitErr != nil {
+                return nil, errors.New("Error parsing 'tempflowlimit' field " + _tempflowlimitErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(tempflowlimit)
+
+            // Simple Field (satuseco)
+            satuseco, _satusecoErr := io.ReadBit()
+            if _satusecoErr != nil {
+                return nil, errors.New("Error parsing 'satuseco' field " + _satusecoErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(satuseco)
+
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(fault)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_StatusSDHWC: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (solarloadsufficient)
+            solarloadsufficient, _solarloadsufficientErr := io.ReadBit()
+            if _solarloadsufficientErr != nil {
+                return nil, errors.New("Error parsing 'solarloadsufficient' field " + _solarloadsufficientErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(solarloadsufficient)
+
+            // Simple Field (sdhwloadactive)
+            sdhwloadactive, _sdhwloadactiveErr := io.ReadBit()
+            if _sdhwloadactiveErr != nil {
+                return nil, errors.New("Error parsing 'sdhwloadactive' field " + _sdhwloadactiveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(sdhwloadactive)
+
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(fault)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_FuelTypeSet: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (solidstate)
+            solidstate, _solidstateErr := io.ReadBit()
+            if _solidstateErr != nil {
+                return nil, errors.New("Error parsing 'solidstate' field " + _solidstateErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(solidstate)
+
+            // Simple Field (gas)
+            gas, _gasErr := io.ReadBit()
+            if _gasErr != nil {
+                return nil, errors.New("Error parsing 'gas' field " + _gasErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(gas)
+
+            // Simple Field (oil)
+            oil, _oilErr := io.ReadBit()
+            if _oilErr != nil {
+                return nil, errors.New("Error parsing 'oil' field " + _oilErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(oil)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_StatusRCC: // BOOL
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(7); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadBit()
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcBOOL(value), nil
+        case datapointType == KnxDatapointType_DPT_StatusAHU: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (cool)
+            cool, _coolErr := io.ReadBit()
+            if _coolErr != nil {
+                return nil, errors.New("Error parsing 'cool' field " + _coolErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(cool)
+
+            // Simple Field (heat)
+            heat, _heatErr := io.ReadBit()
+            if _heatErr != nil {
+                return nil, errors.New("Error parsing 'heat' field " + _heatErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(heat)
+
+            // Simple Field (fanactive)
+            fanactive, _fanactiveErr := io.ReadBit()
+            if _fanactiveErr != nil {
+                return nil, errors.New("Error parsing 'fanactive' field " + _fanactiveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(fanactive)
+
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(fault)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_CombinedStatus_RTSM: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(3); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (statusOfHvacModeUser)
+            statusOfHvacModeUser, _statusOfHvacModeUserErr := io.ReadBit()
+            if _statusOfHvacModeUserErr != nil {
+                return nil, errors.New("Error parsing 'statusOfHvacModeUser' field " + _statusOfHvacModeUserErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusOfHvacModeUser)
+
+            // Simple Field (statusOfComfortProlongationUser)
+            statusOfComfortProlongationUser, _statusOfComfortProlongationUserErr := io.ReadBit()
+            if _statusOfComfortProlongationUserErr != nil {
+                return nil, errors.New("Error parsing 'statusOfComfortProlongationUser' field " + _statusOfComfortProlongationUserErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusOfComfortProlongationUser)
+
+            // Simple Field (effectiveValueOfTheComfortPushButton)
+            effectiveValueOfTheComfortPushButton, _effectiveValueOfTheComfortPushButtonErr := io.ReadBit()
+            if _effectiveValueOfTheComfortPushButtonErr != nil {
+                return nil, errors.New("Error parsing 'effectiveValueOfTheComfortPushButton' field " + _effectiveValueOfTheComfortPushButtonErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(effectiveValueOfTheComfortPushButton)
+
+            // Simple Field (effectiveValueOfThePresenceStatus)
+            effectiveValueOfThePresenceStatus, _effectiveValueOfThePresenceStatusErr := io.ReadBit()
+            if _effectiveValueOfThePresenceStatusErr != nil {
+                return nil, errors.New("Error parsing 'effectiveValueOfThePresenceStatus' field " + _effectiveValueOfThePresenceStatusErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(effectiveValueOfThePresenceStatus)
+
+            // Simple Field (effectiveValueOfTheWindowStatus)
+            effectiveValueOfTheWindowStatus, _effectiveValueOfTheWindowStatusErr := io.ReadBit()
+            if _effectiveValueOfTheWindowStatusErr != nil {
+                return nil, errors.New("Error parsing 'effectiveValueOfTheWindowStatus' field " + _effectiveValueOfTheWindowStatusErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(effectiveValueOfTheWindowStatus)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_LightActuatorErrorInfo: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(1); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (overheat)
+            overheat, _overheatErr := io.ReadBit()
+            if _overheatErr != nil {
+                return nil, errors.New("Error parsing 'overheat' field " + _overheatErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(overheat)
+
+            // Simple Field (lampfailure)
+            lampfailure, _lampfailureErr := io.ReadBit()
+            if _lampfailureErr != nil {
+                return nil, errors.New("Error parsing 'lampfailure' field " + _lampfailureErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(lampfailure)
+
+            // Simple Field (defectiveload)
+            defectiveload, _defectiveloadErr := io.ReadBit()
+            if _defectiveloadErr != nil {
+                return nil, errors.New("Error parsing 'defectiveload' field " + _defectiveloadErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(defectiveload)
+
+            // Simple Field (underload)
+            underload, _underloadErr := io.ReadBit()
+            if _underloadErr != nil {
+                return nil, errors.New("Error parsing 'underload' field " + _underloadErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(underload)
+
+            // Simple Field (overcurrent)
+            overcurrent, _overcurrentErr := io.ReadBit()
+            if _overcurrentErr != nil {
+                return nil, errors.New("Error parsing 'overcurrent' field " + _overcurrentErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(overcurrent)
+
+            // Simple Field (undervoltage)
+            undervoltage, _undervoltageErr := io.ReadBit()
+            if _undervoltageErr != nil {
+                return nil, errors.New("Error parsing 'undervoltage' field " + _undervoltageErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(undervoltage)
+
+            // Simple Field (loaddetectionerror)
+            loaddetectionerror, _loaddetectionerrorErr := io.ReadBit()
+            if _loaddetectionerrorErr != nil {
+                return nil, errors.New("Error parsing 'loaddetectionerror' field " + _loaddetectionerrorErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(loaddetectionerror)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_RF_ModeInfo: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (bibatSlave)
+            bibatSlave, _bibatSlaveErr := io.ReadBit()
+            if _bibatSlaveErr != nil {
+                return nil, errors.New("Error parsing 'bibatSlave' field " + _bibatSlaveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(bibatSlave)
+
+            // Simple Field (bibatMaster)
+            bibatMaster, _bibatMasterErr := io.ReadBit()
+            if _bibatMasterErr != nil {
+                return nil, errors.New("Error parsing 'bibatMaster' field " + _bibatMasterErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(bibatMaster)
+
+            // Simple Field (asynchronous)
+            asynchronous, _asynchronousErr := io.ReadBit()
+            if _asynchronousErr != nil {
+                return nil, errors.New("Error parsing 'asynchronous' field " + _asynchronousErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(asynchronous)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_RF_FilterInfo: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(3); _err != nil {
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (doa)
+            doa, _doaErr := io.ReadBit()
+            if _doaErr != nil {
+                return nil, errors.New("Error parsing 'doa' field " + _doaErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(doa)
+
+            // Simple Field (knxSn)
+            knxSn, _knxSnErr := io.ReadBit()
+            if _knxSnErr != nil {
+                return nil, errors.New("Error parsing 'knxSn' field " + _knxSnErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(knxSn)
+
+            // Simple Field (doaAndKnxSn)
+            doaAndKnxSn, _doaAndKnxSnErr := io.ReadBit()
+            if _doaAndKnxSnErr != nil {
+                return nil, errors.New("Error parsing 'doaAndKnxSn' field " + _doaAndKnxSnErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(doaAndKnxSn)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Channel_Activation_8: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (AlarmStatusOfCorrespondingDatapointIsNotAcknowledged)
-            AlarmStatusOfCorrespondingDatapointIsNotAcknowledged, _AlarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr := io.ReadBit()
-            if _AlarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr != nil {
-                return nil, errors.New("Error parsing 'AlarmStatusOfCorrespondingDatapointIsNotAcknowledged' field " + _AlarmStatusOfCorrespondingDatapointIsNotAcknowledgedErr.Error())
+            // Simple Field (activationStateOfChannel1)
+            activationStateOfChannel1, _activationStateOfChannel1Err := io.ReadBit()
+            if _activationStateOfChannel1Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel1' field " + _activationStateOfChannel1Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel1)
+
+            // Simple Field (activationStateOfChannel2)
+            activationStateOfChannel2, _activationStateOfChannel2Err := io.ReadBit()
+            if _activationStateOfChannel2Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel2' field " + _activationStateOfChannel2Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel2)
+
+            // Simple Field (activationStateOfChannel3)
+            activationStateOfChannel3, _activationStateOfChannel3Err := io.ReadBit()
+            if _activationStateOfChannel3Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel3' field " + _activationStateOfChannel3Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(AlarmStatusOfCorrespondingDatapointIsNotAcknowledged)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel3)
 
-            // Simple Field (CorrespondingDatapointIsInAlarm)
-            CorrespondingDatapointIsInAlarm, _CorrespondingDatapointIsInAlarmErr := io.ReadBit()
-            if _CorrespondingDatapointIsInAlarmErr != nil {
-                return nil, errors.New("Error parsing 'CorrespondingDatapointIsInAlarm' field " + _CorrespondingDatapointIsInAlarmErr.Error())
+            // Simple Field (activationStateOfChannel4)
+            activationStateOfChannel4, _activationStateOfChannel4Err := io.ReadBit()
+            if _activationStateOfChannel4Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel4' field " + _activationStateOfChannel4Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CorrespondingDatapointIsInAlarm)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel4)
 
-            // Simple Field (CorrespondingDatapointMainValueIsOverridden)
-            CorrespondingDatapointMainValueIsOverridden, _CorrespondingDatapointMainValueIsOverriddenErr := io.ReadBit()
-            if _CorrespondingDatapointMainValueIsOverriddenErr != nil {
-                return nil, errors.New("Error parsing 'CorrespondingDatapointMainValueIsOverridden' field " + _CorrespondingDatapointMainValueIsOverriddenErr.Error())
+            // Simple Field (activationStateOfChannel5)
+            activationStateOfChannel5, _activationStateOfChannel5Err := io.ReadBit()
+            if _activationStateOfChannel5Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel5' field " + _activationStateOfChannel5Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CorrespondingDatapointMainValueIsOverridden)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel5)
 
-            // Simple Field (CorrespondingDatapointMainValueIsCorruptedDueToFailure)
-            CorrespondingDatapointMainValueIsCorruptedDueToFailure, _CorrespondingDatapointMainValueIsCorruptedDueToFailureErr := io.ReadBit()
-            if _CorrespondingDatapointMainValueIsCorruptedDueToFailureErr != nil {
-                return nil, errors.New("Error parsing 'CorrespondingDatapointMainValueIsCorruptedDueToFailure' field " + _CorrespondingDatapointMainValueIsCorruptedDueToFailureErr.Error())
+            // Simple Field (activationStateOfChannel6)
+            activationStateOfChannel6, _activationStateOfChannel6Err := io.ReadBit()
+            if _activationStateOfChannel6Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel6' field " + _activationStateOfChannel6Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CorrespondingDatapointMainValueIsCorruptedDueToFailure)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel6)
 
-            // Simple Field (CorrespondingDatapointValueIsOutOfService)
-            CorrespondingDatapointValueIsOutOfService, _CorrespondingDatapointValueIsOutOfServiceErr := io.ReadBit()
-            if _CorrespondingDatapointValueIsOutOfServiceErr != nil {
-                return nil, errors.New("Error parsing 'CorrespondingDatapointValueIsOutOfService' field " + _CorrespondingDatapointValueIsOutOfServiceErr.Error())
+            // Simple Field (activationStateOfChannel7)
+            activationStateOfChannel7, _activationStateOfChannel7Err := io.ReadBit()
+            if _activationStateOfChannel7Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel7' field " + _activationStateOfChannel7Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CorrespondingDatapointValueIsOutOfService)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel7)
+
+            // Simple Field (activationStateOfChannel8)
+            activationStateOfChannel8, _activationStateOfChannel8Err := io.ReadBit()
+            if _activationStateOfChannel8Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel8' field " + _activationStateOfChannel8Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel8)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Device_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_StatusDHWC: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (VerifyModeIsOn)
-            VerifyModeIsOn, _VerifyModeIsOnErr := io.ReadBit()
-            if _VerifyModeIsOnErr != nil {
-                return nil, errors.New("Error parsing 'VerifyModeIsOn' field " + _VerifyModeIsOnErr.Error())
+            // Simple Field (tempoptimshiftactive)
+            tempoptimshiftactive, _tempoptimshiftactiveErr := io.ReadBit()
+            if _tempoptimshiftactiveErr != nil {
+                return nil, errors.New("Error parsing 'tempoptimshiftactive' field " + _tempoptimshiftactiveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(tempoptimshiftactive)
+
+            // Simple Field (solarenergysupport)
+            solarenergysupport, _solarenergysupportErr := io.ReadBit()
+            if _solarenergysupportErr != nil {
+                return nil, errors.New("Error parsing 'solarenergysupport' field " + _solarenergysupportErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(solarenergysupport)
+
+            // Simple Field (solarenergyonly)
+            solarenergyonly, _solarenergyonlyErr := io.ReadBit()
+            if _solarenergyonlyErr != nil {
+                return nil, errors.New("Error parsing 'solarenergyonly' field " + _solarenergyonlyErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(VerifyModeIsOn)
+            _map["Struct"] = values.NewPlcBOOL(solarenergyonly)
 
-            // Simple Field (ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived)
-            ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived, _ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr := io.ReadBit()
-            if _ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr != nil {
-                return nil, errors.New("Error parsing 'ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived' field " + _ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceivedErr.Error())
+            // Simple Field (otherenergysourceactive)
+            otherenergysourceactive, _otherenergysourceactiveErr := io.ReadBit()
+            if _otherenergysourceactiveErr != nil {
+                return nil, errors.New("Error parsing 'otherenergysourceactive' field " + _otherenergysourceactiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ADatagramWithTheOwnIndividualAddressAsSourceAddressHasBeenReceived)
+            _map["Struct"] = values.NewPlcBOOL(otherenergysourceactive)
 
-            // Simple Field (TheUserApplicationIsStopped)
-            TheUserApplicationIsStopped, _TheUserApplicationIsStoppedErr := io.ReadBit()
-            if _TheUserApplicationIsStoppedErr != nil {
-                return nil, errors.New("Error parsing 'TheUserApplicationIsStopped' field " + _TheUserApplicationIsStoppedErr.Error())
+            // Simple Field (dhwpushactive)
+            dhwpushactive, _dhwpushactiveErr := io.ReadBit()
+            if _dhwpushactiveErr != nil {
+                return nil, errors.New("Error parsing 'dhwpushactive' field " + _dhwpushactiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(TheUserApplicationIsStopped)
+            _map["Struct"] = values.NewPlcBOOL(dhwpushactive)
+
+            // Simple Field (legioprotactive)
+            legioprotactive, _legioprotactiveErr := io.ReadBit()
+            if _legioprotactiveErr != nil {
+                return nil, errors.New("Error parsing 'legioprotactive' field " + _legioprotactiveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(legioprotactive)
+
+            // Simple Field (dhwloadactive)
+            dhwloadactive, _dhwloadactiveErr := io.ReadBit()
+            if _dhwloadactiveErr != nil {
+                return nil, errors.New("Error parsing 'dhwloadactive' field " + _dhwloadactiveErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(dhwloadactive)
+
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(fault)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_ForceSign: // Struct
+        case datapointType == KnxDatapointType_DPT_StatusRHCC: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -3224,290 +4435,526 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Roomhmax)
-            Roomhmax, _RoomhmaxErr := io.ReadBit()
-            if _RoomhmaxErr != nil {
-                return nil, errors.New("Error parsing 'Roomhmax' field " + _RoomhmaxErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(1); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (overheatalarm)
+            overheatalarm, _overheatalarmErr := io.ReadBit()
+            if _overheatalarmErr != nil {
+                return nil, errors.New("Error parsing 'overheatalarm' field " + _overheatalarmErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(overheatalarm)
+
+            // Simple Field (frostalarm)
+            frostalarm, _frostalarmErr := io.ReadBit()
+            if _frostalarmErr != nil {
+                return nil, errors.New("Error parsing 'frostalarm' field " + _frostalarmErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(frostalarm)
+
+            // Simple Field (dewpointstatus)
+            dewpointstatus, _dewpointstatusErr := io.ReadBit()
+            if _dewpointstatusErr != nil {
+                return nil, errors.New("Error parsing 'dewpointstatus' field " + _dewpointstatusErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(dewpointstatus)
+
+            // Simple Field (coolingdisabled)
+            coolingdisabled, _coolingdisabledErr := io.ReadBit()
+            if _coolingdisabledErr != nil {
+                return nil, errors.New("Error parsing 'coolingdisabled' field " + _coolingdisabledErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(coolingdisabled)
+
+            // Simple Field (statusprecool)
+            statusprecool, _statusprecoolErr := io.ReadBit()
+            if _statusprecoolErr != nil {
+                return nil, errors.New("Error parsing 'statusprecool' field " + _statusprecoolErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusprecool)
+
+            // Simple Field (statusecoc)
+            statusecoc, _statusecocErr := io.ReadBit()
+            if _statusecocErr != nil {
+                return nil, errors.New("Error parsing 'statusecoc' field " + _statusecocErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(statusecoc)
+
+            // Simple Field (heatcoolmode)
+            heatcoolmode, _heatcoolmodeErr := io.ReadBit()
+            if _heatcoolmodeErr != nil {
+                return nil, errors.New("Error parsing 'heatcoolmode' field " + _heatcoolmodeErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(heatcoolmode)
+
+            // Simple Field (heatingdiabled)
+            heatingdiabled, _heatingdiabledErr := io.ReadBit()
+            if _heatingdiabledErr != nil {
+                return nil, errors.New("Error parsing 'heatingdiabled' field " + _heatingdiabledErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Roomhmax)
+            _map["Struct"] = values.NewPlcBOOL(heatingdiabled)
 
-            // Simple Field (Roomhconf)
-            Roomhconf, _RoomhconfErr := io.ReadBit()
-            if _RoomhconfErr != nil {
-                return nil, errors.New("Error parsing 'Roomhconf' field " + _RoomhconfErr.Error())
+            // Simple Field (statusstopoptim)
+            statusstopoptim, _statusstopoptimErr := io.ReadBit()
+            if _statusstopoptimErr != nil {
+                return nil, errors.New("Error parsing 'statusstopoptim' field " + _statusstopoptimErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Roomhconf)
+            _map["Struct"] = values.NewPlcBOOL(statusstopoptim)
 
-            // Simple Field (Dhwlegio)
-            Dhwlegio, _DhwlegioErr := io.ReadBit()
-            if _DhwlegioErr != nil {
-                return nil, errors.New("Error parsing 'Dhwlegio' field " + _DhwlegioErr.Error())
+            // Simple Field (statusstartoptim)
+            statusstartoptim, _statusstartoptimErr := io.ReadBit()
+            if _statusstartoptimErr != nil {
+                return nil, errors.New("Error parsing 'statusstartoptim' field " + _statusstartoptimErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Dhwlegio)
+            _map["Struct"] = values.NewPlcBOOL(statusstartoptim)
 
-            // Simple Field (Dhwnorm)
-            Dhwnorm, _DhwnormErr := io.ReadBit()
-            if _DhwnormErr != nil {
-                return nil, errors.New("Error parsing 'Dhwnorm' field " + _DhwnormErr.Error())
+            // Simple Field (statusmorningboosth)
+            statusmorningboosth, _statusmorningboosthErr := io.ReadBit()
+            if _statusmorningboosthErr != nil {
+                return nil, errors.New("Error parsing 'statusmorningboosth' field " + _statusmorningboosthErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Dhwnorm)
+            _map["Struct"] = values.NewPlcBOOL(statusmorningboosth)
 
-            // Simple Field (Overrun)
-            Overrun, _OverrunErr := io.ReadBit()
-            if _OverrunErr != nil {
-                return nil, errors.New("Error parsing 'Overrun' field " + _OverrunErr.Error())
+            // Simple Field (tempflowreturnlimit)
+            tempflowreturnlimit, _tempflowreturnlimitErr := io.ReadBit()
+            if _tempflowreturnlimitErr != nil {
+                return nil, errors.New("Error parsing 'tempflowreturnlimit' field " + _tempflowreturnlimitErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overrun)
+            _map["Struct"] = values.NewPlcBOOL(tempflowreturnlimit)
 
-            // Simple Field (Oversupply)
-            Oversupply, _OversupplyErr := io.ReadBit()
-            if _OversupplyErr != nil {
-                return nil, errors.New("Error parsing 'Oversupply' field " + _OversupplyErr.Error())
+            // Simple Field (tempflowlimit)
+            tempflowlimit, _tempflowlimitErr := io.ReadBit()
+            if _tempflowlimitErr != nil {
+                return nil, errors.New("Error parsing 'tempflowlimit' field " + _tempflowlimitErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Oversupply)
+            _map["Struct"] = values.NewPlcBOOL(tempflowlimit)
 
-            // Simple Field (Protection)
-            Protection, _ProtectionErr := io.ReadBit()
-            if _ProtectionErr != nil {
-                return nil, errors.New("Error parsing 'Protection' field " + _ProtectionErr.Error())
+            // Simple Field (statusecoh)
+            statusecoh, _statusecohErr := io.ReadBit()
+            if _statusecohErr != nil {
+                return nil, errors.New("Error parsing 'statusecoh' field " + _statusecohErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Protection)
+            _map["Struct"] = values.NewPlcBOOL(statusecoh)
 
-            // Simple Field (Forcerequest)
-            Forcerequest, _ForcerequestErr := io.ReadBit()
-            if _ForcerequestErr != nil {
-                return nil, errors.New("Error parsing 'Forcerequest' field " + _ForcerequestErr.Error())
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Forcerequest)
+            _map["Struct"] = values.NewPlcBOOL(fault)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_ForceSignCool: // BOOL
+        case datapointType == KnxDatapointType_DPT_CombinedStatus_HVA: // Struct
+            _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(7); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (value)
-            value, _valueErr := io.ReadBit()
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            // Simple Field (calibrationMode)
+            calibrationMode, _calibrationModeErr := io.ReadBit()
+            if _calibrationModeErr != nil {
+                return nil, errors.New("Error parsing 'calibrationMode' field " + _calibrationModeErr.Error())
             }
-            return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_StatusRHC: // Struct
+            _map["Struct"] = values.NewPlcBOOL(calibrationMode)
+
+            // Simple Field (lockedPosition)
+            lockedPosition, _lockedPositionErr := io.ReadBit()
+            if _lockedPositionErr != nil {
+                return nil, errors.New("Error parsing 'lockedPosition' field " + _lockedPositionErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(lockedPosition)
+
+            // Simple Field (forcedPosition)
+            forcedPosition, _forcedPositionErr := io.ReadBit()
+            if _forcedPositionErr != nil {
+                return nil, errors.New("Error parsing 'forcedPosition' field " + _forcedPositionErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(forcedPosition)
+
+            // Simple Field (manuaOperationOverridden)
+            manuaOperationOverridden, _manuaOperationOverriddenErr := io.ReadBit()
+            if _manuaOperationOverriddenErr != nil {
+                return nil, errors.New("Error parsing 'manuaOperationOverridden' field " + _manuaOperationOverriddenErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(manuaOperationOverridden)
+
+            // Simple Field (serviceMode)
+            serviceMode, _serviceModeErr := io.ReadBit()
+            if _serviceModeErr != nil {
+                return nil, errors.New("Error parsing 'serviceMode' field " + _serviceModeErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(serviceMode)
+
+            // Simple Field (valveKick)
+            valveKick, _valveKickErr := io.ReadBit()
+            if _valveKickErr != nil {
+                return nil, errors.New("Error parsing 'valveKick' field " + _valveKickErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(valveKick)
+
+            // Simple Field (overload)
+            overload, _overloadErr := io.ReadBit()
+            if _overloadErr != nil {
+                return nil, errors.New("Error parsing 'overload' field " + _overloadErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(overload)
+
+            // Simple Field (shortCircuit)
+            shortCircuit, _shortCircuitErr := io.ReadBit()
+            if _shortCircuitErr != nil {
+                return nil, errors.New("Error parsing 'shortCircuit' field " + _shortCircuitErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(shortCircuit)
+
+            // Simple Field (currentValvePosition)
+            currentValvePosition, _currentValvePositionErr := io.ReadBit()
+            if _currentValvePositionErr != nil {
+                return nil, errors.New("Error parsing 'currentValvePosition' field " + _currentValvePositionErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(currentValvePosition)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_CombinedStatus_RTC: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(7); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Summermode)
-            Summermode, _SummermodeErr := io.ReadBit()
-            if _SummermodeErr != nil {
-                return nil, errors.New("Error parsing 'Summermode' field " + _SummermodeErr.Error())
+            // Simple Field (coolingModeEnabled)
+            coolingModeEnabled, _coolingModeEnabledErr := io.ReadBit()
+            if _coolingModeEnabledErr != nil {
+                return nil, errors.New("Error parsing 'coolingModeEnabled' field " + _coolingModeEnabledErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(coolingModeEnabled)
+
+            // Simple Field (heatingModeEnabled)
+            heatingModeEnabled, _heatingModeEnabledErr := io.ReadBit()
+            if _heatingModeEnabledErr != nil {
+                return nil, errors.New("Error parsing 'heatingModeEnabled' field " + _heatingModeEnabledErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Summermode)
+            _map["Struct"] = values.NewPlcBOOL(heatingModeEnabled)
 
-            // Simple Field (Statusstopoptim)
-            Statusstopoptim, _StatusstopoptimErr := io.ReadBit()
-            if _StatusstopoptimErr != nil {
-                return nil, errors.New("Error parsing 'Statusstopoptim' field " + _StatusstopoptimErr.Error())
+            // Simple Field (additionalHeatingCoolingStage2Stage)
+            additionalHeatingCoolingStage2Stage, _additionalHeatingCoolingStage2StageErr := io.ReadBit()
+            if _additionalHeatingCoolingStage2StageErr != nil {
+                return nil, errors.New("Error parsing 'additionalHeatingCoolingStage2Stage' field " + _additionalHeatingCoolingStage2StageErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusstopoptim)
+            _map["Struct"] = values.NewPlcBOOL(additionalHeatingCoolingStage2Stage)
 
-            // Simple Field (Statusstartoptim)
-            Statusstartoptim, _StatusstartoptimErr := io.ReadBit()
-            if _StatusstartoptimErr != nil {
-                return nil, errors.New("Error parsing 'Statusstartoptim' field " + _StatusstartoptimErr.Error())
+            // Simple Field (controllerInactive)
+            controllerInactive, _controllerInactiveErr := io.ReadBit()
+            if _controllerInactiveErr != nil {
+                return nil, errors.New("Error parsing 'controllerInactive' field " + _controllerInactiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusstartoptim)
+            _map["Struct"] = values.NewPlcBOOL(controllerInactive)
 
-            // Simple Field (Statusmorningboost)
-            Statusmorningboost, _StatusmorningboostErr := io.ReadBit()
-            if _StatusmorningboostErr != nil {
-                return nil, errors.New("Error parsing 'Statusmorningboost' field " + _StatusmorningboostErr.Error())
+            // Simple Field (overheatAlarm)
+            overheatAlarm, _overheatAlarmErr := io.ReadBit()
+            if _overheatAlarmErr != nil {
+                return nil, errors.New("Error parsing 'overheatAlarm' field " + _overheatAlarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusmorningboost)
+            _map["Struct"] = values.NewPlcBOOL(overheatAlarm)
 
-            // Simple Field (Tempreturnlimit)
-            Tempreturnlimit, _TempreturnlimitErr := io.ReadBit()
-            if _TempreturnlimitErr != nil {
-                return nil, errors.New("Error parsing 'Tempreturnlimit' field " + _TempreturnlimitErr.Error())
+            // Simple Field (frostAlarm)
+            frostAlarm, _frostAlarmErr := io.ReadBit()
+            if _frostAlarmErr != nil {
+                return nil, errors.New("Error parsing 'frostAlarm' field " + _frostAlarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tempreturnlimit)
+            _map["Struct"] = values.NewPlcBOOL(frostAlarm)
 
-            // Simple Field (Tempflowlimit)
-            Tempflowlimit, _TempflowlimitErr := io.ReadBit()
-            if _TempflowlimitErr != nil {
-                return nil, errors.New("Error parsing 'Tempflowlimit' field " + _TempflowlimitErr.Error())
+            // Simple Field (dewPointStatus)
+            dewPointStatus, _dewPointStatusErr := io.ReadBit()
+            if _dewPointStatusErr != nil {
+                return nil, errors.New("Error parsing 'dewPointStatus' field " + _dewPointStatusErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tempflowlimit)
+            _map["Struct"] = values.NewPlcBOOL(dewPointStatus)
 
-            // Simple Field (Satuseco)
-            Satuseco, _SatusecoErr := io.ReadBit()
-            if _SatusecoErr != nil {
-                return nil, errors.New("Error parsing 'Satuseco' field " + _SatusecoErr.Error())
+            // Simple Field (activeMode)
+            activeMode, _activeModeErr := io.ReadBit()
+            if _activeModeErr != nil {
+                return nil, errors.New("Error parsing 'activeMode' field " + _activeModeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Satuseco)
+            _map["Struct"] = values.NewPlcBOOL(activeMode)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (generalFailureInformation)
+            generalFailureInformation, _generalFailureInformationErr := io.ReadBit()
+            if _generalFailureInformationErr != nil {
+                return nil, errors.New("Error parsing 'generalFailureInformation' field " + _generalFailureInformationErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
+            _map["Struct"] = values.NewPlcBOOL(generalFailureInformation)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_StatusSDHWC: // Struct
+        case datapointType == KnxDatapointType_DPT_Media: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
+            if _, _err := io.ReadUint16(10); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (knxIp)
+            knxIp, _knxIpErr := io.ReadBit()
+            if _knxIpErr != nil {
+                return nil, errors.New("Error parsing 'knxIp' field " + _knxIpErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(knxIp)
+
+            // Simple Field (rf)
+            rf, _rfErr := io.ReadBit()
+            if _rfErr != nil {
+                return nil, errors.New("Error parsing 'rf' field " + _rfErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(rf)
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(1); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Solarloadsufficient)
-            Solarloadsufficient, _SolarloadsufficientErr := io.ReadBit()
-            if _SolarloadsufficientErr != nil {
-                return nil, errors.New("Error parsing 'Solarloadsufficient' field " + _SolarloadsufficientErr.Error())
+            // Simple Field (pl110)
+            pl110, _pl110Err := io.ReadBit()
+            if _pl110Err != nil {
+                return nil, errors.New("Error parsing 'pl110' field " + _pl110Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Solarloadsufficient)
+            _map["Struct"] = values.NewPlcBOOL(pl110)
 
-            // Simple Field (Sdhwloadactive)
-            Sdhwloadactive, _SdhwloadactiveErr := io.ReadBit()
-            if _SdhwloadactiveErr != nil {
-                return nil, errors.New("Error parsing 'Sdhwloadactive' field " + _SdhwloadactiveErr.Error())
+            // Simple Field (tp1)
+            tp1, _tp1Err := io.ReadBit()
+            if _tp1Err != nil {
+                return nil, errors.New("Error parsing 'tp1' field " + _tp1Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Sdhwloadactive)
+            _map["Struct"] = values.NewPlcBOOL(tp1)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(1); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_FuelTypeSet: // Struct
+        case datapointType == KnxDatapointType_DPT_Channel_Activation_16: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Solidstate)
-            Solidstate, _SolidstateErr := io.ReadBit()
-            if _SolidstateErr != nil {
-                return nil, errors.New("Error parsing 'Solidstate' field " + _SolidstateErr.Error())
+            // Simple Field (activationStateOfChannel1)
+            activationStateOfChannel1, _activationStateOfChannel1Err := io.ReadBit()
+            if _activationStateOfChannel1Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel1' field " + _activationStateOfChannel1Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel1)
+
+            // Simple Field (activationStateOfChannel2)
+            activationStateOfChannel2, _activationStateOfChannel2Err := io.ReadBit()
+            if _activationStateOfChannel2Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel2' field " + _activationStateOfChannel2Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel2)
+
+            // Simple Field (activationStateOfChannel3)
+            activationStateOfChannel3, _activationStateOfChannel3Err := io.ReadBit()
+            if _activationStateOfChannel3Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel3' field " + _activationStateOfChannel3Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel3)
+
+            // Simple Field (activationStateOfChannel4)
+            activationStateOfChannel4, _activationStateOfChannel4Err := io.ReadBit()
+            if _activationStateOfChannel4Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel4' field " + _activationStateOfChannel4Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel4)
+
+            // Simple Field (activationStateOfChannel5)
+            activationStateOfChannel5, _activationStateOfChannel5Err := io.ReadBit()
+            if _activationStateOfChannel5Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel5' field " + _activationStateOfChannel5Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel5)
+
+            // Simple Field (activationStateOfChannel6)
+            activationStateOfChannel6, _activationStateOfChannel6Err := io.ReadBit()
+            if _activationStateOfChannel6Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel6' field " + _activationStateOfChannel6Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel6)
+
+            // Simple Field (activationStateOfChannel7)
+            activationStateOfChannel7, _activationStateOfChannel7Err := io.ReadBit()
+            if _activationStateOfChannel7Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel7' field " + _activationStateOfChannel7Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Solidstate)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel7)
 
-            // Simple Field (Gas)
-            Gas, _GasErr := io.ReadBit()
-            if _GasErr != nil {
-                return nil, errors.New("Error parsing 'Gas' field " + _GasErr.Error())
+            // Simple Field (activationStateOfChannel8)
+            activationStateOfChannel8, _activationStateOfChannel8Err := io.ReadBit()
+            if _activationStateOfChannel8Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel8' field " + _activationStateOfChannel8Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Gas)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel8)
 
-            // Simple Field (Oil)
-            Oil, _OilErr := io.ReadBit()
-            if _OilErr != nil {
-                return nil, errors.New("Error parsing 'Oil' field " + _OilErr.Error())
+            // Simple Field (activationStateOfChannel9)
+            activationStateOfChannel9, _activationStateOfChannel9Err := io.ReadBit()
+            if _activationStateOfChannel9Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel9' field " + _activationStateOfChannel9Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Oil)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel9)
+
+            // Simple Field (activationStateOfChannel10)
+            activationStateOfChannel10, _activationStateOfChannel10Err := io.ReadBit()
+            if _activationStateOfChannel10Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel10' field " + _activationStateOfChannel10Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel10)
+
+            // Simple Field (activationStateOfChannel11)
+            activationStateOfChannel11, _activationStateOfChannel11Err := io.ReadBit()
+            if _activationStateOfChannel11Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel11' field " + _activationStateOfChannel11Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel11)
+
+            // Simple Field (activationStateOfChannel12)
+            activationStateOfChannel12, _activationStateOfChannel12Err := io.ReadBit()
+            if _activationStateOfChannel12Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel12' field " + _activationStateOfChannel12Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel12)
+
+            // Simple Field (activationStateOfChannel13)
+            activationStateOfChannel13, _activationStateOfChannel13Err := io.ReadBit()
+            if _activationStateOfChannel13Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel13' field " + _activationStateOfChannel13Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel13)
+
+            // Simple Field (activationStateOfChannel14)
+            activationStateOfChannel14, _activationStateOfChannel14Err := io.ReadBit()
+            if _activationStateOfChannel14Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel14' field " + _activationStateOfChannel14Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel14)
+
+            // Simple Field (activationStateOfChannel15)
+            activationStateOfChannel15, _activationStateOfChannel15Err := io.ReadBit()
+            if _activationStateOfChannel15Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel15' field " + _activationStateOfChannel15Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel15)
+
+            // Simple Field (activationStateOfChannel16)
+            activationStateOfChannel16, _activationStateOfChannel16Err := io.ReadBit()
+            if _activationStateOfChannel16Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel16' field " + _activationStateOfChannel16Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel16)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_StatusRCC: // BOOL
+        case datapointType == KnxDatapointType_DPT_OnOffAction: // USINT
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(7); _err != nil {
+            if _, _err := io.ReadUint8(6); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
             // Simple Field (value)
-            value, _valueErr := io.ReadBit()
+            value, _valueErr := io.ReadUint8(2)
             if _valueErr != nil {
                 return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
-            return values.NewPlcBOOL(value), nil
-        case datapointType == KnxDatapointType.DPT_StatusAHU: // Struct
-            _map := map[string]api.PlcValue{}
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Alarm_Reaction: // USINT
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(4); _err != nil {
+            if _, _err := io.ReadUint8(6); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Cool)
-            Cool, _CoolErr := io.ReadBit()
-            if _CoolErr != nil {
-                return nil, errors.New("Error parsing 'Cool' field " + _CoolErr.Error())
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(2)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_UpDown_Action: // USINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(6); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Cool)
 
-            // Simple Field (Heat)
-            Heat, _HeatErr := io.ReadBit()
-            if _HeatErr != nil {
-                return nil, errors.New("Error parsing 'Heat' field " + _HeatErr.Error())
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(2)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Heat)
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_HVAC_PB_Action: // USINT
 
-            // Simple Field (Fanactive)
-            Fanactive, _FanactiveErr := io.ReadBit()
-            if _FanactiveErr != nil {
-                return nil, errors.New("Error parsing 'Fanactive' field " + _FanactiveErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(6); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fanactive)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (value)
+            value, _valueErr := io.ReadUint8(2)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_CombinedStatus_RTSM: // Struct
+            return values.NewPlcUSINT(value), nil
+        case datapointType == KnxDatapointType_DPT_DoubleNibble: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(3); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (StatusOfHvacModeUser)
-            StatusOfHvacModeUser, _StatusOfHvacModeUserErr := io.ReadBit()
-            if _StatusOfHvacModeUserErr != nil {
-                return nil, errors.New("Error parsing 'StatusOfHvacModeUser' field " + _StatusOfHvacModeUserErr.Error())
+            // Simple Field (busy)
+            busy, _busyErr := io.ReadUint8(4)
+            if _busyErr != nil {
+                return nil, errors.New("Error parsing 'busy' field " + _busyErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(busy)
+
+            // Simple Field (nak)
+            nak, _nakErr := io.ReadUint8(4)
+            if _nakErr != nil {
+                return nil, errors.New("Error parsing 'nak' field " + _nakErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusOfHvacModeUser)
+            _map["Struct"] = values.NewPlcUSINT(nak)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_SceneInfo: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (StatusOfComfortProlongationUser)
-            StatusOfComfortProlongationUser, _StatusOfComfortProlongationUserErr := io.ReadBit()
-            if _StatusOfComfortProlongationUserErr != nil {
-                return nil, errors.New("Error parsing 'StatusOfComfortProlongationUser' field " + _StatusOfComfortProlongationUserErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(StatusOfComfortProlongationUser)
 
-            // Simple Field (EffectiveValueOfTheComfortPushButton)
-            EffectiveValueOfTheComfortPushButton, _EffectiveValueOfTheComfortPushButtonErr := io.ReadBit()
-            if _EffectiveValueOfTheComfortPushButtonErr != nil {
-                return nil, errors.New("Error parsing 'EffectiveValueOfTheComfortPushButton' field " + _EffectiveValueOfTheComfortPushButtonErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(1); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(EffectiveValueOfTheComfortPushButton)
 
-            // Simple Field (EffectiveValueOfThePresenceStatus)
-            EffectiveValueOfThePresenceStatus, _EffectiveValueOfThePresenceStatusErr := io.ReadBit()
-            if _EffectiveValueOfThePresenceStatusErr != nil {
-                return nil, errors.New("Error parsing 'EffectiveValueOfThePresenceStatus' field " + _EffectiveValueOfThePresenceStatusErr.Error())
+            // Simple Field (sceneIsInactive)
+            sceneIsInactive, _sceneIsInactiveErr := io.ReadBit()
+            if _sceneIsInactiveErr != nil {
+                return nil, errors.New("Error parsing 'sceneIsInactive' field " + _sceneIsInactiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(EffectiveValueOfThePresenceStatus)
+            _map["Struct"] = values.NewPlcBOOL(sceneIsInactive)
 
-            // Simple Field (EffectiveValueOfTheWindowStatus)
-            EffectiveValueOfTheWindowStatus, _EffectiveValueOfTheWindowStatusErr := io.ReadBit()
-            if _EffectiveValueOfTheWindowStatusErr != nil {
-                return nil, errors.New("Error parsing 'EffectiveValueOfTheWindowStatus' field " + _EffectiveValueOfTheWindowStatusErr.Error())
+            // Simple Field (scenenumber)
+            scenenumber, _scenenumberErr := io.ReadUint8(6)
+            if _scenenumberErr != nil {
+                return nil, errors.New("Error parsing 'scenenumber' field " + _scenenumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(EffectiveValueOfTheWindowStatus)
+            _map["Struct"] = values.NewPlcUSINT(scenenumber)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_LightActuatorErrorInfo: // Struct
+        case datapointType == KnxDatapointType_DPT_CombinedInfoOnOff: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -3515,247 +4962,446 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(1); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (maskBitInfoOnOffOutput16)
+            maskBitInfoOnOffOutput16, _maskBitInfoOnOffOutput16Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput16Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput16' field " + _maskBitInfoOnOffOutput16Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput16)
+
+            // Simple Field (maskBitInfoOnOffOutput15)
+            maskBitInfoOnOffOutput15, _maskBitInfoOnOffOutput15Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput15Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput15' field " + _maskBitInfoOnOffOutput15Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput15)
+
+            // Simple Field (maskBitInfoOnOffOutput14)
+            maskBitInfoOnOffOutput14, _maskBitInfoOnOffOutput14Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput14Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput14' field " + _maskBitInfoOnOffOutput14Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput14)
+
+            // Simple Field (maskBitInfoOnOffOutput13)
+            maskBitInfoOnOffOutput13, _maskBitInfoOnOffOutput13Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput13Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput13' field " + _maskBitInfoOnOffOutput13Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput13)
+
+            // Simple Field (maskBitInfoOnOffOutput12)
+            maskBitInfoOnOffOutput12, _maskBitInfoOnOffOutput12Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput12Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput12' field " + _maskBitInfoOnOffOutput12Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput12)
+
+            // Simple Field (maskBitInfoOnOffOutput11)
+            maskBitInfoOnOffOutput11, _maskBitInfoOnOffOutput11Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput11Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput11' field " + _maskBitInfoOnOffOutput11Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput11)
+
+            // Simple Field (maskBitInfoOnOffOutput10)
+            maskBitInfoOnOffOutput10, _maskBitInfoOnOffOutput10Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput10Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput10' field " + _maskBitInfoOnOffOutput10Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput10)
+
+            // Simple Field (maskBitInfoOnOffOutput9)
+            maskBitInfoOnOffOutput9, _maskBitInfoOnOffOutput9Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput9Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput9' field " + _maskBitInfoOnOffOutput9Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput9)
+
+            // Simple Field (maskBitInfoOnOffOutput8)
+            maskBitInfoOnOffOutput8, _maskBitInfoOnOffOutput8Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput8Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput8' field " + _maskBitInfoOnOffOutput8Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput8)
+
+            // Simple Field (maskBitInfoOnOffOutput7)
+            maskBitInfoOnOffOutput7, _maskBitInfoOnOffOutput7Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput7Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput7' field " + _maskBitInfoOnOffOutput7Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput7)
+
+            // Simple Field (maskBitInfoOnOffOutput6)
+            maskBitInfoOnOffOutput6, _maskBitInfoOnOffOutput6Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput6Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput6' field " + _maskBitInfoOnOffOutput6Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput6)
+
+            // Simple Field (maskBitInfoOnOffOutput5)
+            maskBitInfoOnOffOutput5, _maskBitInfoOnOffOutput5Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput5Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput5' field " + _maskBitInfoOnOffOutput5Err.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput5)
 
-            // Simple Field (Overheat)
-            Overheat, _OverheatErr := io.ReadBit()
-            if _OverheatErr != nil {
-                return nil, errors.New("Error parsing 'Overheat' field " + _OverheatErr.Error())
+            // Simple Field (maskBitInfoOnOffOutput4)
+            maskBitInfoOnOffOutput4, _maskBitInfoOnOffOutput4Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput4Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput4' field " + _maskBitInfoOnOffOutput4Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overheat)
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput4)
 
-            // Simple Field (Lampfailure)
-            Lampfailure, _LampfailureErr := io.ReadBit()
-            if _LampfailureErr != nil {
-                return nil, errors.New("Error parsing 'Lampfailure' field " + _LampfailureErr.Error())
+            // Simple Field (maskBitInfoOnOffOutput3)
+            maskBitInfoOnOffOutput3, _maskBitInfoOnOffOutput3Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput3Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput3' field " + _maskBitInfoOnOffOutput3Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Lampfailure)
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput3)
 
-            // Simple Field (Defectiveload)
-            Defectiveload, _DefectiveloadErr := io.ReadBit()
-            if _DefectiveloadErr != nil {
-                return nil, errors.New("Error parsing 'Defectiveload' field " + _DefectiveloadErr.Error())
+            // Simple Field (maskBitInfoOnOffOutput2)
+            maskBitInfoOnOffOutput2, _maskBitInfoOnOffOutput2Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput2Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput2' field " + _maskBitInfoOnOffOutput2Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Defectiveload)
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput2)
 
-            // Simple Field (Underload)
-            Underload, _UnderloadErr := io.ReadBit()
-            if _UnderloadErr != nil {
-                return nil, errors.New("Error parsing 'Underload' field " + _UnderloadErr.Error())
+            // Simple Field (maskBitInfoOnOffOutput1)
+            maskBitInfoOnOffOutput1, _maskBitInfoOnOffOutput1Err := io.ReadBit()
+            if _maskBitInfoOnOffOutput1Err != nil {
+                return nil, errors.New("Error parsing 'maskBitInfoOnOffOutput1' field " + _maskBitInfoOnOffOutput1Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Underload)
+            _map["Struct"] = values.NewPlcBOOL(maskBitInfoOnOffOutput1)
 
-            // Simple Field (Overcurrent)
-            Overcurrent, _OvercurrentErr := io.ReadBit()
-            if _OvercurrentErr != nil {
-                return nil, errors.New("Error parsing 'Overcurrent' field " + _OvercurrentErr.Error())
+            // Simple Field (infoOnOffOutput16)
+            infoOnOffOutput16, _infoOnOffOutput16Err := io.ReadBit()
+            if _infoOnOffOutput16Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput16' field " + _infoOnOffOutput16Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overcurrent)
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput16)
 
-            // Simple Field (Undervoltage)
-            Undervoltage, _UndervoltageErr := io.ReadBit()
-            if _UndervoltageErr != nil {
-                return nil, errors.New("Error parsing 'Undervoltage' field " + _UndervoltageErr.Error())
+            // Simple Field (infoOnOffOutput15)
+            infoOnOffOutput15, _infoOnOffOutput15Err := io.ReadBit()
+            if _infoOnOffOutput15Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput15' field " + _infoOnOffOutput15Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Undervoltage)
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput15)
 
-            // Simple Field (Loaddetectionerror)
-            Loaddetectionerror, _LoaddetectionerrorErr := io.ReadBit()
-            if _LoaddetectionerrorErr != nil {
-                return nil, errors.New("Error parsing 'Loaddetectionerror' field " + _LoaddetectionerrorErr.Error())
+            // Simple Field (infoOnOffOutput14)
+            infoOnOffOutput14, _infoOnOffOutput14Err := io.ReadBit()
+            if _infoOnOffOutput14Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput14' field " + _infoOnOffOutput14Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Loaddetectionerror)
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput14)
+
+            // Simple Field (infoOnOffOutput13)
+            infoOnOffOutput13, _infoOnOffOutput13Err := io.ReadBit()
+            if _infoOnOffOutput13Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput13' field " + _infoOnOffOutput13Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput13)
+
+            // Simple Field (infoOnOffOutput12)
+            infoOnOffOutput12, _infoOnOffOutput12Err := io.ReadBit()
+            if _infoOnOffOutput12Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput12' field " + _infoOnOffOutput12Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput12)
+
+            // Simple Field (infoOnOffOutput11)
+            infoOnOffOutput11, _infoOnOffOutput11Err := io.ReadBit()
+            if _infoOnOffOutput11Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput11' field " + _infoOnOffOutput11Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput11)
+
+            // Simple Field (infoOnOffOutput10)
+            infoOnOffOutput10, _infoOnOffOutput10Err := io.ReadBit()
+            if _infoOnOffOutput10Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput10' field " + _infoOnOffOutput10Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput10)
+
+            // Simple Field (infoOnOffOutput9)
+            infoOnOffOutput9, _infoOnOffOutput9Err := io.ReadBit()
+            if _infoOnOffOutput9Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput9' field " + _infoOnOffOutput9Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput9)
+
+            // Simple Field (infoOnOffOutput8)
+            infoOnOffOutput8, _infoOnOffOutput8Err := io.ReadBit()
+            if _infoOnOffOutput8Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput8' field " + _infoOnOffOutput8Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput8)
+
+            // Simple Field (infoOnOffOutput7)
+            infoOnOffOutput7, _infoOnOffOutput7Err := io.ReadBit()
+            if _infoOnOffOutput7Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput7' field " + _infoOnOffOutput7Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput7)
+
+            // Simple Field (infoOnOffOutput6)
+            infoOnOffOutput6, _infoOnOffOutput6Err := io.ReadBit()
+            if _infoOnOffOutput6Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput6' field " + _infoOnOffOutput6Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput6)
+
+            // Simple Field (infoOnOffOutput5)
+            infoOnOffOutput5, _infoOnOffOutput5Err := io.ReadBit()
+            if _infoOnOffOutput5Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput5' field " + _infoOnOffOutput5Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput5)
+
+            // Simple Field (infoOnOffOutput4)
+            infoOnOffOutput4, _infoOnOffOutput4Err := io.ReadBit()
+            if _infoOnOffOutput4Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput4' field " + _infoOnOffOutput4Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput4)
+
+            // Simple Field (infoOnOffOutput3)
+            infoOnOffOutput3, _infoOnOffOutput3Err := io.ReadBit()
+            if _infoOnOffOutput3Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput3' field " + _infoOnOffOutput3Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput3)
+
+            // Simple Field (infoOnOffOutput2)
+            infoOnOffOutput2, _infoOnOffOutput2Err := io.ReadBit()
+            if _infoOnOffOutput2Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput2' field " + _infoOnOffOutput2Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput2)
+
+            // Simple Field (infoOnOffOutput1)
+            infoOnOffOutput1, _infoOnOffOutput1Err := io.ReadBit()
+            if _infoOnOffOutput1Err != nil {
+                return nil, errors.New("Error parsing 'infoOnOffOutput1' field " + _infoOnOffOutput1Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(infoOnOffOutput1)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_RF_ModeInfo: // Struct
-            _map := map[string]api.PlcValue{}
+        case datapointType == KnxDatapointType_DPT_ActiveEnergy_V64: // LINT
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadInt64(64)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcLINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ApparantEnergy_V64: // LINT
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (BibatSlave)
-            BibatSlave, _BibatSlaveErr := io.ReadBit()
-            if _BibatSlaveErr != nil {
-                return nil, errors.New("Error parsing 'BibatSlave' field " + _BibatSlaveErr.Error())
+            // Simple Field (value)
+            value, _valueErr := io.ReadInt64(64)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(BibatSlave)
+            return values.NewPlcLINT(value), nil
+        case datapointType == KnxDatapointType_DPT_ReactiveEnergy_V64: // LINT
 
-            // Simple Field (BibatMaster)
-            BibatMaster, _BibatMasterErr := io.ReadBit()
-            if _BibatMasterErr != nil {
-                return nil, errors.New("Error parsing 'BibatMaster' field " + _BibatMasterErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(BibatMaster)
 
-            // Simple Field (Asynchronous)
-            Asynchronous, _AsynchronousErr := io.ReadBit()
-            if _AsynchronousErr != nil {
-                return nil, errors.New("Error parsing 'Asynchronous' field " + _AsynchronousErr.Error())
+            // Simple Field (value)
+            value, _valueErr := io.ReadInt64(64)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Asynchronous)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_RF_FilterInfo: // Struct
+            return values.NewPlcLINT(value), nil
+        case datapointType == KnxDatapointType_DPT_Channel_Activation_24: // Struct
             _map := map[string]api.PlcValue{}
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (activationStateOfChannel1)
+            activationStateOfChannel1, _activationStateOfChannel1Err := io.ReadBit()
+            if _activationStateOfChannel1Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel1' field " + _activationStateOfChannel1Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel1)
+
+            // Simple Field (activationStateOfChannel2)
+            activationStateOfChannel2, _activationStateOfChannel2Err := io.ReadBit()
+            if _activationStateOfChannel2Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel2' field " + _activationStateOfChannel2Err.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel2)
+
+            // Simple Field (activationStateOfChannel3)
+            activationStateOfChannel3, _activationStateOfChannel3Err := io.ReadBit()
+            if _activationStateOfChannel3Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel3' field " + _activationStateOfChannel3Err.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel3)
 
-            // Simple Field (Doa)
-            Doa, _DoaErr := io.ReadBit()
-            if _DoaErr != nil {
-                return nil, errors.New("Error parsing 'Doa' field " + _DoaErr.Error())
+            // Simple Field (activationStateOfChannel4)
+            activationStateOfChannel4, _activationStateOfChannel4Err := io.ReadBit()
+            if _activationStateOfChannel4Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel4' field " + _activationStateOfChannel4Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Doa)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel4)
 
-            // Simple Field (KnxSn)
-            KnxSn, _KnxSnErr := io.ReadBit()
-            if _KnxSnErr != nil {
-                return nil, errors.New("Error parsing 'KnxSn' field " + _KnxSnErr.Error())
+            // Simple Field (activationStateOfChannel5)
+            activationStateOfChannel5, _activationStateOfChannel5Err := io.ReadBit()
+            if _activationStateOfChannel5Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel5' field " + _activationStateOfChannel5Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(KnxSn)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel5)
 
-            // Simple Field (DoaAndKnxSn)
-            DoaAndKnxSn, _DoaAndKnxSnErr := io.ReadBit()
-            if _DoaAndKnxSnErr != nil {
-                return nil, errors.New("Error parsing 'DoaAndKnxSn' field " + _DoaAndKnxSnErr.Error())
+            // Simple Field (activationStateOfChannel6)
+            activationStateOfChannel6, _activationStateOfChannel6Err := io.ReadBit()
+            if _activationStateOfChannel6Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel6' field " + _activationStateOfChannel6Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(DoaAndKnxSn)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Channel_Activation_8: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel6)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (activationStateOfChannel7)
+            activationStateOfChannel7, _activationStateOfChannel7Err := io.ReadBit()
+            if _activationStateOfChannel7Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel7' field " + _activationStateOfChannel7Err.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel7)
 
-            // Simple Field (ActivationStateOfChannel1)
-            ActivationStateOfChannel1, _ActivationStateOfChannel1Err := io.ReadBit()
-            if _ActivationStateOfChannel1Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel1' field " + _ActivationStateOfChannel1Err.Error())
+            // Simple Field (activationStateOfChannel8)
+            activationStateOfChannel8, _activationStateOfChannel8Err := io.ReadBit()
+            if _activationStateOfChannel8Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel8' field " + _activationStateOfChannel8Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel1)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel8)
 
-            // Simple Field (ActivationStateOfChannel2)
-            ActivationStateOfChannel2, _ActivationStateOfChannel2Err := io.ReadBit()
-            if _ActivationStateOfChannel2Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel2' field " + _ActivationStateOfChannel2Err.Error())
+            // Simple Field (activationStateOfChannel9)
+            activationStateOfChannel9, _activationStateOfChannel9Err := io.ReadBit()
+            if _activationStateOfChannel9Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel9' field " + _activationStateOfChannel9Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel2)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel9)
 
-            // Simple Field (ActivationStateOfChannel3)
-            ActivationStateOfChannel3, _ActivationStateOfChannel3Err := io.ReadBit()
-            if _ActivationStateOfChannel3Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel3' field " + _ActivationStateOfChannel3Err.Error())
+            // Simple Field (activationStateOfChannel10)
+            activationStateOfChannel10, _activationStateOfChannel10Err := io.ReadBit()
+            if _activationStateOfChannel10Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel10' field " + _activationStateOfChannel10Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel3)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel10)
 
-            // Simple Field (ActivationStateOfChannel4)
-            ActivationStateOfChannel4, _ActivationStateOfChannel4Err := io.ReadBit()
-            if _ActivationStateOfChannel4Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel4' field " + _ActivationStateOfChannel4Err.Error())
+            // Simple Field (activationStateOfChannel11)
+            activationStateOfChannel11, _activationStateOfChannel11Err := io.ReadBit()
+            if _activationStateOfChannel11Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel11' field " + _activationStateOfChannel11Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel4)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel11)
 
-            // Simple Field (ActivationStateOfChannel5)
-            ActivationStateOfChannel5, _ActivationStateOfChannel5Err := io.ReadBit()
-            if _ActivationStateOfChannel5Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel5' field " + _ActivationStateOfChannel5Err.Error())
+            // Simple Field (activationStateOfChannel12)
+            activationStateOfChannel12, _activationStateOfChannel12Err := io.ReadBit()
+            if _activationStateOfChannel12Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel12' field " + _activationStateOfChannel12Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel5)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel12)
 
-            // Simple Field (ActivationStateOfChannel6)
-            ActivationStateOfChannel6, _ActivationStateOfChannel6Err := io.ReadBit()
-            if _ActivationStateOfChannel6Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel6' field " + _ActivationStateOfChannel6Err.Error())
+            // Simple Field (activationStateOfChannel13)
+            activationStateOfChannel13, _activationStateOfChannel13Err := io.ReadBit()
+            if _activationStateOfChannel13Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel13' field " + _activationStateOfChannel13Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel6)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel13)
 
-            // Simple Field (ActivationStateOfChannel7)
-            ActivationStateOfChannel7, _ActivationStateOfChannel7Err := io.ReadBit()
-            if _ActivationStateOfChannel7Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel7' field " + _ActivationStateOfChannel7Err.Error())
+            // Simple Field (activationStateOfChannel14)
+            activationStateOfChannel14, _activationStateOfChannel14Err := io.ReadBit()
+            if _activationStateOfChannel14Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel14' field " + _activationStateOfChannel14Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel7)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel14)
 
-            // Simple Field (ActivationStateOfChannel8)
-            ActivationStateOfChannel8, _ActivationStateOfChannel8Err := io.ReadBit()
-            if _ActivationStateOfChannel8Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel8' field " + _ActivationStateOfChannel8Err.Error())
+            // Simple Field (activationStateOfChannel15)
+            activationStateOfChannel15, _activationStateOfChannel15Err := io.ReadBit()
+            if _activationStateOfChannel15Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel15' field " + _activationStateOfChannel15Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel8)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_StatusDHWC: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel15)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (activationStateOfChannel16)
+            activationStateOfChannel16, _activationStateOfChannel16Err := io.ReadBit()
+            if _activationStateOfChannel16Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel16' field " + _activationStateOfChannel16Err.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel16)
 
-            // Simple Field (Tempoptimshiftactive)
-            Tempoptimshiftactive, _TempoptimshiftactiveErr := io.ReadBit()
-            if _TempoptimshiftactiveErr != nil {
-                return nil, errors.New("Error parsing 'Tempoptimshiftactive' field " + _TempoptimshiftactiveErr.Error())
+            // Simple Field (activationStateOfChannel17)
+            activationStateOfChannel17, _activationStateOfChannel17Err := io.ReadBit()
+            if _activationStateOfChannel17Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel17' field " + _activationStateOfChannel17Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tempoptimshiftactive)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel17)
 
-            // Simple Field (Solarenergysupport)
-            Solarenergysupport, _SolarenergysupportErr := io.ReadBit()
-            if _SolarenergysupportErr != nil {
-                return nil, errors.New("Error parsing 'Solarenergysupport' field " + _SolarenergysupportErr.Error())
+            // Simple Field (activationStateOfChannel18)
+            activationStateOfChannel18, _activationStateOfChannel18Err := io.ReadBit()
+            if _activationStateOfChannel18Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel18' field " + _activationStateOfChannel18Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Solarenergysupport)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel18)
 
-            // Simple Field (Solarenergyonly)
-            Solarenergyonly, _SolarenergyonlyErr := io.ReadBit()
-            if _SolarenergyonlyErr != nil {
-                return nil, errors.New("Error parsing 'Solarenergyonly' field " + _SolarenergyonlyErr.Error())
+            // Simple Field (activationStateOfChannel19)
+            activationStateOfChannel19, _activationStateOfChannel19Err := io.ReadBit()
+            if _activationStateOfChannel19Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel19' field " + _activationStateOfChannel19Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Solarenergyonly)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel19)
 
-            // Simple Field (Otherenergysourceactive)
-            Otherenergysourceactive, _OtherenergysourceactiveErr := io.ReadBit()
-            if _OtherenergysourceactiveErr != nil {
-                return nil, errors.New("Error parsing 'Otherenergysourceactive' field " + _OtherenergysourceactiveErr.Error())
+            // Simple Field (activationStateOfChannel20)
+            activationStateOfChannel20, _activationStateOfChannel20Err := io.ReadBit()
+            if _activationStateOfChannel20Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel20' field " + _activationStateOfChannel20Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Otherenergysourceactive)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel20)
 
-            // Simple Field (Dhwpushactive)
-            Dhwpushactive, _DhwpushactiveErr := io.ReadBit()
-            if _DhwpushactiveErr != nil {
-                return nil, errors.New("Error parsing 'Dhwpushactive' field " + _DhwpushactiveErr.Error())
+            // Simple Field (activationStateOfChannel21)
+            activationStateOfChannel21, _activationStateOfChannel21Err := io.ReadBit()
+            if _activationStateOfChannel21Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel21' field " + _activationStateOfChannel21Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Dhwpushactive)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel21)
 
-            // Simple Field (Legioprotactive)
-            Legioprotactive, _LegioprotactiveErr := io.ReadBit()
-            if _LegioprotactiveErr != nil {
-                return nil, errors.New("Error parsing 'Legioprotactive' field " + _LegioprotactiveErr.Error())
+            // Simple Field (activationStateOfChannel22)
+            activationStateOfChannel22, _activationStateOfChannel22Err := io.ReadBit()
+            if _activationStateOfChannel22Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel22' field " + _activationStateOfChannel22Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Legioprotactive)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel22)
 
-            // Simple Field (Dhwloadactive)
-            Dhwloadactive, _DhwloadactiveErr := io.ReadBit()
-            if _DhwloadactiveErr != nil {
-                return nil, errors.New("Error parsing 'Dhwloadactive' field " + _DhwloadactiveErr.Error())
+            // Simple Field (activationStateOfChannel23)
+            activationStateOfChannel23, _activationStateOfChannel23Err := io.ReadBit()
+            if _activationStateOfChannel23Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel23' field " + _activationStateOfChannel23Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Dhwloadactive)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel23)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (activationStateOfChannel24)
+            activationStateOfChannel24, _activationStateOfChannel24Err := io.ReadBit()
+            if _activationStateOfChannel24Err != nil {
+                return nil, errors.New("Error parsing 'activationStateOfChannel24' field " + _activationStateOfChannel24Err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
+            _map["Struct"] = values.NewPlcBOOL(activationStateOfChannel24)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_StatusRHCC: // Struct
+        case datapointType == KnxDatapointType_DPT_HVACModeNext: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -3763,305 +5409,291 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(1); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
-            }
-
-            // Simple Field (Overheatalarm)
-            Overheatalarm, _OverheatalarmErr := io.ReadBit()
-            if _OverheatalarmErr != nil {
-                return nil, errors.New("Error parsing 'Overheatalarm' field " + _OverheatalarmErr.Error())
+            // Simple Field (delayTimeMin)
+            delayTimeMin, _delayTimeMinErr := io.ReadUint16(16)
+            if _delayTimeMinErr != nil {
+                return nil, errors.New("Error parsing 'delayTimeMin' field " + _delayTimeMinErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overheatalarm)
+            _map["Struct"] = values.NewPlcUINT(delayTimeMin)
 
-            // Simple Field (Frostalarm)
-            Frostalarm, _FrostalarmErr := io.ReadBit()
-            if _FrostalarmErr != nil {
-                return nil, errors.New("Error parsing 'Frostalarm' field " + _FrostalarmErr.Error())
+            // Simple Field (hvacMode)
+            hvacMode, _hvacModeErr := io.ReadUint8(8)
+            if _hvacModeErr != nil {
+                return nil, errors.New("Error parsing 'hvacMode' field " + _hvacModeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Frostalarm)
+            _map["Struct"] = values.NewPlcUSINT(hvacMode)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_DHWModeNext: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (Dewpointstatus)
-            Dewpointstatus, _DewpointstatusErr := io.ReadBit()
-            if _DewpointstatusErr != nil {
-                return nil, errors.New("Error parsing 'Dewpointstatus' field " + _DewpointstatusErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Dewpointstatus)
 
-            // Simple Field (Coolingdisabled)
-            Coolingdisabled, _CoolingdisabledErr := io.ReadBit()
-            if _CoolingdisabledErr != nil {
-                return nil, errors.New("Error parsing 'Coolingdisabled' field " + _CoolingdisabledErr.Error())
+            // Simple Field (delayTimeMin)
+            delayTimeMin, _delayTimeMinErr := io.ReadUint16(16)
+            if _delayTimeMinErr != nil {
+                return nil, errors.New("Error parsing 'delayTimeMin' field " + _delayTimeMinErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Coolingdisabled)
+            _map["Struct"] = values.NewPlcUINT(delayTimeMin)
 
-            // Simple Field (Statusprecool)
-            Statusprecool, _StatusprecoolErr := io.ReadBit()
-            if _StatusprecoolErr != nil {
-                return nil, errors.New("Error parsing 'Statusprecool' field " + _StatusprecoolErr.Error())
+            // Simple Field (dhwMode)
+            dhwMode, _dhwModeErr := io.ReadUint8(8)
+            if _dhwModeErr != nil {
+                return nil, errors.New("Error parsing 'dhwMode' field " + _dhwModeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusprecool)
+            _map["Struct"] = values.NewPlcUSINT(dhwMode)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_OccModeNext: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (Statusecoc)
-            Statusecoc, _StatusecocErr := io.ReadBit()
-            if _StatusecocErr != nil {
-                return nil, errors.New("Error parsing 'Statusecoc' field " + _StatusecocErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusecoc)
 
-            // Simple Field (Heatcoolmode)
-            Heatcoolmode, _HeatcoolmodeErr := io.ReadBit()
-            if _HeatcoolmodeErr != nil {
-                return nil, errors.New("Error parsing 'Heatcoolmode' field " + _HeatcoolmodeErr.Error())
+            // Simple Field (delayTimeMin)
+            delayTimeMin, _delayTimeMinErr := io.ReadUint16(16)
+            if _delayTimeMinErr != nil {
+                return nil, errors.New("Error parsing 'delayTimeMin' field " + _delayTimeMinErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Heatcoolmode)
+            _map["Struct"] = values.NewPlcUINT(delayTimeMin)
 
-            // Simple Field (Heatingdiabled)
-            Heatingdiabled, _HeatingdiabledErr := io.ReadBit()
-            if _HeatingdiabledErr != nil {
-                return nil, errors.New("Error parsing 'Heatingdiabled' field " + _HeatingdiabledErr.Error())
+            // Simple Field (occupancyMode)
+            occupancyMode, _occupancyModeErr := io.ReadUint8(8)
+            if _occupancyModeErr != nil {
+                return nil, errors.New("Error parsing 'occupancyMode' field " + _occupancyModeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Heatingdiabled)
+            _map["Struct"] = values.NewPlcUSINT(occupancyMode)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_BuildingModeNext: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (Statusstopoptim)
-            Statusstopoptim, _StatusstopoptimErr := io.ReadBit()
-            if _StatusstopoptimErr != nil {
-                return nil, errors.New("Error parsing 'Statusstopoptim' field " + _StatusstopoptimErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusstopoptim)
 
-            // Simple Field (Statusstartoptim)
-            Statusstartoptim, _StatusstartoptimErr := io.ReadBit()
-            if _StatusstartoptimErr != nil {
-                return nil, errors.New("Error parsing 'Statusstartoptim' field " + _StatusstartoptimErr.Error())
+            // Simple Field (delayTimeMin)
+            delayTimeMin, _delayTimeMinErr := io.ReadUint16(16)
+            if _delayTimeMinErr != nil {
+                return nil, errors.New("Error parsing 'delayTimeMin' field " + _delayTimeMinErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusstartoptim)
+            _map["Struct"] = values.NewPlcUINT(delayTimeMin)
 
-            // Simple Field (Statusmorningboosth)
-            Statusmorningboosth, _StatusmorningboosthErr := io.ReadBit()
-            if _StatusmorningboosthErr != nil {
-                return nil, errors.New("Error parsing 'Statusmorningboosth' field " + _StatusmorningboosthErr.Error())
+            // Simple Field (buildingMode)
+            buildingMode, _buildingModeErr := io.ReadUint8(8)
+            if _buildingModeErr != nil {
+                return nil, errors.New("Error parsing 'buildingMode' field " + _buildingModeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusmorningboosth)
+            _map["Struct"] = values.NewPlcUSINT(buildingMode)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Version: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (Tempflowreturnlimit)
-            Tempflowreturnlimit, _TempflowreturnlimitErr := io.ReadBit()
-            if _TempflowreturnlimitErr != nil {
-                return nil, errors.New("Error parsing 'Tempflowreturnlimit' field " + _TempflowreturnlimitErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tempflowreturnlimit)
 
-            // Simple Field (Tempflowlimit)
-            Tempflowlimit, _TempflowlimitErr := io.ReadBit()
-            if _TempflowlimitErr != nil {
-                return nil, errors.New("Error parsing 'Tempflowlimit' field " + _TempflowlimitErr.Error())
+            // Simple Field (magicNumber)
+            magicNumber, _magicNumberErr := io.ReadUint8(5)
+            if _magicNumberErr != nil {
+                return nil, errors.New("Error parsing 'magicNumber' field " + _magicNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tempflowlimit)
+            _map["Struct"] = values.NewPlcUSINT(magicNumber)
 
-            // Simple Field (Statusecoh)
-            Statusecoh, _StatusecohErr := io.ReadBit()
-            if _StatusecohErr != nil {
-                return nil, errors.New("Error parsing 'Statusecoh' field " + _StatusecohErr.Error())
+            // Simple Field (versionNumber)
+            versionNumber, _versionNumberErr := io.ReadUint8(5)
+            if _versionNumberErr != nil {
+                return nil, errors.New("Error parsing 'versionNumber' field " + _versionNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Statusecoh)
+            _map["Struct"] = values.NewPlcUSINT(versionNumber)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (revisionNumber)
+            revisionNumber, _revisionNumberErr := io.ReadUint8(6)
+            if _revisionNumberErr != nil {
+                return nil, errors.New("Error parsing 'revisionNumber' field " + _revisionNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
+            _map["Struct"] = values.NewPlcUSINT(revisionNumber)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_CombinedStatus_HVA: // Struct
+        case datapointType == KnxDatapointType_DPT_AlarmInfo: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(7); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (CalibrationMode)
-            CalibrationMode, _CalibrationModeErr := io.ReadBit()
-            if _CalibrationModeErr != nil {
-                return nil, errors.New("Error parsing 'CalibrationMode' field " + _CalibrationModeErr.Error())
+            // Simple Field (logNumber)
+            logNumber, _logNumberErr := io.ReadUint8(8)
+            if _logNumberErr != nil {
+                return nil, errors.New("Error parsing 'logNumber' field " + _logNumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CalibrationMode)
+            _map["Struct"] = values.NewPlcUSINT(logNumber)
 
-            // Simple Field (LockedPosition)
-            LockedPosition, _LockedPositionErr := io.ReadBit()
-            if _LockedPositionErr != nil {
-                return nil, errors.New("Error parsing 'LockedPosition' field " + _LockedPositionErr.Error())
+            // Simple Field (alarmPriority)
+            alarmPriority, _alarmPriorityErr := io.ReadUint8(8)
+            if _alarmPriorityErr != nil {
+                return nil, errors.New("Error parsing 'alarmPriority' field " + _alarmPriorityErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(LockedPosition)
+            _map["Struct"] = values.NewPlcUSINT(alarmPriority)
 
-            // Simple Field (ForcedPosition)
-            ForcedPosition, _ForcedPositionErr := io.ReadBit()
-            if _ForcedPositionErr != nil {
-                return nil, errors.New("Error parsing 'ForcedPosition' field " + _ForcedPositionErr.Error())
+            // Simple Field (applicationArea)
+            applicationArea, _applicationAreaErr := io.ReadUint8(8)
+            if _applicationAreaErr != nil {
+                return nil, errors.New("Error parsing 'applicationArea' field " + _applicationAreaErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ForcedPosition)
+            _map["Struct"] = values.NewPlcUSINT(applicationArea)
 
-            // Simple Field (ManuaOperationOverridden)
-            ManuaOperationOverridden, _ManuaOperationOverriddenErr := io.ReadBit()
-            if _ManuaOperationOverriddenErr != nil {
-                return nil, errors.New("Error parsing 'ManuaOperationOverridden' field " + _ManuaOperationOverriddenErr.Error())
+            // Simple Field (errorClass)
+            errorClass, _errorClassErr := io.ReadUint8(8)
+            if _errorClassErr != nil {
+                return nil, errors.New("Error parsing 'errorClass' field " + _errorClassErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ManuaOperationOverridden)
+            _map["Struct"] = values.NewPlcUSINT(errorClass)
 
-            // Simple Field (ServiceMode)
-            ServiceMode, _ServiceModeErr := io.ReadBit()
-            if _ServiceModeErr != nil {
-                return nil, errors.New("Error parsing 'ServiceMode' field " + _ServiceModeErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ServiceMode)
 
-            // Simple Field (ValveKick)
-            ValveKick, _ValveKickErr := io.ReadBit()
-            if _ValveKickErr != nil {
-                return nil, errors.New("Error parsing 'ValveKick' field " + _ValveKickErr.Error())
+            // Simple Field (errorcodeSup)
+            errorcodeSup, _errorcodeSupErr := io.ReadBit()
+            if _errorcodeSupErr != nil {
+                return nil, errors.New("Error parsing 'errorcodeSup' field " + _errorcodeSupErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ValveKick)
+            _map["Struct"] = values.NewPlcBOOL(errorcodeSup)
 
-            // Simple Field (Overload)
-            Overload, _OverloadErr := io.ReadBit()
-            if _OverloadErr != nil {
-                return nil, errors.New("Error parsing 'Overload' field " + _OverloadErr.Error())
+            // Simple Field (alarmtextSup)
+            alarmtextSup, _alarmtextSupErr := io.ReadBit()
+            if _alarmtextSupErr != nil {
+                return nil, errors.New("Error parsing 'alarmtextSup' field " + _alarmtextSupErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overload)
+            _map["Struct"] = values.NewPlcBOOL(alarmtextSup)
 
-            // Simple Field (ShortCircuit)
-            ShortCircuit, _ShortCircuitErr := io.ReadBit()
-            if _ShortCircuitErr != nil {
-                return nil, errors.New("Error parsing 'ShortCircuit' field " + _ShortCircuitErr.Error())
+            // Simple Field (timestampSup)
+            timestampSup, _timestampSupErr := io.ReadBit()
+            if _timestampSupErr != nil {
+                return nil, errors.New("Error parsing 'timestampSup' field " + _timestampSupErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ShortCircuit)
+            _map["Struct"] = values.NewPlcBOOL(timestampSup)
 
-            // Simple Field (CurrentValvePosition)
-            CurrentValvePosition, _CurrentValvePositionErr := io.ReadBit()
-            if _CurrentValvePositionErr != nil {
-                return nil, errors.New("Error parsing 'CurrentValvePosition' field " + _CurrentValvePositionErr.Error())
+            // Simple Field (ackSup)
+            ackSup, _ackSupErr := io.ReadBit()
+            if _ackSupErr != nil {
+                return nil, errors.New("Error parsing 'ackSup' field " + _ackSupErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(CurrentValvePosition)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_CombinedStatus_RTC: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(ackSup)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(7); _err != nil {
+            if _, _err := io.ReadUint8(5); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (CoolingModeEnabled)
-            CoolingModeEnabled, _CoolingModeEnabledErr := io.ReadBit()
-            if _CoolingModeEnabledErr != nil {
-                return nil, errors.New("Error parsing 'CoolingModeEnabled' field " + _CoolingModeEnabledErr.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(CoolingModeEnabled)
-
-            // Simple Field (HeatingModeEnabled)
-            HeatingModeEnabled, _HeatingModeEnabledErr := io.ReadBit()
-            if _HeatingModeEnabledErr != nil {
-                return nil, errors.New("Error parsing 'HeatingModeEnabled' field " + _HeatingModeEnabledErr.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(HeatingModeEnabled)
-
-            // Simple Field (AdditionalHeatingCoolingStage2Stage)
-            AdditionalHeatingCoolingStage2Stage, _AdditionalHeatingCoolingStage2StageErr := io.ReadBit()
-            if _AdditionalHeatingCoolingStage2StageErr != nil {
-                return nil, errors.New("Error parsing 'AdditionalHeatingCoolingStage2Stage' field " + _AdditionalHeatingCoolingStage2StageErr.Error())
+            // Simple Field (locked)
+            locked, _lockedErr := io.ReadBit()
+            if _lockedErr != nil {
+                return nil, errors.New("Error parsing 'locked' field " + _lockedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(AdditionalHeatingCoolingStage2Stage)
+            _map["Struct"] = values.NewPlcBOOL(locked)
 
-            // Simple Field (ControllerInactive)
-            ControllerInactive, _ControllerInactiveErr := io.ReadBit()
-            if _ControllerInactiveErr != nil {
-                return nil, errors.New("Error parsing 'ControllerInactive' field " + _ControllerInactiveErr.Error())
+            // Simple Field (alarmunack)
+            alarmunack, _alarmunackErr := io.ReadBit()
+            if _alarmunackErr != nil {
+                return nil, errors.New("Error parsing 'alarmunack' field " + _alarmunackErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ControllerInactive)
+            _map["Struct"] = values.NewPlcBOOL(alarmunack)
 
-            // Simple Field (OverheatAlarm)
-            OverheatAlarm, _OverheatAlarmErr := io.ReadBit()
-            if _OverheatAlarmErr != nil {
-                return nil, errors.New("Error parsing 'OverheatAlarm' field " + _OverheatAlarmErr.Error())
+            // Simple Field (inalarm)
+            inalarm, _inalarmErr := io.ReadBit()
+            if _inalarmErr != nil {
+                return nil, errors.New("Error parsing 'inalarm' field " + _inalarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(OverheatAlarm)
+            _map["Struct"] = values.NewPlcBOOL(inalarm)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_TempRoomSetpSetF16_3: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (FrostAlarm)
-            FrostAlarm, _FrostAlarmErr := io.ReadBit()
-            if _FrostAlarmErr != nil {
-                return nil, errors.New("Error parsing 'FrostAlarm' field " + _FrostAlarmErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(FrostAlarm)
 
-            // Simple Field (DewPointStatus)
-            DewPointStatus, _DewPointStatusErr := io.ReadBit()
-            if _DewPointStatusErr != nil {
-                return nil, errors.New("Error parsing 'DewPointStatus' field " + _DewPointStatusErr.Error())
+            // Simple Field (tempsetpcomf)
+            tempsetpcomf, _tempsetpcomfErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpcomfErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpcomf' field " + _tempsetpcomfErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(DewPointStatus)
+            _map["Struct"] = values.NewPlcREAL(tempsetpcomf)
 
-            // Simple Field (ActiveMode)
-            ActiveMode, _ActiveModeErr := io.ReadBit()
-            if _ActiveModeErr != nil {
-                return nil, errors.New("Error parsing 'ActiveMode' field " + _ActiveModeErr.Error())
+            // Simple Field (tempsetpstdby)
+            tempsetpstdby, _tempsetpstdbyErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpstdbyErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpstdby' field " + _tempsetpstdbyErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActiveMode)
+            _map["Struct"] = values.NewPlcREAL(tempsetpstdby)
 
-            // Simple Field (GeneralFailureInformation)
-            GeneralFailureInformation, _GeneralFailureInformationErr := io.ReadBit()
-            if _GeneralFailureInformationErr != nil {
-                return nil, errors.New("Error parsing 'GeneralFailureInformation' field " + _GeneralFailureInformationErr.Error())
+            // Simple Field (tempsetpeco)
+            tempsetpeco, _tempsetpecoErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpecoErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpeco' field " + _tempsetpecoErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(GeneralFailureInformation)
+            _map["Struct"] = values.NewPlcREAL(tempsetpeco)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Media: // Struct
+        case datapointType == KnxDatapointType_DPT_TempRoomSetpSetShiftF16_3: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint16(10); _err != nil {
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (KnxIp)
-            KnxIp, _KnxIpErr := io.ReadBit()
-            if _KnxIpErr != nil {
-                return nil, errors.New("Error parsing 'KnxIp' field " + _KnxIpErr.Error())
+            // Simple Field (tempsetpshiftcomf)
+            tempsetpshiftcomf, _tempsetpshiftcomfErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpshiftcomfErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpshiftcomf' field " + _tempsetpshiftcomfErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(KnxIp)
+            _map["Struct"] = values.NewPlcREAL(tempsetpshiftcomf)
 
-            // Simple Field (Rf)
-            Rf, _RfErr := io.ReadBit()
-            if _RfErr != nil {
-                return nil, errors.New("Error parsing 'Rf' field " + _RfErr.Error())
+            // Simple Field (tempsetpshiftstdby)
+            tempsetpshiftstdby, _tempsetpshiftstdbyErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpshiftstdbyErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpshiftstdby' field " + _tempsetpshiftstdbyErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Rf)
+            _map["Struct"] = values.NewPlcREAL(tempsetpshiftstdby)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(1); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (tempsetpshifteco)
+            tempsetpshifteco, _tempsetpshiftecoErr := io.ReadFloat32(true, 4, 11)
+            if _tempsetpshiftecoErr != nil {
+                return nil, errors.New("Error parsing 'tempsetpshifteco' field " + _tempsetpshiftecoErr.Error())
             }
+            _map["Struct"] = values.NewPlcREAL(tempsetpshifteco)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Scaling_Speed: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (Pl110)
-            Pl110, _Pl110Err := io.ReadBit()
-            if _Pl110Err != nil {
-                return nil, errors.New("Error parsing 'Pl110' field " + _Pl110Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Pl110)
 
-            // Simple Field (Tp1)
-            Tp1, _Tp1Err := io.ReadBit()
-            if _Tp1Err != nil {
-                return nil, errors.New("Error parsing 'Tp1' field " + _Tp1Err.Error())
+            // Simple Field (timePeriod)
+            timePeriod, _timePeriodErr := io.ReadUint16(16)
+            if _timePeriodErr != nil {
+                return nil, errors.New("Error parsing 'timePeriod' field " + _timePeriodErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tp1)
+            _map["Struct"] = values.NewPlcUINT(timePeriod)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(1); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (percent)
+            percent, _percentErr := io.ReadUint8(8)
+            if _percentErr != nil {
+                return nil, errors.New("Error parsing 'percent' field " + _percentErr.Error())
             }
+            _map["Struct"] = values.NewPlcUSINT(percent)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Channel_Activation_16: // Struct
+        case datapointType == KnxDatapointType_DPT_Scaling_Step_Time: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4069,123 +5701,119 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (ActivationStateOfChannel1)
-            ActivationStateOfChannel1, _ActivationStateOfChannel1Err := io.ReadBit()
-            if _ActivationStateOfChannel1Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel1' field " + _ActivationStateOfChannel1Err.Error())
+            // Simple Field (timePeriod)
+            timePeriod, _timePeriodErr := io.ReadUint16(16)
+            if _timePeriodErr != nil {
+                return nil, errors.New("Error parsing 'timePeriod' field " + _timePeriodErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel1)
+            _map["Struct"] = values.NewPlcUINT(timePeriod)
 
-            // Simple Field (ActivationStateOfChannel2)
-            ActivationStateOfChannel2, _ActivationStateOfChannel2Err := io.ReadBit()
-            if _ActivationStateOfChannel2Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel2' field " + _ActivationStateOfChannel2Err.Error())
+            // Simple Field (percent)
+            percent, _percentErr := io.ReadUint8(8)
+            if _percentErr != nil {
+                return nil, errors.New("Error parsing 'percent' field " + _percentErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel2)
+            _map["Struct"] = values.NewPlcUSINT(percent)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_MeteringValue: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (ActivationStateOfChannel3)
-            ActivationStateOfChannel3, _ActivationStateOfChannel3Err := io.ReadBit()
-            if _ActivationStateOfChannel3Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel3' field " + _ActivationStateOfChannel3Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel3)
 
-            // Simple Field (ActivationStateOfChannel4)
-            ActivationStateOfChannel4, _ActivationStateOfChannel4Err := io.ReadBit()
-            if _ActivationStateOfChannel4Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel4' field " + _ActivationStateOfChannel4Err.Error())
+            // Simple Field (countval)
+            countval, _countvalErr := io.ReadInt32(32)
+            if _countvalErr != nil {
+                return nil, errors.New("Error parsing 'countval' field " + _countvalErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel4)
+            _map["Struct"] = values.NewPlcDINT(countval)
 
-            // Simple Field (ActivationStateOfChannel5)
-            ActivationStateOfChannel5, _ActivationStateOfChannel5Err := io.ReadBit()
-            if _ActivationStateOfChannel5Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel5' field " + _ActivationStateOfChannel5Err.Error())
+            // Simple Field (valinffield)
+            valinffield, _valinffieldErr := io.ReadUint8(8)
+            if _valinffieldErr != nil {
+                return nil, errors.New("Error parsing 'valinffield' field " + _valinffieldErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel5)
+            _map["Struct"] = values.NewPlcUSINT(valinffield)
 
-            // Simple Field (ActivationStateOfChannel6)
-            ActivationStateOfChannel6, _ActivationStateOfChannel6Err := io.ReadBit()
-            if _ActivationStateOfChannel6Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel6' field " + _ActivationStateOfChannel6Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(3); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel6)
 
-            // Simple Field (ActivationStateOfChannel7)
-            ActivationStateOfChannel7, _ActivationStateOfChannel7Err := io.ReadBit()
-            if _ActivationStateOfChannel7Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel7' field " + _ActivationStateOfChannel7Err.Error())
+            // Simple Field (alarmunack)
+            alarmunack, _alarmunackErr := io.ReadBit()
+            if _alarmunackErr != nil {
+                return nil, errors.New("Error parsing 'alarmunack' field " + _alarmunackErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel7)
+            _map["Struct"] = values.NewPlcBOOL(alarmunack)
 
-            // Simple Field (ActivationStateOfChannel8)
-            ActivationStateOfChannel8, _ActivationStateOfChannel8Err := io.ReadBit()
-            if _ActivationStateOfChannel8Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel8' field " + _ActivationStateOfChannel8Err.Error())
+            // Simple Field (inalarm)
+            inalarm, _inalarmErr := io.ReadBit()
+            if _inalarmErr != nil {
+                return nil, errors.New("Error parsing 'inalarm' field " + _inalarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel8)
+            _map["Struct"] = values.NewPlcBOOL(inalarm)
 
-            // Simple Field (ActivationStateOfChannel9)
-            ActivationStateOfChannel9, _ActivationStateOfChannel9Err := io.ReadBit()
-            if _ActivationStateOfChannel9Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel9' field " + _ActivationStateOfChannel9Err.Error())
+            // Simple Field (overridden)
+            overridden, _overriddenErr := io.ReadBit()
+            if _overriddenErr != nil {
+                return nil, errors.New("Error parsing 'overridden' field " + _overriddenErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel9)
+            _map["Struct"] = values.NewPlcBOOL(overridden)
 
-            // Simple Field (ActivationStateOfChannel10)
-            ActivationStateOfChannel10, _ActivationStateOfChannel10Err := io.ReadBit()
-            if _ActivationStateOfChannel10Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel10' field " + _ActivationStateOfChannel10Err.Error())
+            // Simple Field (fault)
+            fault, _faultErr := io.ReadBit()
+            if _faultErr != nil {
+                return nil, errors.New("Error parsing 'fault' field " + _faultErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel10)
+            _map["Struct"] = values.NewPlcBOOL(fault)
 
-            // Simple Field (ActivationStateOfChannel11)
-            ActivationStateOfChannel11, _ActivationStateOfChannel11Err := io.ReadBit()
-            if _ActivationStateOfChannel11Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel11' field " + _ActivationStateOfChannel11Err.Error())
+            // Simple Field (outofservice)
+            outofservice, _outofserviceErr := io.ReadBit()
+            if _outofserviceErr != nil {
+                return nil, errors.New("Error parsing 'outofservice' field " + _outofserviceErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel11)
+            _map["Struct"] = values.NewPlcBOOL(outofservice)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_MBus_Address: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (ActivationStateOfChannel12)
-            ActivationStateOfChannel12, _ActivationStateOfChannel12Err := io.ReadBit()
-            if _ActivationStateOfChannel12Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel12' field " + _ActivationStateOfChannel12Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel12)
 
-            // Simple Field (ActivationStateOfChannel13)
-            ActivationStateOfChannel13, _ActivationStateOfChannel13Err := io.ReadBit()
-            if _ActivationStateOfChannel13Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel13' field " + _ActivationStateOfChannel13Err.Error())
+            // Simple Field (manufactid)
+            manufactid, _manufactidErr := io.ReadUint16(16)
+            if _manufactidErr != nil {
+                return nil, errors.New("Error parsing 'manufactid' field " + _manufactidErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel13)
+            _map["Struct"] = values.NewPlcUINT(manufactid)
 
-            // Simple Field (ActivationStateOfChannel14)
-            ActivationStateOfChannel14, _ActivationStateOfChannel14Err := io.ReadBit()
-            if _ActivationStateOfChannel14Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel14' field " + _ActivationStateOfChannel14Err.Error())
+            // Simple Field (identnumber)
+            identnumber, _identnumberErr := io.ReadUint32(32)
+            if _identnumberErr != nil {
+                return nil, errors.New("Error parsing 'identnumber' field " + _identnumberErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel14)
+            _map["Struct"] = values.NewPlcUDINT(identnumber)
 
-            // Simple Field (ActivationStateOfChannel15)
-            ActivationStateOfChannel15, _ActivationStateOfChannel15Err := io.ReadBit()
-            if _ActivationStateOfChannel15Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel15' field " + _ActivationStateOfChannel15Err.Error())
+            // Simple Field (version)
+            version, _versionErr := io.ReadUint8(8)
+            if _versionErr != nil {
+                return nil, errors.New("Error parsing 'version' field " + _versionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel15)
+            _map["Struct"] = values.NewPlcUSINT(version)
 
-            // Simple Field (ActivationStateOfChannel16)
-            ActivationStateOfChannel16, _ActivationStateOfChannel16Err := io.ReadBit()
-            if _ActivationStateOfChannel16Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel16' field " + _ActivationStateOfChannel16Err.Error())
+            // Simple Field (medium)
+            medium, _mediumErr := io.ReadUint8(8)
+            if _mediumErr != nil {
+                return nil, errors.New("Error parsing 'medium' field " + _mediumErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel16)
+            _map["Struct"] = values.NewPlcUSINT(medium)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_OnOffAction: // STRING
-        case datapointType == KnxDatapointType.DPT_Alarm_Reaction: // STRING
-        case datapointType == KnxDatapointType.DPT_UpDown_Action: // STRING
-        case datapointType == KnxDatapointType.DPT_HVAC_PB_Action: // STRING
-        case datapointType == KnxDatapointType.DPT_DoubleNibble: // Struct
+        case datapointType == KnxDatapointType_DPT_Colour_RGB: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4193,21 +5821,41 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Busy)
-            Busy, _BusyErr := io.ReadUint8(4)
-            if _BusyErr != nil {
-                return nil, errors.New("Error parsing 'Busy' field " + _BusyErr.Error())
+            // Simple Field (r)
+            r, _rErr := io.ReadUint8(8)
+            if _rErr != nil {
+                return nil, errors.New("Error parsing 'r' field " + _rErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(r)
+
+            // Simple Field (g)
+            g, _gErr := io.ReadUint8(8)
+            if _gErr != nil {
+                return nil, errors.New("Error parsing 'g' field " + _gErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Busy)
+            _map["Struct"] = values.NewPlcUSINT(g)
 
-            // Simple Field (Nak)
-            Nak, _NakErr := io.ReadUint8(4)
-            if _NakErr != nil {
-                return nil, errors.New("Error parsing 'Nak' field " + _NakErr.Error())
+            // Simple Field (b)
+            b, _bErr := io.ReadUint8(8)
+            if _bErr != nil {
+                return nil, errors.New("Error parsing 'b' field " + _bErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Nak)
+            _map["Struct"] = values.NewPlcUSINT(b)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_SceneInfo: // Struct
+        case datapointType == KnxDatapointType_DPT_LanguageCodeAlpha2_ASCII: // STRING
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+
+            // Simple Field (value)
+            value, _valueErr := io.ReadString(16)
+            if _valueErr != nil {
+                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            }
+            return values.NewPlcSTRING(value), nil
+        case datapointType == KnxDatapointType_DPT_Tariff_ActiveEnergy: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4215,26 +5863,40 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
+            // Simple Field (activeelectricalenergy)
+            activeelectricalenergy, _activeelectricalenergyErr := io.ReadInt32(32)
+            if _activeelectricalenergyErr != nil {
+                return nil, errors.New("Error parsing 'activeelectricalenergy' field " + _activeelectricalenergyErr.Error())
+            }
+            _map["Struct"] = values.NewPlcDINT(activeelectricalenergy)
+
+            // Simple Field (tariff)
+            tariff, _tariffErr := io.ReadUint8(8)
+            if _tariffErr != nil {
+                return nil, errors.New("Error parsing 'tariff' field " + _tariffErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(tariff)
+
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(1); _err != nil {
+            if _, _err := io.ReadUint8(6); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (SceneIsInactive)
-            SceneIsInactive, _SceneIsInactiveErr := io.ReadBit()
-            if _SceneIsInactiveErr != nil {
-                return nil, errors.New("Error parsing 'SceneIsInactive' field " + _SceneIsInactiveErr.Error())
+            // Simple Field (electricalengergyvalidity)
+            electricalengergyvalidity, _electricalengergyvalidityErr := io.ReadBit()
+            if _electricalengergyvalidityErr != nil {
+                return nil, errors.New("Error parsing 'electricalengergyvalidity' field " + _electricalengergyvalidityErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(SceneIsInactive)
+            _map["Struct"] = values.NewPlcBOOL(electricalengergyvalidity)
 
-            // Simple Field (Scenenumber)
-            Scenenumber, _ScenenumberErr := io.ReadUint8(6)
-            if _ScenenumberErr != nil {
-                return nil, errors.New("Error parsing 'Scenenumber' field " + _ScenenumberErr.Error())
+            // Simple Field (tariffvalidity)
+            tariffvalidity, _tariffvalidityErr := io.ReadBit()
+            if _tariffvalidityErr != nil {
+                return nil, errors.New("Error parsing 'tariffvalidity' field " + _tariffvalidityErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Scenenumber)
+            _map["Struct"] = values.NewPlcBOOL(tariffvalidity)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_CombinedInfoOnOff: // Struct
+        case datapointType == KnxDatapointType_DPT_Prioritised_Mode_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4242,270 +5904,266 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (MaskBitInfoOnOffOutput16)
-            MaskBitInfoOnOffOutput16, _MaskBitInfoOnOffOutput16Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput16Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput16' field " + _MaskBitInfoOnOffOutput16Err.Error())
+            // Simple Field (deactivationOfPriority)
+            deactivationOfPriority, _deactivationOfPriorityErr := io.ReadBit()
+            if _deactivationOfPriorityErr != nil {
+                return nil, errors.New("Error parsing 'deactivationOfPriority' field " + _deactivationOfPriorityErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput16)
+            _map["Struct"] = values.NewPlcBOOL(deactivationOfPriority)
 
-            // Simple Field (MaskBitInfoOnOffOutput15)
-            MaskBitInfoOnOffOutput15, _MaskBitInfoOnOffOutput15Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput15Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput15' field " + _MaskBitInfoOnOffOutput15Err.Error())
+            // Simple Field (priorityLevel)
+            priorityLevel, _priorityLevelErr := io.ReadUint8(3)
+            if _priorityLevelErr != nil {
+                return nil, errors.New("Error parsing 'priorityLevel' field " + _priorityLevelErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput15)
+            _map["Struct"] = values.NewPlcUSINT(priorityLevel)
 
-            // Simple Field (MaskBitInfoOnOffOutput14)
-            MaskBitInfoOnOffOutput14, _MaskBitInfoOnOffOutput14Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput14Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput14' field " + _MaskBitInfoOnOffOutput14Err.Error())
+            // Simple Field (modeLevel)
+            modeLevel, _modeLevelErr := io.ReadUint8(4)
+            if _modeLevelErr != nil {
+                return nil, errors.New("Error parsing 'modeLevel' field " + _modeLevelErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput14)
+            _map["Struct"] = values.NewPlcUSINT(modeLevel)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_DALI_Control_Gear_Diagnostic: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (MaskBitInfoOnOffOutput13)
-            MaskBitInfoOnOffOutput13, _MaskBitInfoOnOffOutput13Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput13Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput13' field " + _MaskBitInfoOnOffOutput13Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(5); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput13)
 
-            // Simple Field (MaskBitInfoOnOffOutput12)
-            MaskBitInfoOnOffOutput12, _MaskBitInfoOnOffOutput12Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput12Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput12' field " + _MaskBitInfoOnOffOutput12Err.Error())
+            // Simple Field (convertorError)
+            convertorError, _convertorErrorErr := io.ReadBit()
+            if _convertorErrorErr != nil {
+                return nil, errors.New("Error parsing 'convertorError' field " + _convertorErrorErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput12)
+            _map["Struct"] = values.NewPlcBOOL(convertorError)
 
-            // Simple Field (MaskBitInfoOnOffOutput11)
-            MaskBitInfoOnOffOutput11, _MaskBitInfoOnOffOutput11Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput11Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput11' field " + _MaskBitInfoOnOffOutput11Err.Error())
+            // Simple Field (ballastFailure)
+            ballastFailure, _ballastFailureErr := io.ReadBit()
+            if _ballastFailureErr != nil {
+                return nil, errors.New("Error parsing 'ballastFailure' field " + _ballastFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput11)
+            _map["Struct"] = values.NewPlcBOOL(ballastFailure)
 
-            // Simple Field (MaskBitInfoOnOffOutput10)
-            MaskBitInfoOnOffOutput10, _MaskBitInfoOnOffOutput10Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput10Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput10' field " + _MaskBitInfoOnOffOutput10Err.Error())
+            // Simple Field (lampFailure)
+            lampFailure, _lampFailureErr := io.ReadBit()
+            if _lampFailureErr != nil {
+                return nil, errors.New("Error parsing 'lampFailure' field " + _lampFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput10)
+            _map["Struct"] = values.NewPlcBOOL(lampFailure)
 
-            // Simple Field (MaskBitInfoOnOffOutput9)
-            MaskBitInfoOnOffOutput9, _MaskBitInfoOnOffOutput9Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput9Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput9' field " + _MaskBitInfoOnOffOutput9Err.Error())
+            // Simple Field (readOrResponse)
+            readOrResponse, _readOrResponseErr := io.ReadBit()
+            if _readOrResponseErr != nil {
+                return nil, errors.New("Error parsing 'readOrResponse' field " + _readOrResponseErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput9)
+            _map["Struct"] = values.NewPlcBOOL(readOrResponse)
 
-            // Simple Field (MaskBitInfoOnOffOutput8)
-            MaskBitInfoOnOffOutput8, _MaskBitInfoOnOffOutput8Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput8Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput8' field " + _MaskBitInfoOnOffOutput8Err.Error())
+            // Simple Field (addressIndicator)
+            addressIndicator, _addressIndicatorErr := io.ReadBit()
+            if _addressIndicatorErr != nil {
+                return nil, errors.New("Error parsing 'addressIndicator' field " + _addressIndicatorErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput8)
+            _map["Struct"] = values.NewPlcBOOL(addressIndicator)
 
-            // Simple Field (MaskBitInfoOnOffOutput7)
-            MaskBitInfoOnOffOutput7, _MaskBitInfoOnOffOutput7Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput7Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput7' field " + _MaskBitInfoOnOffOutput7Err.Error())
+            // Simple Field (daliDeviceAddressOrDaliGroupAddress)
+            daliDeviceAddressOrDaliGroupAddress, _daliDeviceAddressOrDaliGroupAddressErr := io.ReadUint8(6)
+            if _daliDeviceAddressOrDaliGroupAddressErr != nil {
+                return nil, errors.New("Error parsing 'daliDeviceAddressOrDaliGroupAddress' field " + _daliDeviceAddressOrDaliGroupAddressErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput7)
+            _map["Struct"] = values.NewPlcUSINT(daliDeviceAddressOrDaliGroupAddress)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_DALI_Diagnostics: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (MaskBitInfoOnOffOutput6)
-            MaskBitInfoOnOffOutput6, _MaskBitInfoOnOffOutput6Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput6Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput6' field " + _MaskBitInfoOnOffOutput6Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput6)
 
-            // Simple Field (MaskBitInfoOnOffOutput5)
-            MaskBitInfoOnOffOutput5, _MaskBitInfoOnOffOutput5Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput5Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput5' field " + _MaskBitInfoOnOffOutput5Err.Error())
+            // Simple Field (ballastFailure)
+            ballastFailure, _ballastFailureErr := io.ReadBit()
+            if _ballastFailureErr != nil {
+                return nil, errors.New("Error parsing 'ballastFailure' field " + _ballastFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput5)
+            _map["Struct"] = values.NewPlcBOOL(ballastFailure)
 
-            // Simple Field (MaskBitInfoOnOffOutput4)
-            MaskBitInfoOnOffOutput4, _MaskBitInfoOnOffOutput4Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput4Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput4' field " + _MaskBitInfoOnOffOutput4Err.Error())
+            // Simple Field (lampFailure)
+            lampFailure, _lampFailureErr := io.ReadBit()
+            if _lampFailureErr != nil {
+                return nil, errors.New("Error parsing 'lampFailure' field " + _lampFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput4)
+            _map["Struct"] = values.NewPlcBOOL(lampFailure)
 
-            // Simple Field (MaskBitInfoOnOffOutput3)
-            MaskBitInfoOnOffOutput3, _MaskBitInfoOnOffOutput3Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput3Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput3' field " + _MaskBitInfoOnOffOutput3Err.Error())
+            // Simple Field (deviceAddress)
+            deviceAddress, _deviceAddressErr := io.ReadUint8(6)
+            if _deviceAddressErr != nil {
+                return nil, errors.New("Error parsing 'deviceAddress' field " + _deviceAddressErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput3)
+            _map["Struct"] = values.NewPlcUSINT(deviceAddress)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_CombinedPosition: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (MaskBitInfoOnOffOutput2)
-            MaskBitInfoOnOffOutput2, _MaskBitInfoOnOffOutput2Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput2Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput2' field " + _MaskBitInfoOnOffOutput2Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput2)
 
-            // Simple Field (MaskBitInfoOnOffOutput1)
-            MaskBitInfoOnOffOutput1, _MaskBitInfoOnOffOutput1Err := io.ReadBit()
-            if _MaskBitInfoOnOffOutput1Err != nil {
-                return nil, errors.New("Error parsing 'MaskBitInfoOnOffOutput1' field " + _MaskBitInfoOnOffOutput1Err.Error())
+            // Simple Field (heightPosition)
+            heightPosition, _heightPositionErr := io.ReadUint8(8)
+            if _heightPositionErr != nil {
+                return nil, errors.New("Error parsing 'heightPosition' field " + _heightPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(MaskBitInfoOnOffOutput1)
+            _map["Struct"] = values.NewPlcUSINT(heightPosition)
 
-            // Simple Field (InfoOnOffOutput16)
-            InfoOnOffOutput16, _InfoOnOffOutput16Err := io.ReadBit()
-            if _InfoOnOffOutput16Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput16' field " + _InfoOnOffOutput16Err.Error())
+            // Simple Field (slatsPosition)
+            slatsPosition, _slatsPositionErr := io.ReadUint8(8)
+            if _slatsPositionErr != nil {
+                return nil, errors.New("Error parsing 'slatsPosition' field " + _slatsPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput16)
+            _map["Struct"] = values.NewPlcUSINT(slatsPosition)
 
-            // Simple Field (InfoOnOffOutput15)
-            InfoOnOffOutput15, _InfoOnOffOutput15Err := io.ReadBit()
-            if _InfoOnOffOutput15Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput15' field " + _InfoOnOffOutput15Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(6); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput15)
 
-            // Simple Field (InfoOnOffOutput14)
-            InfoOnOffOutput14, _InfoOnOffOutput14Err := io.ReadBit()
-            if _InfoOnOffOutput14Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput14' field " + _InfoOnOffOutput14Err.Error())
+            // Simple Field (validityHeightPosition)
+            validityHeightPosition, _validityHeightPositionErr := io.ReadBit()
+            if _validityHeightPositionErr != nil {
+                return nil, errors.New("Error parsing 'validityHeightPosition' field " + _validityHeightPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput14)
+            _map["Struct"] = values.NewPlcBOOL(validityHeightPosition)
 
-            // Simple Field (InfoOnOffOutput13)
-            InfoOnOffOutput13, _InfoOnOffOutput13Err := io.ReadBit()
-            if _InfoOnOffOutput13Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput13' field " + _InfoOnOffOutput13Err.Error())
+            // Simple Field (validitySlatsPosition)
+            validitySlatsPosition, _validitySlatsPositionErr := io.ReadBit()
+            if _validitySlatsPositionErr != nil {
+                return nil, errors.New("Error parsing 'validitySlatsPosition' field " + _validitySlatsPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput13)
+            _map["Struct"] = values.NewPlcBOOL(validitySlatsPosition)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_StatusSAB: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (InfoOnOffOutput12)
-            InfoOnOffOutput12, _InfoOnOffOutput12Err := io.ReadBit()
-            if _InfoOnOffOutput12Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput12' field " + _InfoOnOffOutput12Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput12)
 
-            // Simple Field (InfoOnOffOutput11)
-            InfoOnOffOutput11, _InfoOnOffOutput11Err := io.ReadBit()
-            if _InfoOnOffOutput11Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput11' field " + _InfoOnOffOutput11Err.Error())
+            // Simple Field (heightPosition)
+            heightPosition, _heightPositionErr := io.ReadUint8(8)
+            if _heightPositionErr != nil {
+                return nil, errors.New("Error parsing 'heightPosition' field " + _heightPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput11)
+            _map["Struct"] = values.NewPlcUSINT(heightPosition)
 
-            // Simple Field (InfoOnOffOutput10)
-            InfoOnOffOutput10, _InfoOnOffOutput10Err := io.ReadBit()
-            if _InfoOnOffOutput10Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput10' field " + _InfoOnOffOutput10Err.Error())
+            // Simple Field (slatsPosition)
+            slatsPosition, _slatsPositionErr := io.ReadUint8(8)
+            if _slatsPositionErr != nil {
+                return nil, errors.New("Error parsing 'slatsPosition' field " + _slatsPositionErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput10)
+            _map["Struct"] = values.NewPlcUSINT(slatsPosition)
 
-            // Simple Field (InfoOnOffOutput9)
-            InfoOnOffOutput9, _InfoOnOffOutput9Err := io.ReadBit()
-            if _InfoOnOffOutput9Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput9' field " + _InfoOnOffOutput9Err.Error())
+            // Simple Field (upperEndPosReached)
+            upperEndPosReached, _upperEndPosReachedErr := io.ReadBit()
+            if _upperEndPosReachedErr != nil {
+                return nil, errors.New("Error parsing 'upperEndPosReached' field " + _upperEndPosReachedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput9)
+            _map["Struct"] = values.NewPlcBOOL(upperEndPosReached)
 
-            // Simple Field (InfoOnOffOutput8)
-            InfoOnOffOutput8, _InfoOnOffOutput8Err := io.ReadBit()
-            if _InfoOnOffOutput8Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput8' field " + _InfoOnOffOutput8Err.Error())
+            // Simple Field (lowerEndPosReached)
+            lowerEndPosReached, _lowerEndPosReachedErr := io.ReadBit()
+            if _lowerEndPosReachedErr != nil {
+                return nil, errors.New("Error parsing 'lowerEndPosReached' field " + _lowerEndPosReachedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput8)
+            _map["Struct"] = values.NewPlcBOOL(lowerEndPosReached)
 
-            // Simple Field (InfoOnOffOutput7)
-            InfoOnOffOutput7, _InfoOnOffOutput7Err := io.ReadBit()
-            if _InfoOnOffOutput7Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput7' field " + _InfoOnOffOutput7Err.Error())
+            // Simple Field (lowerPredefPosReachedTypHeight100PercentSlatsAngle100Percent)
+            lowerPredefPosReachedTypHeight100PercentSlatsAngle100Percent, _lowerPredefPosReachedTypHeight100PercentSlatsAngle100PercentErr := io.ReadBit()
+            if _lowerPredefPosReachedTypHeight100PercentSlatsAngle100PercentErr != nil {
+                return nil, errors.New("Error parsing 'lowerPredefPosReachedTypHeight100PercentSlatsAngle100Percent' field " + _lowerPredefPosReachedTypHeight100PercentSlatsAngle100PercentErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput7)
+            _map["Struct"] = values.NewPlcBOOL(lowerPredefPosReachedTypHeight100PercentSlatsAngle100Percent)
 
-            // Simple Field (InfoOnOffOutput6)
-            InfoOnOffOutput6, _InfoOnOffOutput6Err := io.ReadBit()
-            if _InfoOnOffOutput6Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput6' field " + _InfoOnOffOutput6Err.Error())
+            // Simple Field (targetPosDrive)
+            targetPosDrive, _targetPosDriveErr := io.ReadBit()
+            if _targetPosDriveErr != nil {
+                return nil, errors.New("Error parsing 'targetPosDrive' field " + _targetPosDriveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput6)
+            _map["Struct"] = values.NewPlcBOOL(targetPosDrive)
 
-            // Simple Field (InfoOnOffOutput5)
-            InfoOnOffOutput5, _InfoOnOffOutput5Err := io.ReadBit()
-            if _InfoOnOffOutput5Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput5' field " + _InfoOnOffOutput5Err.Error())
+            // Simple Field (restrictionOfTargetHeightPosPosCanNotBeReached)
+            restrictionOfTargetHeightPosPosCanNotBeReached, _restrictionOfTargetHeightPosPosCanNotBeReachedErr := io.ReadBit()
+            if _restrictionOfTargetHeightPosPosCanNotBeReachedErr != nil {
+                return nil, errors.New("Error parsing 'restrictionOfTargetHeightPosPosCanNotBeReached' field " + _restrictionOfTargetHeightPosPosCanNotBeReachedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput5)
+            _map["Struct"] = values.NewPlcBOOL(restrictionOfTargetHeightPosPosCanNotBeReached)
 
-            // Simple Field (InfoOnOffOutput4)
-            InfoOnOffOutput4, _InfoOnOffOutput4Err := io.ReadBit()
-            if _InfoOnOffOutput4Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput4' field " + _InfoOnOffOutput4Err.Error())
+            // Simple Field (restrictionOfSlatsHeightPosPosCanNotBeReached)
+            restrictionOfSlatsHeightPosPosCanNotBeReached, _restrictionOfSlatsHeightPosPosCanNotBeReachedErr := io.ReadBit()
+            if _restrictionOfSlatsHeightPosPosCanNotBeReachedErr != nil {
+                return nil, errors.New("Error parsing 'restrictionOfSlatsHeightPosPosCanNotBeReached' field " + _restrictionOfSlatsHeightPosPosCanNotBeReachedErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput4)
+            _map["Struct"] = values.NewPlcBOOL(restrictionOfSlatsHeightPosPosCanNotBeReached)
 
-            // Simple Field (InfoOnOffOutput3)
-            InfoOnOffOutput3, _InfoOnOffOutput3Err := io.ReadBit()
-            if _InfoOnOffOutput3Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput3' field " + _InfoOnOffOutput3Err.Error())
+            // Simple Field (atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarm)
+            atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarm, _atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarmErr := io.ReadBit()
+            if _atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarmErr != nil {
+                return nil, errors.New("Error parsing 'atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarm' field " + _atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarmErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput3)
+            _map["Struct"] = values.NewPlcBOOL(atLeastOneOfTheInputsWindRainFrostAlarmIsInAlarm)
 
-            // Simple Field (InfoOnOffOutput2)
-            InfoOnOffOutput2, _InfoOnOffOutput2Err := io.ReadBit()
-            if _InfoOnOffOutput2Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput2' field " + _InfoOnOffOutput2Err.Error())
+            // Simple Field (upDownPositionIsForcedByMoveupdownforcedInput)
+            upDownPositionIsForcedByMoveupdownforcedInput, _upDownPositionIsForcedByMoveupdownforcedInputErr := io.ReadBit()
+            if _upDownPositionIsForcedByMoveupdownforcedInputErr != nil {
+                return nil, errors.New("Error parsing 'upDownPositionIsForcedByMoveupdownforcedInput' field " + _upDownPositionIsForcedByMoveupdownforcedInputErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput2)
+            _map["Struct"] = values.NewPlcBOOL(upDownPositionIsForcedByMoveupdownforcedInput)
 
-            // Simple Field (InfoOnOffOutput1)
-            InfoOnOffOutput1, _InfoOnOffOutput1Err := io.ReadBit()
-            if _InfoOnOffOutput1Err != nil {
-                return nil, errors.New("Error parsing 'InfoOnOffOutput1' field " + _InfoOnOffOutput1Err.Error())
+            // Simple Field (movementIsLockedEGByDevicelockedInput)
+            movementIsLockedEGByDevicelockedInput, _movementIsLockedEGByDevicelockedInputErr := io.ReadBit()
+            if _movementIsLockedEGByDevicelockedInputErr != nil {
+                return nil, errors.New("Error parsing 'movementIsLockedEGByDevicelockedInput' field " + _movementIsLockedEGByDevicelockedInputErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(InfoOnOffOutput1)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_ActiveEnergy_V64: // LINT
+            _map["Struct"] = values.NewPlcBOOL(movementIsLockedEGByDevicelockedInput)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterface)
+            actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterface, _actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterfaceErr := io.ReadBit()
+            if _actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterfaceErr != nil {
+                return nil, errors.New("Error parsing 'actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterface' field " + _actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterfaceErr.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(actuatorSetvalueIsLocallyOverriddenEGViaALocalUserInterface)
 
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            // Simple Field (generalFailureOfTheActuatorOrTheDrive)
+            generalFailureOfTheActuatorOrTheDrive, _generalFailureOfTheActuatorOrTheDriveErr := io.ReadBit()
+            if _generalFailureOfTheActuatorOrTheDriveErr != nil {
+                return nil, errors.New("Error parsing 'generalFailureOfTheActuatorOrTheDrive' field " + _generalFailureOfTheActuatorOrTheDriveErr.Error())
             }
-            return values.NewPlcLINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ApparantEnergy_V64: // LINT
+            _map["Struct"] = values.NewPlcBOOL(generalFailureOfTheActuatorOrTheDrive)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(3); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcLINT(value), nil
-        case datapointType == KnxDatapointType.DPT_ReactiveEnergy_V64: // LINT
-
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (validityHeightPos)
+            validityHeightPos, _validityHeightPosErr := io.ReadBit()
+            if _validityHeightPosErr != nil {
+                return nil, errors.New("Error parsing 'validityHeightPos' field " + _validityHeightPosErr.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(validityHeightPos)
 
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            // Simple Field (validitySlatsPos)
+            validitySlatsPos, _validitySlatsPosErr := io.ReadBit()
+            if _validitySlatsPosErr != nil {
+                return nil, errors.New("Error parsing 'validitySlatsPos' field " + _validitySlatsPosErr.Error())
             }
-            return values.NewPlcLINT(value), nil
-        case datapointType == KnxDatapointType.DPT_Channel_Activation_24: // Struct
+            _map["Struct"] = values.NewPlcBOOL(validitySlatsPos)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Colour_xyY: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4513,241 +6171,219 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (ActivationStateOfChannel1)
-            ActivationStateOfChannel1, _ActivationStateOfChannel1Err := io.ReadBit()
-            if _ActivationStateOfChannel1Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel1' field " + _ActivationStateOfChannel1Err.Error())
+            // Simple Field (xAxis)
+            xAxis, _xAxisErr := io.ReadUint16(16)
+            if _xAxisErr != nil {
+                return nil, errors.New("Error parsing 'xAxis' field " + _xAxisErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel1)
+            _map["Struct"] = values.NewPlcUINT(xAxis)
 
-            // Simple Field (ActivationStateOfChannel2)
-            ActivationStateOfChannel2, _ActivationStateOfChannel2Err := io.ReadBit()
-            if _ActivationStateOfChannel2Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel2' field " + _ActivationStateOfChannel2Err.Error())
+            // Simple Field (yAxis)
+            yAxis, _yAxisErr := io.ReadUint16(16)
+            if _yAxisErr != nil {
+                return nil, errors.New("Error parsing 'yAxis' field " + _yAxisErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel2)
+            _map["Struct"] = values.NewPlcUINT(yAxis)
 
-            // Simple Field (ActivationStateOfChannel3)
-            ActivationStateOfChannel3, _ActivationStateOfChannel3Err := io.ReadBit()
-            if _ActivationStateOfChannel3Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel3' field " + _ActivationStateOfChannel3Err.Error())
+            // Simple Field (brightness)
+            brightness, _brightnessErr := io.ReadUint8(8)
+            if _brightnessErr != nil {
+                return nil, errors.New("Error parsing 'brightness' field " + _brightnessErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel3)
+            _map["Struct"] = values.NewPlcUSINT(brightness)
 
-            // Simple Field (ActivationStateOfChannel4)
-            ActivationStateOfChannel4, _ActivationStateOfChannel4Err := io.ReadBit()
-            if _ActivationStateOfChannel4Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel4' field " + _ActivationStateOfChannel4Err.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel4)
-
-            // Simple Field (ActivationStateOfChannel5)
-            ActivationStateOfChannel5, _ActivationStateOfChannel5Err := io.ReadBit()
-            if _ActivationStateOfChannel5Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel5' field " + _ActivationStateOfChannel5Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(6); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel5)
 
-            // Simple Field (ActivationStateOfChannel6)
-            ActivationStateOfChannel6, _ActivationStateOfChannel6Err := io.ReadBit()
-            if _ActivationStateOfChannel6Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel6' field " + _ActivationStateOfChannel6Err.Error())
+            // Simple Field (validityXy)
+            validityXy, _validityXyErr := io.ReadBit()
+            if _validityXyErr != nil {
+                return nil, errors.New("Error parsing 'validityXy' field " + _validityXyErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel6)
+            _map["Struct"] = values.NewPlcBOOL(validityXy)
 
-            // Simple Field (ActivationStateOfChannel7)
-            ActivationStateOfChannel7, _ActivationStateOfChannel7Err := io.ReadBit()
-            if _ActivationStateOfChannel7Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel7' field " + _ActivationStateOfChannel7Err.Error())
+            // Simple Field (validityBrightness)
+            validityBrightness, _validityBrightnessErr := io.ReadBit()
+            if _validityBrightnessErr != nil {
+                return nil, errors.New("Error parsing 'validityBrightness' field " + _validityBrightnessErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel7)
+            _map["Struct"] = values.NewPlcBOOL(validityBrightness)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Converter_Status: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (ActivationStateOfChannel8)
-            ActivationStateOfChannel8, _ActivationStateOfChannel8Err := io.ReadBit()
-            if _ActivationStateOfChannel8Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel8' field " + _ActivationStateOfChannel8Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel8)
 
-            // Simple Field (ActivationStateOfChannel9)
-            ActivationStateOfChannel9, _ActivationStateOfChannel9Err := io.ReadBit()
-            if _ActivationStateOfChannel9Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel9' field " + _ActivationStateOfChannel9Err.Error())
+            // Simple Field (converterModeAccordingToTheDaliConverterStateMachine)
+            converterModeAccordingToTheDaliConverterStateMachine, _converterModeAccordingToTheDaliConverterStateMachineErr := io.ReadUint8(4)
+            if _converterModeAccordingToTheDaliConverterStateMachineErr != nil {
+                return nil, errors.New("Error parsing 'converterModeAccordingToTheDaliConverterStateMachine' field " + _converterModeAccordingToTheDaliConverterStateMachineErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel9)
+            _map["Struct"] = values.NewPlcUSINT(converterModeAccordingToTheDaliConverterStateMachine)
 
-            // Simple Field (ActivationStateOfChannel10)
-            ActivationStateOfChannel10, _ActivationStateOfChannel10Err := io.ReadBit()
-            if _ActivationStateOfChannel10Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel10' field " + _ActivationStateOfChannel10Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(2); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel10)
 
-            // Simple Field (ActivationStateOfChannel11)
-            ActivationStateOfChannel11, _ActivationStateOfChannel11Err := io.ReadBit()
-            if _ActivationStateOfChannel11Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel11' field " + _ActivationStateOfChannel11Err.Error())
+            // Simple Field (hardwiredSwitchIsActive)
+            hardwiredSwitchIsActive, _hardwiredSwitchIsActiveErr := io.ReadBit()
+            if _hardwiredSwitchIsActiveErr != nil {
+                return nil, errors.New("Error parsing 'hardwiredSwitchIsActive' field " + _hardwiredSwitchIsActiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel11)
+            _map["Struct"] = values.NewPlcBOOL(hardwiredSwitchIsActive)
 
-            // Simple Field (ActivationStateOfChannel12)
-            ActivationStateOfChannel12, _ActivationStateOfChannel12Err := io.ReadBit()
-            if _ActivationStateOfChannel12Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel12' field " + _ActivationStateOfChannel12Err.Error())
+            // Simple Field (hardwiredInhibitIsActive)
+            hardwiredInhibitIsActive, _hardwiredInhibitIsActiveErr := io.ReadBit()
+            if _hardwiredInhibitIsActiveErr != nil {
+                return nil, errors.New("Error parsing 'hardwiredInhibitIsActive' field " + _hardwiredInhibitIsActiveErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel12)
+            _map["Struct"] = values.NewPlcBOOL(hardwiredInhibitIsActive)
 
-            // Simple Field (ActivationStateOfChannel13)
-            ActivationStateOfChannel13, _ActivationStateOfChannel13Err := io.ReadBit()
-            if _ActivationStateOfChannel13Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel13' field " + _ActivationStateOfChannel13Err.Error())
+            // Simple Field (functionTestPending)
+            functionTestPending, _functionTestPendingErr := io.ReadUint8(2)
+            if _functionTestPendingErr != nil {
+                return nil, errors.New("Error parsing 'functionTestPending' field " + _functionTestPendingErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel13)
+            _map["Struct"] = values.NewPlcUSINT(functionTestPending)
 
-            // Simple Field (ActivationStateOfChannel14)
-            ActivationStateOfChannel14, _ActivationStateOfChannel14Err := io.ReadBit()
-            if _ActivationStateOfChannel14Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel14' field " + _ActivationStateOfChannel14Err.Error())
+            // Simple Field (durationTestPending)
+            durationTestPending, _durationTestPendingErr := io.ReadUint8(2)
+            if _durationTestPendingErr != nil {
+                return nil, errors.New("Error parsing 'durationTestPending' field " + _durationTestPendingErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel14)
+            _map["Struct"] = values.NewPlcUSINT(durationTestPending)
 
-            // Simple Field (ActivationStateOfChannel15)
-            ActivationStateOfChannel15, _ActivationStateOfChannel15Err := io.ReadBit()
-            if _ActivationStateOfChannel15Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel15' field " + _ActivationStateOfChannel15Err.Error())
+            // Simple Field (partialDurationTestPending)
+            partialDurationTestPending, _partialDurationTestPendingErr := io.ReadUint8(2)
+            if _partialDurationTestPendingErr != nil {
+                return nil, errors.New("Error parsing 'partialDurationTestPending' field " + _partialDurationTestPendingErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel15)
+            _map["Struct"] = values.NewPlcUSINT(partialDurationTestPending)
 
-            // Simple Field (ActivationStateOfChannel16)
-            ActivationStateOfChannel16, _ActivationStateOfChannel16Err := io.ReadBit()
-            if _ActivationStateOfChannel16Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel16' field " + _ActivationStateOfChannel16Err.Error())
+            // Simple Field (converterFailure)
+            converterFailure, _converterFailureErr := io.ReadUint8(2)
+            if _converterFailureErr != nil {
+                return nil, errors.New("Error parsing 'converterFailure' field " + _converterFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel16)
+            _map["Struct"] = values.NewPlcUSINT(converterFailure)
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_Converter_Test_Result: // Struct
+            _map := map[string]api.PlcValue{}
 
-            // Simple Field (ActivationStateOfChannel17)
-            ActivationStateOfChannel17, _ActivationStateOfChannel17Err := io.ReadBit()
-            if _ActivationStateOfChannel17Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel17' field " + _ActivationStateOfChannel17Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel17)
 
-            // Simple Field (ActivationStateOfChannel18)
-            ActivationStateOfChannel18, _ActivationStateOfChannel18Err := io.ReadBit()
-            if _ActivationStateOfChannel18Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel18' field " + _ActivationStateOfChannel18Err.Error())
+            // Simple Field (ltrf)
+            ltrf, _ltrfErr := io.ReadUint8(4)
+            if _ltrfErr != nil {
+                return nil, errors.New("Error parsing 'ltrf' field " + _ltrfErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel18)
+            _map["Struct"] = values.NewPlcUSINT(ltrf)
 
-            // Simple Field (ActivationStateOfChannel19)
-            ActivationStateOfChannel19, _ActivationStateOfChannel19Err := io.ReadBit()
-            if _ActivationStateOfChannel19Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel19' field " + _ActivationStateOfChannel19Err.Error())
+            // Simple Field (ltrd)
+            ltrd, _ltrdErr := io.ReadUint8(4)
+            if _ltrdErr != nil {
+                return nil, errors.New("Error parsing 'ltrd' field " + _ltrdErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel19)
+            _map["Struct"] = values.NewPlcUSINT(ltrd)
 
-            // Simple Field (ActivationStateOfChannel20)
-            ActivationStateOfChannel20, _ActivationStateOfChannel20Err := io.ReadBit()
-            if _ActivationStateOfChannel20Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel20' field " + _ActivationStateOfChannel20Err.Error())
+            // Simple Field (ltrp)
+            ltrp, _ltrpErr := io.ReadUint8(4)
+            if _ltrpErr != nil {
+                return nil, errors.New("Error parsing 'ltrp' field " + _ltrpErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel20)
+            _map["Struct"] = values.NewPlcUSINT(ltrp)
 
-            // Simple Field (ActivationStateOfChannel21)
-            ActivationStateOfChannel21, _ActivationStateOfChannel21Err := io.ReadBit()
-            if _ActivationStateOfChannel21Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel21' field " + _ActivationStateOfChannel21Err.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel21)
 
-            // Simple Field (ActivationStateOfChannel22)
-            ActivationStateOfChannel22, _ActivationStateOfChannel22Err := io.ReadBit()
-            if _ActivationStateOfChannel22Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel22' field " + _ActivationStateOfChannel22Err.Error())
+            // Simple Field (sf)
+            sf, _sfErr := io.ReadUint8(2)
+            if _sfErr != nil {
+                return nil, errors.New("Error parsing 'sf' field " + _sfErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel22)
+            _map["Struct"] = values.NewPlcUSINT(sf)
 
-            // Simple Field (ActivationStateOfChannel23)
-            ActivationStateOfChannel23, _ActivationStateOfChannel23Err := io.ReadBit()
-            if _ActivationStateOfChannel23Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel23' field " + _ActivationStateOfChannel23Err.Error())
+            // Simple Field (sd)
+            sd, _sdErr := io.ReadUint8(2)
+            if _sdErr != nil {
+                return nil, errors.New("Error parsing 'sd' field " + _sdErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel23)
+            _map["Struct"] = values.NewPlcUSINT(sd)
 
-            // Simple Field (ActivationStateOfChannel24)
-            ActivationStateOfChannel24, _ActivationStateOfChannel24Err := io.ReadBit()
-            if _ActivationStateOfChannel24Err != nil {
-                return nil, errors.New("Error parsing 'ActivationStateOfChannel24' field " + _ActivationStateOfChannel24Err.Error())
+            // Simple Field (sp)
+            sp, _spErr := io.ReadUint8(2)
+            if _spErr != nil {
+                return nil, errors.New("Error parsing 'sp' field " + _spErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(ActivationStateOfChannel24)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_HVACModeNext: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcUSINT(sp)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(2); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (DelayTimeMin)
-            DelayTimeMin, _DelayTimeMinErr := io.ReadUint16(16)
-            if _DelayTimeMinErr != nil {
-                return nil, errors.New("Error parsing 'DelayTimeMin' field " + _DelayTimeMinErr.Error())
+            // Simple Field (ldtr)
+            ldtr, _ldtrErr := io.ReadUint16(16)
+            if _ldtrErr != nil {
+                return nil, errors.New("Error parsing 'ldtr' field " + _ldtrErr.Error())
             }
-            _map["Struct"] = values.NewPlcUINT(DelayTimeMin)
+            _map["Struct"] = values.NewPlcUINT(ldtr)
 
-            // Simple Field (HvacMode)
-            HvacMode, _HvacModeErr := io.ReadUint8(8)
-            if _HvacModeErr != nil {
-                return nil, errors.New("Error parsing 'HvacMode' field " + _HvacModeErr.Error())
+            // Simple Field (lpdtr)
+            lpdtr, _lpdtrErr := io.ReadUint8(8)
+            if _lpdtrErr != nil {
+                return nil, errors.New("Error parsing 'lpdtr' field " + _lpdtrErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(HvacMode)
+            _map["Struct"] = values.NewPlcUSINT(lpdtr)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_DHWModeNext: // Struct
+        case datapointType == KnxDatapointType_DPT_Battery_Info: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(5); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (DelayTimeMin)
-            DelayTimeMin, _DelayTimeMinErr := io.ReadUint16(16)
-            if _DelayTimeMinErr != nil {
-                return nil, errors.New("Error parsing 'DelayTimeMin' field " + _DelayTimeMinErr.Error())
-            }
-            _map["Struct"] = values.NewPlcUINT(DelayTimeMin)
-
-            // Simple Field (DhwMode)
-            DhwMode, _DhwModeErr := io.ReadUint8(8)
-            if _DhwModeErr != nil {
-                return nil, errors.New("Error parsing 'DhwMode' field " + _DhwModeErr.Error())
+            // Simple Field (batteryFailure)
+            batteryFailure, _batteryFailureErr := io.ReadBit()
+            if _batteryFailureErr != nil {
+                return nil, errors.New("Error parsing 'batteryFailure' field " + _batteryFailureErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(DhwMode)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_OccModeNext: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(batteryFailure)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (batteryDurationFailure)
+            batteryDurationFailure, _batteryDurationFailureErr := io.ReadBit()
+            if _batteryDurationFailureErr != nil {
+                return nil, errors.New("Error parsing 'batteryDurationFailure' field " + _batteryDurationFailureErr.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(batteryDurationFailure)
 
-            // Simple Field (DelayTimeMin)
-            DelayTimeMin, _DelayTimeMinErr := io.ReadUint16(16)
-            if _DelayTimeMinErr != nil {
-                return nil, errors.New("Error parsing 'DelayTimeMin' field " + _DelayTimeMinErr.Error())
+            // Simple Field (batteryFullyCharged)
+            batteryFullyCharged, _batteryFullyChargedErr := io.ReadBit()
+            if _batteryFullyChargedErr != nil {
+                return nil, errors.New("Error parsing 'batteryFullyCharged' field " + _batteryFullyChargedErr.Error())
             }
-            _map["Struct"] = values.NewPlcUINT(DelayTimeMin)
+            _map["Struct"] = values.NewPlcBOOL(batteryFullyCharged)
 
-            // Simple Field (OccupancyMode)
-            OccupancyMode, _OccupancyModeErr := io.ReadUint8(8)
-            if _OccupancyModeErr != nil {
-                return nil, errors.New("Error parsing 'OccupancyMode' field " + _OccupancyModeErr.Error())
+            // Simple Field (batteryChargeLevel)
+            batteryChargeLevel, _batteryChargeLevelErr := io.ReadUint8(8)
+            if _batteryChargeLevelErr != nil {
+                return nil, errors.New("Error parsing 'batteryChargeLevel' field " + _batteryChargeLevelErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(OccupancyMode)
+            _map["Struct"] = values.NewPlcUSINT(batteryChargeLevel)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_BuildingModeNext: // Struct
+        case datapointType == KnxDatapointType_DPT_Brightness_Colour_Temperature_Transition: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4755,145 +6391,114 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (DelayTimeMin)
-            DelayTimeMin, _DelayTimeMinErr := io.ReadUint16(16)
-            if _DelayTimeMinErr != nil {
-                return nil, errors.New("Error parsing 'DelayTimeMin' field " + _DelayTimeMinErr.Error())
+            // Simple Field (ms)
+            ms, _msErr := io.ReadUint16(16)
+            if _msErr != nil {
+                return nil, errors.New("Error parsing 'ms' field " + _msErr.Error())
             }
-            _map["Struct"] = values.NewPlcUINT(DelayTimeMin)
+            _map["Struct"] = values.NewPlcUINT(ms)
 
-            // Simple Field (BuildingMode)
-            BuildingMode, _BuildingModeErr := io.ReadUint8(8)
-            if _BuildingModeErr != nil {
-                return nil, errors.New("Error parsing 'BuildingMode' field " + _BuildingModeErr.Error())
+            // Simple Field (temperatureK)
+            temperatureK, _temperatureKErr := io.ReadUint16(16)
+            if _temperatureKErr != nil {
+                return nil, errors.New("Error parsing 'temperatureK' field " + _temperatureKErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(BuildingMode)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Version: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcUINT(temperatureK)
+
+            // Simple Field (percent)
+            percent, _percentErr := io.ReadUint8(8)
+            if _percentErr != nil {
+                return nil, errors.New("Error parsing 'percent' field " + _percentErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(percent)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(5); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (MagicNumber)
-            MagicNumber, _MagicNumberErr := io.ReadUint8(5)
-            if _MagicNumberErr != nil {
-                return nil, errors.New("Error parsing 'MagicNumber' field " + _MagicNumberErr.Error())
+            // Simple Field (validityOfTheTimePeriod)
+            validityOfTheTimePeriod, _validityOfTheTimePeriodErr := io.ReadBit()
+            if _validityOfTheTimePeriodErr != nil {
+                return nil, errors.New("Error parsing 'validityOfTheTimePeriod' field " + _validityOfTheTimePeriodErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(MagicNumber)
+            _map["Struct"] = values.NewPlcBOOL(validityOfTheTimePeriod)
 
-            // Simple Field (VersionNumber)
-            VersionNumber, _VersionNumberErr := io.ReadUint8(5)
-            if _VersionNumberErr != nil {
-                return nil, errors.New("Error parsing 'VersionNumber' field " + _VersionNumberErr.Error())
+            // Simple Field (validityOfTheAbsoluteColourTemperature)
+            validityOfTheAbsoluteColourTemperature, _validityOfTheAbsoluteColourTemperatureErr := io.ReadBit()
+            if _validityOfTheAbsoluteColourTemperatureErr != nil {
+                return nil, errors.New("Error parsing 'validityOfTheAbsoluteColourTemperature' field " + _validityOfTheAbsoluteColourTemperatureErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(VersionNumber)
+            _map["Struct"] = values.NewPlcBOOL(validityOfTheAbsoluteColourTemperature)
 
-            // Simple Field (RevisionNumber)
-            RevisionNumber, _RevisionNumberErr := io.ReadUint8(6)
-            if _RevisionNumberErr != nil {
-                return nil, errors.New("Error parsing 'RevisionNumber' field " + _RevisionNumberErr.Error())
+            // Simple Field (validityOfTheAbsoluteBrightness)
+            validityOfTheAbsoluteBrightness, _validityOfTheAbsoluteBrightnessErr := io.ReadBit()
+            if _validityOfTheAbsoluteBrightnessErr != nil {
+                return nil, errors.New("Error parsing 'validityOfTheAbsoluteBrightness' field " + _validityOfTheAbsoluteBrightnessErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(RevisionNumber)
+            _map["Struct"] = values.NewPlcBOOL(validityOfTheAbsoluteBrightness)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_AlarmInfo: // Struct
+        case datapointType == KnxDatapointType_DPT_Brightness_Colour_Temperature_Control: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (LogNumber)
-            LogNumber, _LogNumberErr := io.ReadUint8(8)
-            if _LogNumberErr != nil {
-                return nil, errors.New("Error parsing 'LogNumber' field " + _LogNumberErr.Error())
-            }
-            _map["Struct"] = values.NewPlcUSINT(LogNumber)
-
-            // Simple Field (AlarmPriority)
-            AlarmPriority, _AlarmPriorityErr := io.ReadUint8(8)
-            if _AlarmPriorityErr != nil {
-                return nil, errors.New("Error parsing 'AlarmPriority' field " + _AlarmPriorityErr.Error())
+            // Simple Field (cct)
+            cct, _cctErr := io.ReadBit()
+            if _cctErr != nil {
+                return nil, errors.New("Error parsing 'cct' field " + _cctErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(AlarmPriority)
+            _map["Struct"] = values.NewPlcBOOL(cct)
 
-            // Simple Field (ApplicationArea)
-            ApplicationArea, _ApplicationAreaErr := io.ReadUint8(8)
-            if _ApplicationAreaErr != nil {
-                return nil, errors.New("Error parsing 'ApplicationArea' field " + _ApplicationAreaErr.Error())
+            // Simple Field (stepCodeColourTemperature)
+            stepCodeColourTemperature, _stepCodeColourTemperatureErr := io.ReadUint8(3)
+            if _stepCodeColourTemperatureErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourTemperature' field " + _stepCodeColourTemperatureErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(ApplicationArea)
-
-            // Simple Field (ErrorClass)
-            ErrorClass, _ErrorClassErr := io.ReadUint8(8)
-            if _ErrorClassErr != nil {
-                return nil, errors.New("Error parsing 'ErrorClass' field " + _ErrorClassErr.Error())
-            }
-            _map["Struct"] = values.NewPlcUSINT(ErrorClass)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourTemperature)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (ErrorcodeSup)
-            ErrorcodeSup, _ErrorcodeSupErr := io.ReadBit()
-            if _ErrorcodeSupErr != nil {
-                return nil, errors.New("Error parsing 'ErrorcodeSup' field " + _ErrorcodeSupErr.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(ErrorcodeSup)
-
-            // Simple Field (AlarmtextSup)
-            AlarmtextSup, _AlarmtextSupErr := io.ReadBit()
-            if _AlarmtextSupErr != nil {
-                return nil, errors.New("Error parsing 'AlarmtextSup' field " + _AlarmtextSupErr.Error())
+            // Simple Field (cb)
+            cb, _cbErr := io.ReadBit()
+            if _cbErr != nil {
+                return nil, errors.New("Error parsing 'cb' field " + _cbErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(AlarmtextSup)
+            _map["Struct"] = values.NewPlcBOOL(cb)
 
-            // Simple Field (TimestampSup)
-            TimestampSup, _TimestampSupErr := io.ReadBit()
-            if _TimestampSupErr != nil {
-                return nil, errors.New("Error parsing 'TimestampSup' field " + _TimestampSupErr.Error())
+            // Simple Field (stepCodeBrightness)
+            stepCodeBrightness, _stepCodeBrightnessErr := io.ReadUint8(3)
+            if _stepCodeBrightnessErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeBrightness' field " + _stepCodeBrightnessErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(TimestampSup)
-
-            // Simple Field (AckSup)
-            AckSup, _AckSupErr := io.ReadBit()
-            if _AckSupErr != nil {
-                return nil, errors.New("Error parsing 'AckSup' field " + _AckSupErr.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(AckSup)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeBrightness)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(5); _err != nil {
+            if _, _err := io.ReadUint8(6); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Locked)
-            Locked, _LockedErr := io.ReadBit()
-            if _LockedErr != nil {
-                return nil, errors.New("Error parsing 'Locked' field " + _LockedErr.Error())
+            // Simple Field (cctAndStepCodeColourValidity)
+            cctAndStepCodeColourValidity, _cctAndStepCodeColourValidityErr := io.ReadBit()
+            if _cctAndStepCodeColourValidityErr != nil {
+                return nil, errors.New("Error parsing 'cctAndStepCodeColourValidity' field " + _cctAndStepCodeColourValidityErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Locked)
+            _map["Struct"] = values.NewPlcBOOL(cctAndStepCodeColourValidity)
 
-            // Simple Field (Alarmunack)
-            Alarmunack, _AlarmunackErr := io.ReadBit()
-            if _AlarmunackErr != nil {
-                return nil, errors.New("Error parsing 'Alarmunack' field " + _AlarmunackErr.Error())
+            // Simple Field (cbAndStepCodeBrightnessValidity)
+            cbAndStepCodeBrightnessValidity, _cbAndStepCodeBrightnessValidityErr := io.ReadBit()
+            if _cbAndStepCodeBrightnessValidityErr != nil {
+                return nil, errors.New("Error parsing 'cbAndStepCodeBrightnessValidity' field " + _cbAndStepCodeBrightnessValidityErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Alarmunack)
-
-            // Simple Field (Inalarm)
-            Inalarm, _InalarmErr := io.ReadBit()
-            if _InalarmErr != nil {
-                return nil, errors.New("Error parsing 'Inalarm' field " + _InalarmErr.Error())
-            }
-            _map["Struct"] = values.NewPlcBOOL(Inalarm)
+            _map["Struct"] = values.NewPlcBOOL(cbAndStepCodeBrightnessValidity)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_TempRoomSetpSetF16_3: // Struct
+        case datapointType == KnxDatapointType_DPT_Colour_RGBW: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4901,79 +6506,73 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Tempsetpcomf)
-            Tempsetpcomf, _TempsetpcomfErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpcomfErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpcomf' field " + _TempsetpcomfErr.Error())
+            // Simple Field (colourLevelRed)
+            colourLevelRed, _colourLevelRedErr := io.ReadUint8(8)
+            if _colourLevelRedErr != nil {
+                return nil, errors.New("Error parsing 'colourLevelRed' field " + _colourLevelRedErr.Error())
             }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpcomf)
+            _map["Struct"] = values.NewPlcUSINT(colourLevelRed)
 
-            // Simple Field (Tempsetpstdby)
-            Tempsetpstdby, _TempsetpstdbyErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpstdbyErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpstdby' field " + _TempsetpstdbyErr.Error())
+            // Simple Field (colourLevelGreen)
+            colourLevelGreen, _colourLevelGreenErr := io.ReadUint8(8)
+            if _colourLevelGreenErr != nil {
+                return nil, errors.New("Error parsing 'colourLevelGreen' field " + _colourLevelGreenErr.Error())
             }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpstdby)
+            _map["Struct"] = values.NewPlcUSINT(colourLevelGreen)
 
-            // Simple Field (Tempsetpeco)
-            Tempsetpeco, _TempsetpecoErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpecoErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpeco' field " + _TempsetpecoErr.Error())
+            // Simple Field (colourLevelBlue)
+            colourLevelBlue, _colourLevelBlueErr := io.ReadUint8(8)
+            if _colourLevelBlueErr != nil {
+                return nil, errors.New("Error parsing 'colourLevelBlue' field " + _colourLevelBlueErr.Error())
             }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpeco)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_TempRoomSetpSetShiftF16_3: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcUSINT(colourLevelBlue)
+
+            // Simple Field (colourLevelWhite)
+            colourLevelWhite, _colourLevelWhiteErr := io.ReadUint8(8)
+            if _colourLevelWhiteErr != nil {
+                return nil, errors.New("Error parsing 'colourLevelWhite' field " + _colourLevelWhiteErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(colourLevelWhite)
 
             // Reserved Field (Just skip the bytes)
             if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Tempsetpshiftcomf)
-            Tempsetpshiftcomf, _TempsetpshiftcomfErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpshiftcomfErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpshiftcomf' field " + _TempsetpshiftcomfErr.Error())
-            }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpshiftcomf)
-
-            // Simple Field (Tempsetpshiftstdby)
-            Tempsetpshiftstdby, _TempsetpshiftstdbyErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpshiftstdbyErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpshiftstdby' field " + _TempsetpshiftstdbyErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpshiftstdby)
 
-            // Simple Field (Tempsetpshifteco)
-            Tempsetpshifteco, _TempsetpshiftecoErr := io.ReadFloat32(true, 4, 11)
-            if _TempsetpshiftecoErr != nil {
-                return nil, errors.New("Error parsing 'Tempsetpshifteco' field " + _TempsetpshiftecoErr.Error())
+            // Simple Field (mr)
+            mr, _mrErr := io.ReadBit()
+            if _mrErr != nil {
+                return nil, errors.New("Error parsing 'mr' field " + _mrErr.Error())
             }
-            _map["Struct"] = values.NewPlcREAL(Tempsetpshifteco)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Scaling_Speed: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(mr)
 
-            // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
-                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            // Simple Field (mg)
+            mg, _mgErr := io.ReadBit()
+            if _mgErr != nil {
+                return nil, errors.New("Error parsing 'mg' field " + _mgErr.Error())
             }
+            _map["Struct"] = values.NewPlcBOOL(mg)
 
-            // Simple Field (TimePeriod)
-            TimePeriod, _TimePeriodErr := io.ReadUint16(16)
-            if _TimePeriodErr != nil {
-                return nil, errors.New("Error parsing 'TimePeriod' field " + _TimePeriodErr.Error())
+            // Simple Field (mb)
+            mb, _mbErr := io.ReadBit()
+            if _mbErr != nil {
+                return nil, errors.New("Error parsing 'mb' field " + _mbErr.Error())
             }
-            _map["Struct"] = values.NewPlcUINT(TimePeriod)
+            _map["Struct"] = values.NewPlcBOOL(mb)
 
-            // Simple Field (Percent)
-            Percent, _PercentErr := io.ReadUint8(8)
-            if _PercentErr != nil {
-                return nil, errors.New("Error parsing 'Percent' field " + _PercentErr.Error())
+            // Simple Field (mw)
+            mw, _mwErr := io.ReadBit()
+            if _mwErr != nil {
+                return nil, errors.New("Error parsing 'mw' field " + _mwErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Percent)
+            _map["Struct"] = values.NewPlcBOOL(mw)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Scaling_Step_Time: // Struct
+        case datapointType == KnxDatapointType_DPT_Relative_Control_RGBW: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -4981,119 +6580,116 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (TimePeriod)
-            TimePeriod, _TimePeriodErr := io.ReadUint16(16)
-            if _TimePeriodErr != nil {
-                return nil, errors.New("Error parsing 'TimePeriod' field " + _TimePeriodErr.Error())
+            // Simple Field (maskcw)
+            maskcw, _maskcwErr := io.ReadBit()
+            if _maskcwErr != nil {
+                return nil, errors.New("Error parsing 'maskcw' field " + _maskcwErr.Error())
             }
-            _map["Struct"] = values.NewPlcUINT(TimePeriod)
+            _map["Struct"] = values.NewPlcBOOL(maskcw)
 
-            // Simple Field (Percent)
-            Percent, _PercentErr := io.ReadUint8(8)
-            if _PercentErr != nil {
-                return nil, errors.New("Error parsing 'Percent' field " + _PercentErr.Error())
+            // Simple Field (maskcb)
+            maskcb, _maskcbErr := io.ReadBit()
+            if _maskcbErr != nil {
+                return nil, errors.New("Error parsing 'maskcb' field " + _maskcbErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Percent)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_MeteringValue: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(maskcb)
+
+            // Simple Field (maskcg)
+            maskcg, _maskcgErr := io.ReadBit()
+            if _maskcgErr != nil {
+                return nil, errors.New("Error parsing 'maskcg' field " + _maskcgErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskcg)
+
+            // Simple Field (maskcr)
+            maskcr, _maskcrErr := io.ReadBit()
+            if _maskcrErr != nil {
+                return nil, errors.New("Error parsing 'maskcr' field " + _maskcrErr.Error())
+            }
+            _map["Struct"] = values.NewPlcBOOL(maskcr)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Countval)
-            Countval, _CountvalErr := io.ReadInt32(32)
-            if _CountvalErr != nil {
-                return nil, errors.New("Error parsing 'Countval' field " + _CountvalErr.Error())
+            // Simple Field (cw)
+            cw, _cwErr := io.ReadBit()
+            if _cwErr != nil {
+                return nil, errors.New("Error parsing 'cw' field " + _cwErr.Error())
             }
-            _map["Struct"] = values.NewPlcDINT(Countval)
+            _map["Struct"] = values.NewPlcBOOL(cw)
 
-            // Simple Field (Valinffield)
-            Valinffield, _ValinffieldErr := io.ReadUint8(8)
-            if _ValinffieldErr != nil {
-                return nil, errors.New("Error parsing 'Valinffield' field " + _ValinffieldErr.Error())
+            // Simple Field (stepCodeColourWhite)
+            stepCodeColourWhite, _stepCodeColourWhiteErr := io.ReadUint8(3)
+            if _stepCodeColourWhiteErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourWhite' field " + _stepCodeColourWhiteErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Valinffield)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourWhite)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(3); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Alarmunack)
-            Alarmunack, _AlarmunackErr := io.ReadBit()
-            if _AlarmunackErr != nil {
-                return nil, errors.New("Error parsing 'Alarmunack' field " + _AlarmunackErr.Error())
+            // Simple Field (cb)
+            cb, _cbErr := io.ReadBit()
+            if _cbErr != nil {
+                return nil, errors.New("Error parsing 'cb' field " + _cbErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Alarmunack)
+            _map["Struct"] = values.NewPlcBOOL(cb)
 
-            // Simple Field (Inalarm)
-            Inalarm, _InalarmErr := io.ReadBit()
-            if _InalarmErr != nil {
-                return nil, errors.New("Error parsing 'Inalarm' field " + _InalarmErr.Error())
+            // Simple Field (stepCodeColourBlue)
+            stepCodeColourBlue, _stepCodeColourBlueErr := io.ReadUint8(3)
+            if _stepCodeColourBlueErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourBlue' field " + _stepCodeColourBlueErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Inalarm)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourBlue)
 
-            // Simple Field (Overridden)
-            Overridden, _OverriddenErr := io.ReadBit()
-            if _OverriddenErr != nil {
-                return nil, errors.New("Error parsing 'Overridden' field " + _OverriddenErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Overridden)
 
-            // Simple Field (Fault)
-            Fault, _FaultErr := io.ReadBit()
-            if _FaultErr != nil {
-                return nil, errors.New("Error parsing 'Fault' field " + _FaultErr.Error())
+            // Simple Field (cg)
+            cg, _cgErr := io.ReadBit()
+            if _cgErr != nil {
+                return nil, errors.New("Error parsing 'cg' field " + _cgErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Fault)
+            _map["Struct"] = values.NewPlcBOOL(cg)
 
-            // Simple Field (Outofservice)
-            Outofservice, _OutofserviceErr := io.ReadBit()
-            if _OutofserviceErr != nil {
-                return nil, errors.New("Error parsing 'Outofservice' field " + _OutofserviceErr.Error())
+            // Simple Field (stepCodeColourGreen)
+            stepCodeColourGreen, _stepCodeColourGreenErr := io.ReadUint8(3)
+            if _stepCodeColourGreenErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourGreen' field " + _stepCodeColourGreenErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Outofservice)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_MBus_Address: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourGreen)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Manufactid)
-            Manufactid, _ManufactidErr := io.ReadUint16(16)
-            if _ManufactidErr != nil {
-                return nil, errors.New("Error parsing 'Manufactid' field " + _ManufactidErr.Error())
-            }
-            _map["Struct"] = values.NewPlcUINT(Manufactid)
-
-            // Simple Field (Identnumber)
-            Identnumber, _IdentnumberErr := io.ReadUint32(32)
-            if _IdentnumberErr != nil {
-                return nil, errors.New("Error parsing 'Identnumber' field " + _IdentnumberErr.Error())
+            // Simple Field (cr)
+            cr, _crErr := io.ReadBit()
+            if _crErr != nil {
+                return nil, errors.New("Error parsing 'cr' field " + _crErr.Error())
             }
-            _map["Struct"] = values.NewPlcUDINT(Identnumber)
+            _map["Struct"] = values.NewPlcBOOL(cr)
 
-            // Simple Field (Version)
-            Version, _VersionErr := io.ReadUint8(8)
-            if _VersionErr != nil {
-                return nil, errors.New("Error parsing 'Version' field " + _VersionErr.Error())
+            // Simple Field (stepCodeColourRed)
+            stepCodeColourRed, _stepCodeColourRedErr := io.ReadUint8(3)
+            if _stepCodeColourRedErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourRed' field " + _stepCodeColourRedErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Version)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourRed)
 
-            // Simple Field (Medium)
-            Medium, _MediumErr := io.ReadUint8(8)
-            if _MediumErr != nil {
-                return nil, errors.New("Error parsing 'Medium' field " + _MediumErr.Error())
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Medium)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Colour_RGB: // Struct
+        case datapointType == KnxDatapointType_DPT_Relative_Control_RGB: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -5101,82 +6697,86 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (R)
-            R, _RErr := io.ReadUint8(8)
-            if _RErr != nil {
-                return nil, errors.New("Error parsing 'R' field " + _RErr.Error())
-            }
-            _map["Struct"] = values.NewPlcUSINT(R)
-
-            // Simple Field (G)
-            G, _GErr := io.ReadUint8(8)
-            if _GErr != nil {
-                return nil, errors.New("Error parsing 'G' field " + _GErr.Error())
+            // Simple Field (cb)
+            cb, _cbErr := io.ReadBit()
+            if _cbErr != nil {
+                return nil, errors.New("Error parsing 'cb' field " + _cbErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(G)
+            _map["Struct"] = values.NewPlcBOOL(cb)
 
-            // Simple Field (B)
-            B, _BErr := io.ReadUint8(8)
-            if _BErr != nil {
-                return nil, errors.New("Error parsing 'B' field " + _BErr.Error())
+            // Simple Field (stepCodeColourBlue)
+            stepCodeColourBlue, _stepCodeColourBlueErr := io.ReadUint8(3)
+            if _stepCodeColourBlueErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourBlue' field " + _stepCodeColourBlueErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(B)
-            return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_LanguageCodeAlpha2_ASCII: // STRING
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourBlue)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (value)
-            value, _valueErr := io.ReadString(16)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+            // Simple Field (cg)
+            cg, _cgErr := io.ReadBit()
+            if _cgErr != nil {
+                return nil, errors.New("Error parsing 'cg' field " + _cgErr.Error())
             }
-            return values.NewPlcSTRING(value), nil
-        case datapointType == KnxDatapointType.DPT_Tariff_ActiveEnergy: // Struct
-            _map := map[string]api.PlcValue{}
+            _map["Struct"] = values.NewPlcBOOL(cg)
+
+            // Simple Field (stepCodeColourGreen)
+            stepCodeColourGreen, _stepCodeColourGreenErr := io.ReadUint8(3)
+            if _stepCodeColourGreenErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourGreen' field " + _stepCodeColourGreenErr.Error())
+            }
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourGreen)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(8); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Activeelectricalenergy)
-            Activeelectricalenergy, _ActiveelectricalenergyErr := io.ReadInt32(32)
-            if _ActiveelectricalenergyErr != nil {
-                return nil, errors.New("Error parsing 'Activeelectricalenergy' field " + _ActiveelectricalenergyErr.Error())
+            // Simple Field (cr)
+            cr, _crErr := io.ReadBit()
+            if _crErr != nil {
+                return nil, errors.New("Error parsing 'cr' field " + _crErr.Error())
             }
-            _map["Struct"] = values.NewPlcDINT(Activeelectricalenergy)
+            _map["Struct"] = values.NewPlcBOOL(cr)
 
-            // Simple Field (Tariff)
-            Tariff, _TariffErr := io.ReadUint8(8)
-            if _TariffErr != nil {
-                return nil, errors.New("Error parsing 'Tariff' field " + _TariffErr.Error())
+            // Simple Field (stepCodeColourRed)
+            stepCodeColourRed, _stepCodeColourRedErr := io.ReadUint8(3)
+            if _stepCodeColourRedErr != nil {
+                return nil, errors.New("Error parsing 'stepCodeColourRed' field " + _stepCodeColourRedErr.Error())
             }
-            _map["Struct"] = values.NewPlcUSINT(Tariff)
+            _map["Struct"] = values.NewPlcUSINT(stepCodeColourRed)
 
             // Reserved Field (Just skip the bytes)
-            if _, _err := io.ReadUint8(6); _err != nil {
+            if _, _err := io.ReadUint8(4); _err != nil {
+                return nil, errors.New("Error parsing reserved field " + _err.Error())
+            }
+            return values.NewPlcStruct(_map), nil
+        case datapointType == KnxDatapointType_DPT_GeographicalLocation: // Struct
+            _map := map[string]api.PlcValue{}
+
+            // Reserved Field (Just skip the bytes)
+            if _, _err := io.ReadUint8(8); _err != nil {
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (Electricalengergyvalidity)
-            Electricalengergyvalidity, _ElectricalengergyvalidityErr := io.ReadBit()
-            if _ElectricalengergyvalidityErr != nil {
-                return nil, errors.New("Error parsing 'Electricalengergyvalidity' field " + _ElectricalengergyvalidityErr.Error())
+            // Simple Field (longitude)
+            longitude, _longitudeErr := io.ReadFloat32(true, 8, 23)
+            if _longitudeErr != nil {
+                return nil, errors.New("Error parsing 'longitude' field " + _longitudeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Electricalengergyvalidity)
+            _map["Struct"] = values.NewPlcREAL(longitude)
 
-            // Simple Field (Tariffvalidity)
-            Tariffvalidity, _TariffvalidityErr := io.ReadBit()
-            if _TariffvalidityErr != nil {
-                return nil, errors.New("Error parsing 'Tariffvalidity' field " + _TariffvalidityErr.Error())
+            // Simple Field (latitude)
+            latitude, _latitudeErr := io.ReadFloat32(true, 8, 23)
+            if _latitudeErr != nil {
+                return nil, errors.New("Error parsing 'latitude' field " + _latitudeErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(Tariffvalidity)
+            _map["Struct"] = values.NewPlcREAL(latitude)
             return values.NewPlcStruct(_map), nil
-        case datapointType == KnxDatapointType.DPT_Prioritised_Mode_Control: // Struct
+        case datapointType == KnxDatapointType_DPT_TempRoomSetpSetF16_4: // Struct
             _map := map[string]api.PlcValue{}
 
             // Reserved Field (Just skip the bytes)
@@ -5184,1500 +6784,1273 @@ func KnxDatapointParse(io *utils.ReadBuffer, datapointType IKnxDatapointType) (a
                 return nil, errors.New("Error parsing reserved field " + _err.Error())
             }
 
-            // Simple Field (DeactivationOfPriority)
-            DeactivationOfPriority, _DeactivationOfPriorityErr := io.ReadBit()
-            if _DeactivationOfPriorityErr != nil {
-                return nil, errors.New("Error parsing 'DeactivationOfPriority' field " + _DeactivationOfPriorityErr.Error())
+            // Simple Field (roomTemperatureSetpointComfort)
+            roomTemperatureSetpointComfort, _roomTemperatureSetpointComfortErr := io.ReadFloat32(true, 4, 11)
+            if _roomTemperatureSetpointComfortErr != nil {
+                return nil, errors.New("Error parsing 'roomTemperatureSetpointComfort' field " + _roomTemperatureSetpointComfortErr.Error())
+            }
+            _map["Struct"] = values.NewPlcREAL(roomTemperatureSetpointComfort)
+
+            // Simple Field (roomTemperatureSetpointStandby)
+            roomTemperatureSetpointStandby, _roomTemperatureSetpointStandbyErr := io.ReadFloat32(true, 4, 11)
+            if _roomTemperatureSetpointStandbyErr != nil {
+                return nil, errors.New("Error parsing 'roomTemperatureSetpointStandby' field " + _roomTemperatureSetpointStandbyErr.Error())
             }
-            _map["Struct"] = values.NewPlcBOOL(DeactivationOfPriority)
+            _map["Struct"] = values.NewPlcREAL(roomTemperatureSetpointStandby)
 
-            // Simple Field (PriorityLevel)
-            PriorityLevel, _PriorityLevelErr := io.ReadUint8(3)
-            if _PriorityLevelErr != nil {
-                return nil, errors.New("Error parsing 'PriorityLevel' field " + _PriorityLevelErr.Error())
+            // Simple Field (roomTemperatureSetpointEconomy)
... 17013 lines suppressed ...