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:08 UTC

[plc4x] 05/07: - Replaced the manually created KnxDatatypes and DataIo with a fully generated version

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 ad6cc1d28eb87ad65bc6331a28fa29d317cafd21
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Jan 24 12:52:59 2021 +0100

    - Replaced the manually created KnxDatatypes and DataIo with a fully generated version
---
 .../resources/protocols/knxnetip/knxnetip.mspec    | 1446 +++-----------------
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |  261 +++-
 2 files changed, 474 insertions(+), 1233 deletions(-)

diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 5686916..620bc3c 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -245,7 +245,7 @@
             [simple   uint 8                    'additionalInformationLength']
             [array    CEMIAdditionalInformation 'additionalInformation' length 'additionalInformationLength']
             [simple   LDataFrame                'dataFrame']
-            [optional uint 8                    'crc'                   'dataFrame.notAckFrame']
+            //[optional uint 8                    'crc'                   'dataFrame.notAckFrame']
         ]
 
         // Page 72ff
@@ -350,68 +350,226 @@
     [discriminator bit          'extendedFrame']
     [discriminator bit          'polling']
     [simple        bit          'repeated']
-    [discriminator bit          'notAckFrame']
+    [simple        bit          'notAckFrame']
     [enum          CEMIPriority 'priority']
     [simple        bit          'acknowledgeRequested']
     [simple        bit          'errorFlag']
-    [typeSwitch 'notAckFrame','extendedFrame','polling'
-        ['false' LDataFrameAck
-        ]
-        // Page 28ff
-        ['true','false','false' LDataFrameData
+    [typeSwitch 'extendedFrame','polling'
+       // Page 28ff
+        ['false','false' LDataFrameData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'destinationAddress' count '2']
             [simple   bit          'groupAddress']
             [simple   uint 3       'hopCount']
-            [simple   uint 4       'dataLength']
-            // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
-            [simple   bit          'control']
-            [simple   bit          'numbered']
-            [simple   uint 4       'counter']
-            [optional ControlType  'controlType'   'control']
-            [optional APCI         'apci'          '!control']
-            // The 4 bit of APCI only allow 16 options, in order to extend, if APCI is set to 0xF
-            // the following 6 bit allow a bit more room for selection
-            [optional ExtendedAPCI 'extendedApci'  '!control && apci == APCI.OTHER_PDU']
-            // If the extended APCI is used, these 6 bits can't be used for data.
-            [optional int 6        'dataFirstByte' '!control && apci != APCI.OTHER_PDU']
-            [array    int 8        'data' count    '(dataLength < 1) ? 0 : dataLength - 1']
+            [simple   Apdu         'apdu']
+        ]
+        // Page 29ff
+        ['true','false' LDataFrameDataExt
+            [simple   bit          'groupAddress']
+            [simple   uint 3       'hopCount']
+            [simple   uint 4       'extendedFrameFormat']
+            [simple   KnxAddress   'sourceAddress']
+            [array    int 8        'destinationAddress' count '2']
+            [simple   Apdu         'apdu']
         ]
         // Page 31ff
-        ['true','true','true' LDataFramePollingData
+        ['true','true' LDataFramePollingData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'targetAddress' count '2']
             [reserved uint 4       '0x00']
             [simple   uint 6       'numberExpectedPollData']
         ]
         // Page 31ff
-        ['true','false','true' LDataFramePollingData
+        ['false','true' LDataFramePollingData
             [simple   KnxAddress   'sourceAddress']
             [array    int 8        'targetAddress' count '2']
             [reserved uint 4       '0x00']
             [simple   uint 6       'numberExpectedPollData']
         ]
-        // Page 29ff
-        ['true','true','false' LDataFrameDataExt
-            [simple   bit          'groupAddress']
-            [simple   uint 3       'hopCount']
-            [simple   uint 4       'extendedFrameFormat']
-            [simple   KnxAddress   'sourceAddress']
-            [array    int 8        'destinationAddress' count '2']
-            [simple   uint 8       'dataLength']
-            // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
-            [simple   bit          'control']
-            [simple   bit          'numbered']
-            [simple   uint 4       'counter']
-            [optional ControlType  'controlType'   'control']
-            [optional APCI         'apci'          '!control']
-            // The 4 bit of APCI only allow 16 options, in order to extend, if APCI is set to 0xF
-            // the following 6 bit allow a bit more room for selection
-            [optional ExtendedAPCI 'extendedApci'  '!control && apci == APCI.OTHER_PDU']
-            // If the extended APCI is used, these 6 bits can't be used for data.
-            [optional int 6        'dataFirstByte' '!control && apci != APCI.OTHER_PDU']
-            [array    int 8        'data' count    '(dataLength < 1) ? 0 : dataLength - 1']
+    ]
+]
+
+[discriminatedType 'Apdu'
+    [simple   uint 8      'dataLength']
+    // 10_01 Logical Tag Extended v01.02.01 AS.pdf Page 74ff
+    [discriminator uint 1 'control']
+    [simple        bit    'numbered']
+    [simple        uint 4 'counter']
+    [typeSwitch 'control'
+        ['1' ApduControlContainer
+            [simple ApduControl 'controlApdu']
+        ]
+        ['0' ApduDataContainer [uint 8 'dataLength']
+            [simple ApduData 'dataApdu' ['dataLength']]
+        ]
+    ]
+]
+
+[discriminatedType 'ApduControl'
+    [discriminator uint 2 'controlType']
+    [typeSwitch 'controlType'
+        ['0x0' ApduControlConnect
+        ]
+        ['0x1' ApduControlDisconnect
+        ]
+        ['0x2' ApduControlAck
+        ]
+        ['0x3' ApduControlNack
+        ]
+    ]
+]
+
+[discriminatedType 'ApduData' [uint 8 'dataLength']
+    [discriminator uint 4 'apciType']
+    // 03_03_07 Application Layer v01.06.02 AS Page 9ff
+    [typeSwitch 'apciType'
+        ['0x0' ApduDataGroupValueRead
+        ]
+        ['0x1' ApduDataGroupValueResponse
+        ]
+        ['0x2' ApduDataGroupValueWrite [uint 8 'dataLength']
+            [simple int 6 'dataFirstByte']
+            [array  int 8 'data' count  '(dataLength < 1) ? 0 : dataLength - 1']
+        ]
+        ['0x3' ApduDataIndividualAddressWrite
+        ]
+        ['0x4' ApduDataIndividualAddressRead
+        ]
+        ['0x5' ApduDataIndividualAddressResponse
+        ]
+        ['0x6' ApduDataAdcRead
+        ]
+        // In case of this type the following 6 bits contain more detailed information
+        ['0x7' ApduDataAdcResponse
+        ]
+        ['0x8' ApduDataMemoryRead
+        ]
+        ['0x9' ApduDataMemoryResponse
+        ]
+        ['0xA' ApduDataMemoryWrite
+        ]
+        // In case of this type the following 6 bits contain more detailed information
+        ['0xB' ApduDataUserMessage
+        ]
+        ['0xC' ApduDataDeviceDescriptorRead
+        ]
+        ['0xD' ApduDataDeviceDescriptorResponse
+        ]
+        ['0xE' ApduDataRestart
+        ]
+        ['0xF' ApduDataOther [uint 8 'dataLength']
+            [simple ApduDataExt 'extendedApdu' ['dataLength']]
+        ]
+    ]
+]
+
+// 03_03_07 Application Layer v01.06.02 AS Page 9ff
+[discriminatedType 'ApduDataExt' [uint 8 'length']
+    [discriminator uint 8 'extApciType']
+    [typeSwitch 'extApciType'
+        ['0x00' ApduDataExtOpenRoutingTableRequest
+        ]
+        ['0x01' ApduDataExtReadRoutingTableRequest
+        ]
+        ['0x02' ApduDataExtReadRoutingTableResponse
+        ]
+        ['0x03' ApduDataExtWriteRoutingTableRequest
+        ]
+        ['0x08' ApduDataExtReadRouterMemoryRequest
+        ]
+        ['0x09' ApduDataExtReadRouterMemoryResponse
+        ]
+        ['0x0A' ApduDataExtWriteRouterMemoryRequest
+        ]
+        ['0x0D' ApduDataExtReadRouterStatusRequest
+        ]
+        ['0x0E' ApduDataExtReadRouterStatusResponse
+        ]
+        ['0x0F' ApduDataExtWriteRouterStatusRequest
+        ]
+
+        ['0x10' ApduDataExtMemoryBitWrite
+        ]
+
+        ['0x11' ApduDataExtAuthorizeRequest
+        ]
+        ['0x12' ApduDataExtAuthorizeResponse
         ]
+        ['0x13' ApduDataExtKeyWrite
+        ]
+        ['0x14' ApduDataExtKeyResponse
+        ]
+
+        ['0x15' ApduDataExtPropertyValueRead
+            [simple uint 8  'objectIndex']
+            [simple uint 8  'propertyId']
+            [simple uint 4  'count']
+            [simple uint 12 'index']
+        ]
+        ['0x16' ApduDataExtPropertyValueResponse [uint 8 'length']
+            [simple uint 8  'objectIndex']
+            [simple uint 8  'propertyId']
+            [simple uint 4  'count']
+            [simple uint 12 'index']
+            [array  uint 8 'data' count 'length - 5']
+        ]
+        ['0x17' ApduDataExtPropertyValueWrite
+        ]
+        ['0x18' ApduDataExtPropertyDescriptionRead
+        ]
+        ['0x19' ApduDataExtPropertyDescriptionResponse
+        ]
+
+        ['0x1A' ApduDataExtNetworkParameterRead
+        ]
+        ['0x1B' ApduDataExtNetworkParameterResponse
+        ]
+
+        ['0x1C' ApduDataExtIndividualAddressSerialNumberRead
+        ]
+        ['0x1D' ApduDataExtIndividualAddressSerialNumberResponse
+        ]
+        ['0x1E' ApduDataExtIndividualAddressSerialNumberWrite
+        ]
+
+        ['0x20' ApduDataExtDomainAddressWrite
+        ]
+        ['0x21' ApduDataExtDomainAddressRead
+        ]
+        ['0x22' ApduDataExtDomainAddressResponse
+        ]
+        ['0x23' ApduDataExtDomainAddressSelectiveRead
+        ]
+
+        ['0x24' ApduDataExtNetworkParameterWrite
+        ]
+
+        ['0x25' ApduDataExtLinkRead
+        ]
+        ['0x26' ApduDataExtLinkResponse
+        ]
+        ['0x27' ApduDataExtLinkWrite
+        ]
+
+        ['0x28' ApduDataExtGroupPropertyValueRead
+        ]
+        ['0x29' ApduDataExtGroupPropertyValueResponse
+        ]
+        ['0x2A' ApduDataExtGroupPropertyValueWrite
+        ]
+        ['0x2B' ApduDataExtGroupPropertyValueInfoReport
+        ]
+
+        ['0x2C' ApduDataExtDomainAddressSerialNumberRead
+        ]
+        ['0x2D' ApduDataExtDomainAddressSerialNumberResponse
+        ]
+        ['0x2E' ApduDataExtDomainAddressSerialNumberWrite
+        ]
+
+        ['0x30' ApduDataExtFileStreamInfoReport
+        ]
+
     ]
 ]
 
@@ -436,1086 +594,6 @@
     ]
 ]
 
-[dataIo 'KnxDatapoint' [string 'formatName']
-    [typeSwitch 'formatName'
-        ['B1' BOOL
-            [reserved uint 7 '0x0']
-            [simple   bit    'value']
-        ]
-        ['B2' Struct
-            [reserved uint 6 '0x0']
-            [simple   bit    'control']
-            [simple   bit    'value']
-        ]
-        ['B1U3' Struct
-            [reserved uint 4 '0x0']
-            [simple   bit    'control']
-            [simple   uint 3 'value']
-        ]
-        ['A8_ASCII' STRING
-            [reserved uint 8   '0x0']
-            [simple   string 8 'ASCII' 'value']
-        ]
-        ['A8_8859_1' STRING
-            [reserved uint 8   '0x0']
-            [simple   string 8 'ISO-8859-1' 'value']
-        ]
-        ['U8' USINT
-            [reserved uint 8   '0x0']
-            [simple   uint 8 'value']
-        ]
-        ['V8' SINT
-            [reserved uint 8   '0x0']
-            [simple   int 8 'value']
-        ]
-        // TODO value should actually be an enum ...
-        ['B5N3' Struct
-            [reserved uint 3 '0x0']
-            [simple   bit    'a']
-            [simple   bit    'b']
-            [simple   bit    'c']
-            [simple   bit    'd']
-            [simple   bit    'e']
-            [simple   int 8  'value']
-        ]
-        ['U16' UINT
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'value']
-        ]
-        ['V16' INT
-            [reserved uint 8  '0x0']
-            [simple   int 16 'value']
-        ]
-        ['F16' REAL
-            [reserved uint 8     '0x0']
-            [simple   float 4.11 'value']
-        ]
-        // TODO Not sure how to encode the day in this
-        ['N3N5r2N6r2N6' TIME_OF_DAY
-            [reserved uint 8 '0x0']
-            [simple   uint 3 'day']
-            [simple   uint 5 'hour']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'minutes']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'seconds']
-        ]
-        ['r3N5r4N4r1U7' DATE
-            [reserved uint 3 '0x00']
-            [simple   uint 5 'day']
-            [reserved uint 4 '0x00']
-            [reserved uint 4 '0x00']
-            [simple   uint 4 'month']
-            [reserved uint 1 '0x00']
-            [simple   uint 7 'year']
-        ]
-        ['U32' UDINT
-            [reserved uint 8  '0x0']
-            [simple   uint 32 'value']
-        ]
-        ['V32' DINT
-            [reserved uint 8  '0x0']
-            [simple   int 32 'value']
-        ]
-        ['F32' REAL
-            [reserved uint 8     '0x0']
-            [simple   float 8.23 'value']
-        ]
-        ['U4U4U4U4U4U4B4N4' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 4 'd6']
-            [simple   uint 4 'd5']
-            [simple   uint 4 'd4']
-            [simple   uint 4 'd3']
-            [simple   uint 4 'd2']
-            [simple   uint 4 'd1']
-            [simple   bit    'e']
-            [simple   bit    'p']
-            [simple   bit    'd']
-            [simple   bit    'c']
-            [simple   uint 4 'index']
-        ]
-        ['A112_ASCII' STRING
-            [reserved uint 8  '0x0']
-            [simple   string 112 'ASCII' 'value']
-        ]
-        ['A112_8859_1' STRING
-            [reserved uint 8  '0x0']
-            [simple   string 112 'ISO-8859-1' 'value']
-        ]
-        ['r2U6' USINT
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'value']
-        ]
-        ['B1r1U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit    'learn']
-            [reserved uint 1 '0x00']
-            [simple   uint 6 'sceneNumber']
-        ]
-        ['U8r4U4r3U5U3U5r2U6r2U6B16' DATE_AND_TIME
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'year']
-            [reserved uint 4 '0x00']
-            [simple   uint 4 'month']
-            [reserved uint 3 '0x00']
-            [simple   uint 5 'day']
-            [simple   uint 3 'dayOfWeek']
-            [simple   uint 5 'hour']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'minutes']
-            [reserved uint 2 '0x00']
-            [simple   uint 6 'seconds']
-            [simple   bit    'fault']
-            [simple   bit    'workingDay']
-            [simple   bit    'noWorkingDay']
-            [simple   bit    'noYear']
-            [simple   bit    'noMonthAndDay']
-            [simple   bit    'noDayOfWeek']
-            [simple   bit    'noTime']
-            [simple   bit    'standardSummerTime']
-            [simple   bit    'clockWithSyncSignal']
-        ]
-        // TODO This should actually be enums depending on their type
-        ['N8' USINT
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'value']
-        ]
-        ['B8' BYTE
-            [reserved uint 8  '0x0']
-            [simple uint 8 'value']
-        ]
-        ['B16' WORD
-            [reserved uint 8  '0x0']
-            [simple uint 16 'value']
-        ]
-        // TODO Probably should be a 2-bit unsigned plc-value
-        // TODO value should actually be enums depending on their type
-        ['N2' USINT
-            [reserved uint 6 '0x00']
-            [simple   uint 2 'value']
-        ]
-        ['An_8859_1' STRING
-            [reserved uint 8  '0x0']
-            // TODO: Implement this field
-            //[manual string 8 'ISO-8859-1' 'value' '' '' '']
-        ]
-        ['U4U4' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 4 'busy']
-            [simple   uint 4 'nak']
-        ]
-        ['r1b1U6' Struct
-            [reserved uint 8  '0x0']
-            [reserved uint 1 '0x00']
-            [simple   bit    'sceneActive']
-            [simple   uint 6 'sceneNumber']
-        ]
-        ['B32' DWORD
-            [reserved uint 8  '0x0']
-            [simple uint 32 'value']
-        ]
-        // TODO UTF-8 chars can be two type values. probably better to do a "manual" element
-        ['An_UTF_8' STRING
-            [reserved uint 8  '0x0']
-            // TODO: Implement this field
-            //[manual string 8 'UTF-8' 'value' '' '' '']
-        ]
-        ['V64' LINT
-            [reserved uint 8  '0x0']
-            [simple int 64 'value']
-        ]
-        ['B24' List
-            [reserved uint 8  '0x0']
-            [array bit 'value' count '24']
-        ]
-        // TODO Probably should be a 3-bit unsigned plc-value
-        // TODO value should actually be enums depending on their type
-        ['N3' USINT
-            [reserved uint 5 '0x00']
-            [simple   uint 3 'value']
-        ]
-        ['B1Z8HeatingOrCoolingZ' Struct
-            [reserved uint 7 '0x00']
-            [simple   bit    'heating']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['B1Z8BinaryValueZ' Struct
-            [reserved uint 7 '0x00']
-            [simple   bit    'high']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8HvacOperatingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacOperatingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8DhwMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'dhwMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8HvacControllingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacControllingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8EnableHeatingOrCoolingStage' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'enableHeatingOrCoolingStage']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8BuildingMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'buildingMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8OccupancyMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'occupancyMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['N8Z8EmergencyMode' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'hvacEmergencyMode']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U8Z8Rel' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'relValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U8Z8Counter' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'counterValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['U16Z8TimePeriod' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'timePeriod']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8FlowRate' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'flowRate']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8Counter' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'counterValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8ElectricCurrent' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'electricalCurrent']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8Power' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'power']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8AtmPressure' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'atmPressure']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8PercentValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'percentValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8HvacAirQuality' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'ppmResolution']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8WindSpeed' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'windSpeed']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8SunIntensity' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'sunIntensity']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16Z8HvacAirFlow' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'airFlow']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V8Z8RelSignedValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 8  'relSignedValue']
-            [simple   uint 8 'statusCommand']
-        ]
-        ['V16Z8DeltaTime' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'deltaTime']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V16Z8RelSignedValue' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'relSignedValue']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U16N8HvacModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'hvacMode']
-        ]
-        ['U16N8DhwModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'dhwMode']
-        ]
-        ['U16N8OccupancyModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'occupationMode']
-        ]
-        ['U16N8BuildingModeAndTimeDelay' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16   'delayTime']
-            [simple   uint 8    'buildingMode']
-        ]
-        ['U8B8StatusBurnerController' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actualRelativePower']
-            [reserved uint 4    '0x00']
-            [simple   bit       'stage2Active']
-            [simple   bit       'stage1Active']
-            [simple   bit       'failure']
-            [simple   bit       'actualRelativePowerValid']
-        ]
-        ['U8B8LockingSignal' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'requestedPowerReduction']
-            [reserved uint 6    '0x00']
-            [simple   bit       'critical']
-            [simple   bit       'requestedPowerReductionValid']
-        ]
-        ['U8B8BoilerControllerDemandSignal' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'relativeDemand']
-            [reserved uint 6    '0x00']
-            [simple   bit       'controlsOperationStage2']
-            [simple   bit       'controlsOperationStage1']
-        ]
-        ['U8B8ActuatorPositionDemand' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actuatorPositionDemand']
-            [reserved uint 4    '0x00']
-            [simple   bit       'emergencyDemand']
-            [simple   bit       'shiftLoadPriority']
-            [simple   bit       'absoluteLoadPriority']
-            [simple   bit       'actuatorPositionDemandValid']
-        ]
-        ['U8B8ActuatorPositionStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'actualActuatorPosition']
-            [reserved uint 3    '0x00']
-            [simple   bit       'synchronizationMode']
-            [simple   bit       'valveKick']
-            [simple   bit       'callibrationMode']
-            [simple   bit       'positionManuallyOverridden']
-            [simple   bit       'failure']
-        ]
-        ['U8B8StatusLightingActuator' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8    'lightingLevel']
-            [simple   bit       'failure']
-            [simple   bit       'localOverride']
-            [simple   bit       'dimming']
-            [simple   bit       'staircaseLightingFunction']
-            [simple   bit       'nightMode']
-            [simple   bit       'forced']
-            [simple   bit       'locked']
-            [simple   bit       'lightingLevelValid']
-        ]
-        ['V16B8HeatProducerManagerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'tempFlowProdSegmH']
-            [reserved uint 3     '0x00']
-            [simple   bit        'temporarilyOff']
-            [simple   bit        'permanentlyOff']
-            [simple   bit        'switchedOffSummerMode']
-            [simple   bit        'failure']
-            [simple   bit        'tempFlowProdSegmHValid']
-        ]
-        ['V16B8RoomTemperatureDemand' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'roomTemperatureDemand']
-            [reserved uint 4     '0x00']
-            [simple   bit        'emergencyDemand']
-            [simple   bit        'shiftLoadPriority']
-            [simple   bit        'absoluteLoadPriority']
-            [simple   bit        'roomTemperatureDemandValid']
-        ]
-        ['V16B8ColdWaterProducerManagerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'flowTemperatureProdSegmC']
-            [reserved uint 4     '0x00']
-            [simple   bit        'temporarilyOff']
-            [simple   bit        'permanentlyOff']
-            [simple   bit        'failure']
-            [simple   bit        'flowTemperatureProdSegmCValid']
-        ]
-        ['V16B8WaterTemperatureControllerStatus' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'actualTemperature']
-            [reserved uint 5     '0x00']
-            [simple   bit        'controllerWorking']
-            [simple   bit        'failure']
-            [simple   bit        'actualTemperatureValid']
-        ]
-        ['V16B16' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'flowTemperatureDemand']
-            [reserved uint 4     '0x00']
-            [simple   bit        'demandFromDhwWhileLegionellaFunctionIsActive']
-            [simple   bit        'emergencyDemandForFrostProtection']
-            [simple   bit        'requestForWaterCirculationInPrimaryDistributionSegment']
-            [simple   bit        'demandFromAuxillaryHeatOrCoolConsumer']
-            [simple   bit        'demandFromVentilation']
-            [simple   bit        'demandForRoomHeatingOrCooling']
-            [simple   bit        'heatDemandFromDhw']
-            [simple   bit        'flowTemperatureDemandIsMin']
-            [simple   bit        'flowTemperatureDemandIsMax']
-            [simple   bit        'shiftLoadPriority']
-            [simple   bit        'absoluteLoadPriority']
-            [simple   bit        'flowTemperatureDemandValid']
-        ]
-        ['U8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'energyDemand']
-            [simple   uint 8  'actualControllerMode']
-        ]
-        ['V16V16V16RoomTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointStandby']
-            [simple   float 4.11 'temperatureSetpointEco']
-        ]
-        ['V16V16V16RoomTemperatureShift' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointShiftComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-        ]
-        ['V16V16V16V16RoomTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointStandby']
-            [simple   float 4.11 'temperatureSetpointEco']
-            [simple   float 4.11 'temperatureSetpointBProt']
-        ]
-        ['V16V16V16V16DhwtTemperature' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointLegioProtect']
-            [simple   float 4.11 'temperatureSetpointNormal']
-            [simple   float 4.11 'temperatureSetpointReduced']
-            [simple   float 4.11 'temperatureSetpointFrostProtect']
-        ]
-        ['V16V16V16V16RoomTemperatureShift' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointShiftComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-            [simple   float 4.11 'temperatureSetpointShiftBProt']
-        ]
-        ['V16U8B8Heat' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'flowTemperatureDemand']
-            [simple   uint 8  'relativePower']
-            [reserved uint 2  '0x00']
-            [simple   bit     'boilerEnabled']
-            [simple   bit     'stage2Forced']
-            [simple   bit     'stage2Enabled']
-            [simple   bit     'stage1Forced']
-            [simple   bit     'stage1Enabled']
-            [simple   bit     'flowTemperatureDemandValid']
-        ]
-        ['V16U8B8ChilledWater' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'chilledWaterFlowTemperatureDemand']
-            [simple   uint 8  'relativePower']
-            [reserved uint 5  '0x00']
-            [simple   bit     'chilledWaterPumpEnabled']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'chilledWaterFlowTemperatureDemandValid']
-        ]
-        ['V16U8B16Boiler' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'tempBoiler']
-            [simple   uint 8  'relativePower']
-            [reserved uint 4  '0x00']
-            [simple   bit     'chimneySweepFunctionActive']
-            [simple   bit     'reducedAvailability']
-            [simple   bit     'powerLimitBoilerReached']
-            [simple   bit     'powerLimitStage1Reached']
-            [simple   bit     'stage2Enabled']
-            [simple   bit     'stage1Enabled']
-            [simple   bit     'boilerTemporarilyNotProvidingHeat']
-            [simple   bit     'permanentlyOff']
-            [simple   bit     'boilerSwitchedOffWinterSummerMode']
-            [simple   bit     'boilerFailure']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'tempBoilerValid']
-        ]
-        ['V16U8B16Chiller' Struct
-            [reserved uint 8  '0x0']
-            [simple   int 16  'tempChiller']
-            [simple   uint 8  'relativePower']
-            [reserved uint 8  '0x00']
-            [simple   bit     'reducedAvailability']
-            [simple   bit     'powerLimitChillerReached']
-            [simple   bit     'powerLimitCurrentStageReached']
-            [simple   bit     'permanentlyOff']
-            [simple   bit     'chillerFailure']
-            [simple   bit     'chillerRunningStatus']
-            [simple   bit     'relativePowerValid']
-            [simple   bit     'tempChillerValid']
-        ]
-        ['U16U8N8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'nominalPower']
-            [simple   uint 8  'relativePowerLimit']
-            [simple   int  8  'burnerType']
-            [reserved uint 5  '0x00']
-            [simple   bit     'solidState']
-            [simple   bit     'gas']
-            [simple   bit     'oil']
-        ]
-        ['U5U5U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 5 'magicNumber']
-            [simple   uint 5 'versionNumber']
-            [simple   uint 6 'revisionNumber']
-        ]
-        ['V32Z8VolumeLiter' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'volumeLiter']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['V32Z8FlowRate' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'flowRate']
-            [simple   uint 8  'statusCommand']
-        ]
-        ['U8N8N8N8B8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8 'logNumber']
-            [simple   uint 8 'alarmPriority']
-            [simple   uint 8 'applicationArea']
-            [simple   uint 8 'errorClass']
-            [reserved uint 4 '0x00']
-            [simple   bit    'errorCode_Sup']
-            [simple   bit    'alarmText_Sup']
-            [simple   bit    'timeStamp_Sup']
-            [simple   bit    'ack_Sup']
-            [reserved uint 5 '0x00']
-            [simple   bit    'alarmUnAck']
-            [simple   bit    'locked']
-            [simple   bit    'inAlarm']
-        ]
-        ['U16V16' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'delayTime']
-            [simple   int  16 'temperature']
-        ]
-        ['N16U32' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'manufacturerCode']
-            [simple   uint 32 'incrementedNumber']
-        ]
-        ['F16F16F16' Struct
-            [reserved uint 8  '0x0']
-            [simple   float 4.11 'temperatureSetpointComfort']
-            [simple   float 4.11 'temperatureSetpointShiftStandby']
-            [simple   float 4.11 'temperatureSetpointShiftEco']
-        ]
-        ['V8N8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  8  'energyDemand']
-            [simple   uint 8  'hvacControllerMode']
-            [simple   uint 8  'hvacEmergencyMode']
-        ]
-        ['V16V16N8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  16 'tempSetpointCooling']
-            [simple   int  16 'tempSetpointHeating']
-            [simple   uint 8  'hvacControllerMode']
-            [simple   uint 8  'hvacEmergencyMode']
-        ]
-        ['U16U8Scaling' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'timePeriod']
-            [simple   uint 8  'percent']
-        ]
-        ['U16U8TariffNext' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'delayTime']
-            [simple   uint 8  'tariff']
-        ]
-        ['V32N8Z8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'countVal']
-            [simple   uint 8  'valInfField']
-            [simple   uint 8  'statusOrCommand']
-        ]
-        ['U16U32U8N8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 16 'manufacturerId']
-            [simple   uint 32 'identNumber']
-            [simple   uint 8  'version']
-            [simple   uint 8  'medium']
-        ]
-        ['A8A8A8A8' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'languageCode']
-            [simple   string 16 'ASCII' 'regionCode']
-        ]
-        ['U8U8U8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'red']
-            [simple   uint 8  'green']
-            [simple   uint 8  'blue']
-        ]
-        ['A8A8Language' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'languageCode']
-        ]
-        ['A8A8Region' Struct
-            [reserved uint 8  '0x0']
-            [simple   string 16 'ASCII' 'regionCode']
-        ]
-        ['V32U8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   int  32 'activeElectricalEnergy']
-            [simple   uint 8  'tariff']
-            [reserved uint 6  '0x00']
-            [simple   bit     'noTariff']
-            [simple   bit     'noActiveElectricalEnergy']
-        ]
-        ['B1N3N4' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit     'deactivationOfPriority']
-            [simple   uint 3  'priorityLevel']
-            [simple   uint 4  'modeLevel']
-        ]
-        ['B10U6' Struct
-            [reserved uint 5  '0x00']
-            [simple   bit     'convertorError']
-            [simple   bit     'ballastFailure']
-            [simple   bit     'lampError']
-            [simple   bit     'read']
-            [simple   bit     'groupAddress']
-            [simple   uint 6  'address']
-        ]
-        ['B2U6' Struct
-            [reserved uint 8  '0x0']
-            [simple   bit     'sceneActivationInactive']
-            [simple   bit     'storageFunctionDisable']
-            [simple   uint 6  'sceneNumber']
-        ]
-        ['U8r7B1' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'setValue']
-            [reserved uint 7  '0x00']
-            [simple   bit     'channelActivationActive']
-        ]
-        ['U8U8B8' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'heightPosition']
-            [simple   uint 8  'slatsPosition']
-            [reserved uint 6  '0x00']
-            [simple   bit     'validSlatsPos']
-            [simple   bit     'validHeightPos']
-        ]
-        ['U8U8B16' Struct
-            [reserved uint 8  '0x0']
-            [simple   uint 8  'heightPosition']
-            [simple   uint 8  'slatsPosition']
-            [simple   bit     'validSlatsPos']
-            [simple   bit     'validHeightPos']
-            [reserved uint 3  '0x00']
-            [simple   bit     'failure']
-            [simple   bit     'localOverride']
-            [simple   bit     'locked']
-            [simple   bit     'forced']
-            [simple   bit     'weatherAlarm']
-            [simple   bit     'targetSPosRestrict']
-            [simple   bit     'targetHPosRestrict']
-            [simple   bit     'driveState']
-            [simple   bit     'lowerPredefPos']
-            [simple   bit     'lowerEndPos']
-            [simple   bit     'upperEndPos']
-        ]
-    ]
-]
-
-[enum string 'KnxDatapointType' [uint 10 'mainNumber', uint 10 'subNumber', string 'formatName']
-    ['DPT_Switch'                               DPT_Switch                             ['1',   '1',    'B1']]
-    ['DPT_Bool'                                 DPT_Bool                               ['1',   '2',    'B1']]
-    ['DPT_Enable'                               DPT_Enable                             ['1',   '3',    'B1']]
-    ['DPT_Ramp'                                 DPT_Ramp                               ['1',   '4',    'B1']]
-    ['DPT_Alarm'                                DPT_Alarm                              ['1',   '5',    'B1']]
-    ['DPT_BinaryValue'                          DPT_BinaryValue                        ['1',   '6',    'B1']]
-    ['DPT_Step'                                 DPT_Step                               ['1',   '7',    'B1']]
-    ['DPT_UpDown'                               DPT_UpDown                             ['1',   '8',    'B1']]
-    ['DPT_OpenClose'                            DPT_OpenClose                          ['1',   '9',    'B1']]
-    ['DPT_Start'                                DPT_Start                              ['1',   '10',   'B1']]
-    ['DPT_State'                                DPT_State                              ['1',   '11',   'B1']]
-    ['DPT_Invert'                               DPT_Invert                             ['1',   '12',   'B1']]
-    ['DPT_DimSendStyle'                         DPT_DimSendStyle                       ['1',   '13',   'B1']]
-    ['DPT_InputSource'                          DPT_InputSource                        ['1',   '14',   'B1']]
-    ['DPT_Reset'                                DPT_Reset                              ['1',   '15',   'B1']]
-    ['DPT_Ack'                                  DPT_Ack                                ['1',   '16',   'B1']]
-    ['DPT_Trigger'                              DPT_Trigger                            ['1',   '17',   'B1']]
-    ['DPT_Occupancy'                            DPT_Occupancy                          ['1',   '18',   'B1']]
-    ['DPT_Window_Door'                          DPT_Window_Door                        ['1',   '19',   'B1']]
-    ['DPT_LogicalFunction'                      DPT_LogicalFunction                    ['1',   '21',   'B1']]
-    ['DPT_Scene_AB'                             DPT_Scene_AB                           ['1',   '22',   'B1']]
-    ['DPT_ShutterBlinds_Mode'                   DPT_ShutterBlinds_Mode                 ['1',   '23',   'B1']]
-    ['DPT_Heat_Cool'                            DPT_Heat_Cool                          ['1',   '100',  'B1']]
-    ['DPT_Switch_Control'                       DPT_Switch_Control                     ['2',   '1',    'B2']]
-    ['DPT_Bool_Control'                         DPT_Bool_Control                       ['2',   '2',    'B2']]
-    ['DPT_Enable_Control'                       DPT_Enable_Control                     ['2',   '3',    'B2']]
-    ['DPT_Ramp_Control'                         DPT_Ramp_Control                       ['2',   '4',    'B2']]
-    ['DPT_Alarm_Control'                        DPT_Alarm_Control                      ['2',   '5',    'B2']]
-    ['DPT_BinaryValue_Control'                  DPT_BinaryValue_Control                ['2',   '6',    'B2']]
-    ['DPT_Step_Control'                         DPT_Step_Control                       ['2',   '7',    'B2']]
-    ['DPT_Direction1_Control'                   DPT_Direction1_Control                 ['2',   '8',    'B2']]
-    ['DPT_Direction2_Control'                   DPT_Direction2_Control                 ['2',   '9',    'B2']]
-    ['DPT_Start_Control'                        DPT_Start_Control                      ['2',   '10',   'B2']]
-    ['DPT_State_Control'                        DPT_State_Control                      ['2',   '11',   'B2']]
-    ['DPT_Invert_Control'                       DPT_Invert_Control                     ['2',   '12',   'B2']]
-    ['DPT_Control_Dimming'                      DPT_Control_Dimming                    ['3',   '7',    'B1U3']]
-    ['DPT_Control_Blinds'                       DPT_Control_Blinds                     ['3',   '8',    'B1U3']]
-    ['DPT_Char_ASCII'                           DPT_Char_ASCII                         ['4',   '1',    'A8_ASCII']]
-    ['DPT_Char_8859_1'                          DPT_Char_8859_1                        ['4',   '2',    'A8_8859_1']]
-    ['DPT_Scaling'                              DPT_Scaling                            ['5',   '1',    'U8']]
-    ['DPT_Angle'                                DPT_Angle                              ['5',   '3',    'U8']]
-    ['DPT_Percent_U8'                           DPT_Percent_U8                         ['5',   '4',    'U8']]
-    ['DPT_DecimalFactor'                        DPT_DecimalFactor                      ['5',   '5',    'U8']]
-    ['DPT_Tariff'                               DPT_Tariff                             ['5',   '6',    'U8']]
-    ['DPT_Value_1_Ucount'                       DPT_Value_1_Ucount                     ['5',   '10',   'U8']]
-    ['DPT_Percent_V8'                           DPT_Percent_V8                         ['6',   '1',    'V8']]
-    ['DPT_Value_1_Count'                        DPT_Value_1_Count                      ['6',   '10',   'V8']]
-    ['DPT_Status_Mode3'                         DPT_Status_Mode3                       ['6',   '20',   'B5N3']]
-    ['DPT_Value_2_Ucount'                       DPT_Value_2_Ucount                     ['7',   '1',    'U16']]
-    ['DPT_TimePeriodMsec'                       DPT_TimePeriodMsec                     ['7',   '2',    'U16']]
-    ['DPT_TimePeriod10MSec'                     DPT_TimePeriod10MSec                   ['7',   '3',    'U16']]
-    ['DPT_TimePeriod100MSec'                    DPT_TimePeriod100MSec                  ['7',   '4',    'U16']]
-    ['DPT_TimePeriodSec'                        DPT_TimePeriodSec                      ['7',   '5',    'U16']]
-    ['DPT_TimePeriodMin'                        DPT_TimePeriodMin                      ['7',   '6',    'U16']]
-    ['DPT_TimePeriodHrs'                        DPT_TimePeriodHrs                      ['7',   '7',    'U16']]
-    ['DPT_PropDataType'                         DPT_PropDataType                       ['7',   '10',   'U16']]
-    ['DPT_Length_mm'                            DPT_Length_mm                          ['7',   '11',   'U16']]
-    ['DPT_UElCurrentmA'                         DPT_UElCurrentmA                       ['7',   '12',   'U16']]
-    ['DPT_Brightness'                           DPT_Brightness                         ['7',   '13',   'U16']]
-    ['DPT_Value_2_Count'                        DPT_Value_2_Count                      ['8',   '1',    'V16']]
-    ['DPT_DeltaTimeMsec'                        DPT_DeltaTimeMsec                      ['8',   '2',    'V16']]
-    ['DPT_DeltaTime10MSec'                      DPT_DeltaTime10MSec                    ['8',   '3',    'V16']]
-    ['DPT_DeltaTime100MSec'                     DPT_DeltaTime100MSec                   ['8',   '4',    'V16']]
-    ['DPT_DeltaTimeSec'                         DPT_DeltaTimeSec                       ['8',   '5',    'V16']]
-    ['DPT_DeltaTimeMin'                         DPT_DeltaTimeMin                       ['8',   '6',    'V16']]
-    ['DPT_DeltaTimeHrs'                         DPT_DeltaTimeHrs                       ['8',   '7',    'V16']]
-    ['DPT_Percent_V16'                          DPT_Percent_V16                        ['8',   '10',   'V16']]
-    ['DPT_Rotation_Angle'                       DPT_Rotation_Angle                     ['8',   '11',   'V16']]
-    ['DPT_Value_Temp'                           DPT_Value_Temp                         ['9',   '1',    'F16']]
-    ['DPT_Value_Tempd'                          DPT_Value_Tempd                        ['9',   '2',    'F16']]
-    ['DPT_Value_Tempa'                          DPT_Value_Tempa                        ['9',   '3',    'F16']]
-    ['DPT_Value_Lux'                            DPT_Value_Lux                          ['9',   '4',    'F16']]
-    ['DPT_Value_Wsp'                            DPT_Value_Wsp                          ['9',   '5',    'F16']]
-    ['DPT_Value_Pres'                           DPT_Value_Pres                         ['9',   '6',    'F16']]
-    ['DPT_Value_Humidity'                       DPT_Value_Humidity                     ['9',   '7',    'F16']]
-    ['DPT_Value_AirQuality'                     DPT_Value_AirQuality                   ['9',   '8',    'F16']]
-    ['DPT_Value_Time1'                          DPT_Value_Time1                        ['9',   '10',   'F16']]
-    ['DPT_Value_Time2'                          DPT_Value_Time2                        ['9',   '11',   'F16']]
-    ['DPT_Value_Volt'                           DPT_Value_Volt                         ['9',   '20',   'F16']]
-    ['DPT_Value_Curr'                           DPT_Value_Curr                         ['9',   '21',   'F16']]
-    ['DPT_PowerDensity'                         DPT_PowerDensity                       ['9',   '22',   'F16']]
-    ['DPT_KelvinPerPercent'                     DPT_KelvinPerPercent                   ['9',   '23',   'F16']]
-    ['DPT_Power'                                DPT_Power                              ['9',   '24',   'F16']]
-    ['DPT_Value_Volume_Flow'                    DPT_Value_Volume_Flow                  ['9',   '25',   'F16']]
-    ['DPT_Rain_Amount'                          DPT_Rain_Amount                        ['9',   '26',   'F16']]
-    ['DPT_Value_Temp_F'                         DPT_Value_Temp_F                       ['9',   '27',   'F16']]
-    ['DPT_Value_Wsp_kmh'                        DPT_Value_Wsp_kmh                      ['9',   '28',   'F16']]
-    ['DPT_TimeOfDay'                            DPT_TimeOfDay                          ['10',  '1',    'N3N5r2N6r2N6']]
-    ['DPT_Date'                                 DPT_Date                               ['11',  '1',    'r3N5r4N4r1U7']]
-    ['DPT_Value_4_Ucount'                       DPT_Value_4_Ucount                     ['12',  '1',    'U32']]
-    ['DPT_Value_4_Count'                        DPT_Value_4_Count                      ['13',  '1',    'V32']]
-    ['DPT_FlowRate_m3h'                         DPT_FlowRate_m3h                       ['13',  '2',    'V32']]
-    ['DPT_ActiveEnergy'                         DPT_ActiveEnergy                       ['13',  '10',   'V32']]
-    ['DPT_ApparantEnergy'                       DPT_ApparantEnergy                     ['13',  '11',   'V32']]
-    ['DPT_ReactiveEnergy'                       DPT_ReactiveEnergy                     ['13',  '12',   'V32']]
-    ['DPT_ActiveEnergy_kWh'                     DPT_ActiveEnergy_kWh                   ['13',  '13',   'V32']]
-    ['DPT_ApparantEnergy_kVAh'                  DPT_ApparantEnergy_kVAh                ['13',  '14',   'V32']]
-    ['DPT_ReactiveEnergy_kVARh'                 DPT_ReactiveEnergy_kVARh               ['13',  '15',   'V32']]
-    ['DPT_LongDeltaTimeSec'                     DPT_LongDeltaTimeSec                   ['13',  '100',  'V32']]
-    ['DPT_Value_Acceleration'                   DPT_Value_Acceleration                 ['14',  '0',    'F32']]
-    ['DPT_Value_Acceleration_Angular'           DPT_Value_Acceleration_Angular         ['14',  '1',    'F32']]
-    ['DPT_Value_Activation_Energy'              DPT_Value_Activation_Energy            ['14',  '2',    'F32']]
-    ['DPT_Value_Activity'                       DPT_Value_Activity                     ['14',  '3',    'F32']]
-    ['DPT_Value_Mol'                            DPT_Value_Mol                          ['14',  '4',    'F32']]
-    ['DPT_Value_Amplitude'                      DPT_Value_Amplitude                    ['14',  '5',    'F32']]
-    ['DPT_Value_AngleRad'                       DPT_Value_AngleRad                     ['14',  '6',    'F32']]
-    ['DPT_Value_AngleDeg'                       DPT_Value_AngleDeg                     ['14',  '7',    'F32']]
-    ['DPT_Value_Angular_Momentum'               DPT_Value_Angular_Momentum             ['14',  '8',    'F32']]
-    ['DPT_Value_Angular_Velocity'               DPT_Value_Angular_Velocity             ['14',  '9',    'F32']]
-    ['DPT_Value_Area'                           DPT_Value_Area                         ['14',  '10',   'F32']]
-    ['DPT_Value_Capacitance'                    DPT_Value_Capacitance                  ['14',  '11',   'F32']]
-    ['DPT_Value_Charge_DensitySurface'          DPT_Value_Charge_DensitySurface        ['14',  '12',   'F32']]
-    ['DPT_Value_Charge_DensityVolume'           DPT_Value_Charge_DensityVolume         ['14',  '13',   'F32']]
-    ['DPT_Value_Compressibility'                DPT_Value_Compressibility              ['14',  '14',   'F32']]
-    ['DPT_Value_Conductance'                    DPT_Value_Conductance                  ['14',  '15',   'F32']]
-    ['DPT_Value_Electrical_Conductivity'        DPT_Value_Electrical_Conductivity      ['14',  '16',   'F32']]
-    ['DPT_Value_Density'                        DPT_Value_Density                      ['14',  '17',   'F32']]
-    ['DPT_Value_Electric_Charge'                DPT_Value_Electric_Charge              ['14',  '18',   'F32']]
-    ['DPT_Value_Electric_Current'               DPT_Value_Electric_Current             ['14',  '19',   'F32']]
-    ['DPT_Value_Electric_CurrentDensity'        DPT_Value_Electric_CurrentDensity      ['14',  '20',   'F32']]
-    ['DPT_Value_Electric_DipoleMoment'          DPT_Value_Electric_DipoleMoment        ['14',  '21',   'F32']]
-    ['DPT_Value_Electric_Displacement'          DPT_Value_Electric_Displacement        ['14',  '22',   'F32']]
-    ['DPT_Value_Electric_FieldStrength'         DPT_Value_Electric_FieldStrength       ['14',  '23',   'F32']]
-    ['DPT_Value_Electric_Flux'                  DPT_Value_Electric_Flux                ['14',  '24',   'F32']]
-    ['DPT_Value_Electric_FluxDensity'           DPT_Value_Electric_FluxDensity         ['14',  '25',   'F32']]
-    ['DPT_Value_Electric_Polarization'          DPT_Value_Electric_Polarization        ['14',  '26',   'F32']]
-    ['DPT_Value_Electric_Potential'             DPT_Value_Electric_Potential           ['14',  '27',   'F32']]
-    ['DPT_Value_Electric_PotentialDifference'   DPT_Value_Electric_PotentialDifference ['14',  '28',   'F32']]
-    ['DPT_Value_ElectromagneticMoment'          DPT_Value_ElectromagneticMoment        ['14',  '29',   'F32']]
-    ['DPT_Value_Electromotive_Force'            DPT_Value_Electromotive_Force          ['14',  '30',   'F32']]
-    ['DPT_Value_Energy'                         DPT_Value_Energy                       ['14',  '31',   'F32']]
-    ['DPT_Value_Force'                          DPT_Value_Force                        ['14',  '32',   'F32']]
-    ['DPT_Value_Frequency'                      DPT_Value_Frequency                    ['14',  '33',   'F32']]
-    ['DPT_Value_Angular_Frequency'              DPT_Value_Angular_Frequency            ['14',  '34',   'F32']]
-    ['DPT_Value_Heat_Capacity'                  DPT_Value_Heat_Capacity                ['14',  '35',   'F32']]
-    ['DPT_Value_Heat_FlowRate'                  DPT_Value_Heat_FlowRate                ['14',  '36',   'F32']]
-    ['DPT_Value_Heat_Quantity'                  DPT_Value_Heat_Quantity                ['14',  '37',   'F32']]
-    ['DPT_Value_Impedance'                      DPT_Value_Impedance                    ['14',  '38',   'F32']]
-    ['DPT_Value_Length'                         DPT_Value_Length                       ['14',  '39',   'F32']]
-    ['DPT_Value_Light_Quantity'                 DPT_Value_Light_Quantity               ['14',  '40',   'F32']]
-    ['DPT_Value_Luminance'                      DPT_Value_Luminance                    ['14',  '41',   'F32']]
-    ['DPT_Value_Luminous_Flux'                  DPT_Value_Luminous_Flux                ['14',  '42',   'F32']]
-    ['DPT_Value_Luminous_Intensity'             DPT_Value_Luminous_Intensity           ['14',  '43',   'F32']]
-    ['DPT_Value_Magnetic_FieldStrength'         DPT_Value_Magnetic_FieldStrength       ['14',  '44',   'F32']]
-    ['DPT_Value_Magnetic_Flux'                  DPT_Value_Magnetic_Flux                ['14',  '45',   'F32']]
-    ['DPT_Value_Magnetic_FluxDensity'           DPT_Value_Magnetic_FluxDensity         ['14',  '46',   'F32']]
-    ['DPT_Value_Magnetic_Moment'                DPT_Value_Magnetic_Moment              ['14',  '47',   'F32']]
-    ['DPT_Value_Magnetic_Polarization'          DPT_Value_Magnetic_Polarization        ['14',  '48',   'F32']]
-    ['DPT_Value_Magnetization'                  DPT_Value_Magnetization                ['14',  '49',   'F32']]
-    ['DPT_Value_MagnetomotiveForce'             DPT_Value_MagnetomotiveForce           ['14',  '50',   'F32']]
-    ['DPT_Value_Mass'                           DPT_Value_Mass                         ['14',  '51',   'F32']]
-    ['DPT_Value_MassFlux'                       DPT_Value_MassFlux                     ['14',  '52',   'F32']]
-    ['DPT_Value_Momentum'                       DPT_Value_Momentum                     ['14',  '53',   'F32']]
-    ['DPT_Value_Phase_AngleRad'                 DPT_Value_Phase_AngleRad               ['14',  '54',   'F32']]
-    ['DPT_Value_Phase_AngleDeg'                 DPT_Value_Phase_AngleDeg               ['14',  '55',   'F32']]
-    ['DPT_Value_Power'                          DPT_Value_Power                        ['14',  '56',   'F32']]
-    ['DPT_Value_Power_Factor'                   DPT_Value_Power_Factor                 ['14',  '57',   'F32']]
-    ['DPT_Value_Pressure'                       DPT_Value_Pressure                     ['14',  '58',   'F32']]
-    ['DPT_Value_Reactance'                      DPT_Value_Reactance                    ['14',  '59',   'F32']]
-    ['DPT_Value_Resistance'                     DPT_Value_Resistance                   ['14',  '60',   'F32']]
-    ['DPT_Value_Resistivity'                    DPT_Value_Resistivity                  ['14',  '61',   'F32']]
-    ['DPT_Value_SelfInductance'                 DPT_Value_SelfInductance               ['14',  '62',   'F32']]
-    ['DPT_Value_SolidAngle'                     DPT_Value_SolidAngle                   ['14',  '63',   'F32']]
-    ['DPT_Value_Sound_Intensity'                DPT_Value_Sound_Intensity              ['14',  '64',   'F32']]
-    ['DPT_Value_Speed'                          DPT_Value_Speed                        ['14',  '65',   'F32']]
-    ['DPT_Value_Stress'                         DPT_Value_Stress                       ['14',  '66',   'F32']]
-    ['DPT_Value_Surface_Tension'                DPT_Value_Surface_Tension              ['14',  '67',   'F32']]
-    ['DPT_Value_Common_Temperature'             DPT_Value_Common_Temperature           ['14',  '68',   'F32']]
-    ['DPT_Value_Absolute_Temperature'           DPT_Value_Absolute_Temperature         ['14',  '69',   'F32']]
-    ['DPT_Value_TemperatureDifference'          DPT_Value_TemperatureDifference        ['14',  '70',   'F32']]
-    ['DPT_Value_Thermal_Capacity'               DPT_Value_Thermal_Capacity             ['14',  '71',   'F32']]
-    ['DPT_Value_Thermal_Conductivity'           DPT_Value_Thermal_Conductivity         ['14',  '72',   'F32']]
-    ['DPT_Value_ThermoelectricPower'            DPT_Value_ThermoelectricPower          ['14',  '73',   'F32']]
-    ['DPT_Value_Time'                           DPT_Value_Time                         ['14',  '74',   'F32']]
-    ['DPT_Value_Torque'                         DPT_Value_Torque                       ['14',  '75',   'F32']]
-    ['DPT_Value_Volume'                         DPT_Value_Volume                       ['14',  '76',   'F32']]
-    ['DPT_Value_Volume_Flux'                    DPT_Value_Volume_Flux                  ['14',  '77',   'F32']]
-    ['DPT_Value_Weight'                         DPT_Value_Weight                       ['14',  '78',   'F32']]
-    ['DPT_Value_Work'                           DPT_Value_Work                         ['14',  '79',   'F32']]
-    ['DPT_Access_Data'                          DPT_Access_Data                        ['15',  '0',    'U4U4U4U4U4U4B4N4']]
-    ['DPT_String_ASCII'                         DPT_String_ASCII                       ['16',  '0',    'A112_ASCII']]
-    ['DPT_String_8859_1'                        DPT_String_8859_1                      ['16',  '1',    'A112_8859_1']]
-    ['DPT_SceneNumber'                          DPT_SceneNumber                        ['17',  '1',    'r2U6']]
-    ['DPT_SceneControl'                         DPT_SceneControl                       ['18',  '1',    'B1r1U6']]
-    ['DPT_DateTime'                             DPT_DateTime                           ['19',  '1',    'U8r4U4r3U5U3U5r2U6r2U6B16']]
-    ['DPT_SCLOMode'                             DPT_SCLOMode                           ['20',  '1',    'N8']]
-    ['DPT_BuildingMode'                         DPT_BuildingMode                       ['20',  '2',    'N8']]
-    ['DPT_OccMode'                              DPT_OccMode                            ['20',  '3',    'N8']]
-    ['DPT_Priority'                             DPT_Priority                           ['20',  '4',    'N8']]
-    ['DPT_LightApplicationMode'                 DPT_LightApplicationMode               ['20',  '5',    'N8']]
-    ['DPT_ApplicationArea'                      DPT_ApplicationArea                    ['20',  '6',    'N8']]
-    ['DPT_AlarmClassType'                       DPT_AlarmClassType                     ['20',  '7',    'N8']]
-    ['DPT_PSUMode'                              DPT_PSUMode                            ['20',  '8',    'N8']]
-    ['DPT_ErrorClass_System'                    DPT_ErrorClass_System                  ['20',  '11',   'N8']]
-    ['DPT_ErrorClass_HVAC'                      DPT_ErrorClass_HVAC                    ['20',  '12',   'N8']]
-    ['DPT_Time_Delay'                           DPT_Time_Delay                         ['20',  '13',   'N8']]
-    ['DPT_Beaufort_Wind_Force_Scale'            DPT_Beaufort_Wind_Force_Scale          ['20',  '14',   'N8']]
-    ['DPT_SensorSelect'                         DPT_SensorSelect                       ['20',  '17',   'N8']]
-    ['DPT_ActuatorConnectType'                  DPT_ActuatorConnectType                ['20',  '20',   'N8']]
-    ['DPT_FuelType'                             DPT_FuelType                           ['20',  '100',  'N8']]
-    ['DPT_BurnerType'                           DPT_BurnerType                         ['20',  '101',  'N8']]
-    ['DPT_HVACMode'                             DPT_HVACMode                           ['20',  '102',  'N8']]
-    ['DPT_DHWMode'                              DPT_DHWMode                            ['20',  '103',  'N8']]
-    ['DPT_LoadPriority'                         DPT_LoadPriority                       ['20',  '104',  'N8']]
-    ['DPT_HVACContrMode'                        DPT_HVACContrMode                      ['20',  '105',  'N8']]
-    ['DPT_HVACEmergMode'                        DPT_HVACEmergMode                      ['20',  '106',  'N8']]
-    ['DPT_ChangeoverMode'                       DPT_ChangeoverMode                     ['20',  '107',  'N8']]
-    ['DPT_ValveMode'                            DPT_ValveMode                          ['20',  '108',  'N8']]
-    ['DPT_DamperMode'                           DPT_DamperMode                         ['20',  '109',  'N8']]
-    ['DPT_HeaterMode'                           DPT_HeaterMode                         ['20',  '110',  'N8']]
-    ['DPT_FanMode'                              DPT_FanMode                            ['20',  '111',  'N8']]
-    ['DPT_MasterSlaveMode'                      DPT_MasterSlaveMode                    ['20',  '112',  'N8']]
-    ['DPT_StatusRoomSetp'                       DPT_StatusRoomSetp                     ['20',  '113',  'N8']]
-    ['DPT_ADAType'                              DPT_ADAType                            ['20',  '120',  'N8']]
-    ['DPT_BackupMode'                           DPT_BackupMode                         ['20',  '121',  'N8']]
-    ['DPT_StartSynchronization'                 DPT_StartSynchronization               ['20',  '122',  'N8']]
-    ['DPT_Behaviour_Lock_Unlock'                DPT_Behaviour_Lock_Unlock              ['20',  '600',  'N8']]
-    ['DPT_Behaviour_Bus_Power_Up_Down'          DPT_Behaviour_Bus_Power_Up_Down        ['20',  '601',  'N8']]
-    ['DPT_DALI_Fade_Time'                       DPT_DALI_Fade_Time                     ['20',  '602',  'N8']]
-    ['DPT_BlinkingMode'                         DPT_BlinkingMode                       ['20',  '603',  'N8']]
-    ['DPT_LightControlMode'                     DPT_LightControlMode                   ['20',  '604',  'N8']]
-    ['DPT_SwitchPBModel'                        DPT_SwitchPBModel                      ['20',  '605',  'N8']]
-    ['DPT_PBAction'                             DPT_PBAction                           ['20',  '606',  'N8']]
-    ['DPT_DimmPBModel'                          DPT_DimmPBModel                        ['20',  '607',  'N8']]
-    ['DPT_SwitchOnMode'                         DPT_SwitchOnMode                       ['20',  '608',  'N8']]
-    ['DPT_LoadTypeSet'                          DPT_LoadTypeSet                        ['20',  '609',  'N8']]
-    ['DPT_LoadTypeDetected'                     DPT_LoadTypeDetected                   ['20',  '610',  'N8']]
-    ['DPT_SABExceptBehaviour'                   DPT_SABExceptBehaviour                 ['20',  '801',  'N8']]
-    ['DPT_SABBehaviour_Lock_Unlock'             DPT_SABBehaviour_Lock_Unlock           ['20',  '802',  'N8']]
-    ['DPT_SSSBMode'                             DPT_SSSBMode                           ['20',  '803',  'N8']]
-    ['DPT_BlindsControlMode'                    DPT_BlindsControlMode                  ['20',  '804',  'N8']]
-    ['DPT_CommMode'                             DPT_CommMode                           ['20',  '1000', 'N8']]
-    ['DPT_AddInfoTypes'                         DPT_AddInfoTypes                       ['20',  '1001', 'N8']]
-    ['DPT_RF_ModeSelect'                        DPT_RF_ModeSelect                      ['20',  '1002', 'N8']]
-    ['DPT_RF_FilterSelect'                      DPT_RF_FilterSelect                    ['20',  '1003', 'N8']]
-    ['DPT_StatusGen'                            DPT_StatusGen                          ['21',  '1',    'B8']]
-    ['DPT_Device_Control'                       DPT_Device_Control                     ['21',  '2',    'B8']]
-    ['DPT_ForceSign'                            DPT_ForceSign                          ['21',  '100',  'B8']]
-    ['DPT_ForceSignCool'                        DPT_ForceSignCool                      ['21',  '101',  'B8']]
-    ['DPT_StatusRHC'                            DPT_StatusRHC                          ['21',  '102',  'B8']]
-    ['DPT_StatusSDHWC'                          DPT_StatusSDHWC                        ['21',  '103',  'B8']]
-    ['DPT_FuelTypeSet'                          DPT_FuelTypeSet                        ['21',  '104',  'B8']]
-    ['DPT_StatusRCC'                            DPT_StatusRCC                          ['21',  '105',  'B8']]
-    ['DPT_StatusAHU'                            DPT_StatusAHU                          ['21',  '106',  'B8']]
-    ['DPT_LightActuatorErrorInfo'               DPT_LightActuatorErrorInfo             ['21',  '601',  'B8']]
-    ['DPT_RF_ModeInfo'                          DPT_RF_ModeInfo                        ['21',  '1000', 'B8']]
-    ['DPT_RF_FilterInfo'                        DPT_RF_FilterInfo                      ['21',  '1001', 'B8']]
-    ['DPT_Channel_Activation_8'                 DPT_Channel_Activation_8               ['21',  '1010', 'B8']]
-    ['DPT_StatusDHWC'                           DPT_StatusDHWC                         ['22',  '100',  'B16']]
-    ['DPT_StatusRHCC'                           DPT_StatusRHCC                         ['22',  '101',  'B16']]
-    ['DPT_Media'                                DPT_Media                              ['22',  '1000', 'B16']]
-    ['DPT_Channel_Activation_16'                DPT_Channel_Activation_16              ['22',  '1010', 'B16']]
-    ['DPT_OnOff_Action'                         DPT_OnOff_Action                       ['23',  '1',    'N2']]
-    ['DPT_Alarm_Reaction'                       DPT_Alarm_Reaction                     ['23',  '2',    'N2']]
-    ['DPT_UpDown_Action'                        DPT_UpDown_Action                      ['23',  '3',    'N2']]
-    ['DPT_HVAC_PB_Action'                       DPT_HVAC_PB_Action                     ['23',  '102',  'N2']]
-    ['DPT_VarString_8859_1'                     DPT_VarString_8859_1                   ['24',  '1',    'An_8859_1']]
-    ['DPT_DoubleNibble'                         DPT_DoubleNibble                       ['25',  '1000', 'U4U4']]
-    ['DPT_SceneInfo'                            DPT_SceneInfo                          ['26',  '1',    'r1b1U6']]
-    ['DPT_CombinedInfoOnOff'                    DPT_CombinedInfoOnOff                  ['27',  '1',    'B32']]
-    ['DPT_UTF_8'                                DPT_UTF_8                              ['28',  '1',    'An_UTF_8']]
-    ['DPT_ActiveEnergy_V64'                     DPT_ActiveEnergy_V64                   ['29',  '10',   'V64']]
-    ['DPT_ApparantEnergy_V64'                   DPT_ApparantEnergy_V64                 ['29',  '11',   'V64']]
-    ['DPT_ReactiveEnergy_V64'                   DPT_ReactiveEnergy_V64                 ['29',  '12',   'V64']]
-    ['DPT_Channel_Activation_24'                DPT_Channel_Activation_24              ['30',  '1010', 'B24']]
-    ['DPT_PB_Action_HVAC_Extended'              DPT_PB_Action_HVAC_Extended            ['31',  '101',  'N3']]
-    ['DPT_Heat_Cool_Z'                          DPT_Heat_Cool_Z                        ['200', '100',  'B1Z8HeatingOrCoolingZ']]
-    ['DPT_BinaryValue_Z'                        DPT_BinaryValue_Z                      ['200', '101',  'B1Z8BinaryValueZ']]
-    ['DPT_HVACMode_Z'                           DPT_HVACMode_Z                         ['201', '100',  'N8Z8HvacOperatingMode']]
-    ['DPT_DHWMode_Z'                            DPT_DHWMode_Z                          ['201', '102',  'N8Z8DhwMode']]
-    ['DPT_HVACContrMode_Z'                      DPT_HVACContrMode_Z                    ['201', '104',  'N8Z8HvacControllingMode']]
-    ['DPT_EnablH_Cstage_Z_DPT_EnablH_CStage'    DPT_EnablH_Cstage_Z_DPT_EnablH_CStage  ['201', '105',  'N8Z8EnableHeatingOrCoolingStage']]
-    ['DPT_BuildingMode_Z'                       DPT_BuildingMode_Z                     ['201', '107',  'N8Z8BuildingMode']]
-    ['DPT_OccMode_Z'                            DPT_OccMode_Z                          ['201', '108',  'N8Z8OccupancyMode']]
-    ['DPT_HVACEmergMode_Z'                      DPT_HVACEmergMode_Z                    ['201', '109',  'N8Z8EmergencyMode']]
-    ['DPT_RelValue_Z'                           DPT_RelValue_Z                         ['202', '1',    'U8Z8Rel']]
-    ['DPT_UCountValue8_Z'                       DPT_UCountValue8_Z                     ['202', '2',    'U8Z8Counter']]
-    ['DPT_TimePeriodMsec_Z'                     DPT_TimePeriodMsec_Z                   ['203', '2',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriod10Msec_Z'                   DPT_TimePeriod10Msec_Z                 ['203', '3',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriod100Msec_Z'                  DPT_TimePeriod100Msec_Z                ['203', '4',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodSec_Z'                      DPT_TimePeriodSec_Z                    ['203', '5',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodMin_Z'                      DPT_TimePeriodMin_Z                    ['203', '6',    'U16Z8TimePeriod']]
-    ['DPT_TimePeriodHrs_Z'                      DPT_TimePeriodHrs_Z                    ['203', '7',    'U16Z8TimePeriod']]
-    ['DPT_UFlowRateLiter_h_Z'                   DPT_UFlowRateLiter_h_Z                 ['203', '11',   'U16Z8FlowRate']]
-    ['DPT_UCountValue16_Z'                      DPT_UCountValue16_Z                    ['203', '12',   'U16Z8Counter']]
-    ['DPT_UElCurrentyA_Z'                       DPT_UElCurrentyA_Z                     ['203', '13',   'U16Z8ElectricCurrent']]
-    ['DPT_PowerKW_Z'                            DPT_PowerKW_Z                          ['203', '14',   'U16Z8Power']]
-    ['DPT_AtmPressureAbs_Z'                     DPT_AtmPressureAbs_Z                   ['203', '15',   'U16Z8AtmPressure']]
-    ['DPT_PercentU16_Z'                         DPT_PercentU16_Z                       ['203', '17',   'U16Z8PercentValue']]
-    ['DPT_HVACAirQual_Z'                        DPT_HVACAirQual_Z                      ['203', '100',  'U16Z8HvacAirQuality']]
-    ['DPT_WindSpeed_Z_DPT_WindSpeed'            DPT_WindSpeed_Z_DPT_WindSpeed          ['203', '101',  'U16Z8WindSpeed']]
-    ['DPT_SunIntensity_Z'                       DPT_SunIntensity_Z                     ['203', '102',  'U16Z8SunIntensity']]
-    ['DPT_HVACAirFlowAbs_Z'                     DPT_HVACAirFlowAbs_Z                   ['203', '104',  'U16Z8HvacAirFlow']]
-    ['DPT_RelSignedValue_Z'                     DPT_RelSignedValue_Z                   ['204', '1',    'V8Z8RelSignedValue']]
-    ['DPT_DeltaTimeMsec_Z'                      DPT_DeltaTimeMsec_Z                    ['205', '2',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTime10Msec_Z'                    DPT_DeltaTime10Msec_Z                  ['205', '3',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTime100Msec_Z'                   DPT_DeltaTime100Msec_Z                 ['205', '4',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeSec_Z'                       DPT_DeltaTimeSec_Z                     ['205', '5',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeMin_Z'                       DPT_DeltaTimeMin_Z                     ['205', '6',    'V16Z8DeltaTime']]
-    ['DPT_DeltaTimeHrs_Z'                       DPT_DeltaTimeHrs_Z                     ['205', '7',    'V16Z8DeltaTime']]
-    ['DPT_Percent_V16_Z'                        DPT_Percent_V16_Z                      ['205', '17',   'V16Z8RelSignedValue']]
-    ['DPT_TempHVACAbs_Z'                        DPT_TempHVACAbs_Z                      ['205', '100',  'V16Z8RelSignedValue']]
-    ['DPT_TempHVACRel_Z'                        DPT_TempHVACRel_Z                      ['205', '101',  'V16Z8RelSignedValue']]
-    ['DPT_HVACAirFlowRel_Z'                     DPT_HVACAirFlowRel_Z                   ['205', '102',  'V16Z8RelSignedValue']]
-    ['DPT_HVACModeNext'                         DPT_HVACModeNext                       ['206', '100',  'U16N8HvacModeAndTimeDelay']]
-    ['DPT_DHWModeNext'                          DPT_DHWModeNext                        ['206', '102',  'U16N8DhwModeAndTimeDelay']]
-    ['DPT_OccModeNext'                          DPT_OccModeNext                        ['206', '104',  'U16N8OccupancyModeAndTimeDelay']]
-    ['DPT_BuildingModeNext'                     DPT_BuildingModeNext                   ['206', '105',  'U16N8BuildingModeAndTimeDelay']]
-    ['DPT_StatusBUC'                            DPT_StatusBUC                          ['207', '100',  'U8B8StatusBurnerController']]
-    ['DPT_LockSign'                             DPT_LockSign                           ['207', '101',  'U8B8LockingSignal']]
-    ['DPT_ValueDemBOC'                          DPT_ValueDemBOC                        ['207', '102',  'U8B8BoilerControllerDemandSignal']]
-    ['DPT_ActPosDemAbs'                         DPT_ActPosDemAbs                       ['207', '104',  'U8B8ActuatorPositionDemand']]
-    ['DPT_StatusAct'                            DPT_StatusAct                          ['207', '105',  'U8B8ActuatorPositionStatus']]
-    ['DPT_StatusLightingActuator'               DPT_StatusLightingActuator             ['207', '600',  'U8B8StatusLightingActuator']]
-    ['DPT_StatusHPM'                            DPT_StatusHPM                          ['209', '100',  'V16B8HeatProducerManagerStatus']]
-    ['DPT_TempRoomDemAbs'                       DPT_TempRoomDemAbs                     ['209', '101',  'V16B8RoomTemperatureDemand']]
-    ['DPT_StatusCPM'                            DPT_StatusCPM                          ['209', '102',  'V16B8ColdWaterProducerManagerStatus']]
-    ['DPT_StatusWTC'                            DPT_StatusWTC                          ['209', '103',  'V16B8WaterTemperatureControllerStatus']]
-    ['DPT_TempFlowWaterDemAbs'                  DPT_TempFlowWaterDemAbs                ['210', '100',  'V16B16']]
-    ['DPT_EnergyDemWater'                       DPT_EnergyDemWater                     ['211', '100',  'U8N8']]
-    ['DPT_TempRoomSetpSetShift3'                DPT_TempRoomSetpSetShift3              ['212', '100',  'V16V16V16RoomTemperatureShift']]
-    ['DPT_TempRoomSetpSet3'                     DPT_TempRoomSetpSet3                   ['212', '101',  'V16V16V16RoomTemperature']]
-    ['DPT_TempRoomSetpSet4'                     DPT_TempRoomSetpSet4                   ['213', '100',  'V16V16V16V16RoomTemperature']]
-    ['DPT_TempDHWSetpSet4'                      DPT_TempDHWSetpSet4                    ['213', '101',  'V16V16V16V16DhwtTemperature']]
-    ['DPT_TempRoomSetpSetShift4'                DPT_TempRoomSetpSetShift4              ['213', '102',  'V16V16V16V16RoomTemperatureShift']]
-    ['DPT_PowerFlowWaterDemHPM'                 DPT_PowerFlowWaterDemHPM               ['214', '100',  'V16U8B8Heat']]
-    ['DPT_PowerFlowWaterDemCPM'                 DPT_PowerFlowWaterDemCPM               ['214', '101',  'V16U8B8ChilledWater']]
-    ['DPT_StatusBOC'                            DPT_StatusBOC                          ['215', '100',  'V16U8B16Boiler']]
-    ['DPT_StatusCC'                             DPT_StatusCC                           ['215', '101',  'V16U8B16Chiller']]
-    ['DPT_SpecHeatProd'                         DPT_SpecHeatProd                       ['216', '100',  'U16U8N8B8']]
-    ['DPT_Version'                              DPT_Version                            ['217', '1',    'U5U5U6']]
-    ['DPT_VolumeLiter_Z'                        DPT_VolumeLiter_Z                      ['218', '1',    'V32Z8VolumeLiter']]
-    ['DPT_FlowRate_m3h_Z'                       DPT_FlowRate_m3h_Z                     ['218', '2',    'V32Z8FlowRate']]
-    ['DPT_AlarmInfo'                            DPT_AlarmInfo                          ['219', '1',    'U8N8N8N8B8B8']]
-    ['DPT_TempHVACAbsNext'                      DPT_TempHVACAbsNext                    ['220', '100',  'U16V16']]
-    ['DPT_SerNum'                               DPT_SerNum                             ['221', '1',    'N16U32']]
-    ['DPT_TempRoomSetpSetF163'                  DPT_TempRoomSetpSetF163                ['222', '100',  'F16F16F16']]
-    ['DPT_TempRoomSetpSetShiftF163'             DPT_TempRoomSetpSetShiftF163           ['222', '101',  'F16F16F16']]
-    ['DPT_EnergyDemAir'                         DPT_EnergyDemAir                       ['223', '100',  'V8N8N8']]
-    ['DPT_TempSupply_AirSetpSet'                DPT_TempSupply_AirSetpSet              ['224', '100',  'V16V16N8N8']]
-    ['DPT_ScalingSpeed'                         DPT_ScalingSpeed                       ['225', '1',    'U16U8Scaling']]
-    ['DPT_Scaling_Step_Time'                    DPT_Scaling_Step_Time                  ['225', '2',    'U16U8Scaling']]
-    ['DPT_TariffNext'                           DPT_TariffNext                         ['225', '3',    'U16U8TariffNext']]
-    ['DPT_MeteringValue'                        DPT_MeteringValue                      ['229', '1',    'V32N8Z8']]
-    ['DPT_MBus_Address'                         DPT_MBus_Address                       ['230', '1000', 'U16U32U8N8']]
-    ['DPT_Locale_ASCII'                         DPT_Locale_ASCII                       ['231', '1',    'A8A8A8A8']]
-    ['DPT_Colour_RGB'                           DPT_Colour_RGB                         ['232', '600',  'U8U8U8']]
-    ['DPT_LanguageCodeAlpha2_ASCII'             DPT_LanguageCodeAlpha2_ASCII           ['234', '1',    'A8A8Language']]
-    ['DPT_RegionCodeAlpha2_ASCII'               DPT_RegionCodeAlpha2_ASCII             ['234', '2',    'A8A8Region']]
-    ['DPT_Tariff_ActiveEnergy'                  DPT_Tariff_ActiveEnergy                ['235', '1',    'V32U8B8']]
-    ['DPT_Prioritised_Mode_Control'             DPT_Prioritised_Mode_Control           ['236', '1',    'B1N3N4']]
-    ['DPT_DALI_Control_Gear_Diagnostic'         DPT_DALI_Control_Gear_Diagnostic       ['237', '600',  'B10U6']]
-    ['DPT_SceneConfig'                          DPT_SceneConfig                        ['238', '1',    'B2U6']]
-    ['DPT_DALI_Diagnostics'                     DPT_DALI_Diagnostics                   ['238', '600',  'B2U6']]
-    ['DPT_FlaggedScaling'                       DPT_FlaggedScaling                     ['239', '1',    'U8r7B1']]
-    ['DPT_CombinedPosition'                     DPT_CombinedPosition                   ['240', '800',  'U8U8B8']]
-    ['DPT_StatusSAB'                            DPT_StatusSAB                          ['241', '800',  'U8U8B16']]
-]
-
 [enum uint 2 'CEMIPriority'
     ['0x0' SYSTEM]
     ['0x1' NORMAL]
@@ -1523,13 +601,6 @@
     ['0x3' LOW]
 ]
 
-[enum uint 2 'ControlType'
-    ['0x0' CONNECT]
-    ['0x1' DISCONNECT]
-    ['0x2' ACK]
-    ['0x3' NACK]
-]
-
 [enum uint 8 'Status'
     ['0x00' NO_ERROR]
     ['0x01' PROTOCOL_TYPE_NOT_SUPPORTED]
@@ -1575,84 +646,6 @@
     ['0x20' MEDIUM_KNX_IP]
 ]
 
-// 03_03_07 Application Layer v01.06.02 AS Page 9ff
-[enum uint 4 'APCI'
-    ['0x0' GROUP_VALUE_READ_PDU]
-    ['0x1' GROUP_VALUE_RESPONSE_PDU]
-    ['0x2' GROUP_VALUE_WRITE_PDU]
-    ['0x3' INDIVIDUAL_ADDRESS_WRITE_PDU]
-    ['0x4' INDIVIDUAL_ADDRESS_READ_PDU]
-    ['0x5' INDIVIDUAL_ADDRESS_RESPONSE_PDU]
-    ['0x6' ADC_READ_PDU]
-    // In case of this type the following 6 bits contain more detailed information
-    ['0x7' ADC_RESPONSE_PDU]
-    ['0x8' MEMORY_READ_PDU]
-    ['0x9' MEMORY_RESPONSE_PDU]
-    ['0xA' MEMORY_WRITE_PDU]
-    // In case of this type the following 6 bits contain more detailed information
-    ['0xB' USER_MESSAGE_PDU]
-    ['0xC' DEVICE_DESCRIPTOR_READ_PDU]
-    ['0xD' DEVICE_DESCRIPTOR_RESPONSE_PDU]
-    ['0xE' RESTART_PDU]
-    ['0xF' OTHER_PDU]
-]
-
-// 03_03_07 Application Layer v01.06.02 AS Page 9ff
-[enum uint 6 'ExtendedAPCI'
-    ['0x00' OPEN_ROUTING_TABLE_REQUEST_PDU]
-    ['0x01' READ_ROUTING_TABLE_REQUEST_PDU]
-    ['0x02' READ_ROUTING_TABLE_RESPONSE_PDU]
-    ['0x03' WRITE_ROUTING_TABLE_REQUEST_PDU]
-    ['0x08' READ_ROUTER_MEMORY_REQUEST_PDU]
-    ['0x09' READ_ROUTER_MEMORY_RESPONSE_PDU]
-    ['0x0A' WRITE_ROUTER_MEMORY_REQUEST_PDU]
-    ['0x0D' READ_ROUTER_STATUS_REQUEST_PDU]
-    ['0x0E' READ_ROUTER_STATUS_RESPONSE_PDU]
-    ['0x0F' WRITE_ROUTER_STATUS_REQUEST_PDU]
-
-    ['0x10' MEMORY_BIT_WRITE_PDU]
-
-    ['0x11' AUTHORIZE_REQUEST_PDU]
-    ['0x12' AUTHORIZE_RESPONSE_PDU]
-    ['0x13' KEY_WRITE_PDU]
-    ['0x14' KEY_RESPONSE_PDU]
-
-    ['0x15' PROPERTY_VALUE_READ_PDU]
-    ['0x16' PROPERTY_VALUE_RESPONSE_PDU]
-    ['0x17' PROPERTY_VALUE_WRITE_PDU]
-    ['0x18' PROPERTY_DESCRIPTION_READ_PDU]
-    ['0x19' PROPERTY_DESCRIPTION_RESPONSE_PDU]
-
-    ['0x1A' NETWORK_PARAMETER_READ_PDU]
-    ['0x1B' NETWORK_PARAMETER_RESPONSE_PDU]
-
-    ['0x1C' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_READ_PDU]
-    ['0x1D' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_RESPONSE_PDU]
-    ['0x1E' INDIVIDUAL_ADDRESS_SERIAL_NUMBER_WRITE_PDU]
-
-    ['0x20' DOMAIN_ADDRESS_WRITE]
-    ['0x21' DOMAIN_ADDRESS_READ]
-    ['0x22' DOMAIN_ADDRESS_RESPONSE]
-    ['0x23' DOMAIN_ADDRESS_SELECTIVE_READ]
-
-    ['0x24' NETWORK_PARAMETER_WRITE]
-
-    ['0x25' LINK_READ]
-    ['0x26' LINK_RESPONSE]
-    ['0x27' LINK_WRITE]
-
-    ['0x28' GROUP_PROPERTY_VALUE_READ]
-    ['0x29' GROUP_PROPERTY_VALUE_RESPONSE]
-    ['0x2A' GROUP_PROPERTY_VALUE_WRITE]
-    ['0x2B' GROUP_PROPERTY_VALUE_INFO_REPORT]
-
-    ['0x2C' DOMAIN_ADDRESS_SERIAL_NUMBER_READ]
-    ['0x2D' DOMAIN_ADDRESS_SERIAL_NUMBER_RESPONSE]
-    ['0x2E' DOMAIN_ADDRESS_SERIAL_NUMBER_WRITE]
-
-    ['0x30' FILE_STREAM_INFO_REPORT]
-]
-
 [enum uint 8 'SupportedPhysicalMedia' [string 'description',                                                    bit 'knxSupport']
     ['0x00' OTHER                     ['used_for_undefined_physical_medium',                                    'true']]
     ['0x01' OIL_METER                 ['measures_volume_of_oil',                                                'true']]
@@ -1679,7 +672,7 @@
 
 // The definition of the constants for medium type in the device descriptor differs from that of the other parts
 // 03_05_01 Resources v01.09.03 AS.pdf Page 22
-[enum uint 4 DeviceDescriptorMediumType
+[enum uint 4 'DeviceDescriptorMediumType'
     ['0x0' TP1      ]
     ['0x1' PL110    ]
     ['0x2' RF       ]
@@ -1689,20 +682,20 @@
 ]
 
 // 03_05_01 Resources v01.09.03 AS.pdf Page 22
-[enum uint 8 FirmwareType
-    ['0xAF' NONE                      ]
-    ['0x00' BCU_1                     ]
-    ['0x01' BCU_1_SYSTEM_1            ]
-    ['0x02' BCU_2_SYSTEM_2            ]
-    ['0x70' BIM_M112                  ]
-    ['0x7B' SYSTEM_B                  ]
-    ['0x81' IR_DECODER                ]
-    ['0x90' MEDIA_COUPLER_PL_TP       ]
-    ['0x91' COUPLER                   ]
-    ['0x20' RF_BI_DIRECTIONAL_DEVICES ]
-    ['0x21' RF_UNI_DIRECTIONAL_DEVICES]
-    ['0x' SYSTEM_300                  ]
-    ['0x' SYSTEM_7                    ]
+[enum uint 4 'FirmwareType' [uint 8 'code']
+    ['0x1' NONE                      ['0xAF']]
+    ['0x2' BCU_1                     ['0x00']]
+    ['0x3' BCU_1_SYSTEM_1            ['0x01']]
+    ['0x4' BCU_2_SYSTEM_2            ['0x02']]
+    ['0x5' BIM_M112                  ['0x70']]
+    ['0x6' SYSTEM_B                  ['0x7B']]
+    ['0x7' IR_DECODER                ['0x81']]
+    ['0x8' MEDIA_COUPLER_PL_TP       ['0x90']]
+    ['0x9' COUPLER                   ['0x91']]
+    ['0xA' RF_BI_DIRECTIONAL_DEVICES ['0x01']]
+    ['0xB' RF_UNI_DIRECTIONAL_DEVICES['0x11']]
+    ['0xC' SYSTEM_300                ['0x30']]
+    ['0xD' SYSTEM_7                  ['0x70']]
 ]
 
 // Helper enum that binds the combinations of medium type and firmware
@@ -1735,12 +728,9 @@
     ['0x1900' PL110_MEDIA_COUPLER_PL_TP ['DeviceDescriptorMediumType.PL110',        'FirmwareType.MEDIA_COUPLER_PL_TP'       ]]
     ['0x2010' RF_BI_DIRECTIONAL_DEVICES ['DeviceDescriptorMediumType.RF',           'FirmwareType.RF_BI_DIRECTIONAL_DEVICES' ]]
     ['0x2110' RF_UNI_DIRECTIONAL_DEVICES['DeviceDescriptorMediumType.RF',           'FirmwareType.RF_UNI_DIRECTIONAL_DEVICES']]
-    // This should actually be BCU_1 and not BCU_1_SYSTEM_1, unfortunately the code seems to be different in this case
-    ['0x3012' TP0_BCU_1                 ['DeviceDescriptorMediumType.TP0',          'FirmwareType.BCU_1_SYSTEM_1'            ]]
-    // This should actually be BCU_1 and not BCU_1_SYSTEM_1, unfortunately the code seems to be different in this case
-    ['0x4012' PL132_BCU_1               ['DeviceDescriptorMediumType.PL132',        'FirmwareType.BCU_1_SYSTEM_1'            ]]
-    // This should actually be SYSTEM7 and not BIM_M112, unfortunately the code seems to be the same in this case
-    ['0x5705' KNX_IP_SYSTEM7            ['DeviceDescriptorMediumType.KNX_IP',       'FirmwareType.BIM_M112'                  ]]
+    ['0x3012' TP0_BCU_1                 ['DeviceDescriptorMediumType.TP0',          'FirmwareType.BCU_1'                     ]]
+    ['0x4012' PL132_BCU_1               ['DeviceDescriptorMediumType.PL132',        'FirmwareType.BCU_1'                     ]]
+    ['0x5705' KNX_IP_SYSTEM7            ['DeviceDescriptorMediumType.KNX_IP',       'FirmwareType.SYSTEM_7'                  ]]
 ]
 
 // 03_05_01 Resources v01.09.03 AS.pdf Page 23ff
diff --git a/protocols/knxnetip/src/main/xslt/knx-types.xsl b/protocols/knxnetip/src/main/xslt/knx-types.xsl
index 65a43f4..f3877a5 100644
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@ -47,13 +47,13 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-[enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', string 'name']
+[enum uint 16 'KnxDatapointMainType' [uint 16 'number', uint 8 'sizeInBits', string 'name']
     ['0' DPT_UNKNOWN ['0', '0', '"Unknown Datapoint Type"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType"/>
 ]
 
-[enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 'datapointType', string 'name']
-    ['0' DPST_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint Subtype"']]
+[enum uint 32 'KnxDatapointType' [uint 16 'number', KnxDatapointType 'datapointType', string 'name']
+    ['0' DPT_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint Subtype"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype"/>
 ]
 
@@ -77,6 +77,16 @@
     ['0' M_UNKNOWN ['0', '"Unknown Manufacturer"']]
     <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
 ]
+
+[dataIo 'KnxDatapoint' [KnxDatapointType 'datapointType']
+    [typeSwitch 'datapointType'
+    <xsl:for-each select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype">
+        <xsl:call-template name="generateDataIoEntry">
+            <xsl:with-param name="datapointSubtype" select="."/>
+        </xsl:call-template>
+    </xsl:for-each>
+    ]
+]
     </xsl:template>
 
     <xsl:template match="knx:DatapointType">
@@ -90,8 +100,8 @@
     <xsl:template match="knx:DatapointSubtype">
         <xsl:variable name="datapointSubtypeId">
             <xsl:choose>
-                <xsl:when test="fn:starts-with(@Name, 'DPT')">DPST_<xsl:value-of select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name, '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 'DPT_')"/></xsl:when>
-                <xsl:otherwise>DPST_<xsl:for-each select="tokenize(@Name, ' ')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 2))"/><xsl:if test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+                <xsl:when test="fn:starts-with(@Name, 'DPT')">DPT_<xsl:value-of select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name, '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 'DPT_')"/></xsl:when>
+                <xsl:otherwise>DPT_<xsl:for-each select="tokenize(@Name, ' ')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 2))"/><xsl:if test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
             </xsl:choose>
         </xsl:variable>
         <xsl:variable name="datapointTypeId">
@@ -185,4 +195,245 @@
         <xsl:value-of select="fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(normalize-space($cleanedText2),'&#xa0;', '_'), '&amp;', 'AND'), '-', '_'), ' ', '_'), '\.', '_'), ',', '_'), '\+', 'Plus'), '/', '_'), 'Ä', 'AE'), 'Ö', 'OE'), 'Ü', 'UE'), 'ß', 'SS'), ':', '_')"/>
     </xsl:template>
 
+    <xsl:template name="generateDataIoEntry">
+        <xsl:param name="datapointSubtype"/>
+        <xsl:variable name="datapointSubtypeId">
+            <xsl:choose>
+                <xsl:when test="fn:starts-with(@Name, 'DPT')">DPT_<xsl:value-of select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name, '\[', '_'), '\]', ''), '&#x00B3;', '_3'), '&#xB5;', 'y'), '/', ''), '-', '_'), 'DPT_')"/></xsl:when>
+                <xsl:otherwise>DPT_<xsl:for-each select="tokenize(@Name, ' ')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 2))"/><xsl:if test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+        <xsl:variable name="datapointValueType">
+            <xsl:choose>
+                <xsl:when test="count($datapointSubtype/knx:Format/knx:Bit|$datapointSubtype/knx:Format/knx:String|$datapointSubtype/knx:Format/knx:UnsignedInteger|$datapointSubtype/knx:Format/knx:SignedInteger|$datapointSubtype/knx:Format/knx:Float|$datapointSubtype/knx:Format/knx:Enumeration|$datapointSubtype/knx:Format/knx:RefType) &gt; 1">Struct</xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:Bit">BOOL</xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:String">STRING</xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:UnsignedInteger">
+                    <xsl:choose>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 8">USINT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 16">UINT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 32">UDINT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt;= 64">ULINT</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:SignedInteger">
+                    <xsl:choose>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 8">SINT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 16">INT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 32">DINT</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt;= 64">LINT</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:Float">
+                    <xsl:choose>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 16">REAL</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 32">REAL</xsl:when>
+                        <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) &lt;= 64">LREAL</xsl:when>
+                    </xsl:choose>
+                </xsl:when>
+                <xsl:when test="$datapointSubtype/knx:Format/knx:Enumeration">STRING</xsl:when>
+                <xsl:otherwise>Hurz:<xsl:value-of select="name($datapointSubtype/*)"/></xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+        ['KnxDatapointType.<xsl:value-of select="$datapointSubtypeId"/>' <xsl:value-of select="$datapointValueType"/>
+        <xsl:choose>
+            <xsl:when test="count($datapointSubtype/knx:Format/knx:Bit|$datapointSubtype/knx:Format/knx:String|$datapointSubtype/knx:Format/knx:UnsignedInteger|$datapointSubtype/knx:Format/knx:SignedInteger|$datapointSubtype/knx:Format/knx:Float|$datapointSubtype/knx:Format/knx:Enumeration|$datapointSubtype/knx:Format/knx:RefType) &gt; 1">
+                <xsl:variable name="resolvedFields">
+                    <xsl:call-template name="resolveTypeReferences">
+                        <xsl:with-param name="fields" select="$datapointSubtype/knx:Format/*"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:variable name="size">
+                    <xsl:call-template name="fieldsSize">
+                        <xsl:with-param name="fields" select="$resolvedFields/*"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="(($size mod 8) != 0) and (($size mod 8) &lt;= 6)">
+            [reserved uint <xsl:value-of select="8 - ($size mod 8)"/> '0x00']
+                    </xsl:when>
+                    <xsl:when test="(($size mod 8) = 0) and (name($resolvedFields/*[1]) = 'Reserved') and (number($resolvedFields/*[1]/@Width) > 2)"></xsl:when>
+                    <xsl:otherwise>
+            [reserved uint 8 '0x00']
+                    </xsl:otherwise>
+                </xsl:choose>
+                <xsl:for-each select="$resolvedFields/*">
+                    <xsl:variable name="fieldType">
+                        <xsl:choose>
+                            <xsl:when test="name() = 'Reserved'">reserved</xsl:when>
+                            <xsl:otherwise>simple</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:variable>
+                    <xsl:variable name="fieldName">
+                        <xsl:choose>
+                            <xsl:when test="name() = 'Reserved'">0x00</xsl:when>
+                            <xsl:when test="@Name">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" select="@Name"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <xsl:when test="@Set">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" select="@Set"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <xsl:when test="@Unit">
+                                <xsl:call-template name="getFieldName">
+                                    <xsl:with-param name="fieldName" select="@Unit"/>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <!-- Special case for one enum -->
+                            <xsl:when test="@Id = 'DPST-6-20_F-6'">Mode</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value1</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value2</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value3</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value4</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value5</xsl:when>
+                            <xsl:when test="@Id = 'DPST-15-0_F-1'">Value6</xsl:when>
+                            <xsl:otherwise>Hurz</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:variable>
+                    <xsl:variable name="dataType">
+                        <xsl:call-template name="getMspecType">
+                            <xsl:with-param name="field" select="."/>
+                        </xsl:call-template>
+                    </xsl:variable>                    
+            [<xsl:value-of select="$fieldType"/><xsl:text disable-output-escaping="yes"> </xsl:text><xsl:value-of select="$dataType"/> '<xsl:value-of select="$fieldName"/>']
+                </xsl:for-each>
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:Bit">
+            [reserved uint 7 '0x00']
+            [simple   bit    'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:String">
+                <xsl:variable name="encoding">
+                    <xsl:choose>
+                        <xsl:when test="$datapointSubtype/knx:Format/knx:String/@Encoding = 'us-ascii'">ASCII</xsl:when>
+                        <xsl:when test="$datapointSubtype/knx:Format/knx:String/@Encoding = 'iso-8859-1'">ISO-8859-1</xsl:when>
+                    </xsl:choose>
+                </xsl:variable>
+            [reserved uint 8   '0x0']
+            [simple   string <xsl:value-of select="$datapointSubtype/knx:Format/knx:String/@Width"/> '<xsl:value-of select="$encoding"/>' 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:UnsignedInteger">
+                <xsl:choose>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &gt; 6">
+            [reserved uint 8 '0x00']
+                    </xsl:when>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width) &lt; 6">
+            [reserved uint <xsl:value-of select="6 - fn:number($datapointSubtype/knx:Format/knx:UnsignedInteger/@Width)"/> '0x00']
+                    </xsl:when>
+                </xsl:choose>
+            [simple   uint <xsl:value-of select="$datapointSubtype/knx:Format/knx:UnsignedInteger/@Width"/> 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:SignedInteger">
+                <xsl:choose>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &gt; 6">
+            [reserved uint 8 '0x00']
+                    </xsl:when>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width) &lt; 6">
+            [reserved uint <xsl:value-of select="6 - fn:number($datapointSubtype/knx:Format/knx:SignedInteger/@Width)"/> '0x00']
+                    </xsl:when>
+                </xsl:choose>
+            [simple   int <xsl:value-of select="$datapointSubtype/knx:Format/knx:SignedInteger/@Width"/> 'value']
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:Float">
+            [reserved uint 8 '0x00']
+                <xsl:choose>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 16">
+            [simple   float 4.11 'value']
+                    </xsl:when>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 32">
+            [simple   float 8.23 'value']
+                    </xsl:when>
+                    <xsl:when test="fn:number($datapointSubtype/knx:Format/knx:Float/@Width) = 64">
+            [simple   float 11.52 'value']
+                    </xsl:when>
+                </xsl:choose>
+            </xsl:when>
+            <xsl:when test="$datapointSubtype/knx:Format/knx:Enumeration"></xsl:when>
+        </xsl:choose>
+        ]
+    </xsl:template>
+
+    <xsl:template name="resolveTypeReferences">
+        <xsl:param name="fields"/>
+        <xsl:for-each select="$fields">
+            <xsl:choose>
+                <xsl:when test="name(.) = 'RefType'">
+                    <xsl:variable name="curNode" select="."/>
+                    <xsl:copy-of select="//*[@Id = $curNode/@RefId]"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:copy-of select="."/>
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="getMspecType">
+        <xsl:param name="field"/>
+        <xsl:choose>
+            <xsl:when test="name($field) = 'Bit'">bit</xsl:when>
+            <xsl:when test="name($field) = 'String'">
+                <xsl:variable name="encoding">
+                    <xsl:choose>
+                        <xsl:when test="$field/@Encoding = 'us-ascii'">ASCII</xsl:when>
+                        <xsl:when test="$field/@Encoding = 'iso-8859-1'">ISO-8859-1</xsl:when>
+                    </xsl:choose>
+                </xsl:variable>
+                string <xsl:value-of select="$field/@Width"/> '<xsl:value-of select="$encoding"/>'</xsl:when>
+            <xsl:when test="name($field) = 'UnsignedInteger'">uint <xsl:value-of select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'SignedInteger'">int <xsl:value-of select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'Float'">
+                <xsl:choose>
+                    <xsl:when test="$field/@Width = 16">float 4.11</xsl:when>
+                    <xsl:when test="$field/@Width = 32">float 8.23</xsl:when>
+                    <xsl:when test="$field/@Width = 64">float 11.52</xsl:when>
+                    <xsl:otherwise>hurz</xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+            <xsl:when test="name($field) = 'Enumeration'">uint <xsl:value-of select="$field/@Width"/></xsl:when>
+            <xsl:when test="name($field) = 'Reserved'">uint <xsl:value-of select="$field/@Width"/></xsl:when>
+        </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template name="getFieldName">
+        <xsl:param name="fieldName"/>
+        <xsl:variable name="cleanedName" select="fn:replace(fn:replace($fieldName, '%', 'Percent'), '[^a-zA-Z0-9]', ' ')"/>
+        <xsl:for-each select="fn:tokenize($cleanedName, ' ')">
+            <xsl:choose>
+                <xsl:when test="fn:string-length(.) = 1"><xsl:value-of select="fn:upper-case(.)"/></xsl:when>
+                <xsl:otherwise>
+                    <xsl:variable name="firstLetter" select="fn:upper-case(fn:substring(., 1, 1))"/>
+                    <xsl:variable name="rest" select="fn:lower-case(fn:substring(., 2))"/>
+                    <xsl:value-of select="fn:concat($firstLetter, $rest)"/>                   
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="fieldsSize">
+        <xsl:param name="fields"/>
+        <xsl:choose>
+            <xsl:when test="count($fields) &gt; 1">
+                <xsl:variable name="restSize">
+                    <xsl:call-template name="fieldsSize">
+                        <xsl:with-param name="fields" select="$fields[position() &gt; 1]"/>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="name($fields[1]) = 'Bit'"><xsl:value-of select="1 + $restSize"/></xsl:when>
+                    <xsl:otherwise><xsl:value-of select="number($fields[1]/@Width) + $restSize"/></xsl:otherwise>
+                </xsl:choose>               
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="name($fields[1]) = 'Bit'"><xsl:value-of select="1"/></xsl:when>
+                    <xsl:otherwise><xsl:value-of select="number($fields[1]/@Width)"/></xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
 </xsl:stylesheet>
\ No newline at end of file