You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/01/17 18:43:17 UTC

[plc4x] 02/02: feat(bacnet): added BACnetConstructedDataEventTimestamps

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

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

commit b45dbcd591e15297edbd1386a51e98a5d5c3106c
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Jan 17 19:12:26 2022 +0100

    feat(bacnet): added BACnetConstructedDataEventTimestamps
---
 .../plc4go/bacnetip/readwrite/model/APDUUnknown.go |   30 +-
 ...ACnetConfirmedServiceRequestConfirmedUnknown.go |   26 +-
 .../readwrite/model/BACnetConstructedData.go       |   29 +-
 .../model/BACnetConstructedDataCommand.go          |   10 +-
 .../model/BACnetConstructedDataEventTimestamps.go  |  233 ++++
 .../model/BACnetConstructedDataLifeSafetyZone.go   |   10 +-
 .../model/BACnetConstructedDataUnspecified.go      |   12 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |    2 +
 ...tUnconfirmedServiceRequestUnconfirmedUnknown.go |  157 +++
 .../readwrite/model/NLMRejectRouterToNetwork.go    |   21 +-
 .../model/NLMRejectRouterToNetworkRejectReason.go  |  152 +++
 .../knxnetip/readwrite/model/KnxManufacturer.go    |   26 +-
 .../plc4x/java/bacnetip/RandomPackagesTest.java    |  146 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    | 1425 ++++++++++----------
 14 files changed, 1498 insertions(+), 781 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
index 7c5a92c..98d6458 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
@@ -21,6 +21,7 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +29,7 @@ import (
 // The data-structure of this message
 type APDUUnknown struct {
 	*APDU
+	UnknownBytes []byte
 }
 
 // The corresponding interface
@@ -46,9 +48,10 @@ func (m *APDUUnknown) ApduType() uint8 {
 
 func (m *APDUUnknown) InitializeParent(parent *APDU) {}
 
-func NewAPDUUnknown() *APDU {
+func NewAPDUUnknown(unknownBytes []byte) *APDU {
 	child := &APDUUnknown{
-		APDU: NewAPDU(),
+		UnknownBytes: unknownBytes,
+		APDU:         NewAPDU(),
 	}
 	child.Child = child
 	return child.APDU
@@ -84,6 +87,11 @@ func (m *APDUUnknown) LengthInBits() uint16 {
 func (m *APDUUnknown) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
+	// Array field
+	if len(m.UnknownBytes) > 0 {
+		lengthInBits += 8 * uint16(len(m.UnknownBytes))
+	}
+
 	return lengthInBits
 }
 
@@ -95,6 +103,12 @@ func APDUUnknownParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, er
 	if pullErr := readBuffer.PullContext("APDUUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
+	// Byte Array field (unknownBytes)
+	numberOfBytesunknownBytes := int(utils.InlineIf(bool(bool((apduLength) > (0))), func() interface{} { return uint16(uint16(uint16(apduLength) - uint16(uint16(1)))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))
+	unknownBytes, _readArrayErr := readBuffer.ReadByteArray("unknownBytes", numberOfBytesunknownBytes)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'unknownBytes' field")
+	}
 
 	if closeErr := readBuffer.CloseContext("APDUUnknown"); closeErr != nil {
 		return nil, closeErr
@@ -102,7 +116,8 @@ func APDUUnknownParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, er
 
 	// Create a partially initialized instance
 	_child := &APDUUnknown{
-		APDU: &APDU{},
+		UnknownBytes: unknownBytes,
+		APDU:         &APDU{},
 	}
 	_child.APDU.Child = _child
 	return _child.APDU, nil
@@ -114,6 +129,15 @@ func (m *APDUUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
 			return pushErr
 		}
 
+		// Array Field (unknownBytes)
+		if m.UnknownBytes != nil {
+			// Byte Array field (unknownBytes)
+			_writeArrayErr := writeBuffer.WriteByteArray("unknownBytes", m.UnknownBytes)
+			if _writeArrayErr != nil {
+				return errors.Wrap(_writeArrayErr, "Error serializing 'unknownBytes' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("APDUUnknown"); popErr != nil {
 			return popErr
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
index c4b8678..ad31c06 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
@@ -21,6 +21,7 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +29,7 @@ import (
 // The data-structure of this message
 type BACnetConfirmedServiceRequestConfirmedUnknown struct {
 	*BACnetConfirmedServiceRequest
+	UnknownBytes []byte
 }
 
 // The corresponding interface
@@ -47,8 +49,9 @@ func (m *BACnetConfirmedServiceRequestConfirmedUnknown) ServiceChoice() uint8 {
 func (m *BACnetConfirmedServiceRequestConfirmedUnknown) InitializeParent(parent *BACnetConfirmedServiceRequest) {
 }
 
-func NewBACnetConfirmedServiceRequestConfirmedUnknown() *BACnetConfirmedServiceRequest {
+func NewBACnetConfirmedServiceRequestConfirmedUnknown(unknownBytes []byte) *BACnetConfirmedServiceRequest {
 	child := &BACnetConfirmedServiceRequestConfirmedUnknown{
+		UnknownBytes:                  unknownBytes,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(),
 	}
 	child.Child = child
@@ -85,6 +88,11 @@ func (m *BACnetConfirmedServiceRequestConfirmedUnknown) LengthInBits() uint16 {
 func (m *BACnetConfirmedServiceRequestConfirmedUnknown) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
+	// Array field
+	if len(m.UnknownBytes) > 0 {
+		lengthInBits += 8 * uint16(len(m.UnknownBytes))
+	}
+
 	return lengthInBits
 }
 
@@ -96,6 +104,12 @@ func BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer utils.ReadBuf
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
+	// Byte Array field (unknownBytes)
+	numberOfBytesunknownBytes := int(utils.InlineIf(bool(bool((len) > (0))), func() interface{} { return uint16(uint16(uint16(len) - uint16(uint16(1)))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))
+	unknownBytes, _readArrayErr := readBuffer.ReadByteArray("unknownBytes", numberOfBytesunknownBytes)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'unknownBytes' field")
+	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedUnknown"); closeErr != nil {
 		return nil, closeErr
@@ -103,6 +117,7 @@ func BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer utils.ReadBuf
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestConfirmedUnknown{
+		UnknownBytes:                  unknownBytes,
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
@@ -115,6 +130,15 @@ func (m *BACnetConfirmedServiceRequestConfirmedUnknown) Serialize(writeBuffer ut
 			return pushErr
 		}
 
+		// Array Field (unknownBytes)
+		if m.UnknownBytes != nil {
+			// Byte Array field (unknownBytes)
+			_writeArrayErr := writeBuffer.WriteByteArray("unknownBytes", m.UnknownBytes)
+			if _writeArrayErr != nil {
+				return errors.Wrap(_writeArrayErr, "Error serializing 'unknownBytes' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestConfirmedUnknown"); popErr != nil {
 			return popErr
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
index 857d0a7..affc968 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -28,15 +28,16 @@ import (
 
 // The data-structure of this message
 type BACnetConstructedData struct {
-	OpeningTag *BACnetOpeningTag
-	ClosingTag *BACnetClosingTag
-	Child      IBACnetConstructedDataChild
+	OpeningTag             *BACnetOpeningTag
+	ClosingTag             *BACnetClosingTag
+	PropertyIdentifierEnum BACnetPropertyIdentifier
+	Child                  IBACnetConstructedDataChild
 }
 
 // The corresponding interface
 type IBACnetConstructedData interface {
 	ObjectType() BACnetObjectType
-	PropertyIdentifierArgument() IBACnetContextTagPropertyIdentifier
+	PropertyIdentifierEnum() BACnetPropertyIdentifier
 	LengthInBytes() uint16
 	LengthInBits() uint16
 	Serialize(writeBuffer utils.WriteBuffer) error
@@ -49,13 +50,13 @@ type IBACnetConstructedDataParent interface {
 
 type IBACnetConstructedDataChild interface {
 	Serialize(writeBuffer utils.WriteBuffer) error
-	InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag)
+	InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier)
 	GetTypeName() string
 	IBACnetConstructedData
 }
 
-func NewBACnetConstructedData(openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConstructedData {
-	return &BACnetConstructedData{OpeningTag: openingTag, ClosingTag: closingTag}
+func NewBACnetConstructedData(openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) *BACnetConstructedData {
+	return &BACnetConstructedData{OpeningTag: openingTag, ClosingTag: closingTag, PropertyIdentifierEnum: propertyIdentifierEnum}
 }
 
 func CastBACnetConstructedData(structType interface{}) *BACnetConstructedData {
@@ -89,6 +90,8 @@ func (m *BACnetConstructedData) ParentLengthInBits() uint16 {
 	// Simple field (openingTag)
 	lengthInBits += m.OpeningTag.LengthInBits()
 
+	// A virtual field doesn't have any in- or output.
+
 	// Simple field (closingTag)
 	lengthInBits += m.ClosingTag.LengthInBits()
 
@@ -117,6 +120,10 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 		return nil, closeErr
 	}
 
+	// Virtual field
+	_propertyIdentifierEnum := propertyIdentifierArgument.PropertyIdentifier
+	propertyIdentifierEnum := BACnetPropertyIdentifier(_propertyIdentifierEnum)
+
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
 	var _parent *BACnetConstructedData
 	var typeSwitchError error
@@ -125,6 +132,8 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 		_parent, typeSwitchError = BACnetConstructedDataCommandParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	case objectType == BACnetObjectType_LIFE_SAFETY_ZONE: // BACnetConstructedDataLifeSafetyZone
 		_parent, typeSwitchError = BACnetConstructedDataLifeSafetyZoneParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
+	case true && propertyIdentifierEnum == BACnetPropertyIdentifier_EVENT_TIME_STAMPS: // BACnetConstructedDataEventTimestamps
+		_parent, typeSwitchError = BACnetConstructedDataEventTimestampsParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	case true: // BACnetConstructedDataUnspecified
 		_parent, typeSwitchError = BACnetConstructedDataUnspecifiedParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	default:
@@ -153,7 +162,7 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, closingTag)
+	_parent.Child.InitializeParent(_parent, openingTag, closingTag, propertyIdentifierEnum)
 	return _parent, nil
 }
 
@@ -177,6 +186,10 @@ func (m *BACnetConstructedData) SerializeParent(writeBuffer utils.WriteBuffer, c
 	if _openingTagErr != nil {
 		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
 	}
+	// Virtual field
+	if _propertyIdentifierEnumErr := writeBuffer.WriteVirtual("propertyIdentifierEnum", m.PropertyIdentifierEnum); _propertyIdentifierEnumErr != nil {
+		return errors.Wrap(_propertyIdentifierEnumErr, "Error serializing 'propertyIdentifierEnum' field")
+	}
 
 	// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
 	if _typeSwitchErr := serializeChildFunction(); _typeSwitchErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
index ab1528f..3a30b7d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
@@ -48,21 +48,21 @@ func (m *BACnetConstructedDataCommand) ObjectType() BACnetObjectType {
 	return BACnetObjectType_COMMAND
 }
 
-func (m *BACnetConstructedDataCommand) PropertyIdentifierArgument() IBACnetContextTagPropertyIdentifier {
-	return nil
+func (m *BACnetConstructedDataCommand) PropertyIdentifierEnum() BACnetPropertyIdentifier {
+	return 0
 }
 
-func (m *BACnetConstructedDataCommand) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) {
+func (m *BACnetConstructedDataCommand) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) {
 	m.OpeningTag = openingTag
 	m.ClosingTag = closingTag
 }
 
-func NewBACnetConstructedDataCommand(innerOpeningTag *BACnetOpeningTag, action []*BACnetActionCommand, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConstructedData {
+func NewBACnetConstructedDataCommand(innerOpeningTag *BACnetOpeningTag, action []*BACnetActionCommand, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) *BACnetConstructedData {
 	child := &BACnetConstructedDataCommand{
 		InnerOpeningTag:       innerOpeningTag,
 		Action:                action,
 		InnerClosingTag:       innerClosingTag,
-		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag),
+		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, propertyIdentifierEnum),
 	}
 	child.Child = child
 	return child.BACnetConstructedData
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
new file mode 100644
index 0000000..7a5977b
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// The data-structure of this message
+type BACnetConstructedDataEventTimestamps struct {
+	*BACnetConstructedData
+	ToOffnormal *BACnetContextTagTime
+	ToFault     *BACnetContextTagUnsignedInteger
+	ToNormal    *BACnetDateTime
+}
+
+// The corresponding interface
+type IBACnetConstructedDataEventTimestamps interface {
+	LengthInBytes() uint16
+	LengthInBits() uint16
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *BACnetConstructedDataEventTimestamps) ObjectType() BACnetObjectType {
+	return 0
+}
+
+func (m *BACnetConstructedDataEventTimestamps) PropertyIdentifierEnum() BACnetPropertyIdentifier {
+	return BACnetPropertyIdentifier_EVENT_TIME_STAMPS
+}
+
+func (m *BACnetConstructedDataEventTimestamps) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) {
+	m.OpeningTag = openingTag
+	m.ClosingTag = closingTag
+}
+
+func NewBACnetConstructedDataEventTimestamps(toOffnormal *BACnetContextTagTime, toFault *BACnetContextTagUnsignedInteger, toNormal *BACnetDateTime, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) *BACnetConstructedData {
+	child := &BACnetConstructedDataEventTimestamps{
+		ToOffnormal:           toOffnormal,
+		ToFault:               toFault,
+		ToNormal:              toNormal,
+		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, propertyIdentifierEnum),
+	}
+	child.Child = child
+	return child.BACnetConstructedData
+}
+
+func CastBACnetConstructedDataEventTimestamps(structType interface{}) *BACnetConstructedDataEventTimestamps {
+	castFunc := func(typ interface{}) *BACnetConstructedDataEventTimestamps {
+		if casted, ok := typ.(BACnetConstructedDataEventTimestamps); ok {
+			return &casted
+		}
+		if casted, ok := typ.(*BACnetConstructedDataEventTimestamps); ok {
+			return casted
+		}
+		if casted, ok := typ.(BACnetConstructedData); ok {
+			return CastBACnetConstructedDataEventTimestamps(casted.Child)
+		}
+		if casted, ok := typ.(*BACnetConstructedData); ok {
+			return CastBACnetConstructedDataEventTimestamps(casted.Child)
+		}
+		return nil
+	}
+	return castFunc(structType)
+}
+
+func (m *BACnetConstructedDataEventTimestamps) GetTypeName() string {
+	return "BACnetConstructedDataEventTimestamps"
+}
+
+func (m *BACnetConstructedDataEventTimestamps) LengthInBits() uint16 {
+	return m.LengthInBitsConditional(false)
+}
+
+func (m *BACnetConstructedDataEventTimestamps) LengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.ParentLengthInBits())
+
+	// Simple field (toOffnormal)
+	lengthInBits += m.ToOffnormal.LengthInBits()
+
+	// Simple field (toFault)
+	lengthInBits += m.ToFault.LengthInBits()
+
+	// Simple field (toNormal)
+	lengthInBits += m.ToNormal.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConstructedDataEventTimestamps) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConstructedDataEventTimestampsParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedData, error) {
+	if pullErr := readBuffer.PullContext("BACnetConstructedDataEventTimestamps"); pullErr != nil {
+		return nil, pullErr
+	}
+
+	// Simple Field (toOffnormal)
+	if pullErr := readBuffer.PullContext("toOffnormal"); pullErr != nil {
+		return nil, pullErr
+	}
+	_toOffnormal, _toOffnormalErr := BACnetContextTagParse(readBuffer, uint8(0), BACnetDataType_TIME)
+	if _toOffnormalErr != nil {
+		return nil, errors.Wrap(_toOffnormalErr, "Error parsing 'toOffnormal' field")
+	}
+	toOffnormal := CastBACnetContextTagTime(_toOffnormal)
+	if closeErr := readBuffer.CloseContext("toOffnormal"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (toFault)
+	if pullErr := readBuffer.PullContext("toFault"); pullErr != nil {
+		return nil, pullErr
+	}
+	_toFault, _toFaultErr := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_UNSIGNED_INTEGER)
+	if _toFaultErr != nil {
+		return nil, errors.Wrap(_toFaultErr, "Error parsing 'toFault' field")
+	}
+	toFault := CastBACnetContextTagUnsignedInteger(_toFault)
+	if closeErr := readBuffer.CloseContext("toFault"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (toNormal)
+	if pullErr := readBuffer.PullContext("toNormal"); pullErr != nil {
+		return nil, pullErr
+	}
+	_toNormal, _toNormalErr := BACnetDateTimeParse(readBuffer, uint8(2))
+	if _toNormalErr != nil {
+		return nil, errors.Wrap(_toNormalErr, "Error parsing 'toNormal' field")
+	}
+	toNormal := CastBACnetDateTime(_toNormal)
+	if closeErr := readBuffer.CloseContext("toNormal"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConstructedDataEventTimestamps"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create a partially initialized instance
+	_child := &BACnetConstructedDataEventTimestamps{
+		ToOffnormal:           CastBACnetContextTagTime(toOffnormal),
+		ToFault:               CastBACnetContextTagUnsignedInteger(toFault),
+		ToNormal:              CastBACnetDateTime(toNormal),
+		BACnetConstructedData: &BACnetConstructedData{},
+	}
+	_child.BACnetConstructedData.Child = _child
+	return _child.BACnetConstructedData, nil
+}
+
+func (m *BACnetConstructedDataEventTimestamps) Serialize(writeBuffer utils.WriteBuffer) error {
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("BACnetConstructedDataEventTimestamps"); pushErr != nil {
+			return pushErr
+		}
+
+		// Simple Field (toOffnormal)
+		if pushErr := writeBuffer.PushContext("toOffnormal"); pushErr != nil {
+			return pushErr
+		}
+		_toOffnormalErr := m.ToOffnormal.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("toOffnormal"); popErr != nil {
+			return popErr
+		}
+		if _toOffnormalErr != nil {
+			return errors.Wrap(_toOffnormalErr, "Error serializing 'toOffnormal' field")
+		}
+
+		// Simple Field (toFault)
+		if pushErr := writeBuffer.PushContext("toFault"); pushErr != nil {
+			return pushErr
+		}
+		_toFaultErr := m.ToFault.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("toFault"); popErr != nil {
+			return popErr
+		}
+		if _toFaultErr != nil {
+			return errors.Wrap(_toFaultErr, "Error serializing 'toFault' field")
+		}
+
+		// Simple Field (toNormal)
+		if pushErr := writeBuffer.PushContext("toNormal"); pushErr != nil {
+			return pushErr
+		}
+		_toNormalErr := m.ToNormal.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("toNormal"); popErr != nil {
+			return popErr
+		}
+		if _toNormalErr != nil {
+			return errors.Wrap(_toNormalErr, "Error serializing 'toNormal' field")
+		}
+
+		if popErr := writeBuffer.PopContext("BACnetConstructedDataEventTimestamps"); popErr != nil {
+			return popErr
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *BACnetConstructedDataEventTimestamps) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	m.Serialize(buffer)
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
index 64b66c0..e660a2f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
@@ -46,19 +46,19 @@ func (m *BACnetConstructedDataLifeSafetyZone) ObjectType() BACnetObjectType {
 	return BACnetObjectType_LIFE_SAFETY_ZONE
 }
 
-func (m *BACnetConstructedDataLifeSafetyZone) PropertyIdentifierArgument() IBACnetContextTagPropertyIdentifier {
-	return nil
+func (m *BACnetConstructedDataLifeSafetyZone) PropertyIdentifierEnum() BACnetPropertyIdentifier {
+	return 0
 }
 
-func (m *BACnetConstructedDataLifeSafetyZone) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) {
+func (m *BACnetConstructedDataLifeSafetyZone) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) {
 	m.OpeningTag = openingTag
 	m.ClosingTag = closingTag
 }
 
-func NewBACnetConstructedDataLifeSafetyZone(zones []*BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConstructedData {
+func NewBACnetConstructedDataLifeSafetyZone(zones []*BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) *BACnetConstructedData {
 	child := &BACnetConstructedDataLifeSafetyZone{
 		Zones:                 zones,
-		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag),
+		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, propertyIdentifierEnum),
 	}
 	child.Child = child
 	return child.BACnetConstructedData
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
index fb3a423..9507a31 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
@@ -49,22 +49,22 @@ func (m *BACnetConstructedDataUnspecified) ObjectType() BACnetObjectType {
 	return 0
 }
 
-func (m *BACnetConstructedDataUnspecified) PropertyIdentifierArgument() IBACnetContextTagPropertyIdentifier {
-	return nil
+func (m *BACnetConstructedDataUnspecified) PropertyIdentifierEnum() BACnetPropertyIdentifier {
+	return 0
 }
 
-func (m *BACnetConstructedDataUnspecified) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) {
+func (m *BACnetConstructedDataUnspecified) InitializeParent(parent *BACnetConstructedData, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) {
 	m.OpeningTag = openingTag
 	m.ClosingTag = closingTag
 }
 
-func NewBACnetConstructedDataUnspecified(data []*BACnetConstructedDataElement, propertyIdentifier *BACnetContextTagPropertyIdentifier, content *BACnetApplicationTag, hasData bool, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConstructedData {
+func NewBACnetConstructedDataUnspecified(data []*BACnetConstructedDataElement, propertyIdentifier *BACnetContextTagPropertyIdentifier, content *BACnetApplicationTag, hasData bool, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, propertyIdentifierEnum BACnetPropertyIdentifier) *BACnetConstructedData {
 	child := &BACnetConstructedDataUnspecified{
 		Data:                  data,
 		PropertyIdentifier:    propertyIdentifier,
 		Content:               content,
 		HasData:               hasData,
-		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag),
+		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, propertyIdentifierEnum),
 	}
 	child.Child = child
 	return child.BACnetConstructedData
@@ -138,7 +138,7 @@ func BACnetConstructedDataUnspecifiedParse(readBuffer utils.ReadBuffer, tagNumbe
 	// Terminated array
 	data := make([]*BACnetConstructedDataElement, 0)
 	{
-		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, bool(bool((objectType) == (BACnetObjectType_LIFE_SAFETY_ZONE))) || bool(bool((objectType) == (BACnetObjectType_COMMAND))), tagNumber)) {
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, tagNumber)) {
 			_item, _err := BACnetConstructedDataElementParse(readBuffer, objectType, propertyIdentifierArgument)
 			if _err != nil {
 				return nil, errors.Wrap(_err, "Error parsing 'data' field")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index d420559..8158060 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -131,6 +131,8 @@ func BACnetUnconfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint1
 		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer, len)
 	case serviceChoice == 0x0B: // BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple
 		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer, len)
+	case true: // BACnetUnconfirmedServiceRequestUnconfirmedUnknown
+		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
new file mode 100644
index 0000000..7a24af9
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// The data-structure of this message
+type BACnetUnconfirmedServiceRequestUnconfirmedUnknown struct {
+	*BACnetUnconfirmedServiceRequest
+	UnknownBytes []byte
+}
+
+// The corresponding interface
+type IBACnetUnconfirmedServiceRequestUnconfirmedUnknown interface {
+	LengthInBytes() uint16
+	LengthInBits() uint16
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) ServiceChoice() uint8 {
+	return 0
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) InitializeParent(parent *BACnetUnconfirmedServiceRequest) {
+}
+
+func NewBACnetUnconfirmedServiceRequestUnconfirmedUnknown(unknownBytes []byte) *BACnetUnconfirmedServiceRequest {
+	child := &BACnetUnconfirmedServiceRequestUnconfirmedUnknown{
+		UnknownBytes:                    unknownBytes,
+		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(),
+	}
+	child.Child = child
+	return child.BACnetUnconfirmedServiceRequest
+}
+
+func CastBACnetUnconfirmedServiceRequestUnconfirmedUnknown(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedUnknown {
+	castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedUnknown {
+		if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedUnknown); ok {
+			return &casted
+		}
+		if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedUnknown); ok {
+			return casted
+		}
+		if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
+			return CastBACnetUnconfirmedServiceRequestUnconfirmedUnknown(casted.Child)
+		}
+		if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
+			return CastBACnetUnconfirmedServiceRequestUnconfirmedUnknown(casted.Child)
+		}
+		return nil
+	}
+	return castFunc(structType)
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) GetTypeName() string {
+	return "BACnetUnconfirmedServiceRequestUnconfirmedUnknown"
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) LengthInBits() uint16 {
+	return m.LengthInBitsConditional(false)
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) LengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(m.ParentLengthInBits())
+
+	// Array field
+	if len(m.UnknownBytes) > 0 {
+		lengthInBits += 8 * uint16(len(m.UnknownBytes))
+	}
+
+	return lengthInBits
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedUnknown"); pullErr != nil {
+		return nil, pullErr
+	}
+	// Byte Array field (unknownBytes)
+	numberOfBytesunknownBytes := int(utils.InlineIf(bool(bool((len) > (0))), func() interface{} { return uint16(uint16(uint16(len) - uint16(uint16(1)))) }, func() interface{} { return uint16(uint16(0)) }).(uint16))
+	unknownBytes, _readArrayErr := readBuffer.ReadByteArray("unknownBytes", numberOfBytesunknownBytes)
+	if _readArrayErr != nil {
+		return nil, errors.Wrap(_readArrayErr, "Error parsing 'unknownBytes' field")
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetUnconfirmedServiceRequestUnconfirmedUnknown"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create a partially initialized instance
+	_child := &BACnetUnconfirmedServiceRequestUnconfirmedUnknown{
+		UnknownBytes:                    unknownBytes,
+		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
+	}
+	_child.BACnetUnconfirmedServiceRequest.Child = _child
+	return _child.BACnetUnconfirmedServiceRequest, nil
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
+	ser := func() error {
+		if pushErr := writeBuffer.PushContext("BACnetUnconfirmedServiceRequestUnconfirmedUnknown"); pushErr != nil {
+			return pushErr
+		}
+
+		// Array Field (unknownBytes)
+		if m.UnknownBytes != nil {
+			// Byte Array field (unknownBytes)
+			_writeArrayErr := writeBuffer.WriteByteArray("unknownBytes", m.UnknownBytes)
+			if _writeArrayErr != nil {
+				return errors.Wrap(_writeArrayErr, "Error serializing 'unknownBytes' field")
+			}
+		}
+
+		if popErr := writeBuffer.PopContext("BACnetUnconfirmedServiceRequestUnconfirmedUnknown"); popErr != nil {
+			return popErr
+		}
+		return nil
+	}
+	return m.SerializeParent(writeBuffer, m, ser)
+}
+
+func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	m.Serialize(buffer)
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
index b5608ec..9eedeb9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
@@ -29,7 +29,7 @@ import (
 // The data-structure of this message
 type NLMRejectRouterToNetwork struct {
 	*NLM
-	RejectReason              uint8
+	RejectReason              NLMRejectRouterToNetworkRejectReason
 	DestinationNetworkAddress uint16
 }
 
@@ -51,7 +51,7 @@ func (m *NLMRejectRouterToNetwork) InitializeParent(parent *NLM, vendorId *uint1
 	m.VendorId = vendorId
 }
 
-func NewNLMRejectRouterToNetwork(rejectReason uint8, destinationNetworkAddress uint16, vendorId *uint16) *NLM {
+func NewNLMRejectRouterToNetwork(rejectReason NLMRejectRouterToNetworkRejectReason, destinationNetworkAddress uint16, vendorId *uint16) *NLM {
 	child := &NLMRejectRouterToNetwork{
 		RejectReason:              rejectReason,
 		DestinationNetworkAddress: destinationNetworkAddress,
@@ -110,11 +110,17 @@ func NLMRejectRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint1
 	}
 
 	// Simple Field (rejectReason)
-	_rejectReason, _rejectReasonErr := readBuffer.ReadUint8("rejectReason", 8)
+	if pullErr := readBuffer.PullContext("rejectReason"); pullErr != nil {
+		return nil, pullErr
+	}
+	_rejectReason, _rejectReasonErr := NLMRejectRouterToNetworkRejectReasonParse(readBuffer)
 	if _rejectReasonErr != nil {
 		return nil, errors.Wrap(_rejectReasonErr, "Error parsing 'rejectReason' field")
 	}
 	rejectReason := _rejectReason
+	if closeErr := readBuffer.CloseContext("rejectReason"); closeErr != nil {
+		return nil, closeErr
+	}
 
 	// Simple Field (destinationNetworkAddress)
 	_destinationNetworkAddress, _destinationNetworkAddressErr := readBuffer.ReadUint16("destinationNetworkAddress", 16)
@@ -144,8 +150,13 @@ func (m *NLMRejectRouterToNetwork) Serialize(writeBuffer utils.WriteBuffer) erro
 		}
 
 		// Simple Field (rejectReason)
-		rejectReason := uint8(m.RejectReason)
-		_rejectReasonErr := writeBuffer.WriteUint8("rejectReason", 8, (rejectReason))
+		if pushErr := writeBuffer.PushContext("rejectReason"); pushErr != nil {
+			return pushErr
+		}
+		_rejectReasonErr := m.RejectReason.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("rejectReason"); popErr != nil {
+			return popErr
+		}
 		if _rejectReasonErr != nil {
 			return errors.Wrap(_rejectReasonErr, "Error serializing 'rejectReason' field")
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetworkRejectReason.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetworkRejectReason.go
new file mode 100644
index 0000000..a063418
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetworkRejectReason.go
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+type NLMRejectRouterToNetworkRejectReason uint8
+
+type INLMRejectRouterToNetworkRejectReason interface {
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+const (
+	NLMRejectRouterToNetworkRejectReason_OTHER                  NLMRejectRouterToNetworkRejectReason = 0
+	NLMRejectRouterToNetworkRejectReason_NOT_DIRECTLY_CONNECTED NLMRejectRouterToNetworkRejectReason = 1
+	NLMRejectRouterToNetworkRejectReason_BUSY                   NLMRejectRouterToNetworkRejectReason = 2
+	NLMRejectRouterToNetworkRejectReason_UNKNOWN_NLMT           NLMRejectRouterToNetworkRejectReason = 3
+	NLMRejectRouterToNetworkRejectReason_TOO_LONG               NLMRejectRouterToNetworkRejectReason = 4
+	NLMRejectRouterToNetworkRejectReason_SECURITY_ERROR         NLMRejectRouterToNetworkRejectReason = 5
+	NLMRejectRouterToNetworkRejectReason_ADDRESSING_ERROR       NLMRejectRouterToNetworkRejectReason = 6
+)
+
+var NLMRejectRouterToNetworkRejectReasonValues []NLMRejectRouterToNetworkRejectReason
+
+func init() {
+	_ = errors.New
+	NLMRejectRouterToNetworkRejectReasonValues = []NLMRejectRouterToNetworkRejectReason{
+		NLMRejectRouterToNetworkRejectReason_OTHER,
+		NLMRejectRouterToNetworkRejectReason_NOT_DIRECTLY_CONNECTED,
+		NLMRejectRouterToNetworkRejectReason_BUSY,
+		NLMRejectRouterToNetworkRejectReason_UNKNOWN_NLMT,
+		NLMRejectRouterToNetworkRejectReason_TOO_LONG,
+		NLMRejectRouterToNetworkRejectReason_SECURITY_ERROR,
+		NLMRejectRouterToNetworkRejectReason_ADDRESSING_ERROR,
+	}
+}
+
+func NLMRejectRouterToNetworkRejectReasonByValue(value uint8) NLMRejectRouterToNetworkRejectReason {
+	switch value {
+	case 0:
+		return NLMRejectRouterToNetworkRejectReason_OTHER
+	case 1:
+		return NLMRejectRouterToNetworkRejectReason_NOT_DIRECTLY_CONNECTED
+	case 2:
+		return NLMRejectRouterToNetworkRejectReason_BUSY
+	case 3:
+		return NLMRejectRouterToNetworkRejectReason_UNKNOWN_NLMT
+	case 4:
+		return NLMRejectRouterToNetworkRejectReason_TOO_LONG
+	case 5:
+		return NLMRejectRouterToNetworkRejectReason_SECURITY_ERROR
+	case 6:
+		return NLMRejectRouterToNetworkRejectReason_ADDRESSING_ERROR
+	}
+	return 0
+}
+
+func NLMRejectRouterToNetworkRejectReasonByName(value string) NLMRejectRouterToNetworkRejectReason {
+	switch value {
+	case "OTHER":
+		return NLMRejectRouterToNetworkRejectReason_OTHER
+	case "NOT_DIRECTLY_CONNECTED":
+		return NLMRejectRouterToNetworkRejectReason_NOT_DIRECTLY_CONNECTED
+	case "BUSY":
+		return NLMRejectRouterToNetworkRejectReason_BUSY
+	case "UNKNOWN_NLMT":
+		return NLMRejectRouterToNetworkRejectReason_UNKNOWN_NLMT
+	case "TOO_LONG":
+		return NLMRejectRouterToNetworkRejectReason_TOO_LONG
+	case "SECURITY_ERROR":
+		return NLMRejectRouterToNetworkRejectReason_SECURITY_ERROR
+	case "ADDRESSING_ERROR":
+		return NLMRejectRouterToNetworkRejectReason_ADDRESSING_ERROR
+	}
+	return 0
+}
+
+func CastNLMRejectRouterToNetworkRejectReason(structType interface{}) NLMRejectRouterToNetworkRejectReason {
+	castFunc := func(typ interface{}) NLMRejectRouterToNetworkRejectReason {
+		if sNLMRejectRouterToNetworkRejectReason, ok := typ.(NLMRejectRouterToNetworkRejectReason); ok {
+			return sNLMRejectRouterToNetworkRejectReason
+		}
+		return 0
+	}
+	return castFunc(structType)
+}
+
+func (m NLMRejectRouterToNetworkRejectReason) LengthInBits() uint16 {
+	return 8
+}
+
+func (m NLMRejectRouterToNetworkRejectReason) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func NLMRejectRouterToNetworkRejectReasonParse(readBuffer utils.ReadBuffer) (NLMRejectRouterToNetworkRejectReason, error) {
+	val, err := readBuffer.ReadUint8("NLMRejectRouterToNetworkRejectReason", 8)
+	if err != nil {
+		return 0, nil
+	}
+	return NLMRejectRouterToNetworkRejectReasonByValue(val), nil
+}
+
+func (e NLMRejectRouterToNetworkRejectReason) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteUint8("NLMRejectRouterToNetworkRejectReason", 8, uint8(e), utils.WithAdditionalStringRepresentation(e.name()))
+}
+
+func (e NLMRejectRouterToNetworkRejectReason) name() string {
+	switch e {
+	case NLMRejectRouterToNetworkRejectReason_OTHER:
+		return "OTHER"
+	case NLMRejectRouterToNetworkRejectReason_NOT_DIRECTLY_CONNECTED:
+		return "NOT_DIRECTLY_CONNECTED"
+	case NLMRejectRouterToNetworkRejectReason_BUSY:
+		return "BUSY"
+	case NLMRejectRouterToNetworkRejectReason_UNKNOWN_NLMT:
+		return "UNKNOWN_NLMT"
+	case NLMRejectRouterToNetworkRejectReason_TOO_LONG:
+		return "TOO_LONG"
+	case NLMRejectRouterToNetworkRejectReason_SECURITY_ERROR:
+		return "SECURITY_ERROR"
+	case NLMRejectRouterToNetworkRejectReason_ADDRESSING_ERROR:
+		return "ADDRESSING_ERROR"
+	}
+	return ""
+}
+
+func (e NLMRejectRouterToNetworkRejectReason) String() string {
+	return e.name()
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxManufacturer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxManufacturer.go
index f15bb48..33d041f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxManufacturer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxManufacturer.go
@@ -612,8 +612,9 @@ const (
 	KnxManufacturer_M_MEX_ELECTRIC_TECHNOLOGY_SHANGHAI_CO___LTD          KnxManufacturer = 574
 	KnxManufacturer_M_SUMAMO                                             KnxManufacturer = 575
 	KnxManufacturer_M_SVIT                                               KnxManufacturer = 576
-	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 577
-	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 578
+	KnxManufacturer_M_TECGET                                             KnxManufacturer = 577
+	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 578
+	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 579
 )
 
 var KnxManufacturerValues []KnxManufacturer
@@ -1198,6 +1199,7 @@ func init() {
 		KnxManufacturer_M_MEX_ELECTRIC_TECHNOLOGY_SHANGHAI_CO___LTD,
 		KnxManufacturer_M_SUMAMO,
 		KnxManufacturer_M_SVIT,
+		KnxManufacturer_M_TECGET,
 		KnxManufacturer_M_ABB___RESERVED,
 		KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED,
 	}
@@ -3331,10 +3333,14 @@ func (e KnxManufacturer) Number() uint16 {
 		}
 	case 577:
 		{ /* '577' */
-			return 43954
+			return 635
 		}
 	case 578:
 		{ /* '578' */
+			return 43954
+		}
+	case 579:
+		{ /* '579' */
 			return 43959
 		}
 	case 58:
@@ -5665,10 +5671,14 @@ func (e KnxManufacturer) Name() string {
 		}
 	case 577:
 		{ /* '577' */
-			return "ABB - reserved"
+			return "tecget"
 		}
 	case 578:
 		{ /* '578' */
+			return "ABB - reserved"
+		}
+	case 579:
+		{ /* '579' */
 			return "Busch-Jaeger Elektro - reserved"
 		}
 	case 58:
@@ -6935,8 +6945,10 @@ func KnxManufacturerByValue(value uint16) KnxManufacturer {
 	case 576:
 		return KnxManufacturer_M_SVIT
 	case 577:
-		return KnxManufacturer_M_ABB___RESERVED
+		return KnxManufacturer_M_TECGET
 	case 578:
+		return KnxManufacturer_M_ABB___RESERVED
+	case 579:
 		return KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED
 	case 58:
 		return KnxManufacturer_M_DAETWYLER
@@ -8098,6 +8110,8 @@ func KnxManufacturerByName(value string) KnxManufacturer {
 		return KnxManufacturer_M_SUMAMO
 	case "M_SVIT":
 		return KnxManufacturer_M_SVIT
+	case "M_TECGET":
+		return KnxManufacturer_M_TECGET
 	case "M_ABB___RESERVED":
 		return KnxManufacturer_M_ABB___RESERVED
 	case "M_BUSCH_JAEGER_ELEKTRO___RESERVED":
@@ -9292,6 +9306,8 @@ func (e KnxManufacturer) name() string {
 		return "M_SUMAMO"
 	case KnxManufacturer_M_SVIT:
 		return "M_SVIT"
+	case KnxManufacturer_M_TECGET:
+		return "M_TECGET"
 	case KnxManufacturer_M_ABB___RESERVED:
 		return "M_ABB___RESERVED"
 	case KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED:
diff --git a/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java b/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
index eca7687..358e115 100644
--- a/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
+++ b/plc4j/drivers/bacnet/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
@@ -32,7 +32,6 @@ import org.apache.plc4x.java.spi.generation.WriteBufferBoxBased;
 import org.apache.plc4x.java.spi.utils.Serializable;
 import org.apache.plc4x.java.spi.utils.hex.Hex;
 import org.assertj.core.api.InstanceOfAssertFactories;
-import org.assertj.core.api.InstanceOfAssertFactory;
 import org.junit.jupiter.api.*;
 import org.pcap4j.core.*;
 import org.pcap4j.packet.Packet;
@@ -54,6 +53,7 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.from;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
@@ -539,7 +539,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetObjectType.ANALOG_OUTPUT, baCnetServiceAckReadProperty.getObjectIdentifier().getObjectType());
                     assertEquals(0, baCnetServiceAckReadProperty.getObjectIdentifier().getInstanceNumber());
                     assertEquals(BACnetPropertyIdentifier.PRESENT_VALUE, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    BACnetApplicationTagReal baCnetApplicationTagReal = (BACnetApplicationTagReal) ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData().get(0).getApplicationTag();
+                    BACnetApplicationTagReal baCnetApplicationTagReal = (BACnetApplicationTagReal) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     assertEquals(0, baCnetApplicationTagReal.getValue());
                 }),
             DynamicTest.dynamicTest("No. 19-26 - Skip Misc 8 packages",
@@ -693,7 +693,7 @@ public class RandomPackagesTest {
                     assertEquals(BACnetObjectType.DEVICE, baCnetServiceAckReadProperty.getObjectIdentifier().getObjectType());
                     assertEquals(12345, baCnetServiceAckReadProperty.getObjectIdentifier().getInstanceNumber());
                     assertEquals(BACnetPropertyIdentifier.OBJECT_IDENTIFIER, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    BACnetApplicationTagObjectIdentifier objectIdentifier = (BACnetApplicationTagObjectIdentifier) ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData().get(0).getApplicationTag();
+                    BACnetApplicationTagObjectIdentifier objectIdentifier = (BACnetApplicationTagObjectIdentifier) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData().get(0).getApplicationTag();
                     assertEquals(BACnetObjectType.DEVICE, objectIdentifier.getObjectType());
                     assertEquals(12345, objectIdentifier.getInstanceNumber());
                 }),
@@ -1293,15 +1293,39 @@ public class RandomPackagesTest {
                     assertNotNull(baCnetServiceAckReadProperty);
                     assertThat(baCnetServiceAckReadProperty.getObjectIdentifier()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.STRUCTURED_VIEW, 1L);
                     assertEquals(BACnetPropertyIdentifier.SUBORDINATE_LIST, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData();
-                    assertThat(data.get(0).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
-                    assertThat(data.get(1).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_INPUT, 1L);
-                    assertThat(data.get(2).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
-                    assertThat(data.get(3).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_INPUT, 3L);
-                    assertThat(data.get(4).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
-                    assertThat(data.get(5).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_OUTPUT, 1L);
-                    assertThat(data.get(6).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
-                    assertThat(data.get(7).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_OUTPUT, 3L);
+                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData();
+                    assertThat(data)
+                        .element(0)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
+                    assertThat(data)
+                        .element(1)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_INPUT, 1L);
+                    assertThat(data)
+                        .element(2)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
+                    assertThat(data)
+                        .element(3)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_INPUT, 3L);
+                    assertThat(data)
+                        .element(4)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
+                    assertThat(data)
+                        .element(5)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_OUTPUT, 1L);
+                    assertThat(data)
+                        .element(6)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 128L);
+                    assertThat(data)
+                        .element(7)
+                        .extracting(BACnetConstructedDataElement::getContextTag)
+                        .extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_OUTPUT, 3L);
                 })
         );
     }
@@ -1331,7 +1355,7 @@ public class RandomPackagesTest {
                     assertNotNull(baCnetServiceAckReadProperty);
                     assertThat(baCnetServiceAckReadProperty.getObjectIdentifier()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.STRUCTURED_VIEW, 1L);
                     assertEquals(BACnetPropertyIdentifier.SUBORDINATE_LIST, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData();
+                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData();
                     assertThat(data.get(0).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.DEVICE, 4000L);
                     assertThat(data.get(1).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_INPUT, 1L);
                     assertThat(data.get(2).getContextTag()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.ANALOG_VALUE, 1L);
@@ -1358,7 +1382,7 @@ public class RandomPackagesTest {
                     assertNotNull(baCnetServiceAckReadProperty);
                     assertThat(baCnetServiceAckReadProperty.getObjectIdentifier()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.STRUCTURED_VIEW, 1L);
                     assertEquals(BACnetPropertyIdentifier.SUBORDINATE_ANNOTATIONS, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData();
+                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData();
                     assertThat(data.get(0).getApplicationTag()).extracting("encoding", "value").contains(BACnetCharacterEncoding.ISO_10646, "Subordinate 1");
                     assertThat(data.get(1).getApplicationTag()).extracting("encoding", "value").contains(BACnetCharacterEncoding.ISO_10646, "Subordinate 2");
                     assertThat(data.get(2).getApplicationTag()).extracting("encoding", "value").contains(BACnetCharacterEncoding.ISO_10646, "Subordinate 3");
@@ -1624,7 +1648,7 @@ public class RandomPackagesTest {
                     assertNotNull(baCnetServiceAckReadProperty);
                     assertThat(baCnetServiceAckReadProperty.getObjectIdentifier()).extracting("objectType", "instanceNumber").contains(BACnetObjectType.SCHEDULE, 1L);
                     assertEquals(BACnetPropertyIdentifier.EXCEPTION_SCHEDULE, baCnetServiceAckReadProperty.getPropertyIdentifier().getPropertyIdentifier());
-                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues())).getData();
+                    List<BACnetConstructedDataElement> data = ((BACnetConstructedDataUnspecified) baCnetServiceAckReadProperty.getValues()).getData();
                     assertThat(data.get(0).getApplicationTag()).extracting("actualValue").isEqualTo(0L);
                 })
         );
@@ -1656,8 +1680,8 @@ public class RandomPackagesTest {
     Collection<DynamicNode> action_list() throws Exception {
         TestPcapEvaluator pcapEvaluator = pcapEvaluator("action-list.pcap");
         return List.of(
-            DynamicTest.dynamicTest("No. 1 - Confirmed-REQ   readProperty[107] command,1 action", () -> {
-                assertThat(pcapEvaluator.nextBVLC())
+            DynamicTest.dynamicTest("No. 1 - Confirmed-REQ   readProperty[107] command,1 action",
+                () -> assertThat(pcapEvaluator.nextBVLC())
                     .asInstanceOf(InstanceOfAssertFactories.type(BVLCOriginalUnicastNPDU.class))
                     .extracting(BVLCOriginalUnicastNPDU::getNpdu)
                     .extracting(NPDU::getApdu)
@@ -1677,8 +1701,7 @@ public class RandomPackagesTest {
                             .extracting(BACnetConfirmedServiceRequestReadProperty::getArrayIndex)
                             .extracting(BACnetContextTagUnsignedInteger::getActualValue)
                             .isEqualTo(1L);
-                    });
-            }),
+                    })),
             DynamicTest.dynamicTest("No. 2 - Complex-ACK     readProperty[107] command,1 action binary-value,0 present-value device,0 analog-value,1 present-value binary-value,2 present-value device,0 analog-value,3 present-value binary-value,4 present-value device,0 analog-value,5 present-value binary-value,6 present-value device,0 analog-value,7 present-value binary-value,8 present-value device,0 analog-value,9 present-value",
                 () -> assertThat(pcapEvaluator.nextBVLC())
                     .asInstanceOf(InstanceOfAssertFactories.type(BVLCOriginalUnicastNPDU.class))
@@ -2311,20 +2334,79 @@ public class RandomPackagesTest {
         TestPcapEvaluator pcapEvaluator = pcapEvaluator("eventTimeStamp_rp.pcap");
         return Arrays.asList(
             DynamicTest.dynamicTest("No. 1 - Confirmed-REQ   readProperty[148] load-control,1 event-time-stamp",
-                () -> {
-                    BVLC bvlc = pcapEvaluator.nextBVLC();
-                    dump(bvlc);
-                    // TODO:
-                    assumeTrue(false, "not properly implemented. Check manually and add asserts");
-                }),
+                () -> assertThat(pcapEvaluator.nextBVLC())
+                    .asInstanceOf(InstanceOfAssertFactories.type(BVLCOriginalUnicastNPDU.class))
+                    .extracting(BVLCOriginalUnicastNPDU::getNpdu)
+                    .extracting(NPDU::getApdu)
+                    .asInstanceOf(InstanceOfAssertFactories.type(APDUConfirmedRequest.class))
+                    .extracting(APDUConfirmedRequest::getServiceRequest)
+                    .asInstanceOf(InstanceOfAssertFactories.type(BACnetConfirmedServiceRequestReadProperty.class))
+                    .satisfies(baCnetConfirmedServiceRequestReadProperty -> {
+                        assertThat(baCnetConfirmedServiceRequestReadProperty)
+                            .extracting(BACnetConfirmedServiceRequestReadProperty::getObjectIdentifier)
+                            .extracting(BACnetContextTagObjectIdentifier::getObjectType, BACnetContextTagObjectIdentifier::getInstanceNumber)
+                            .containsExactly(BACnetObjectType.LOAD_CONTROL, 1L);
+                        assertThat(baCnetConfirmedServiceRequestReadProperty)
+                            .extracting(BACnetConfirmedServiceRequestReadProperty::getPropertyIdentifier)
+                            .extracting(BACnetContextTagPropertyIdentifier::getPropertyIdentifier)
+                            .isEqualTo(BACnetPropertyIdentifier.EVENT_TIME_STAMPS);
+                        assertThat(baCnetConfirmedServiceRequestReadProperty)
+                            .extracting(BACnetConfirmedServiceRequestReadProperty::getArrayIndex)
+                            .isNull();
+                    })),
             DynamicTest.dynamicTest("No. 2 - Complex-ACK     readProperty[148] load-control,1 event-time-stamp",
-                () -> {
-                    BVLC bvlc = pcapEvaluator.nextBVLC();
-                    dump(bvlc);
-                    // TODO:
-                    assumeTrue(false, "not properly implemented. Check manually and add asserts");
-                }),
-            pcapEvaluator.parseFrom(3)
+                () -> assertThat(pcapEvaluator.nextBVLC())
+                    .asInstanceOf(InstanceOfAssertFactories.type(BVLCOriginalUnicastNPDU.class))
+                    .extracting(BVLCOriginalUnicastNPDU::getNpdu)
+                    .extracting(NPDU::getApdu)
+                    .asInstanceOf(InstanceOfAssertFactories.type(APDUComplexAck.class))
+                    .extracting(APDUComplexAck::getServiceAck)
+                    .asInstanceOf(InstanceOfAssertFactories.type(BACnetServiceAckReadProperty.class))
+                    .satisfies(baCnetServiceAckReadProperty -> {
+                        assertThat(baCnetServiceAckReadProperty)
+                            .extracting(BACnetServiceAckReadProperty::getObjectIdentifier)
+                            .extracting(BACnetContextTagObjectIdentifier::getObjectType, BACnetContextTagObjectIdentifier::getInstanceNumber)
+                            .containsExactly(BACnetObjectType.LOAD_CONTROL, 1L);
+                        assertThat(baCnetServiceAckReadProperty)
+                            .extracting(BACnetServiceAckReadProperty::getPropertyIdentifier)
+                            .extracting(BACnetContextTagPropertyIdentifier::getPropertyIdentifier)
+                            .isEqualTo(BACnetPropertyIdentifier.EVENT_TIME_STAMPS);
+                        assertThat(baCnetServiceAckReadProperty)
+                            .extracting(BACnetServiceAckReadProperty::getArrayIndex)
+                            .isNull();
+                        assertThat(baCnetServiceAckReadProperty)
+                            .extracting(BACnetServiceAckReadProperty::getValues)
+                            .asInstanceOf(InstanceOfAssertFactories.type(BACnetConstructedDataEventTimestamps.class))
+                            .satisfies(baCnetConstructedDataEventTimestamps ->
+                                assertThat(baCnetConstructedDataEventTimestamps)
+                                    .extracting(BACnetConstructedDataEventTimestamps::getToOffnormal)
+                                    .extracting(BACnetContextTagTime::getHourIsWildcard, BACnetContextTagTime::getMinuteIsWildcard, BACnetContextTagTime::getSecondIsWildcard, BACnetContextTagTime::getFractionalIsWildcard)
+                                    .containsExactly(true, true, true, true)
+                            )
+                            .satisfies(baCnetConstructedDataEventTimestamps ->
+                                assertThat(baCnetConstructedDataEventTimestamps)
+                                    .extracting(BACnetConstructedDataEventTimestamps::getToFault)
+                                    .extracting(BACnetContextTagUnsignedInteger::getActualValue)
+                                    .isEqualTo(0L)
+                            )
+                            .satisfies(baCnetConstructedDataEventTimestamps->
+                                    assertThat(baCnetConstructedDataEventTimestamps)
+                                        .extracting(BACnetConstructedDataEventTimestamps::getToNormal)
+                                        .satisfies(baCnetDateTime ->
+                                            assertThat(baCnetDateTime)
+                                                .extracting(BACnetDateTime::getDateValue)
+                                                .extracting(BACnetApplicationTagDate::getYearIsWildcard, BACnetApplicationTagDate::getMonthIsWildcard, BACnetApplicationTagDate::getDayOfMonthIsWildcard, BACnetApplicationTagDate::getDayOfWeekIsWildcard)
+                                                .containsExactly(true, true, true, true)
+                                        )
+                                        .satisfies(baCnetDateTime ->
+                                            assertThat(baCnetDateTime)
+                                                .extracting(BACnetDateTime::getTimeValue)
+                                                .extracting(BACnetApplicationTagTime::getFractionalIsWildcard, BACnetApplicationTagTime::getMinuteIsWildcard, BACnetApplicationTagTime::getSecondIsWildcard, BACnetApplicationTagTime::getFractionalIsWildcard)
+                                                .containsExactly(true, true, true, true)
+                                        )
+                                )
+                        ;
+                    }))
         );
     }
 
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 01fd475..79e74dc 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -25,13 +25,12 @@
     [typeSwitch bvlcFunction
         ['0x00' BVLCResult
             [simple BVLCResultCode
-                            code
-            ]
+                            code                                ]
         ]
         ['0x01' BVLCWriteBroadcastDistributionTable(uint 16 bvlcPayloadLength)
             [array  BVLCWriteBroadcastDistributionTableEntry
                             table
-                            length 'bvlcPayloadLength'         ]
+                            length 'bvlcPayloadLength'          ]
         ]
         ['0x02' BVLCReadBroadcastDistributionTable
         ]
@@ -41,8 +40,7 @@
             [array  uint 8  ip    count '4'         ]
             [simple uint 16 port                    ]
             [simple NPDU('bvlcPayloadLength - 6')
-                            npdu
-            ]
+                            npdu                                ]
         ]
         ['0x05' BVLCRegisterForeignDevice
             [simple uint 16 ttl]
@@ -55,18 +53,15 @@
         ]
         ['0x09' BVLCDistributeBroadcastToNetwork(uint 16 bvlcPayloadLength)
             [simple NPDU('bvlcPayloadLength')
-                            npdu
-            ]
+                            npdu                                ]
         ]
         ['0x0A' BVLCOriginalUnicastNPDU(uint 16 bvlcPayloadLength)
             [simple NPDU('bvlcPayloadLength')
-                            npdu
-            ]
+                            npdu                                ]
         ]
         ['0x0B' BVLCOriginalBroadcastNPDU(uint 16 bvlcPayloadLength)
             [simple NPDU('bvlcPayloadLength')
-                            npdu
-            ]
+                            npdu                                ]
         ]
         ['0x0C' BVLCSecureBVLL
         ]
@@ -94,12 +89,10 @@
     [virtual    uint 16     payloadSubtraction         '2 + (sourceLengthAddon + destinationLengthAddon + ((control.destinationSpecified || control.sourceSpecified) ? 1 : 0))'     ]
     [optional   NLM('npduLength - payloadSubtraction')
                             nlm
-                                                        'control.messageTypeFieldPresent'
-    ]
+                                                        'control.messageTypeFieldPresent'                           ]
     [optional   APDU('npduLength - payloadSubtraction')
                             apdu
-                                                        '!control.messageTypeFieldPresent'
-    ]
+                                                        '!control.messageTypeFieldPresent'                          ]
 ]
 
 [type NPDUControl
@@ -136,7 +129,8 @@
             [simple     uint 8      performanceIndex            ]
         ]
         ['0x03' NLMRejectRouterToNetwork(uint 8 messageType)
-            [simple     uint 8      rejectReason                ] // TODO: introduce enum
+            [simple     NLMRejectRouterToNetworkRejectReason
+                                    rejectReason                ]
             [simple     uint 16     destinationNetworkAddress   ]
         ]
         ['0x04' NLMRouterBusyToNetwork(uint 8 messageType)
@@ -149,15 +143,13 @@
             [simple     uint 8      numberOfPorts                   ]
             [array      NLMInitalizeRoutingTablePortMapping
                                     portMappings
-                        count 'numberOfPorts'
-            ]
+                        count 'numberOfPorts'                       ]
         ]
         ['0x07' NLMInitalizeRoutingTableAck(uint 8 messageType)
             [simple     uint 8      numberOfPorts                   ]
             [array      NLMInitalizeRoutingTablePortMapping
                                     portMappings
-                        count 'numberOfPorts'
-            ]
+                        count 'numberOfPorts'                       ]
         ]
         ['0x08' NLMEstablishConnectionToNetwork(uint 8 messageType)
             [simple     uint 16     destinationNetworkAddress   ]
@@ -169,6 +161,16 @@
     ]
 ]
 
+[enum uint 8  NLMRejectRouterToNetworkRejectReason
+    ['0'    OTHER]
+    ['1'    NOT_DIRECTLY_CONNECTED]
+    ['2'    BUSY]
+    ['3'    UNKNOWN_NLMT]
+    ['4'    TOO_LONG]
+    ['5'    SECURITY_ERROR]
+    ['6'    ADDRESSING_ERROR]
+]
+
 [type NLMInitalizeRoutingTablePortMapping
     [simple     uint 16     destinationNetworkAddress       ]
     [simple     uint 8      portId                          ]
@@ -180,67 +182,65 @@
     [discriminator uint 4 apduType]
     [typeSwitch apduType
         ['0x0' APDUConfirmedRequest
-            [simple   bit       segmentedMessage                       ]
-            [simple   bit       moreFollows                            ]
-            [simple   bit       segmentedResponseAccepted              ]
-            [reserved uint 2    '0'                                    ]
-            [simple   uint 3    maxSegmentsAccepted                    ]
-            [simple   uint 4    maxApduLengthAccepted                  ]
-            [simple   uint 8    invokeId                               ]
-            [optional uint 8    sequenceNumber       'segmentedMessage']
-            [optional uint 8    proposedWindowSize   'segmentedMessage']
-            [simple   BACnetConfirmedServiceRequest('apduLength - (3 + (segmentedMessage ? 2 : 0))') serviceRequest]
+            [simple   bit       segmentedMessage                        ]
+            [simple   bit       moreFollows                             ]
+            [simple   bit       segmentedResponseAccepted               ]
+            [reserved uint 2    '0'                                     ]
+            [simple   uint 3    maxSegmentsAccepted                     ]
+            [simple   uint 4    maxApduLengthAccepted                   ]
+            [simple   uint 8    invokeId                                ]
+            [optional uint 8    sequenceNumber       'segmentedMessage' ]
+            [optional uint 8    proposedWindowSize   'segmentedMessage' ]
+            [simple   BACnetConfirmedServiceRequest('apduLength - (3 + (segmentedMessage ? 2 : 0))')
+                                serviceRequest                          ]
         ]
         ['0x1' APDUUnconfirmedRequest
-            [reserved uint 4                          '0'             ]
+            [reserved uint 4                          '0'               ]
             [simple   BACnetUnconfirmedServiceRequest('apduLength - 1')
-                                serviceRequest
-            ]
+                                serviceRequest                          ]
         ]
         ['0x2' APDUSimpleAck
-            [reserved uint 4    '0'               ]
-            [simple   uint 8    originalInvokeId]
-            [simple   uint 8    serviceChoice   ]
+            [reserved uint 4    '0'                                     ]
+            [simple   uint 8    originalInvokeId                        ]
+            [simple   uint 8    serviceChoice                           ]
         ]
         ['0x3' APDUComplexAck
-            [simple   bit       segmentedMessage                     ]
-            [simple   bit       moreFollows                          ]
-            [reserved uint 2    '0'                                  ]
-            [simple   uint 8    originalInvokeId                     ]
-            [optional uint 8    sequenceNumber     'segmentedMessage']
-            [optional uint 8    proposedWindowSize 'segmentedMessage']
+            [simple   bit       segmentedMessage                        ]
+            [simple   bit       moreFollows                             ]
+            [reserved uint 2    '0'                                     ]
+            [simple   uint 8    originalInvokeId                        ]
+            [optional uint 8    sequenceNumber     'segmentedMessage'   ]
+            [optional uint 8    proposedWindowSize 'segmentedMessage'   ]
             [simple   BACnetServiceAck
-                                serviceAck
-            ]
+                                serviceAck                              ]
         ]
         ['0x4' APDUSegmentAck
-            [reserved uint 2    '0x00'              ]
-            [simple   bit       negativeAck         ]
-            [simple   bit       server              ]
-            [simple   uint 8    originalInvokeId    ]
-            [simple   uint 8    sequenceNumber      ]
-            [simple   uint 8    proposedWindowSize  ]
+            [reserved uint 2    '0x00'                                  ]
+            [simple   bit       negativeAck                             ]
+            [simple   bit       server                                  ]
+            [simple   uint 8    originalInvokeId                        ]
+            [simple   uint 8    sequenceNumber                          ]
+            [simple   uint 8    proposedWindowSize                      ]
         ]
         ['0x5' APDUError
-            [reserved uint 4    '0x00'              ]
+            [reserved uint 4    '0x00'                                  ]
             [simple   uint 8    originalInvokeId]
             [simple   BACnetError
-                                error
-            ]
+                                error                                   ]
         ]
         ['0x6' APDUReject
-            [reserved uint 4    '0x00'              ]
-            [simple   uint 8    originalInvokeId    ]
-            [simple   uint 8    rejectReason        ]
+            [reserved uint 4    '0x00'                                  ]
+            [simple   uint 8    originalInvokeId                        ]
+            [simple   uint 8    rejectReason                            ]
         ]
         ['0x7' APDUAbort
-            [reserved uint 3 '0x00'                 ]
-            [simple   bit    server                 ]
-            [simple   uint 8 originalInvokeId       ]
-            [simple   uint 8 abortReason            ]
+            [reserved uint 3    '0x00'                                  ]
+            [simple   bit       server                                  ]
+            [simple   uint 8    originalInvokeId                        ]
+            [simple   uint 8    abortReason                             ]
         ]
         [APDUUnknown
-            // TODO: find a way to slurp all remaining bytes for analysis
+            [array    byte      unknownBytes length '(apduLength>0)?(apduLength - 1):0'    ]
         ]
     ]
 ]
@@ -357,7 +357,7 @@
         ['0x1F' BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
         ]
         [BACnetConfirmedServiceRequestConfirmedUnknown
-            // TODO: slurp all bytes
+            [array  byte    unknownBytes length '(len>0)?(len - 1):0']
         ]
     ]
 ]
@@ -368,8 +368,8 @@
         ['0x00' BACnetUnconfirmedServiceRequestIAm
             [simple     BACnetApplicationTagObjectIdentifier    deviceIdentifier                ]
             [simple     BACnetApplicationTagUnsignedInteger     maximumApduLengthAcceptedLength ]
-            [simple     BACnetSegmentation                      segmentationSupported ] // TODO: map to enum
-            [simple     BACnetApplicationTagUnsignedInteger     vendorId ] // TODO: vendor list?
+            [simple     BACnetSegmentation                      segmentationSupported           ]
+            [simple     BACnetApplicationTagUnsignedInteger     vendorId                        ] // TODO: vendor list?
         ]
         ['0x01' BACnetUnconfirmedServiceRequestIHave
             [simple     BACnetApplicationTagObjectIdentifier    deviceIdentifier    ]
@@ -403,8 +403,8 @@
             [optional BACnetContextTagOctetString('3', 'BACnetDataType.OCTET_STRING')                   objectName                    'objectIdentifier == null'            ]
         ]
         ['0x08' BACnetUnconfirmedServiceRequestWhoIs
-            [optional BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')   deviceInstanceRangeLowLimit                                         ]
-            [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')   deviceInstanceRangeHighLimit  'deviceInstanceRangeLowLimit != null' ]
+            [optional BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')   deviceInstanceRangeLowLimit                                                 ]
+            [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')   deviceInstanceRangeHighLimit  'deviceInstanceRangeLowLimit != null'         ]
         ]
         ['0x09' BACnetUnconfirmedServiceRequestUTCTimeSynchronization
         ]
@@ -412,10 +412,13 @@
         ]
         ['0x0B' BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple
         ]
+        [BACnetUnconfirmedServiceRequestUnconfirmedUnknown
+            [array  byte    unknownBytes length '(len>0)?(len - 1):0']
+        ]
     ]
 ]
 
-// TODO: this is a enum so we should build a static call which maps a enum
+// TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
 [type BACnetSegmentation
     [simple BACnetApplicationTagEnumerated          rawData ]
     [virtual    bit isSegmentedBoth           'rawData != null && COUNT(rawData.data) == 1 && rawData.data[0] == 0']
@@ -824,6 +827,7 @@
     ]
 ]
 
+// TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
 [type BACnetStatusFlags(uint 8 tagNumber)
     [simple BACnetContextTagBitString('tagNumber', 'BACnetDataType.BIT_STRING')
         rawBits
@@ -834,7 +838,7 @@
     [virtual    bit outOfService    'rawBits.data[3]']
 ]
 
-// TODO: this is a enum so we should build a static call which maps a enum
+// TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
 [type BACnetAction(uint 8 tagNumber)
     [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
                 rawData
@@ -873,7 +877,7 @@
     ]
 ]
 
-// TODO: this is a enum so we should build a static call which maps a enum
+// TODO: this is a enum so we should build a static call which maps a enum (could be solved by using only the tag header with a length validation and the enum itself)
 [type BACnetBinaryPV(uint 8 tagNumber)
     [optional   BACnetContextTagEnumerated('tagNumber', 'BACnetDataType.ENUMERATED')
                 rawData
@@ -1235,57 +1239,56 @@
 ]
 
 [type BACnetConstructedData(uint 8 tagNumber, BACnetObjectType objectType, BACnetContextTagPropertyIdentifier propertyIdentifierArgument)
-    [simple       BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                        openingTag
-    ]
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                        openingTag                                                                              ]
+    [virtual    BACnetPropertyIdentifier
+                        propertyIdentifierEnum  'propertyIdentifierArgument.propertyIdentifier']
     // TODO: maybe its better to typeswitch the elements
-    [typeSwitch objectType, propertyIdentifierArgument
+    [typeSwitch objectType, propertyIdentifierEnum
         ['COMMAND' BACnetConstructedDataCommand
             [simple       BACnetOpeningTag('0', 'BACnetDataType.OPENING_TAG')
-                                innerOpeningTag
-            ]
+                                innerOpeningTag                                                                 ]
             [array  BACnetActionCommand
                         action
                     terminated
-                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 0)'
-            ]
+                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 0)'                    ]
             [simple       BACnetClosingTag('0', 'BACnetDataType.CLOSING_TAG')
-                                innerClosingTag
-            ]
+                                innerClosingTag                                                                 ]
         ]
         ['LIFE_SAFETY_ZONE' BACnetConstructedDataLifeSafetyZone
             [array  BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
                         zones
                     terminated
-                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
-            ]
+                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'            ]
+        ]
+        [*, 'EVENT_TIME_STAMPS' BACnetConstructedDataEventTimestamps
+            [simple BACnetContextTagTime('0', 'BACnetDataType.TIME')
+                    toOffnormal                                                                                 ]
+            [simple BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')
+                    toFault                                                                                     ]
+            [simple BACnetDateTime('2')
+                    toNormal                                                                                    ]
         ]
         [BACnetConstructedDataUnspecified
             [array          BACnetConstructedDataElement('objectType', 'propertyIdentifierArgument')
                                 data
                             terminated
-                            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'
-            ]
+                            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)'    ]
             [virtual    bit     hasData 'COUNT(data) == 0']
             [optional       BACnetContextTagPropertyIdentifier('0', 'BACnetDataType.BACNET_PROPERTY_IDENTIFIER')
                             propertyIdentifier
-
-                            'hasData'
-            ]
+                            'hasData'                                                                           ]
             [optional       BACnetApplicationTag
-                            content 'hasData'
-            ]
+                            content 'hasData'                                                                   ]
         ]
     ]
     [simple       BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                        closingTag
-    ]
+                        closingTag                                                                              ]
 ]
 
 [type BACnetConstructedDataElement(BACnetObjectType objectType, BACnetContextTagPropertyIdentifier propertyIdentifier)
     [peek       BACnetTagHeader
-                            peekedTagHeader
-    ]
+                            peekedTagHeader                                                                     ]
     [virtual    uint 8      peekedTagNumber     'peekedTagHeader.actualTagNumber']
     [virtual    bit         isApplicationTag    'peekedTagHeader.tagClass == TagClass.APPLICATION_TAGS'         ]
     [virtual    bit         isConstructedData   '!isApplicationTag && peekedTagHeader.actualLength == 0x6'      ]
@@ -1310,669 +1313,669 @@
 ]
 
 [enum uint 1 TagClass
-    ['0x0' APPLICATION_TAGS         ]
-    ['0x1' CONTEXT_SPECIFIC_TAGS    ]
+    ['0x0' APPLICATION_TAGS                     ]
+    ['0x1' CONTEXT_SPECIFIC_TAGS                ]
 ]
 
 [enum uint 8 BACnetDataType
-    ['0' NULL                           ]
-    ['1' BOOLEAN                        ]
-    ['2' UNSIGNED_INTEGER               ]
-    ['3' SIGNED_INTEGER                 ]
-    ['4' REAL                           ]
-    ['5' DOUBLE                         ]
-    ['6' OCTET_STRING                   ]
-    ['7' CHARACTER_STRING               ]
-    ['8' BIT_STRING                     ]
-    ['9' ENUMERATED                     ]
-    ['10' DATE                          ]
-    ['11' TIME                          ]
-    ['12' BACNET_OBJECT_IDENTIFIER      ]
+    ['0' NULL                                   ]
+    ['1' BOOLEAN                                ]
+    ['2' UNSIGNED_INTEGER                       ]
+    ['3' SIGNED_INTEGER                         ]
+    ['4' REAL                                   ]
+    ['5' DOUBLE                                 ]
+    ['6' OCTET_STRING                           ]
+    ['7' CHARACTER_STRING                       ]
+    ['8' BIT_STRING                             ]
+    ['9' ENUMERATED                             ]
+    ['10' DATE                                  ]
+    ['11' TIME                                  ]
+    ['12' BACNET_OBJECT_IDENTIFIER              ]
     //////////
     //////////
     //
     // Custom plc4x helper values below here
-    ['16' BACNET_PROPERTY_IDENTIFIER    ]
-    ['17' BACNET_DEVICE_STATE           ]
-    ['20' OPENING_TAG                   ]
-    ['21' CLOSING_TAG                   ]
+    ['16' BACNET_PROPERTY_IDENTIFIER            ]
+    ['17' BACNET_DEVICE_STATE                   ]
+    ['20' OPENING_TAG                           ]
+    ['21' CLOSING_TAG                           ]
     // Event Related tags
-    ['30' EVENT_TYPE                    ]
-    ['31' EVENT_STATE                   ]
-    ['32' NOTIFY_TYPE                   ]
+    ['30' EVENT_TYPE                            ]
+    ['31' EVENT_STATE                           ]
+    ['32' NOTIFY_TYPE                           ]
     //
     //////////
     //////////
 ]
 
 [enum byte BACnetCharacterEncoding
-    ['0x0' ISO_10646            ] // UTF-8
-    ['0x1' IBM_Microsoft_DBCS   ]
-    ['0x2' JIS_X_0208           ]
-    ['0x3' ISO_10646_4          ] // (UCS-4)
-    ['0x4' ISO_10646_2          ] // (UCS-2)
-    ['0x5' ISO_8859_1           ]
+    ['0x0' ISO_10646                            ] // UTF-8
+    ['0x1' IBM_Microsoft_DBCS                   ]
+    ['0x2' JIS_X_0208                           ]
+    ['0x3' ISO_10646_4                          ] // (UCS-4)
+    ['0x4' ISO_10646_2                          ] // (UCS-2)
+    ['0x5' ISO_8859_1                           ]
 ]
 
 [enum uint 4 BACnetNetworkType
-    ['0x0' ETHERNET             ]
-    ['0x1' ARCNET               ]
-    ['0x2' MSTP                 ]
-    ['0x3' PTP                  ]
-    ['0x4' LONTALK              ]
-    ['0x5' IPV4                 ]
-    ['0x6' ZIGBEE               ]
-    ['0x7' VIRTUAL              ]
-    ['0x8' REMOVED_NON_BACNET   ]
-    ['0x9' IPV6                 ]
-    ['0xA' SERIAL               ]
+    ['0x0' ETHERNET                             ]
+    ['0x1' ARCNET                               ]
+    ['0x2' MSTP                                 ]
+    ['0x3' PTP                                  ]
+    ['0x4' LONTALK                              ]
+    ['0x5' IPV4                                 ]
+    ['0x6' ZIGBEE                               ]
+    ['0x7' VIRTUAL                              ]
+    ['0x8' REMOVED_NON_BACNET                   ]
+    ['0x9' IPV6                                 ]
+    ['0xA' SERIAL                               ]
 ]
 
 [enum uint 8 BACnetDeviceState
-    ['0x0' COLDSTART        ]
-    ['0x1' WARMSTART        ]
-    ['0x2' ACTIVATE_CHANGES ]
-    ['0x3' STARTBACKUP      ]
-    ['0x4' ENDBACKUP        ]
-    ['0x5' STARTRESTORE     ]
-    ['0x6' ENDRESTORE       ]
-    ['0x7' ABORTRESTORE     ]
+    ['0x0' COLDSTART                            ]
+    ['0x1' WARMSTART                            ]
+    ['0x2' ACTIVATE_CHANGES                     ]
+    ['0x3' STARTBACKUP                          ]
+    ['0x4' ENDBACKUP                            ]
+    ['0x5' STARTRESTORE                         ]
+    ['0x6' ENDRESTORE                           ]
+    ['0x7' ABORTRESTORE                         ]
 ]
 
 [enum uint 8 BACnetNodeType
-    ['0x00' UNKNOWN         ]
-    ['0x01' SYSTEM          ]
-    ['0x02' NETWORK         ]
-    ['0x03' DEVICE          ]
-    ['0x04' ORGANIZATIONAL  ]
-    ['0x05' AREA            ]
-    ['0x06' EQUIPMENT       ]
-    ['0x07' POINT           ]
-    ['0x08' COLLECTION      ]
-    ['0x09' PROPERTY        ]
-    ['0x0A' FUNCTIONAL      ]
-    ['0x0B' OTHER           ]
-    ['0x0C' SUBSYSTEM       ]
-    ['0x0D' BUILDING        ]
-    ['0x0E' FLOOR           ]
-    ['0x0F' SECTION         ]
-    ['0x10' MODULE          ]
-    ['0x11' TREE            ]
-    ['0x12' MEMBER          ]
-    ['0x13' PROTOCOL        ]
-    ['0x14' ROOM            ]
-    ['0x15' ZONE            ]
+    ['0x00' UNKNOWN                             ]
+    ['0x01' SYSTEM                              ]
+    ['0x02' NETWORK                             ]
+    ['0x03' DEVICE                              ]
+    ['0x04' ORGANIZATIONAL                      ]
+    ['0x05' AREA                                ]
+    ['0x06' EQUIPMENT                           ]
+    ['0x07' POINT                               ]
+    ['0x08' COLLECTION                          ]
+    ['0x09' PROPERTY                            ]
+    ['0x0A' FUNCTIONAL                          ]
+    ['0x0B' OTHER                               ]
+    ['0x0C' SUBSYSTEM                           ]
+    ['0x0D' BUILDING                            ]
+    ['0x0E' FLOOR                               ]
+    ['0x0F' SECTION                             ]
+    ['0x10' MODULE                              ]
+    ['0x11' TREE                                ]
+    ['0x12' MEMBER                              ]
+    ['0x13' PROTOCOL                            ]
+    ['0x14' ROOM                                ]
+    ['0x15' ZONE                                ]
 ]
 
 [enum uint 8 BACnetNotifyType
-    ['0x0' ALARM            ]
-    ['0x1' EVENT            ]
-    ['0x2' ACK_NOTIFICATION ]
+    ['0x0' ALARM                                ]
+    ['0x1' EVENT                                ]
+    ['0x2' ACK_NOTIFICATION                     ]
 ]
 
 [enum uint 9 BACnetEventType
-    ['0'  CHANGE_OF_BITSTRING           ]
-    ['1'  CHANGE_OF_STATE               ]
-    ['2'  CHANGE_OF_VALUE               ]
-    ['3'  COMMAND_FAILURE               ]
-    ['4'  FLOATING_LIMIT                ]
-    ['5'  OUT_OF_RANGE                  ]
-    ['8'  CHANGE_OF_LIFE_SAFETY         ]
-    ['9'  EXTENDED                      ]
-    ['10' BUFFER_READY                  ]
-    ['11' UNSIGNED_RANGE                ]
-    ['13' ACCESS_EVENT                  ]
-    ['14' DOUBLE_OUT_OF_RANGE           ]
-    ['15' SIGNED_OUT_OF_RANGE           ]
-    ['16' UNSIGNED_OUT_OF_RANGE         ]
-    ['17' CHANGE_OF_CHARACTERSTRING     ]
-    ['18' CHANGE_OF_STATUS_FLAGS        ]
-    ['19' CHANGE_OF_RELIABILITY         ]
-    ['20' NONE                          ]
-    ['21' CHANGE_OF_DISCRETE_VALUE      ]
-    ['22' CHANGE_OF_TIMER               ]
+    ['0'  CHANGE_OF_BITSTRING                   ]
+    ['1'  CHANGE_OF_STATE                       ]
+    ['2'  CHANGE_OF_VALUE                       ]
+    ['3'  COMMAND_FAILURE                       ]
+    ['4'  FLOATING_LIMIT                        ]
+    ['5'  OUT_OF_RANGE                          ]
+    ['8'  CHANGE_OF_LIFE_SAFETY                 ]
+    ['9'  EXTENDED                              ]
+    ['10' BUFFER_READY                          ]
+    ['11' UNSIGNED_RANGE                        ]
+    ['13' ACCESS_EVENT                          ]
+    ['14' DOUBLE_OUT_OF_RANGE                   ]
+    ['15' SIGNED_OUT_OF_RANGE                   ]
+    ['16' UNSIGNED_OUT_OF_RANGE                 ]
+    ['17' CHANGE_OF_CHARACTERSTRING             ]
+    ['18' CHANGE_OF_STATUS_FLAGS                ]
+    ['19' CHANGE_OF_RELIABILITY                 ]
+    ['20' NONE                                  ]
+    ['21' CHANGE_OF_DISCRETE_VALUE              ]
+    ['22' CHANGE_OF_TIMER                       ]
     
     // plc4x definition
-    ['0xFFFF' VENDOR_PROPRIETARY_VALUE]
+    ['0xFFFF' VENDOR_PROPRIETARY_VALUE          ]
 ]
 
 [enum uint 9 BACnetEventState
-    ['0'  NORMAL             ]
-    ['1'  FAULT              ]
-    ['2'  OFFNORMAL          ]
-    ['3'  HIGH_LIMIT         ]
-    ['4'  LOW_LIMIT          ]
-    ['5'  LIFE_SAVETY_ALARM  ]
+    ['0'  NORMAL                                ]
+    ['1'  FAULT                                 ]
+    ['2'  OFFNORMAL                             ]
+    ['3'  HIGH_LIMIT                            ]
+    ['4'  LOW_LIMIT                             ]
+    ['5'  LIFE_SAVETY_ALARM                     ]
     
     // plc4x definition
-    ['0xFFFF' VENDOR_PROPRIETARY_VALUE]
+    ['0xFFFF' VENDOR_PROPRIETARY_VALUE          ]
 ]
 
 [enum uint 10 BACnetObjectType
-    ['32' ACCESS_CREDENTIAL]
-    ['30' ACCESS_DOOR]
-    ['33' ACCESS_POINT]
-    ['34' ACCESS_RIGHTS]
-    ['35' ACCESS_USER]
-    ['36' ACCESS_ZONE]
-    ['23' ACCUMULATOR]
-    ['52' ALERT_ENROLLMENT]
-    ['0'  ANALOG_INPUT]
-    ['1'  ANALOG_OUTPUT]
-    ['2'  ANALOG_VALUE]
-    ['18' AVERAGING]
-    ['3'  BINARY_INPUT]
-    ['55' BINARY_LIGHTING_OUTPUT]
-    ['4'  BINARY_OUTPUT]
-    ['5'  BINARY_VALUE]
-    ['39' BITSTRING_VALUE]
-    ['6'  CALENDAR]
-    ['53' CHANNEL]
-    ['40' CHARACTERSTRING_VALUE]
-    ['7'  COMMAND]
-    ['37' CREDENTIAL_DATA_INPUT]
-    ['41' DATEPATTERN_VALUE]
-    ['42' DATE_VALUE]
-    ['43' DATETIMEPATTERN_VALUE]
-    ['44' DATETIME_VALUE]
-    ['8'  DEVICE]
-    ['57' ELEVATOR_GROUP]
-    ['58' ESCALATOR]
-    ['9'  EVENT_ENROLLMENT]
-    ['25' EVENT_LOG]
-    ['10' FILE]
-    ['26' GLOBAL_GROUP]
-    ['11' GROUP]
-    ['45' INTEGER_VALUE]
-    ['46' LARGE_ANALOG_VALUE]
-    ['21' LIFE_SAFETY_POINT]
-    ['22' LIFE_SAFETY_ZONE]
-    ['59' LIFT]
-    ['54' LIGHTING_OUTPUT]
-    ['28' LOAD_CONTROL]
-    ['12' LOOP]
-    ['13' MULTI_STATE_INPUT]
-    ['14' MULTI_STATE_OUTPUT]
-    ['19' MULTI_STATE_VALUE]
-    ['56' NETWORK_PORT]
-    ['38' NETWORK_SECURITY]
-    ['15' NOTIFICATION_CLASS]
-    ['51' NOTIFICATION_FORWARDER]
-    ['47' OCTETSTRING_VALUE]
-    ['48' POSITIVE_INTEGER_VALUE]
-    ['16' PROGRAM]
-    ['24' PULSE_CONVERTER]
-    ['17' SCHEDULE]
-    ['29' STRUCTURED_VIEW]
-    ['49' TIMEPATTERN_VALUE]
-    ['50' TIME_VALUE]
-    ['31' TIMER]
-    ['20' TREND_LOG]
-    ['27' TREND_LOG_MULTIPLE]
+    ['32' ACCESS_CREDENTIAL                     ]
+    ['30' ACCESS_DOOR                           ]
+    ['33' ACCESS_POINT                          ]
+    ['34' ACCESS_RIGHTS                         ]
+    ['35' ACCESS_USER                           ]
+    ['36' ACCESS_ZONE                           ]
+    ['23' ACCUMULATOR                           ]
+    ['52' ALERT_ENROLLMENT                      ]
+    ['0'  ANALOG_INPUT                          ]
+    ['1'  ANALOG_OUTPUT                         ]
+    ['2'  ANALOG_VALUE                          ]
+    ['18' AVERAGING                             ]
+    ['3'  BINARY_INPUT                          ]
+    ['55' BINARY_LIGHTING_OUTPUT                ]
+    ['4'  BINARY_OUTPUT                         ]
+    ['5'  BINARY_VALUE                          ]
+    ['39' BITSTRING_VALUE                       ]
+    ['6'  CALENDAR                              ]
+    ['53' CHANNEL                               ]
+    ['40' CHARACTERSTRING_VALUE                 ]
+    ['7'  COMMAND                               ]
+    ['37' CREDENTIAL_DATA_INPUT                 ]
+    ['41' DATEPATTERN_VALUE                     ]
+    ['42' DATE_VALUE                            ]
+    ['43' DATETIMEPATTERN_VALUE                 ]
+    ['44' DATETIME_VALUE                        ]
+    ['8'  DEVICE                                ]
+    ['57' ELEVATOR_GROUP                        ]
+    ['58' ESCALATOR                             ]
+    ['9'  EVENT_ENROLLMENT                      ]
+    ['25' EVENT_LOG                             ]
+    ['10' FILE                                  ]
+    ['26' GLOBAL_GROUP                          ]
+    ['11' GROUP                                 ]
+    ['45' INTEGER_VALUE                         ]
+    ['46' LARGE_ANALOG_VALUE                    ]
+    ['21' LIFE_SAFETY_POINT                     ]
+    ['22' LIFE_SAFETY_ZONE                      ]
+    ['59' LIFT                                  ]
+    ['54' LIGHTING_OUTPUT                       ]
+    ['28' LOAD_CONTROL                          ]
+    ['12' LOOP                                  ]
+    ['13' MULTI_STATE_INPUT                     ]
+    ['14' MULTI_STATE_OUTPUT                    ]
+    ['19' MULTI_STATE_VALUE                     ]
+    ['56' NETWORK_PORT                          ]
+    ['38' NETWORK_SECURITY                      ]
+    ['15' NOTIFICATION_CLASS                    ]
+    ['51' NOTIFICATION_FORWARDER                ]
+    ['47' OCTETSTRING_VALUE                     ]
+    ['48' POSITIVE_INTEGER_VALUE                ]
+    ['16' PROGRAM                               ]
+    ['24' PULSE_CONVERTER                       ]
+    ['17' SCHEDULE                              ]
+    ['29' STRUCTURED_VIEW                       ]
+    ['49' TIMEPATTERN_VALUE                     ]
+    ['50' TIME_VALUE                            ]
+    ['31' TIMER                                 ]
+    ['20' TREND_LOG                             ]
+    ['27' TREND_LOG_MULTIPLE                    ]
 
     // plc4x Value
-    ['0x3FF' VENDOR_PROPRIETARY_VALUE]
+    ['0x3FF' VENDOR_PROPRIETARY_VALUE           ]
 ]
 
 [enum uint 32 BACnetPropertyIdentifier
-    ['244' ABSENTEE_LIMIT]
-    ['175' ACCEPTED_MODES]
-    ['245' ACCESS_ALARM_EVENTS]
-    ['246' ACCESS_DOORS]
-    ['247' ACCESS_EVENT]
-    ['248' ACCESS_EVENT_AUTHENTICATION_FACTOR]
-    ['249' ACCESS_EVENT_CREDENTIAL]
-    ['322' ACCESS_EVENT_TAG]
-    ['250' ACCESS_EVENT_TIME]
-    ['251' ACCESS_TRANSACTION_EVENTS]
-    ['252' ACCOMPANIMENT]
-    ['253' ACCOMPANIMENT_TIME]
-    ['1'   ACK_REQUIRED]
-    ['0'   ACKED_TRANSITIONS]
-    ['2'   ACTION]
-    ['3'   ACTION_TEXT]
-    ['254' ACTIVATION_TIME]
-    ['255' ACTIVE_AUTHENTICATION_POLICY]
-    ['481' ACTIVE_COV_MULTIPLE_SUBSCRIPTIONS]
-    ['152' ACTIVE_COV_SUBSCRIPTIONS]
-    ['4'   ACTIVE_TEXT]
-    ['5'   ACTIVE_VT_SESSIONS]
-    ['212' ACTUAL_SHED_LEVEL]
-    ['176' ADJUST_VALUE]
-    ['6'   ALARM_VALUE]
-    ['7'   ALARM_VALUES]
-    ['193' ALIGN_INTERVALS]
-    ['8'   ALL]
-    ['9'   ALL_WRITES_SUCCESSFUL]
-    ['365' ALLOW_GROUP_DELAY_INHIBIT]
-    ['399' APDU_LENGTH]
-    ['10'  APDU_SEGMENT_TIMEOUT]
-    ['11'  APDU_TIMEOUT]
-    ['12'  APPLICATION_SOFTWARE_VERSION]
-    ['13'  ARCHIVE]
-    ['256' ASSIGNED_ACCESS_RIGHTS]
-    ['447' ASSIGNED_LANDING_CALLS]
-    ['124' ATTEMPTED_SAMPLES]
-    ['257' AUTHENTICATION_FACTORS]
-    ['258' AUTHENTICATION_POLICY_LIST]
-    ['259' AUTHENTICATION_POLICY_NAMES]
-    ['260' AUTHENTICATION_STATUS]
-    ['364' AUTHORIZATION_EXEMPTIONS]
-    ['261' AUTHORIZATION_MODE]
-    ['169' AUTO_SLAVE_DISCOVERY]
-    ['125' AVERAGE_VALUE]
-    ['338' BACKUP_AND_RESTORE_STATE]
-    ['153' BACKUP_FAILURE_TIMEOUT]
-    ['339' BACKUP_PREPARATION_TIME]
-    ['407' BACNET_IP_GLOBAL_ADDRESS]
-    ['408' BACNET_IP_MODE]
-    ['409' BACNET_IP_MULTICAST_ADDRESS]
-    ['410' BACNET_IP_NAT_TRAVERSAL]
-    ['412' BACNET_IP_UDP_PORT]
-    ['435' BACNET_IPV6_MODE]
-    ['438' BACNET_IPV6_UDP_PORT]
-    ['440' BACNET_IPV6_MULTICAST_ADDRESS]
-    ['327' BASE_DEVICE_SECURITY_POLICY]
-    ['413' BBMD_ACCEPT_FD_REGISTRATIONS]
-    ['414' BBMD_BROADCAST_DISTRIBUTION_TABLE]
-    ['415' BBMD_FOREIGN_DEVICE_TABLE]
-    ['262' BELONGS_TO]
-    ['14'  BIAS]
-    ['342' BIT_MASK]
-    ['343' BIT_TEXT]
-    ['373' BLINK_WARN_ENABLE]
-    ['126' BUFFER_SIZE]
-    ['448' CAR_ASSIGNED_DIRECTION]
-    ['449' CAR_DOOR_COMMAND]
-    ['450' CAR_DOOR_STATUS]
-    ['451' CAR_DOOR_TEXT]
-    ['452' CAR_DOOR_ZONE]
-    ['453' CAR_DRIVE_STATUS]
-    ['454' CAR_LOAD]
-    ['455' CAR_LOAD_UNITS]
-    ['456' CAR_MODE]
-    ['457' CAR_MOVING_DIRECTION]
-    ['458' CAR_POSITION]
-    ['15'  CHANGE_OF_STATE_COUNT]
-    ['16'  CHANGE_OF_STATE_TIME]
-    ['416' CHANGES_PENDING]
-    ['366' CHANNEL_NUMBER]
-    ['127' CLIENT_COV_INCREMENT]
-    ['417' COMMAND]
-    ['430' COMMAND_TIME_ARRAY]
-    ['154' CONFIGURATION_FILES]
-    ['367' CONTROL_GROUPS]
-    ['19'  CONTROLLED_VARIABLE_REFERENCE]
-    ['20'  CONTROLLED_VARIABLE_UNITS]
-    ['21'  CONTROLLED_VARIABLE_VALUE]
-    ['177' COUNT]
-    ['178' COUNT_BEFORE_CHANGE]
-    ['179' COUNT_CHANGE_TIME]
-    ['22'  COV_INCREMENT]
-    ['180' COV_PERIOD]
-    ['128' COV_RESUBSCRIPTION_INTERVAL]
-    ['349' COVU_PERIOD]
-    ['350' COVU_RECIPIENTS]
-    ['263' CREDENTIAL_DISABLE]
-    ['264' CREDENTIAL_STATUS]
-    ['265' CREDENTIALS]
-    ['266' CREDENTIALS_IN_ZONE]
-    ['431' CURRENT_COMMAND_PRIORITY]
-    ['155' DATABASE_REVISION]
-    ['23'  DATE_LIST]
-    ['24'  DAYLIGHT_SAVINGS_STATUS]
-    ['267' DAYS_REMAINING]
-    ['25'  DEADBAND]
-    ['374' DEFAULT_FADE_TIME]
-    ['375' DEFAULT_RAMP_RATE]
-    ['376' DEFAULT_STEP_INCREMENT]
-    ['490' DEFAULT_SUBORDINATE_RELATIONSHIP]
-    ['393' DEFAULT_TIMEOUT]
-    ['484' DEPLOYED_PROFILE_LOCATION]
-    ['26'  DERIVATIVE_CONSTANT]
-    ['27'  DERIVATIVE_CONSTANT_UNITS]
-    ['28'  DESCRIPTION]
-    ['29'  DESCRIPTION_OF_HALT]
-    ['30'  DEVICE_ADDRESS_BINDING]
-    ['31'  DEVICE_TYPE]
-    ['156' DIRECT_READING]
-    ['328' DISTRIBUTION_KEY_REVISION]
-    ['329' DO_NOT_HIDE]
-    ['226' DOOR_ALARM_STATE]
-    ['227' DOOR_EXTENDED_PULSE_TIME]
-    ['228' DOOR_MEMBERS]
-    ['229' DOOR_OPEN_TOO_LONG_TIME]
-    ['230' DOOR_PULSE_TIME]
-    ['231' DOOR_STATUS]
-    ['232' DOOR_UNLOCK_DELAY_TIME]
-    ['213' DUTY_WINDOW]
-    ['32'  EFFECTIVE_PERIOD]
-    ['386' EGRESS_ACTIVE]
-    ['377' EGRESS_TIME]
-    ['33'  ELAPSED_ACTIVE_TIME]
-    ['459' ELEVATOR_GROUP]
-    ['133' ENABLE]
-    ['460' ENERGY_METER]
-    ['461' ENERGY_METER_REF]
-    ['268' ENTRY_POINTS]
-    ['34'  ERROR_LIMIT]
-    ['462' ESCALATOR_MODE]
-    ['354' EVENT_ALGORITHM_INHIBIT]
-    ['355' EVENT_ALGORITHM_INHIBIT_REF]
-    ['353' EVENT_DETECTION_ENABLE]
-    ['35'  EVENT_ENABLE]
-    ['351' EVENT_MESSAGE_TEXTS]
-    ['352' EVENT_MESSAGE_TEXTS_CONFIG]
-    ['83'  EVENT_PARAMETERS]
-    ['36'  EVENT_STATE]
-    ['130' EVENT_TIME_STAMPS]
-    ['37'  EVENT_TYPE]
-    ['38'  EXCEPTION_SCHEDULE]
-    ['368' EXECUTION_DELAY]
-    ['269' EXIT_POINTS]
-    ['214' EXPECTED_SHED_LEVEL]
-    ['270' EXPIRATION_TIME]
-    ['271' EXTENDED_TIME_ENABLE]
-    ['272' FAILED_ATTEMPT_EVENTS]
-    ['273' FAILED_ATTEMPTS]
-    ['274' FAILED_ATTEMPTS_TIME]
-    ['388' FAULT_HIGH_LIMIT]
-    ['389' FAULT_LOW_LIMIT]
-    ['358' FAULT_PARAMETERS]
-    ['463' FAULT_SIGNALS]
-    ['359' FAULT_TYPE]
-    ['39'  FAULT_VALUES]
-    ['418' FD_BBMD_ADDRESS]
-    ['419' FD_SUBSCRIPTION_LIFETIME]
-    ['40'  FEEDBACK_VALUE]
-    ['41'  FILE_ACCESS_METHOD]
-    ['42'  FILE_SIZE]
-    ['43'  FILE_TYPE]
-    ['44'  FIRMWARE_REVISION]
-    ['464' FLOOR_TEXT]
-    ['215' FULL_DUTY_BASELINE]
-    ['323' GLOBAL_IDENTIFIER]
-    ['465' GROUP_ID]
-    ['346' GROUP_MEMBER_NAMES]
-    ['345' GROUP_MEMBERS]
-    ['467' GROUP_MODE]
-    ['45'  HIGH_LIMIT]
-    ['468' HIGHER_DECK]
-    ['47'  IN_PROCESS]
-    ['378' IN_PROGRESS]
-    ['46'  INACTIVE_TEXT]
-    ['394' INITIAL_TIMEOUT]
-    ['181' INPUT_REFERENCE]
-    ['469' INSTALLATION_ID]
-    ['48'  INSTANCE_OF]
-    ['379' INSTANTANEOUS_POWER]
-    ['49'  INTEGRAL_CONSTANT]
-    ['50'  INTEGRAL_CONSTANT_UNITS]
-    ['387' INTERFACE_VALUE]
-    ['195' INTERVAL_OFFSET]
-    ['400' IP_ADDRESS]
-    ['401' IP_DEFAULT_GATEWAY]
-    ['402' IP_DHCP_ENABLE]
-    ['403' IP_DHCP_LEASE_TIME]
-    ['404' IP_DHCP_LEASE_TIME_REMAINING]
-    ['405' IP_DHCP_SERVER]
-    ['406' IP_DNS_SERVER]
-    ['411' IP_SUBNET_MASK]
-    ['436' IPV6_ADDRESS]
-    ['442' IPV6_AUTO_ADDRESSING_ENABLE]
-    ['439' IPV6_DEFAULT_GATEWAY]
-    ['443' IPV6_DHCP_LEASE_TIME]
-    ['444' IPV6_DHCP_LEASE_TIME_REMAINING]
-    ['445' IPV6_DHCP_SERVER]
-    ['441' IPV6_DNS_SERVER]
-    ['437' IPV6_PREFIX_LENGTH]
-    ['446' IPV6_ZONE_INDEX]
-    ['344' IS_UTC]
-    ['330' KEY_SETS]
-    ['471' LANDING_CALL_CONTROL]
-    ['470' LANDING_CALLS]
-    ['472' LANDING_DOOR_STATUS]
-    ['275' LAST_ACCESS_EVENT]
-    ['276' LAST_ACCESS_POINT]
-    ['432' LAST_COMMAND_TIME]
-    ['277' LAST_CREDENTIAL_ADDED]
-    ['278' LAST_CREDENTIAL_ADDED_TIME]
-    ['279' LAST_CREDENTIAL_REMOVED]
-    ['280' LAST_CREDENTIAL_REMOVED_TIME]
-    ['331' LAST_KEY_SERVER]
-    ['173' LAST_NOTIFY_RECORD]
-    ['369' LAST_PRIORITY]
-    ['196' LAST_RESTART_REASON]
-    ['157' LAST_RESTORE_TIME]
-    ['395' LAST_STATE_CHANGE]
-    ['281' LAST_USE_TIME]
-    ['166' LIFE_SAFETY_ALARM_VALUES]
-    ['380' LIGHTING_COMMAND]
-    ['381' LIGHTING_COMMAND_DEFAULT_PRIORITY]
-    ['52'  LIMIT_ENABLE]
-    ['182' LIMIT_MONITORING_INTERVAL]
-    ['420' LINK_SPEED]
-    ['422' LINK_SPEED_AUTONEGOTIATE]
-    ['421' LINK_SPEEDS]
-    ['53'  LIST_OF_GROUP_MEMBERS]
-    ['54'  LIST_OF_OBJECT_PROPERTY_REFERENCES]
-    ['56'  LOCAL_DATE]
-    ['360' LOCAL_FORWARDING_ONLY]
-    ['57'  LOCAL_TIME]
-    ['58'  LOCATION]
-    ['233' LOCK_STATUS]
-    ['282' LOCKOUT]
-    ['283' LOCKOUT_RELINQUISH_TIME]
-    ['131' LOG_BUFFER]
-    ['132' LOG_DEVICE_OBJECT_PROPERTY]
-    ['134' LOG_INTERVAL]
-    ['183' LOGGING_OBJECT]
-    ['184' LOGGING_RECORD]
-    ['197' LOGGING_TYPE]
-    ['390' LOW_DIFF_LIMIT]
-    ['59'  LOW_LIMIT]
-    ['473' LOWER_DECK]
-    ['423' MAC_ADDRESS]
-    ['474' MACHINE_ROOM_ID]
-    ['158' MAINTENANCE_REQUIRED]
-    ['475' MAKING_CAR_CALL]
-    ['60'  MANIPULATED_VARIABLE_REFERENCE]
-    ['170' MANUAL_SLAVE_ADDRESS_BINDING]
-    ['234' MASKED_ALARM_VALUES]
-    ['382' MAX_ACTUAL_VALUE]
-    ['62'  MAX_APDU_LENGTH_ACCEPTED]
-    ['285' MAX_FAILED_ATTEMPTS]
-    ['63'  MAX_INFO_FRAMES]
-    ['64'  MAX_MASTER]
-    ['65'  MAX_PRES_VALUE]
-    ['167' MAX_SEGMENTS_ACCEPTED]
-    ['61'  MAXIMUM_OUTPUT]
-    ['135' MAXIMUM_VALUE]
-    ['149' MAXIMUM_VALUE_TIMESTAMP]
-    ['159' MEMBER_OF]
-    ['347' MEMBER_STATUS_FLAGS]
-    ['286' MEMBERS]
-    ['383' MIN_ACTUAL_VALUE]
-    ['69'  MIN_PRES_VALUE]
-    ['66'  MINIMUM_OFF_TIME]
-    ['67'  MINIMUM_ON_TIME]
-    ['68'  MINIMUM_OUTPUT]
-    ['136' MINIMUM_VALUE]
-    ['150' MINIMUM_VALUE_TIMESTAMP]
-    ['160' MODE]
-    ['70'  MODEL_NAME]
-    ['71'  MODIFICATION_DATE]
-    ['287' MUSTER_POINT]
-    ['288' NEGATIVE_ACCESS_RULES]
-    ['332' NETWORK_ACCESS_SECURITY_POLICIES]
-    ['424' NETWORK_INTERFACE_NAME]
-    ['425' NETWORK_NUMBER]
-    ['426' NETWORK_NUMBER_QUALITY]
-    ['427' NETWORK_TYPE]
-    ['476' NEXT_STOPPING_FLOOR]
-    ['207' NODE_SUBTYPE]
-    ['208' NODE_TYPE]
-    ['17'  NOTIFICATION_CLASS]
-    ['137' NOTIFICATION_THRESHOLD]
-    ['72'  NOTIFY_TYPE]
-    ['73'  NUMBER_OF_APDU_RETRIES]
-    ['289' NUMBER_OF_AUTHENTICATION_POLICIES]
-    ['74'  NUMBER_OF_STATES]
-    ['75'  OBJECT_IDENTIFIER]
-    ['76'  OBJECT_LIST]
-    ['77'  OBJECT_NAME]
-    ['78'  OBJECT_PROPERTY_REFERENCE]
-    ['79'  OBJECT_TYPE]
-    ['290' OCCUPANCY_COUNT]
-    ['291' OCCUPANCY_COUNT_ADJUST]
-    ['292' OCCUPANCY_COUNT_ENABLE]
-    ['294' OCCUPANCY_LOWER_LIMIT]
-    ['295' OCCUPANCY_LOWER_LIMIT_ENFORCED]
-    ['296' OCCUPANCY_STATE]
-    ['297' OCCUPANCY_UPPER_LIMIT]
-    ['298' OCCUPANCY_UPPER_LIMIT_ENFORCED]
-    ['477' OPERATION_DIRECTION]
-    ['161' OPERATION_EXPECTED]
-    ['80'  OPTIONAL]
-    ['81'  OUT_OF_SERVICE]
-    ['82'  OUTPUT_UNITS]
-    ['333' PACKET_REORDER_TIME]
-    ['300' PASSBACK_MODE]
-    ['301' PASSBACK_TIMEOUT]
-    ['478' PASSENGER_ALARM]
-    ['84'  POLARITY]
-    ['363' PORT_FILTER]
-    ['302' POSITIVE_ACCESS_RULES]
-    ['384' POWER]
-    ['479' POWER_MODE]
-    ['185' PRESCALE]
-    ['85'  PRESENT_VALUE]
-    ['86'  PRIORITY]
-    ['87'  PRIORITY_ARRAY]
-    ['88'  PRIORITY_FOR_WRITING]
-    ['89'  PROCESS_IDENTIFIER]
-    ['361' PROCESS_IDENTIFIER_FILTER]
-    ['485' PROFILE_LOCATION]
-    ['168' PROFILE_NAME]
-    ['90'  PROGRAM_CHANGE]
-    ['91'  PROGRAM_LOCATION]
-    ['92'  PROGRAM_STATE]
-    ['371' PROPERTY_LIST]
-    ['93'  PROPORTIONAL_CONSTANT]
-    ['94'  PROPORTIONAL_CONSTANT_UNITS]
-    ['482' PROTOCOL_LEVEL]
-    ['95'  PROTOCOL_CONFORMANCE_CLASS]
-    ['96'  PROTOCOL_OBJECT_TYPES_SUPPORTED]
-    ['139' PROTOCOL_REVISION]
-    ['97'  PROTOCOL_SERVICES_SUPPORTED]
-    ['98'  PROTOCOL_VERSION]
-    ['186' PULSE_RATE]
-    ['99'  READ_ONLY]
-    ['303' REASON_FOR_DISABLE]
-    ['100' REASON_FOR_HALT]
-    ['102' RECIPIENT_LIST]
-    ['141' RECORD_COUNT]
-    ['140' RECORDS_SINCE_NOTIFICATION]
-    ['483' REFERENCE_PORT]
-    ['480' REGISTERED_CAR_CALL]
-    ['103' RELIABILITY]
-    ['357' RELIABILITY_EVALUATION_INHIBIT]
-    ['104' RELINQUISH_DEFAULT]
-    ['491' REPRESENTS]
-    ['218' REQUESTED_SHED_LEVEL]
-    ['348' REQUESTED_UPDATE_INTERVAL]
-    ['105' REQUIRED]
-    ['106' RESOLUTION]
-    ['202' RESTART_NOTIFICATION_RECIPIENTS]
-    ['340' RESTORE_COMPLETION_TIME]
-    ['341' RESTORE_PREPARATION_TIME]
-    ['428' ROUTING_TABLE]
-    ['187' SCALE]
-    ['188' SCALE_FACTOR]
-    ['174' SCHEDULE_DEFAULT]
-    ['235' SECURED_STATUS]
-    ['334' SECURITY_PDU_TIMEOUT]
-    ['335' SECURITY_TIME_WINDOW]
-    ['107' SEGMENTATION_SUPPORTED]
-    ['372' SERIAL_NUMBER]
-    ['108' SETPOINT]
-    ['109' SETPOINT_REFERENCE]
-    ['162' SETTING]
-    ['219' SHED_DURATION]
-    ['220' SHED_LEVEL_DESCRIPTIONS]
-    ['221' SHED_LEVELS]
-    ['163' SILENCED]
-    ['171' SLAVE_ADDRESS_BINDING]
-    ['172' SLAVE_PROXY_ENABLE]
-    ['142' START_TIME]
-    ['396' STATE_CHANGE_VALUES]
-    ['222' STATE_DESCRIPTION]
-    ['110' STATE_TEXT]
-    ['111' STATUS_FLAGS]
-    ['143' STOP_TIME]
-    ['144' STOP_WHEN_FULL]
-    ['391' STRIKE_COUNT]
-    ['209' STRUCTURED_OBJECT_LIST]
-    ['210' SUBORDINATE_ANNOTATIONS]
-    ['211' SUBORDINATE_LIST]
-    ['487' SUBORDINATE_NODE_TYPES]
-    ['489' SUBORDINATE_RELATIONSHIPS]
-    ['488' SUBORDINATE_TAGS]
-    ['362' SUBSCRIBED_RECIPIENTS]
-    ['305' SUPPORTED_FORMAT_CLASSES]
-    ['304' SUPPORTED_FORMATS]
-    ['336' SUPPORTED_SECURITY_ALGORITHMS]
-    ['112' SYSTEM_STATUS]
-    ['486' TAGS]
-    ['306' THREAT_AUTHORITY]
-    ['307' THREAT_LEVEL]
-    ['113' TIME_DELAY]
-    ['356' TIME_DELAY_NORMAL]
-    ['114' TIME_OF_ACTIVE_TIME_RESET]
-    ['203' TIME_OF_DEVICE_RESTART]
-    ['115' TIME_OF_STATE_COUNT_RESET]
-    ['392' TIME_OF_STRIKE_COUNT_RESET]
-    ['204' TIME_SYNCHRONIZATION_INTERVAL]
-    ['116' TIME_SYNCHRONIZATION_RECIPIENTS]
-    ['397' TIMER_RUNNING]
-    ['398' TIMER_STATE]
-    ['145' TOTAL_RECORD_COUNT]
-    ['308' TRACE_FLAG]
-    ['164' TRACKING_VALUE]
-    ['309' TRANSACTION_NOTIFICATION_CLASS]
-    ['385' TRANSITION]
-    ['205' TRIGGER]
-    ['117' UNITS]
-    ['118' UPDATE_INTERVAL]
-    ['337' UPDATE_KEY_SET_TIMEOUT]
-    ['189' UPDATE_TIME]
-    ['310' USER_EXTERNAL_IDENTIFIER]
-    ['311' USER_INFORMATION_REFERENCE]
-    ['317' USER_NAME]
-    ['318' USER_TYPE]
-    ['319' USES_REMAINING]
-    ['119' UTC_OFFSET]
-    ['206' UTC_TIME_SYNCHRONIZATION_RECIPIENTS]
-    ['146' VALID_SAMPLES]
-    ['190' VALUE_BEFORE_CHANGE]
-    ['192' VALUE_CHANGE_TIME]
-    ['191' VALUE_SET]
-    ['433' VALUE_SOURCE]
-    ['434' VALUE_SOURCE_ARRAY]
-    ['151' VARIANCE_VALUE]
-    ['120' VENDOR_IDENTIFIER]
-    ['121' VENDOR_NAME]
-    ['326' VERIFICATION_TIME]
-    ['429' VIRTUAL_MAC_ADDRESS_TABLE]
-    ['122' VT_CLASSES_SUPPORTED]
-    ['123' WEEKLY_SCHEDULE]
-    ['147' WINDOW_INTERVAL]
-    ['148' WINDOW_SAMPLES]
-    ['370' WRITE_STATUS]
-    ['320' ZONE_FROM]
-    ['165' ZONE_MEMBERS]
-    ['321' ZONE_TO]
+    ['244' ABSENTEE_LIMIT                       ]
+    ['175' ACCEPTED_MODES                       ]
+    ['245' ACCESS_ALARM_EVENTS                  ]
+    ['246' ACCESS_DOORS                         ]
+    ['247' ACCESS_EVENT                         ]
+    ['248' ACCESS_EVENT_AUTHENTICATION_FACTOR   ]
+    ['249' ACCESS_EVENT_CREDENTIAL              ]
+    ['322' ACCESS_EVENT_TAG                     ]
+    ['250' ACCESS_EVENT_TIME                    ]
+    ['251' ACCESS_TRANSACTION_EVENTS            ]
+    ['252' ACCOMPANIMENT                        ]
+    ['253' ACCOMPANIMENT_TIME                   ]
+    ['1'   ACK_REQUIRED                         ]
+    ['0'   ACKED_TRANSITIONS                    ]
+    ['2'   ACTION                               ]
+    ['3'   ACTION_TEXT                          ]
+    ['254' ACTIVATION_TIME                      ]
+    ['255' ACTIVE_AUTHENTICATION_POLICY         ]
+    ['481' ACTIVE_COV_MULTIPLE_SUBSCRIPTIONS    ]
+    ['152' ACTIVE_COV_SUBSCRIPTIONS             ]
+    ['4'   ACTIVE_TEXT                          ]
+    ['5'   ACTIVE_VT_SESSIONS                   ]
+    ['212' ACTUAL_SHED_LEVEL                    ]
+    ['176' ADJUST_VALUE                         ]
+    ['6'   ALARM_VALUE                          ]
+    ['7'   ALARM_VALUES                         ]
+    ['193' ALIGN_INTERVALS                      ]
+    ['8'   ALL                                  ]
+    ['9'   ALL_WRITES_SUCCESSFUL                ]
+    ['365' ALLOW_GROUP_DELAY_INHIBIT            ]
+    ['399' APDU_LENGTH                          ]
+    ['10'  APDU_SEGMENT_TIMEOUT                 ]
+    ['11'  APDU_TIMEOUT                         ]
+    ['12'  APPLICATION_SOFTWARE_VERSION         ]
+    ['13'  ARCHIVE                              ]
+    ['256' ASSIGNED_ACCESS_RIGHTS               ]
+    ['447' ASSIGNED_LANDING_CALLS               ]
+    ['124' ATTEMPTED_SAMPLES                    ]
+    ['257' AUTHENTICATION_FACTORS               ]
+    ['258' AUTHENTICATION_POLICY_LIST           ]
+    ['259' AUTHENTICATION_POLICY_NAMES          ]
+    ['260' AUTHENTICATION_STATUS                ]
+    ['364' AUTHORIZATION_EXEMPTIONS             ]
+    ['261' AUTHORIZATION_MODE                   ]
+    ['169' AUTO_SLAVE_DISCOVERY                 ]
+    ['125' AVERAGE_VALUE                        ]
+    ['338' BACKUP_AND_RESTORE_STATE             ]
+    ['153' BACKUP_FAILURE_TIMEOUT               ]
+    ['339' BACKUP_PREPARATION_TIME              ]
+    ['407' BACNET_IP_GLOBAL_ADDRESS             ]
+    ['408' BACNET_IP_MODE                       ]
+    ['409' BACNET_IP_MULTICAST_ADDRESS          ]
+    ['410' BACNET_IP_NAT_TRAVERSAL              ]
+    ['412' BACNET_IP_UDP_PORT                   ]
+    ['435' BACNET_IPV6_MODE                     ]
+    ['438' BACNET_IPV6_UDP_PORT                 ]
+    ['440' BACNET_IPV6_MULTICAST_ADDRESS        ]
+    ['327' BASE_DEVICE_SECURITY_POLICY          ]
+    ['413' BBMD_ACCEPT_FD_REGISTRATIONS         ]
+    ['414' BBMD_BROADCAST_DISTRIBUTION_TABLE    ]
+    ['415' BBMD_FOREIGN_DEVICE_TABLE            ]
+    ['262' BELONGS_TO                           ]
+    ['14'  BIAS                                 ]
+    ['342' BIT_MASK                             ]
+    ['343' BIT_TEXT                             ]
+    ['373' BLINK_WARN_ENABLE                    ]
+    ['126' BUFFER_SIZE                          ]
+    ['448' CAR_ASSIGNED_DIRECTION               ]
+    ['449' CAR_DOOR_COMMAND                     ]
+    ['450' CAR_DOOR_STATUS                      ]
+    ['451' CAR_DOOR_TEXT                        ]
+    ['452' CAR_DOOR_ZONE                        ]
+    ['453' CAR_DRIVE_STATUS                     ]
+    ['454' CAR_LOAD                             ]
+    ['455' CAR_LOAD_UNITS                       ]
+    ['456' CAR_MODE                             ]
+    ['457' CAR_MOVING_DIRECTION                 ]
+    ['458' CAR_POSITION                         ]
+    ['15'  CHANGE_OF_STATE_COUNT                ]
+    ['16'  CHANGE_OF_STATE_TIME                 ]
+    ['416' CHANGES_PENDING                      ]
+    ['366' CHANNEL_NUMBER                       ]
+    ['127' CLIENT_COV_INCREMENT                 ]
+    ['417' COMMAND                              ]
+    ['430' COMMAND_TIME_ARRAY                   ]
+    ['154' CONFIGURATION_FILES                  ]
+    ['367' CONTROL_GROUPS                       ]
+    ['19'  CONTROLLED_VARIABLE_REFERENCE        ]
+    ['20'  CONTROLLED_VARIABLE_UNITS            ]
+    ['21'  CONTROLLED_VARIABLE_VALUE            ]
+    ['177' COUNT                                ]
+    ['178' COUNT_BEFORE_CHANGE                  ]
+    ['179' COUNT_CHANGE_TIME                    ]
+    ['22'  COV_INCREMENT                        ]
+    ['180' COV_PERIOD                           ]
+    ['128' COV_RESUBSCRIPTION_INTERVAL          ]
+    ['349' COVU_PERIOD                          ]
+    ['350' COVU_RECIPIENTS                      ]
+    ['263' CREDENTIAL_DISABLE                   ]
+    ['264' CREDENTIAL_STATUS                    ]
+    ['265' CREDENTIALS                          ]
+    ['266' CREDENTIALS_IN_ZONE                  ]
+    ['431' CURRENT_COMMAND_PRIORITY             ]
+    ['155' DATABASE_REVISION                    ]
+    ['23'  DATE_LIST                            ]
+    ['24'  DAYLIGHT_SAVINGS_STATUS              ]
+    ['267' DAYS_REMAINING                       ]
+    ['25'  DEADBAND                             ]
+    ['374' DEFAULT_FADE_TIME                    ]
+    ['375' DEFAULT_RAMP_RATE                    ]
+    ['376' DEFAULT_STEP_INCREMENT               ]
+    ['490' DEFAULT_SUBORDINATE_RELATIONSHIP     ]
+    ['393' DEFAULT_TIMEOUT                      ]
+    ['484' DEPLOYED_PROFILE_LOCATION            ]
+    ['26'  DERIVATIVE_CONSTANT                  ]
+    ['27'  DERIVATIVE_CONSTANT_UNITS            ]
+    ['28'  DESCRIPTION                          ]
+    ['29'  DESCRIPTION_OF_HALT                  ]
+    ['30'  DEVICE_ADDRESS_BINDING               ]
+    ['31'  DEVICE_TYPE                          ]
+    ['156' DIRECT_READING                       ]
+    ['328' DISTRIBUTION_KEY_REVISION            ]
+    ['329' DO_NOT_HIDE                          ]
+    ['226' DOOR_ALARM_STATE                     ]
+    ['227' DOOR_EXTENDED_PULSE_TIME             ]
+    ['228' DOOR_MEMBERS                         ]
+    ['229' DOOR_OPEN_TOO_LONG_TIME              ]
+    ['230' DOOR_PULSE_TIME                      ]
+    ['231' DOOR_STATUS                          ]
+    ['232' DOOR_UNLOCK_DELAY_TIME               ]
+    ['213' DUTY_WINDOW                          ]
+    ['32'  EFFECTIVE_PERIOD                     ]
+    ['386' EGRESS_ACTIVE                        ]
+    ['377' EGRESS_TIME                          ]
+    ['33'  ELAPSED_ACTIVE_TIME                  ]
+    ['459' ELEVATOR_GROUP                       ]
+    ['133' ENABLE                               ]
+    ['460' ENERGY_METER                         ]
+    ['461' ENERGY_METER_REF                     ]
+    ['268' ENTRY_POINTS                         ]
+    ['34'  ERROR_LIMIT                          ]
+    ['462' ESCALATOR_MODE                       ]
+    ['354' EVENT_ALGORITHM_INHIBIT              ]
+    ['355' EVENT_ALGORITHM_INHIBIT_REF          ]
+    ['353' EVENT_DETECTION_ENABLE               ]
+    ['35'  EVENT_ENABLE                         ]
+    ['351' EVENT_MESSAGE_TEXTS                  ]
+    ['352' EVENT_MESSAGE_TEXTS_CONFIG           ]
+    ['83'  EVENT_PARAMETERS                     ]
+    ['36'  EVENT_STATE                          ]
+    ['130' EVENT_TIME_STAMPS                    ]
+    ['37'  EVENT_TYPE                           ]
+    ['38'  EXCEPTION_SCHEDULE                   ]
+    ['368' EXECUTION_DELAY                      ]
+    ['269' EXIT_POINTS                          ]
+    ['214' EXPECTED_SHED_LEVEL                  ]
+    ['270' EXPIRATION_TIME                      ]
+    ['271' EXTENDED_TIME_ENABLE                 ]
+    ['272' FAILED_ATTEMPT_EVENTS                ]
+    ['273' FAILED_ATTEMPTS                      ]
+    ['274' FAILED_ATTEMPTS_TIME                 ]
+    ['388' FAULT_HIGH_LIMIT                     ]
+    ['389' FAULT_LOW_LIMIT                      ]
+    ['358' FAULT_PARAMETERS                     ]
+    ['463' FAULT_SIGNALS                        ]
+    ['359' FAULT_TYPE                           ]
+    ['39'  FAULT_VALUES                         ]
+    ['418' FD_BBMD_ADDRESS                      ]
+    ['419' FD_SUBSCRIPTION_LIFETIME             ]
+    ['40'  FEEDBACK_VALUE                       ]
+    ['41'  FILE_ACCESS_METHOD                   ]
+    ['42'  FILE_SIZE                            ]
+    ['43'  FILE_TYPE                            ]
+    ['44'  FIRMWARE_REVISION                    ]
+    ['464' FLOOR_TEXT                           ]
+    ['215' FULL_DUTY_BASELINE                   ]
+    ['323' GLOBAL_IDENTIFIER                    ]
+    ['465' GROUP_ID                             ]
+    ['346' GROUP_MEMBER_NAMES                   ]
+    ['345' GROUP_MEMBERS                        ]
+    ['467' GROUP_MODE                           ]
+    ['45'  HIGH_LIMIT                           ]
+    ['468' HIGHER_DECK                          ]
+    ['47'  IN_PROCESS                           ]
+    ['378' IN_PROGRESS                          ]
+    ['46'  INACTIVE_TEXT                        ]
+    ['394' INITIAL_TIMEOUT                      ]
+    ['181' INPUT_REFERENCE                      ]
+    ['469' INSTALLATION_ID                      ]
+    ['48'  INSTANCE_OF                          ]
+    ['379' INSTANTANEOUS_POWER                  ]
+    ['49'  INTEGRAL_CONSTANT                    ]
+    ['50'  INTEGRAL_CONSTANT_UNITS              ]
+    ['387' INTERFACE_VALUE                      ]
+    ['195' INTERVAL_OFFSET                      ]
+    ['400' IP_ADDRESS                           ]
+    ['401' IP_DEFAULT_GATEWAY                   ]
+    ['402' IP_DHCP_ENABLE                       ]
+    ['403' IP_DHCP_LEASE_TIME                   ]
+    ['404' IP_DHCP_LEASE_TIME_REMAINING         ]
+    ['405' IP_DHCP_SERVER                       ]
+    ['406' IP_DNS_SERVER                        ]
+    ['411' IP_SUBNET_MASK                       ]
+    ['436' IPV6_ADDRESS                         ]
+    ['442' IPV6_AUTO_ADDRESSING_ENABLE          ]
+    ['439' IPV6_DEFAULT_GATEWAY                 ]
+    ['443' IPV6_DHCP_LEASE_TIME                 ]
+    ['444' IPV6_DHCP_LEASE_TIME_REMAINING       ]
+    ['445' IPV6_DHCP_SERVER                     ]
+    ['441' IPV6_DNS_SERVER                      ]
+    ['437' IPV6_PREFIX_LENGTH                   ]
+    ['446' IPV6_ZONE_INDEX                      ]
+    ['344' IS_UTC                               ]
+    ['330' KEY_SETS                             ]
+    ['471' LANDING_CALL_CONTROL                 ]
+    ['470' LANDING_CALLS                        ]
+    ['472' LANDING_DOOR_STATUS                  ]
+    ['275' LAST_ACCESS_EVENT                    ]
+    ['276' LAST_ACCESS_POINT                    ]
+    ['432' LAST_COMMAND_TIME                    ]
+    ['277' LAST_CREDENTIAL_ADDED                ]
+    ['278' LAST_CREDENTIAL_ADDED_TIME           ]
+    ['279' LAST_CREDENTIAL_REMOVED              ]
+    ['280' LAST_CREDENTIAL_REMOVED_TIME         ]
+    ['331' LAST_KEY_SERVER                      ]
+    ['173' LAST_NOTIFY_RECORD                   ]
+    ['369' LAST_PRIORITY                        ]
+    ['196' LAST_RESTART_REASON                  ]
+    ['157' LAST_RESTORE_TIME                    ]
+    ['395' LAST_STATE_CHANGE                    ]
+    ['281' LAST_USE_TIME                        ]
+    ['166' LIFE_SAFETY_ALARM_VALUES             ]
+    ['380' LIGHTING_COMMAND                     ]
+    ['381' LIGHTING_COMMAND_DEFAULT_PRIORITY    ]
+    ['52'  LIMIT_ENABLE                         ]
+    ['182' LIMIT_MONITORING_INTERVAL            ]
+    ['420' LINK_SPEED                           ]
+    ['422' LINK_SPEED_AUTONEGOTIATE             ]
+    ['421' LINK_SPEEDS                          ]
+    ['53'  LIST_OF_GROUP_MEMBERS                ]
+    ['54'  LIST_OF_OBJECT_PROPERTY_REFERENCES   ]
+    ['56'  LOCAL_DATE                           ]
+    ['360' LOCAL_FORWARDING_ONLY                ]
+    ['57'  LOCAL_TIME                           ]
+    ['58'  LOCATION                             ]
+    ['233' LOCK_STATUS                          ]
+    ['282' LOCKOUT                              ]
+    ['283' LOCKOUT_RELINQUISH_TIME              ]
+    ['131' LOG_BUFFER                           ]
+    ['132' LOG_DEVICE_OBJECT_PROPERTY           ]
+    ['134' LOG_INTERVAL                         ]
+    ['183' LOGGING_OBJECT                       ]
+    ['184' LOGGING_RECORD                       ]
+    ['197' LOGGING_TYPE                         ]
+    ['390' LOW_DIFF_LIMIT                       ]
+    ['59'  LOW_LIMIT                            ]
+    ['473' LOWER_DECK                           ]
+    ['423' MAC_ADDRESS                          ]
+    ['474' MACHINE_ROOM_ID                      ]
+    ['158' MAINTENANCE_REQUIRED                 ]
+    ['475' MAKING_CAR_CALL                      ]
+    ['60'  MANIPULATED_VARIABLE_REFERENCE       ]
+    ['170' MANUAL_SLAVE_ADDRESS_BINDING         ]
+    ['234' MASKED_ALARM_VALUES                  ]
+    ['382' MAX_ACTUAL_VALUE                     ]
+    ['62'  MAX_APDU_LENGTH_ACCEPTED             ]
+    ['285' MAX_FAILED_ATTEMPTS                  ]
+    ['63'  MAX_INFO_FRAMES                      ]
+    ['64'  MAX_MASTER                           ]
+    ['65'  MAX_PRES_VALUE                       ]
+    ['167' MAX_SEGMENTS_ACCEPTED                ]
+    ['61'  MAXIMUM_OUTPUT                       ]
+    ['135' MAXIMUM_VALUE                        ]
+    ['149' MAXIMUM_VALUE_TIMESTAMP              ]
+    ['159' MEMBER_OF                            ]
+    ['347' MEMBER_STATUS_FLAGS                  ]
+    ['286' MEMBERS                              ]
+    ['383' MIN_ACTUAL_VALUE                     ]
+    ['69'  MIN_PRES_VALUE                       ]
+    ['66'  MINIMUM_OFF_TIME                     ]
+    ['67'  MINIMUM_ON_TIME                      ]
+    ['68'  MINIMUM_OUTPUT                       ]
+    ['136' MINIMUM_VALUE                        ]
+    ['150' MINIMUM_VALUE_TIMESTAMP              ]
+    ['160' MODE                                 ]
+    ['70'  MODEL_NAME                           ]
+    ['71'  MODIFICATION_DATE                    ]
+    ['287' MUSTER_POINT                         ]
+    ['288' NEGATIVE_ACCESS_RULES                ]
+    ['332' NETWORK_ACCESS_SECURITY_POLICIES     ]
+    ['424' NETWORK_INTERFACE_NAME               ]
+    ['425' NETWORK_NUMBER                       ]
+    ['426' NETWORK_NUMBER_QUALITY               ]
+    ['427' NETWORK_TYPE                         ]
+    ['476' NEXT_STOPPING_FLOOR                  ]
+    ['207' NODE_SUBTYPE                         ]
+    ['208' NODE_TYPE                            ]
+    ['17'  NOTIFICATION_CLASS                   ]
+    ['137' NOTIFICATION_THRESHOLD               ]
+    ['72'  NOTIFY_TYPE                          ]
+    ['73'  NUMBER_OF_APDU_RETRIES               ]
+    ['289' NUMBER_OF_AUTHENTICATION_POLICIES    ]
+    ['74'  NUMBER_OF_STATES                     ]
+    ['75'  OBJECT_IDENTIFIER                    ]
+    ['76'  OBJECT_LIST                          ]
+    ['77'  OBJECT_NAME                          ]
+    ['78'  OBJECT_PROPERTY_REFERENCE            ]
+    ['79'  OBJECT_TYPE                          ]
+    ['290' OCCUPANCY_COUNT                      ]
+    ['291' OCCUPANCY_COUNT_ADJUST               ]
+    ['292' OCCUPANCY_COUNT_ENABLE               ]
+    ['294' OCCUPANCY_LOWER_LIMIT                ]
+    ['295' OCCUPANCY_LOWER_LIMIT_ENFORCED       ]
+    ['296' OCCUPANCY_STATE                      ]
+    ['297' OCCUPANCY_UPPER_LIMIT                ]
+    ['298' OCCUPANCY_UPPER_LIMIT_ENFORCED       ]
+    ['477' OPERATION_DIRECTION                  ]
+    ['161' OPERATION_EXPECTED                   ]
+    ['80'  OPTIONAL                             ]
+    ['81'  OUT_OF_SERVICE                       ]
+    ['82'  OUTPUT_UNITS                         ]
+    ['333' PACKET_REORDER_TIME                  ]
+    ['300' PASSBACK_MODE                        ]
+    ['301' PASSBACK_TIMEOUT                     ]
+    ['478' PASSENGER_ALARM                      ]
+    ['84'  POLARITY                             ]
+    ['363' PORT_FILTER                          ]
+    ['302' POSITIVE_ACCESS_RULES                ]
+    ['384' POWER                                ]
+    ['479' POWER_MODE                           ]
+    ['185' PRESCALE                             ]
+    ['85'  PRESENT_VALUE                        ]
+    ['86'  PRIORITY                             ]
+    ['87'  PRIORITY_ARRAY                       ]
+    ['88'  PRIORITY_FOR_WRITING                 ]
+    ['89'  PROCESS_IDENTIFIER                   ]
+    ['361' PROCESS_IDENTIFIER_FILTER            ]
+    ['485' PROFILE_LOCATION                     ]
+    ['168' PROFILE_NAME                         ]
+    ['90'  PROGRAM_CHANGE                       ]
+    ['91'  PROGRAM_LOCATION                     ]
+    ['92'  PROGRAM_STATE                        ]
+    ['371' PROPERTY_LIST                        ]
+    ['93'  PROPORTIONAL_CONSTANT                ]
+    ['94'  PROPORTIONAL_CONSTANT_UNITS          ]
+    ['482' PROTOCOL_LEVEL                       ]
+    ['95'  PROTOCOL_CONFORMANCE_CLASS           ]
+    ['96'  PROTOCOL_OBJECT_TYPES_SUPPORTED      ]
+    ['139' PROTOCOL_REVISION                    ]
+    ['97'  PROTOCOL_SERVICES_SUPPORTED          ]
+    ['98'  PROTOCOL_VERSION                     ]
+    ['186' PULSE_RATE                           ]
+    ['99'  READ_ONLY                            ]
+    ['303' REASON_FOR_DISABLE                   ]
+    ['100' REASON_FOR_HALT                      ]
+    ['102' RECIPIENT_LIST                       ]
+    ['141' RECORD_COUNT                         ]
+    ['140' RECORDS_SINCE_NOTIFICATION           ]
+    ['483' REFERENCE_PORT                       ]
+    ['480' REGISTERED_CAR_CALL                  ]
+    ['103' RELIABILITY                          ]
+    ['357' RELIABILITY_EVALUATION_INHIBIT       ]
+    ['104' RELINQUISH_DEFAULT                   ]
+    ['491' REPRESENTS                           ]
+    ['218' REQUESTED_SHED_LEVEL                 ]
+    ['348' REQUESTED_UPDATE_INTERVAL            ]
+    ['105' REQUIRED                             ]
+    ['106' RESOLUTION                           ]
+    ['202' RESTART_NOTIFICATION_RECIPIENTS      ]
+    ['340' RESTORE_COMPLETION_TIME              ]
+    ['341' RESTORE_PREPARATION_TIME             ]
+    ['428' ROUTING_TABLE                        ]
+    ['187' SCALE                                ]
+    ['188' SCALE_FACTOR                         ]
+    ['174' SCHEDULE_DEFAULT                     ]
+    ['235' SECURED_STATUS                       ]
+    ['334' SECURITY_PDU_TIMEOUT                 ]
+    ['335' SECURITY_TIME_WINDOW                 ]
+    ['107' SEGMENTATION_SUPPORTED               ]
+    ['372' SERIAL_NUMBER                        ]
+    ['108' SETPOINT                             ]
+    ['109' SETPOINT_REFERENCE                   ]
+    ['162' SETTING                              ]
+    ['219' SHED_DURATION                        ]
+    ['220' SHED_LEVEL_DESCRIPTIONS              ]
+    ['221' SHED_LEVELS                          ]
+    ['163' SILENCED                             ]
+    ['171' SLAVE_ADDRESS_BINDING                ]
+    ['172' SLAVE_PROXY_ENABLE                   ]
+    ['142' START_TIME                           ]
+    ['396' STATE_CHANGE_VALUES                  ]
+    ['222' STATE_DESCRIPTION                    ]
+    ['110' STATE_TEXT                           ]
+    ['111' STATUS_FLAGS                         ]
+    ['143' STOP_TIME                            ]
+    ['144' STOP_WHEN_FULL                       ]
+    ['391' STRIKE_COUNT                         ]
+    ['209' STRUCTURED_OBJECT_LIST               ]
+    ['210' SUBORDINATE_ANNOTATIONS              ]
+    ['211' SUBORDINATE_LIST                     ]
+    ['487' SUBORDINATE_NODE_TYPES               ]
+    ['489' SUBORDINATE_RELATIONSHIPS            ]
+    ['488' SUBORDINATE_TAGS                     ]
+    ['362' SUBSCRIBED_RECIPIENTS                ]
+    ['305' SUPPORTED_FORMAT_CLASSES             ]
+    ['304' SUPPORTED_FORMATS                    ]
+    ['336' SUPPORTED_SECURITY_ALGORITHMS        ]
+    ['112' SYSTEM_STATUS                        ]
+    ['486' TAGS                                 ]
+    ['306' THREAT_AUTHORITY                     ]
+    ['307' THREAT_LEVEL                         ]
+    ['113' TIME_DELAY                           ]
+    ['356' TIME_DELAY_NORMAL                    ]
+    ['114' TIME_OF_ACTIVE_TIME_RESET            ]
+    ['203' TIME_OF_DEVICE_RESTART               ]
+    ['115' TIME_OF_STATE_COUNT_RESET            ]
+    ['392' TIME_OF_STRIKE_COUNT_RESET           ]
+    ['204' TIME_SYNCHRONIZATION_INTERVAL        ]
+    ['116' TIME_SYNCHRONIZATION_RECIPIENTS      ]
+    ['397' TIMER_RUNNING                        ]
+    ['398' TIMER_STATE                          ]
+    ['145' TOTAL_RECORD_COUNT                   ]
+    ['308' TRACE_FLAG                           ]
+    ['164' TRACKING_VALUE                       ]
+    ['309' TRANSACTION_NOTIFICATION_CLASS       ]
+    ['385' TRANSITION                           ]
+    ['205' TRIGGER                              ]
+    ['117' UNITS                                ]
+    ['118' UPDATE_INTERVAL                      ]
+    ['337' UPDATE_KEY_SET_TIMEOUT               ]
+    ['189' UPDATE_TIME                          ]
+    ['310' USER_EXTERNAL_IDENTIFIER             ]
+    ['311' USER_INFORMATION_REFERENCE           ]
+    ['317' USER_NAME                            ]
+    ['318' USER_TYPE                            ]
+    ['319' USES_REMAINING                       ]
+    ['119' UTC_OFFSET                           ]
+    ['206' UTC_TIME_SYNCHRONIZATION_RECIPIENTS  ]
+    ['146' VALID_SAMPLES                        ]
+    ['190' VALUE_BEFORE_CHANGE                  ]
+    ['192' VALUE_CHANGE_TIME                    ]
+    ['191' VALUE_SET                            ]
+    ['433' VALUE_SOURCE                         ]
+    ['434' VALUE_SOURCE_ARRAY                   ]
+    ['151' VARIANCE_VALUE                       ]
+    ['120' VENDOR_IDENTIFIER                    ]
+    ['121' VENDOR_NAME                          ]
+    ['326' VERIFICATION_TIME                    ]
+    ['429' VIRTUAL_MAC_ADDRESS_TABLE            ]
+    ['122' VT_CLASSES_SUPPORTED                 ]
+    ['123' WEEKLY_SCHEDULE                      ]
+    ['147' WINDOW_INTERVAL                      ]
+    ['148' WINDOW_SAMPLES                       ]
+    ['370' WRITE_STATUS                         ]
+    ['320' ZONE_FROM                            ]
+    ['165' ZONE_MEMBERS                         ]
+    ['321' ZONE_TO                              ]
 
     // plc4x definition
-    ['9999' VENDOR_PROPRIETARY_VALUE]
+    ['9999' VENDOR_PROPRIETARY_VALUE            ]
 ]