1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-09-28 22:15:23 +08:00

apply patches in #485

This commit is contained in:
Joel Bender 2023-05-10 01:33:01 -04:00
parent 941892134a
commit a5be2ad5ac
12 changed files with 646 additions and 303 deletions

View File

@ -18,7 +18,7 @@ if _sys.platform not in _supported_platforms:
# Project Metadata
#
__version__ = '0.18.5'
__version__ = '0.18.7'
__author__ = 'Joel Bender'
__email__ = 'joel@carrickbender.com'

View File

@ -9,7 +9,7 @@ from .errors import MissingRequiredParameter
from .primitivedata import Atomic, BitString, Boolean, CharacterString, Date, Double, \
Enumerated, Integer, Null, ObjectIdentifier, OctetString, Real, Time, \
Unsigned, Unsigned16, Tag
Unsigned, Unsigned8, Unsigned16, Tag
from .constructeddata import Any, AnyAtomic, ArrayOf, Choice, Element, \
Sequence, SequenceOf
@ -95,8 +95,7 @@ class ObjectTypesSupported(BitString):
, 'accessUser':35
, 'accessZone':36
, 'credentialDataInput':37
, 'networkPort':56
, 'networkSecurity':38
, 'networkSecurity':38 # removed revision 22
, 'bitstringValue':39
, 'characterstringValue':40
, 'datePatternValue':41
@ -113,8 +112,16 @@ class ObjectTypesSupported(BitString):
, 'alertEnrollment':52
, 'channel':53
, 'lightingOutput':54
, 'binaryLightingOutput':55
, 'networkPort':56
, 'elevatorGroup':57
, 'escalator':58
, 'lift':59
, 'staging':60
, 'auditLog':61
, 'auditReporter':62
}
bitLen = 55
bitLen = 63
class ResultFlags(BitString):
bitNames = \
@ -167,8 +174,16 @@ class ServicesSupported(BitString):
, 'subscribeCOVProperty':38
, 'getEventInformation':39
, 'writeGroup':40
, 'subscribeCOVPropertyMultiple':41
, 'confirmedCOVNotificationMultiple':42
, 'unconfirmedCOVNotificationMultiple':43
, 'confirmedAuditNotification':44
, 'auditLogQuery':45
, 'unconfirmedAuditNotification':46
, 'whoAmI':47
, 'youAre':48
}
bitLen = 41
bitLen = 49
class StatusFlags(BitString):
bitNames = \
@ -758,20 +773,27 @@ class ErrorCode(Enumerated):
, 'badDestinationDeviceId':87
, 'badSignature':88
, 'badSourceAddress':89
, 'badTimestamp':90
, 'badTimestamp':90 #Removed revision 22
, 'busy':82
, 'cannotUseKey':91
, 'cannotVerifyMessageId':92
, 'bvlcFunctionUnknown':143
, 'bvlcProprietaryFunctionUnknown':144
, 'cannotUseKey':91 #Removed revision 22
, 'cannotVerifyMessageId':92 #Removed revision 22
, 'characterSetNotSupported':41
, 'communicationDisabled':83
, 'configurationInProgress':2
, 'correctKeyRevision':93
, 'correctKeyRevision':93 #Removed revision 22
, 'covSubscriptionFailed':43
, 'datatypeNotSupported':47
, 'deleteFdtEntryFailed':120
, 'deviceBusy':3
, 'destinationDeviceIdRequired':94
, 'destinationDeviceIdRequired':94 #Removed revision 22
, 'distributeBroadcastFailed':121
, 'dnsError':192
, 'dnsNameResolutionFailed':190
, 'dnsResolverFailure':191
, 'dnsUnavailable':189
, 'duplicateEntry': 137
, 'duplicateMessage':95
, 'duplicateName':48
, 'duplicateObjectId':49
@ -780,28 +802,51 @@ class ErrorCode(Enumerated):
, 'encryptionRequired':97
, 'fileAccessDenied':5
, 'fileFull':128
, 'headerEncodingError':145
, 'headerNotUnderstood':146
, 'httpError':165
, 'httpNoUpgrade':153
, 'httpNotAServer':164
, 'httpResourceNotLocal':154
, 'httpProxyAuthenticationFailed':155
, 'httpResponseTimeout':156
, 'httpResponseSyntaxError':157
, 'httpResponseValueError':158
, 'httpResponseMissingHeader':159
, 'httpTemporaryUnavailable':163
, 'httpUnexpectedResponseCode':152
, 'httpUpgradeRequired':161
, 'httpUpgradeError':162
, 'httpWebsocketHeaderError':160
, 'inconsistentConfiguration':129
, 'inconsistentObjectType':130
, 'inconsistentParameters':7
, 'inconsistentSelectionCriterion':8
, 'incorrectKey':98
, 'incorrectKey':98 #Removed revision 22
, 'internalError':131
, 'invalidArrayIndex':42
, 'invalidConfigurationData':46
, 'invalidDataEncoding':142
, 'invalidDataType':9
, 'invalidEventState':73
, 'invalidFileAccessMethod':10
, 'invalidFileStartPosition':11
, 'invalidKeyData':99
, 'invalidKeyData':99 #Removed revision 22
, 'invalidParameterDataType':13
, 'invalidTag':57
, 'invalidTimeStamp':14
, 'keyUpdateInProgress':100
, 'invalidValueInThisState':138
, 'ipAddressNotReachable':198
, 'ipError':199
, 'keyUpdateInProgress':100 #Removed revision 22
, 'listElementNotFound':81
, 'listItemNotNumbered':140
, 'listItemNotTimestamped': 141
, 'logBufferFull':75
, 'loggedValuePurged':76
, 'malformedMessage':101
, 'messageTooLong':113
, 'messageIncomplete':147
, 'missingRequiredParameter':16
, 'networkDown':58
, 'noAlarmConfigured':74
@ -811,10 +856,12 @@ class ErrorCode(Enumerated):
, 'noSpaceToAddListElement':19
, 'noSpaceToWriteProperty':20
, 'noVtSessionsAvailable':21
, 'nodeDuplicateVmac':151
, 'notABacnetScHub':148
, 'notConfigured':132
, 'notConfiguredForTriggeredLogging':78
, 'notCovProperty':44
, 'notKeyServer':102
, 'notKeyServer':102 #Removed revision 22
, 'notRouterToDnet':110
, 'objectDeletionNotPermitted':23
, 'objectIdentifierAlreadyExists':24
@ -824,6 +871,7 @@ class ErrorCode(Enumerated):
, 'outOfMemory':133
, 'parameterOutOfRange':80
, 'passwordFailure':26
, 'payloadExpected':149
, 'propertyIsNotAList':22
, 'propertyIsNotAnArray':50
, 'readAccessDenied':27
@ -847,19 +895,34 @@ class ErrorCode(Enumerated):
, 'serviceRequestDenied':29
, 'sourceSecurityRequired':104
, 'success':84
, 'tcpClosedByLocal':195
, 'tcpClosedOther':196
, 'tcpConnectTimeout':193
, 'tcpConnectionRefused':194
, 'tcpError':197
, 'timeout':30
, 'tooManyKeys':105
, 'tlsClientAuthenticationFailed':182
, 'tlsClientCertificateError':180
, 'tlsClientCertificateExpired':184
, 'tlsClientCertificateRevoked':186
, 'tleError':188
, 'tlsServerAuthenticationFailed':183
, 'tlsServerCertificateError':181
, 'tlsServerCertificateExpired':185
, 'tlsServerCertificateRevoked':187
, 'tooManyKeys':105 #Removed revision 22
, 'unexpectedData':150
, 'unknownAuthenticationType':106
, 'unknownDevice':70
, 'unknownFileSize':122
, 'unknownKey':107
, 'unknownKeyRevision':108
, 'unknownKey':107 #Removed revision 22
, 'unknownKeyRevision':108 #Removed revision 22
, 'unknownNetworkMessage':112
, 'unknownObject':31
, 'unknownProperty':32
, 'unknownSubscription':79
, 'umknownRoute':71
, 'unknownSourceMessage':109
, 'unknownSourceMessage':109 #Removed revision 22
, 'unknownVtClass':34
, 'unknownVtSession':35
, 'unsupportedObjectType':36
@ -868,6 +931,20 @@ class ErrorCode(Enumerated):
, 'valueTooLong':134
, 'vtSessionAlreadyClosed':38
, 'vtSessionTerminationFailure':39
, 'websocket-close-error':168
, 'websocket-closed-abnormally':173
, 'websocket-closed-by-peer':169
, 'websocket-data-against-policy':175
, 'websocket-data-inconsistent':174
, 'websocket-data-not-accepted':172
, 'websocket-endpoint-leaves':170
, 'websocket-error':179
, 'websocket-extension-missing':177
, 'websocket-frame-too-long':176
, 'websocket-protocol-error':171
, 'websocket-request-unavailable':178
, 'websocket-scheme-not-supported':166
, 'websocket-unknown-control-message':167
, 'writeAccessDenied':40
, 'writeBdtFailed':116
}
@ -1108,9 +1185,9 @@ class PropertyIdentifier(Enumerated):
enumerations = \
{ 'absenteeLimit':244
, 'tags':486
, 'profileLocation':91
, 'profileLocation':485
, 'eventDetectionEnabled':353
, 'apduLength':388
, 'apduLength':399
, 'linkSpeed':420
, 'linkSpeeds':421
, 'linkSpeedAutonegotiate':422
@ -1140,7 +1217,7 @@ class PropertyIdentifier(Enumerated):
, 'ipv6DefaultGateway':439
, 'bacnetIPv6MulticastAddress':440
, 'ipv6DNSServer':441
, 'ipv6AutoAddressingEnabled':442
, 'ipv6AutoAddressingEnable':442
, 'ipv6DHCPLeaseTime':443
, 'ipv6DHCPLeaseTimeRemaining':444
, 'ipv6DHCPServer':445
@ -1364,7 +1441,7 @@ class PropertyIdentifier(Enumerated):
, 'negativeAccessRules':288
, 'networkAccessSecurityPolicies':332
, 'networkNumber':425
, 'networkNumberQuality':427
, 'networkNumberQuality':426
, 'networkType': 427
, 'nodeSubtype':207
, 'nodeType':208
@ -1539,6 +1616,7 @@ class Reliability(Enumerated):
, 'proprietaryCommandFailure': 22
, 'faultsListed': 23
, 'referencedObjectFault': 24
, 'multiStateOutOfRange':25
}
class RestartReason(Enumerated):
@ -1552,6 +1630,7 @@ class RestartReason(Enumerated):
, 'hardwareWatchdog':5
, 'softwareWatchdog':6
, 'suspended':7
, 'activateChanges': 8
}
class SecurityLevel(Enumerated):
@ -1680,41 +1759,42 @@ class RouterEntryStatus(Enumerated):
class HostAddress(Choice):
choiceElements = \
[ Element('none', Null)
, Element('ipAddress', OctetString) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString) # Internet host name (see RFC 1123)
[ Element('none', Null, 0)
, Element('ipAddress', OctetString, 1) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString, 2) # Internet host name (see RFC 1123)
]
class HostNPort(Sequence):
sequenceElements = \
[ Element('host', HostAddress)
, Element('port', Unsigned16)
[ Element('host', HostAddress, 0)
, Element('port', Unsigned16, 1)
]
class BDTEntry(Sequence):
sequenceElements = \
[ Element('bbmdAddress', HostNPort)
, Element('broadcastMask', OctetString) # shall be present if BACnet/IP, and absent for BACnet/IPv6
[ Element('bbmdAddress', HostNPort, 0)
, Element('broadcastMask', OctetString, 1) # shall be present if BACnet/IP, and absent for BACnet/IPv6
]
class FDTEntry(Sequence):
sequenceElements = \
[ Element('bacnetIPAddress', OctetString) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16) # remaining time to live in seconds, incl. grace period
[ Element('bacnetIPAddress', OctetString, 0) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16, 1) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16, 2) # remaining time to live in seconds, incl. grace period
]
class VMACEntry(Sequence):
sequenceElements = \
[ Element('virtualMACAddress', OctetString) # maximum size 6 octets
, Element('nativeMACAddress', OctetString)
[ Element('virtualMACAddress', OctetString, 0) # maximum size 6 octets
, Element('nativeMACAddress', OctetString, 1)
]
class RouterEntry(Sequence):
sequenceElements = \
[ Element('networkNumber', Unsigned16)
, Element('macAddress', OctetString)
, Element('status', RouterEntryStatus) # Defined Above
[ Element('networkNumber', Unsigned16, 0)
, Element('macAddress', OctetString, 1)
, Element('status', RouterEntryStatus, 2) # Defined Above
, Element('performanceIndex', Unsigned8, 3, True)
]
class NameValue(Sequence):

View File

@ -1979,11 +1979,11 @@ class NetworkPortObject(Object):
, ReadableProperty('protocolLevel', ProtocolLevel) #482
, OptionalProperty('referencePort', Unsigned) #483
, ReadableProperty('networkNumber', Unsigned16) #425
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #427
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #426
, ReadableProperty('changesPending', Boolean) #416
, OptionalProperty('command', NetworkPortCommand) #417
, OptionalProperty('macAddress', OctetString) #423
, ReadableProperty('apduLength', Unsigned) #388
, ReadableProperty('apduLength', Unsigned) #399
, ReadableProperty('linkSpeed', Real) #420
, OptionalProperty('linkSpeeds', ArrayOf(Real)) #421
, OptionalProperty('eventTimeStamps', ArrayOf(TimeStamp)) #130
@ -2014,7 +2014,7 @@ class NetworkPortObject(Object):
, OptionalProperty('ipv6DefaultGateway', OctetString) #439
, OptionalProperty('bacnetIPv6MulticastAddress', OctetString) #440
, OptionalProperty('ipv6DNSServer', OctetString) #441
, OptionalProperty('ipv6AutoAddressingEnabled', Boolean) #442
, OptionalProperty('ipv6AutoAddressingEnable', Boolean) #442
, OptionalProperty('ipv6DHCPLeaseTime', Unsigned) #443
, OptionalProperty('ipv6DHCPLeaseTimeRemaining', Unsigned) #444
, OptionalProperty('ipv6DHCPServer', OctetString) #445
@ -2039,7 +2039,7 @@ class NetworkPortObject(Object):
, ReadableProperty('reliabilityEvaluationInhibit', Boolean) #357
, OptionalProperty('propertyList', ArrayOf(PropertyIdentifier)) #371
, OptionalProperty('tags', ArrayOf(NameValue)) #486
, OptionalProperty('profileLocation', CharacterString) #91
, OptionalProperty('profileLocation', CharacterString) #485
, OptionalProperty('profileName', CharacterString) #168
]

View File

@ -18,7 +18,7 @@ if _sys.platform not in _supported_platforms:
# Project Metadata
#
__version__ = '0.18.5'
__version__ = '0.18.7'
__author__ = 'Joel Bender'
__email__ = 'joel@carrickbender.com'

View File

@ -117,8 +117,7 @@ class ObjectTypesSupported(BitString):
, 'accessUser':35
, 'accessZone':36
, 'credentialDataInput':37
, 'networkPort':56
, 'networkSecurity':38
, 'networkSecurity':38 # removed revision 22
, 'bitstringValue':39
, 'characterstringValue':40
, 'datePatternValue':41
@ -135,8 +134,16 @@ class ObjectTypesSupported(BitString):
, 'alertEnrollment':52
, 'channel':53
, 'lightingOutput':54
, 'binaryLightingOutput':55
, 'networkPort':56
, 'elevatorGroup':57
, 'escalator':58
, 'lift':59
, 'staging':60
, 'auditLog':61
, 'auditReporter':62
}
bitLen = 55
bitLen = 63
class PriorityFilter(BitString):
bitNames = \
@ -210,8 +217,16 @@ class ServicesSupported(BitString):
, 'subscribeCOVProperty':38
, 'getEventInformation':39
, 'writeGroup':40
, 'subscribeCOVPropertyMultiple':41
, 'confirmedCOVNotificationMultiple':42
, 'unconfirmedCOVNotificationMultiple':43
, 'confirmedAuditNotification':44
, 'auditLogQuery':45
, 'unconfirmedAuditNotification':46
, 'whoAmI':47
, 'youAre':48
}
bitLen = 41
bitLen = 49
class StatusFlags(BitString):
bitNames = \
@ -842,20 +857,26 @@ class ErrorCode(Enumerated):
, 'badDestinationDeviceId':87
, 'badSignature':88
, 'badSourceAddress':89
, 'badTimestamp':90
, 'badTimestamp':90 #Removed revision 22
, 'busy':82
, 'cannotUseKey':91
, 'cannotVerifyMessageId':92
, 'bvlcFunctionUnknown':143
, 'bvlcProprietaryFunctionUnknown':144
, 'cannotUseKey':91 #Removed revision 22
, 'cannotVerifyMessageId':92 #Removed revision 22
, 'characterSetNotSupported':41
, 'communicationDisabled':83
, 'configurationInProgress':2
, 'correctKeyRevision':93
, 'correctKeyRevision':93 #Removed revision 22
, 'covSubscriptionFailed':43
, 'datatypeNotSupported':47
, 'deleteFdtEntryFailed':120
, 'deviceBusy':3
, 'destinationDeviceIdRequired':94
, 'destinationDeviceIdRequired':94 #Removed revision 22
, 'distributeBroadcastFailed':121
, 'dnsNameResolutionFailed':190
, 'dnsResolverFailure':191
, 'dnsUnavailable':189
, 'duplicateEntry': 137
, 'duplicateMessage':95
, 'duplicateName':48
, 'duplicateObjectId':49
@ -864,14 +885,31 @@ class ErrorCode(Enumerated):
, 'encryptionRequired':97
, 'fileAccessDenied':5
, 'fileFull':128
, 'headerEncodingError':145
, 'headerNotUnderstood':146
, 'httpError':165
, 'httpNoUpgrade':153
, 'httpNotAServer':164
, 'httpResourceNotLocal':154
, 'httpProxyAuthenticationFailed':155
, 'httpResponseTimeout':156
, 'httpResponseSyntaxError':157
, 'httpResponseValueError':158
, 'httpResponseMissingHeader':159
, 'httpTemporaryUnavailable':163
, 'httpUnexpectedResponseCode':152
, 'httpUpgradeRequired':161
, 'httpUpgradeError':162
, 'httpWebsocketHeaderError':160
, 'inconsistentConfiguration':129
, 'inconsistentObjectType':130
, 'inconsistentParameters':7
, 'inconsistentSelectionCriterion':8
, 'incorrectKey':98
, 'incorrectKey':98 #Removed revision 22
, 'internalError':131
, 'invalidArrayIndex':42
, 'invalidConfigurationData':46
, 'invalidDataEncoding':142
, 'invalidDataType':9
, 'invalidEventState':73
, 'invalidFileAccessMethod':10
@ -880,12 +918,18 @@ class ErrorCode(Enumerated):
, 'invalidParameterDataType':13
, 'invalidTag':57
, 'invalidTimeStamp':14
, 'keyUpdateInProgress':100
, 'invalidValueInThisState':138
, 'ipAddressNotReachable':198
, 'ipError':199
, 'keyUpdateInProgress':100 #Removed revision 22
, 'listElementNotFound':81
, 'listItemNotNumbered':140
, 'listItemNotTimestamped': 141
, 'logBufferFull':75
, 'loggedValuePurged':76
, 'malformedMessage':101
, 'messageTooLong':113
, 'messageIncomplete':147
, 'missingRequiredParameter':16
, 'networkDown':58
, 'noAlarmConfigured':74
@ -895,10 +939,12 @@ class ErrorCode(Enumerated):
, 'noSpaceToAddListElement':19
, 'noSpaceToWriteProperty':20
, 'noVtSessionsAvailable':21
, 'nodeDuplicateVmac':151
, 'notABacnetScHub':148
, 'notConfigured':132
, 'notConfiguredForTriggeredLogging':78
, 'notCovProperty':44
, 'notKeyServer':102
, 'notKeyServer':102 #Removed revision 22
, 'notRouterToDnet':110
, 'objectDeletionNotPermitted':23
, 'objectIdentifierAlreadyExists':24
@ -908,6 +954,7 @@ class ErrorCode(Enumerated):
, 'outOfMemory':133
, 'parameterOutOfRange':80
, 'passwordFailure':26
, 'payloadExpected':149
, 'propertyIsNotAList':22
, 'propertyIsNotAnArray':50
, 'readAccessDenied':27
@ -931,19 +978,34 @@ class ErrorCode(Enumerated):
, 'serviceRequestDenied':29
, 'sourceSecurityRequired':104
, 'success':84
, 'tcpClosedByLocal':195
, 'tcpClosedOther':196
, 'tcpConnectTimeout':193
, 'tcpConnectionRefused':194
, 'tcpError':197
, 'timeout':30
, 'tooManyKeys':105
, 'tlsClientAuthenticationFailed':182
, 'tlsClientCertificateError':180
, 'tlsClientCertificateExpired':184
, 'tlsClientCertificateRevoked':186
, 'tleError':188
, 'tlsServerAuthenticationFailed':183
, 'tlsServerCertificateError':181
, 'tlsServerCertificateExpired':185
, 'tlsServerCertificateRevoked':187
, 'tooManyKeys':105 #Removed revision 22
, 'unexpectedData':150
, 'unknownAuthenticationType':106
, 'unknownDevice':70
, 'unknownFileSize':122
, 'unknownKey':107
, 'unknownKeyRevision':108
, 'unknownKey':107 #Removed revision 22
, 'unknownKeyRevision':108 #Removed revision 22
, 'unknownNetworkMessage':112
, 'unknownObject':31
, 'unknownProperty':32
, 'unknownSubscription':79
, 'umknownRoute':71
, 'unknownSourceMessage':109
, 'unknownSourceMessage':109 #Removed revision 22
, 'unknownVtClass':34
, 'unknownVtSession':35
, 'unsupportedObjectType':36
@ -952,6 +1014,20 @@ class ErrorCode(Enumerated):
, 'valueTooLong':134
, 'vtSessionAlreadyClosed':38
, 'vtSessionTerminationFailure':39
, 'websocket-close-error':168
, 'websocket-closed-abnormally':173
, 'websocket-closed-by-peer':169
, 'websocket-data-against-policy':175
, 'websocket-data-inconsistent':174
, 'websocket-data-not-accepted':172
, 'websocket-endpoint-leaves':170
, 'websocket-error':179
, 'websocket-extension-missing':177
, 'websocket-frame-too-long':176
, 'websocket-protocol-error':171
, 'websocket-request-unavailable':178
, 'websocket-scheme-not-supported':166
, 'websocket-unknown-control-message':167
, 'writeAccessDenied':40
, 'writeBdtFailed':116
}
@ -1326,7 +1402,7 @@ class PropertyIdentifier(Enumerated):
, 'all':8
, 'allowGroupDelayInhibit':365
, 'allWritesSuccessful':9
, 'apduLength':388
, 'apduLength':399
, 'apduSegmentTimeout':10
, 'apduTimeout':11
, 'applicationSoftwareVersion':12
@ -1509,7 +1585,7 @@ class PropertyIdentifier(Enumerated):
, 'ipDNSServer':406
, 'ipSubnetMask':411
, 'ipv6Address':436
, 'ipv6AutoAddressingEnabled':442
, 'ipv6AutoAddressingEnable':442
, 'ipv6DefaultGateway':439
, 'ipv6DHCPLeaseTime':443
, 'ipv6DHCPLeaseTimeRemaining':444
@ -1602,7 +1678,7 @@ class PropertyIdentifier(Enumerated):
, 'networkAccessSecurityPolicies':332
, 'networkInterfaceName':424
, 'networkNumber':425
, 'networkNumberQuality':427
, 'networkNumberQuality':426
, 'networkType': 427
, 'nextStoppingFloor':476
, 'nodeSubtype':207
@ -1650,7 +1726,7 @@ class PropertyIdentifier(Enumerated):
, 'priorityForWriting':88
, 'processIdentifier':89
, 'processIdentifierFilter':361
, 'profileLocation':91
, 'profileLocation':485
, 'profileName':168
, 'programChange':90
, 'programLocation':91
@ -1837,6 +1913,7 @@ class Reliability(Enumerated):
, 'proprietaryCommandFailure': 22
, 'faultsListed': 23
, 'referencedObjectFault': 24
, 'multiStateOutOfRange':25
}
class RestartReason(Enumerated):
@ -1850,6 +1927,7 @@ class RestartReason(Enumerated):
, 'hardwareWatchdog':5
, 'softwareWatchdog':6
, 'suspended':7
, 'activateChanges': 8
}
class SecurityLevel(Enumerated):
@ -1997,34 +2075,35 @@ class RouterEntryStatus(Enumerated):
class HostAddress(Choice):
choiceElements = \
[ Element('none', Null)
, Element('ipAddress', OctetString) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString) # Internet host name (see RFC 1123)
[ Element('none', Null, 0)
, Element('ipAddress', OctetString, 1) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString, 2) # Internet host name (see RFC 1123)
]
class HostNPort(Sequence):
sequenceElements = \
[ Element('host', HostAddress)
, Element('port', Unsigned16)
[ Element('host', HostAddress, 0)
, Element('port', Unsigned16, 1)
]
class BDTEntry(Sequence):
sequenceElements = \
[ Element('bbmdAddress', HostNPort)
, Element('broadcastMask', OctetString) # shall be present if BACnet/IP, and absent for BACnet/IPv6
[ Element('bbmdAddress', HostNPort, 0)
, Element('broadcastMask', OctetString, 1) # shall be present if BACnet/IP, and absent for BACnet/IPv6
]
class FDTEntry(Sequence):
sequenceElements = \
[ Element('bacnetIPAddress', OctetString) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16) # remaining time to live in seconds, incl. grace period
[ Element('bacnetIPAddress', OctetString, 0) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16, 1) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16, 2) # remaining time to live in seconds, incl. grace period
, Element('performanceIndex', Unsigned8, 3, True)
]
class VMACEntry(Sequence):
sequenceElements = \
[ Element('virtualMACAddress', OctetString) # maximum size 6 octets
, Element('nativeMACAddress', OctetString)
[ Element('virtualMACAddress', OctetString, 0) # maximum size 6 octets
, Element('nativeMACAddress', OctetString, 1)
]
class PropertyReference(Sequence):

View File

@ -2340,11 +2340,11 @@ class NetworkPortObject(Object):
, ReadableProperty('protocolLevel', ProtocolLevel) #482
, OptionalProperty('referencePort', Unsigned) #483
, ReadableProperty('networkNumber', Unsigned16) #425
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #427
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #426
, ReadableProperty('changesPending', Boolean) #416
, OptionalProperty('command', NetworkPortCommand) #417
, OptionalProperty('macAddress', OctetString) #423
, ReadableProperty('apduLength', Unsigned) #388
, ReadableProperty('apduLength', Unsigned) #399
, ReadableProperty('linkSpeed', Real) #420
, OptionalProperty('linkSpeeds', ArrayOf(Real)) #421
, OptionalProperty('linkSpeedAutonegotiate', Boolean) #422
@ -2374,7 +2374,7 @@ class NetworkPortObject(Object):
, OptionalProperty('ipv6DefaultGateway', OctetString) #439
, OptionalProperty('bacnetIPv6MulticastAddress', OctetString) #440
, OptionalProperty('ipv6DNSServer', OctetString) #441
, OptionalProperty('ipv6AutoAddressingEnabled', Boolean) #442
, OptionalProperty('ipv6AutoAddressingEnable', Boolean) #442
, OptionalProperty('ipv6DHCPLeaseTime', Unsigned) #443
, OptionalProperty('ipv6DHCPLeaseTimeRemaining', Unsigned) #444
, OptionalProperty('ipv6DHCPServer', OctetString) #445

View File

@ -18,7 +18,7 @@ if _sys.platform not in _supported_platforms:
# Project Metadata
#
__version__ = '0.18.6'
__version__ = '0.18.7'
__author__ = 'Joel Bender'
__email__ = 'joel@carrickbender.com'

View File

@ -117,8 +117,7 @@ class ObjectTypesSupported(BitString):
, 'accessUser':35
, 'accessZone':36
, 'credentialDataInput':37
, 'networkPort':56
, 'networkSecurity':38
, 'networkSecurity':38 # removed revision 22
, 'bitstringValue':39
, 'characterstringValue':40
, 'datePatternValue':41
@ -135,8 +134,16 @@ class ObjectTypesSupported(BitString):
, 'alertEnrollment':52
, 'channel':53
, 'lightingOutput':54
, 'binaryLightingOutput':55
, 'networkPort':56
, 'elevatorGroup':57
, 'escalator':58
, 'lift':59
, 'staging':60
, 'auditLog':61
, 'auditReporter':62
}
bitLen = 55
bitLen = 63
class PriorityFilter(BitString):
bitNames = \
@ -210,8 +217,16 @@ class ServicesSupported(BitString):
, 'subscribeCOVProperty':38
, 'getEventInformation':39
, 'writeGroup':40
, 'subscribeCOVPropertyMultiple':41
, 'confirmedCOVNotificationMultiple':42
, 'unconfirmedCOVNotificationMultiple':43
, 'confirmedAuditNotification':44
, 'auditLogQuery':45
, 'unconfirmedAuditNotification':46
, 'whoAmI':47
, 'youAre':48
}
bitLen = 41
bitLen = 49
class StatusFlags(BitString):
bitNames = \
@ -842,20 +857,27 @@ class ErrorCode(Enumerated):
, 'badDestinationDeviceId':87
, 'badSignature':88
, 'badSourceAddress':89
, 'badTimestamp':90
, 'badTimestamp':90 #Removed revision 22
, 'busy':82
, 'cannotUseKey':91
, 'cannotVerifyMessageId':92
, 'bvlcFunctionUnknown':143
, 'bvlcProprietaryFunctionUnknown':144
, 'cannotUseKey':91 #Removed revision 22
, 'cannotVerifyMessageId':92 #Removed revision 22
, 'characterSetNotSupported':41
, 'communicationDisabled':83
, 'configurationInProgress':2
, 'correctKeyRevision':93
, 'correctKeyRevision':93 #Removed revision 22
, 'covSubscriptionFailed':43
, 'datatypeNotSupported':47
, 'deleteFdtEntryFailed':120
, 'deviceBusy':3
, 'destinationDeviceIdRequired':94
, 'destinationDeviceIdRequired':94 #Removed revision 22
, 'distributeBroadcastFailed':121
, 'dnsError':192
, 'dnsNameResolutionFailed':190
, 'dnsResolverFailure':191
, 'dnsUnavailable':189
, 'duplicateEntry': 137
, 'duplicateMessage':95
, 'duplicateName':48
, 'duplicateObjectId':49
@ -864,28 +886,51 @@ class ErrorCode(Enumerated):
, 'encryptionRequired':97
, 'fileAccessDenied':5
, 'fileFull':128
, 'headerEncodingError':145
, 'headerNotUnderstood':146
, 'httpError':165
, 'httpNoUpgrade':153
, 'httpNotAServer':164
, 'httpResourceNotLocal':154
, 'httpProxyAuthenticationFailed':155
, 'httpResponseTimeout':156
, 'httpResponseSyntaxError':157
, 'httpResponseValueError':158
, 'httpResponseMissingHeader':159
, 'httpTemporaryUnavailable':163
, 'httpUnexpectedResponseCode':152
, 'httpUpgradeRequired':161
, 'httpUpgradeError':162
, 'httpWebsocketHeaderError':160
, 'inconsistentConfiguration':129
, 'inconsistentObjectType':130
, 'inconsistentParameters':7
, 'inconsistentSelectionCriterion':8
, 'incorrectKey':98
, 'incorrectKey':98 #Removed revision 22
, 'internalError':131
, 'invalidArrayIndex':42
, 'invalidConfigurationData':46
, 'invalidDataEncoding':142
, 'invalidDataType':9
, 'invalidEventState':73
, 'invalidFileAccessMethod':10
, 'invalidFileStartPosition':11
, 'invalidKeyData':99
, 'invalidKeyData':99 #Removed revision 22
, 'invalidParameterDataType':13
, 'invalidTag':57
, 'invalidTimeStamp':14
, 'keyUpdateInProgress':100
, 'invalidValueInThisState':138
, 'ipAddressNotReachable':198
, 'ipError':199
, 'keyUpdateInProgress':100 #Removed revision 22
, 'listElementNotFound':81
, 'listItemNotNumbered':140
, 'listItemNotTimestamped': 141
, 'logBufferFull':75
, 'loggedValuePurged':76
, 'malformedMessage':101
, 'messageTooLong':113
, 'messageIncomplete':147
, 'missingRequiredParameter':16
, 'networkDown':58
, 'noAlarmConfigured':74
@ -895,10 +940,12 @@ class ErrorCode(Enumerated):
, 'noSpaceToAddListElement':19
, 'noSpaceToWriteProperty':20
, 'noVtSessionsAvailable':21
, 'nodeDuplicateVmac':151
, 'notABacnetScHub':148
, 'notConfigured':132
, 'notConfiguredForTriggeredLogging':78
, 'notCovProperty':44
, 'notKeyServer':102
, 'notKeyServer':102 #Removed revision 22
, 'notRouterToDnet':110
, 'objectDeletionNotPermitted':23
, 'objectIdentifierAlreadyExists':24
@ -908,6 +955,7 @@ class ErrorCode(Enumerated):
, 'outOfMemory':133
, 'parameterOutOfRange':80
, 'passwordFailure':26
, 'payloadExpected':149
, 'propertyIsNotAList':22
, 'propertyIsNotAnArray':50
, 'readAccessDenied':27
@ -931,19 +979,34 @@ class ErrorCode(Enumerated):
, 'serviceRequestDenied':29
, 'sourceSecurityRequired':104
, 'success':84
, 'tcpClosedByLocal':195
, 'tcpClosedOther':196
, 'tcpConnectTimeout':193
, 'tcpConnectionRefused':194
, 'tcpError':197
, 'timeout':30
, 'tooManyKeys':105
, 'tlsClientAuthenticationFailed':182
, 'tlsClientCertificateError':180
, 'tlsClientCertificateExpired':184
, 'tlsClientCertificateRevoked':186
, 'tleError':188
, 'tlsServerAuthenticationFailed':183
, 'tlsServerCertificateError':181
, 'tlsServerCertificateExpired':185
, 'tlsServerCertificateRevoked':187
, 'tooManyKeys':105 #Removed revision 22
, 'unexpectedData':150
, 'unknownAuthenticationType':106
, 'unknownDevice':70
, 'unknownFileSize':122
, 'unknownKey':107
, 'unknownKeyRevision':108
, 'unknownKey':107 #Removed revision 22
, 'unknownKeyRevision':108 #Removed revision 22
, 'unknownNetworkMessage':112
, 'unknownObject':31
, 'unknownProperty':32
, 'unknownSubscription':79
, 'umknownRoute':71
, 'unknownSourceMessage':109
, 'unknownSourceMessage':109 #Removed revision 22
, 'unknownVtClass':34
, 'unknownVtSession':35
, 'unsupportedObjectType':36
@ -952,6 +1015,20 @@ class ErrorCode(Enumerated):
, 'valueTooLong':134
, 'vtSessionAlreadyClosed':38
, 'vtSessionTerminationFailure':39
, 'websocket-close-error':168
, 'websocket-closed-abnormally':173
, 'websocket-closed-by-peer':169
, 'websocket-data-against-policy':175
, 'websocket-data-inconsistent':174
, 'websocket-data-not-accepted':172
, 'websocket-endpoint-leaves':170
, 'websocket-error':179
, 'websocket-extension-missing':177
, 'websocket-frame-too-long':176
, 'websocket-protocol-error':171
, 'websocket-request-unavailable':178
, 'websocket-scheme-not-supported':166
, 'websocket-unknown-control-message':167
, 'writeAccessDenied':40
, 'writeBdtFailed':116
}
@ -1326,7 +1403,7 @@ class PropertyIdentifier(Enumerated):
, 'all':8
, 'allowGroupDelayInhibit':365
, 'allWritesSuccessful':9
, 'apduLength':388
, 'apduLength':399
, 'apduSegmentTimeout':10
, 'apduTimeout':11
, 'applicationSoftwareVersion':12
@ -1509,7 +1586,7 @@ class PropertyIdentifier(Enumerated):
, 'ipDNSServer':406
, 'ipSubnetMask':411
, 'ipv6Address':436
, 'ipv6AutoAddressingEnabled':442
, 'ipv6AutoAddressingEnable':442
, 'ipv6DefaultGateway':439
, 'ipv6DHCPLeaseTime':443
, 'ipv6DHCPLeaseTimeRemaining':444
@ -1602,7 +1679,7 @@ class PropertyIdentifier(Enumerated):
, 'networkAccessSecurityPolicies':332
, 'networkInterfaceName':424
, 'networkNumber':425
, 'networkNumberQuality':427
, 'networkNumberQuality':426
, 'networkType': 427
, 'nextStoppingFloor':476
, 'nodeSubtype':207
@ -1650,7 +1727,7 @@ class PropertyIdentifier(Enumerated):
, 'priorityForWriting':88
, 'processIdentifier':89
, 'processIdentifierFilter':361
, 'profileLocation':91
, 'profileLocation':485
, 'profileName':168
, 'programChange':90
, 'programLocation':91
@ -1837,6 +1914,7 @@ class Reliability(Enumerated):
, 'proprietaryCommandFailure': 22
, 'faultsListed': 23
, 'referencedObjectFault': 24
, 'multiStateOutOfRange':25
}
class RestartReason(Enumerated):
@ -1850,6 +1928,7 @@ class RestartReason(Enumerated):
, 'hardwareWatchdog':5
, 'softwareWatchdog':6
, 'suspended':7
, 'activateChanges':8
}
class SecurityLevel(Enumerated):
@ -1997,34 +2076,34 @@ class RouterEntryStatus(Enumerated):
class HostAddress(Choice):
choiceElements = \
[ Element('none', Null)
, Element('ipAddress', OctetString) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString) # Internet host name (see RFC 1123)
[ Element('none', Null, 0)
, Element('ipAddress', OctetString, 1) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString, 2) # Internet host name (see RFC 1123)
]
class HostNPort(Sequence):
sequenceElements = \
[ Element('host', HostAddress)
, Element('port', Unsigned16)
[ Element('host', HostAddress, 0)
, Element('port', Unsigned16, 1)
]
class BDTEntry(Sequence):
sequenceElements = \
[ Element('bbmdAddress', HostNPort)
, Element('broadcastMask', OctetString) # shall be present if BACnet/IP, and absent for BACnet/IPv6
[ Element('bbmdAddress', HostNPort, 0)
, Element('broadcastMask', OctetString, 1) # shall be present if BACnet/IP, and absent for BACnet/IPv6
]
class FDTEntry(Sequence):
sequenceElements = \
[ Element('bacnetIPAddress', OctetString) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16) # remaining time to live in seconds, incl. grace period
[ Element('bacnetIPAddress', OctetString, 0) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16, 1) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16, 2) # remaining time to live in seconds, incl. grace period
]
class VMACEntry(Sequence):
sequenceElements = \
[ Element('virtualMACAddress', OctetString) # maximum size 6 octets
, Element('nativeMACAddress', OctetString)
[ Element('virtualMACAddress', OctetString, 0) # maximum size 6 octets
, Element('nativeMACAddress', OctetString, 1)
]
class PropertyReference(Sequence):
@ -2035,9 +2114,10 @@ class PropertyReference(Sequence):
class RouterEntry(Sequence):
sequenceElements = \
[ Element('networkNumber', Unsigned16)
, Element('macAddress', OctetString)
, Element('status', RouterEntryStatus) # Defined Above
[ Element('networkNumber', Unsigned16, 0)
, Element('macAddress', OctetString, 1)
, Element('status', RouterEntryStatus, 2) # Defined Above
, Element('performanceIndex', Unsigned8, 3, True)
]
@bacpypes_debugging

View File

@ -2341,11 +2341,11 @@ class NetworkPortObject(Object):
, ReadableProperty('protocolLevel', ProtocolLevel) #482
, OptionalProperty('referencePort', Unsigned) #483
, ReadableProperty('networkNumber', Unsigned16) #425
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #427
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #426
, ReadableProperty('changesPending', Boolean) #416
, OptionalProperty('command', NetworkPortCommand) #417
, OptionalProperty('macAddress', OctetString) #423
, ReadableProperty('apduLength', Unsigned) #388
, ReadableProperty('apduLength', Unsigned) #399
, ReadableProperty('linkSpeed', Real) #420
, OptionalProperty('linkSpeeds', ArrayOf(Real)) #421
, OptionalProperty('linkSpeedAutonegotiate', Boolean) #422
@ -2375,7 +2375,7 @@ class NetworkPortObject(Object):
, OptionalProperty('ipv6DefaultGateway', OctetString) #439
, OptionalProperty('bacnetIPv6MulticastAddress', OctetString) #440
, OptionalProperty('ipv6DNSServer', OctetString) #441
, OptionalProperty('ipv6AutoAddressingEnabled', Boolean) #442
, OptionalProperty('ipv6AutoAddressingEnable', Boolean) #442
, OptionalProperty('ipv6DHCPLeaseTime', Unsigned) #443
, OptionalProperty('ipv6DHCPLeaseTimeRemaining', Unsigned) #444
, OptionalProperty('ipv6DHCPServer', OctetString) #445

View File

@ -185,8 +185,8 @@ def flatten(x, prefix="$"):
yield (prefix, x)
@recurring_function(APPINTERVAL)
@bacpypes_debugging
# @recurring_function(APPINTERVAL)
def update_weather_data():
"""Read the current weather data from the API and set the object values."""
if _debug:

View File

@ -1,36 +1,130 @@
from bacpypes.object import Object, ReadableProperty, OptionalProperty
from bacpypes.primitivedata import Atomic, BitString, Boolean, CharacterString, Date, \
Double, Integer, ObjectIdentifier, ObjectType, OctetString, Real, Time, \
Unsigned, Tag, Enumerated, Null
from bacpypes.primitivedata import (
Atomic,
BitString,
Boolean,
CharacterString,
Date,
Double,
Integer,
ObjectIdentifier,
ObjectType,
OctetString,
Real,
Time,
Unsigned,
Tag,
Enumerated,
Null,
)
from bacpypes.constructeddata import AnyAtomic, Array, ArrayOf, List, ListOf, \
Choice, Element, Sequence
from bacpypes.constructeddata import (
AnyAtomic,
Array,
ArrayOf,
List,
ListOf,
Choice,
Element,
Sequence,
)
from bacpypes.basetypes import AccessCredentialDisable, AccessCredentialDisableReason, \
AccessEvent, AccessPassbackMode, AccessRule, AccessThreatLevel, \
AccessUserType, AccessZoneOccupancyState, AccumulatorRecord, Action, \
ActionList, AddressBinding, AssignedAccessRights, AuthenticationFactor, \
AuthenticationFactorFormat, AuthenticationPolicy, AuthenticationStatus, \
AuthorizationException, AuthorizationMode, BackupState, BinaryPV, \
COVSubscription, CalendarEntry, ChannelValue, ClientCOV, \
CredentialAuthenticationFactor, DailySchedule, DateRange, DateTime, \
Destination, DeviceObjectPropertyReference, DeviceObjectReference, \
DeviceStatus, DoorAlarmState, DoorSecuredStatus, DoorStatus, DoorValue, \
EngineeringUnits, EventNotificationSubscription, EventParameter, \
EventState, EventTransitionBits, EventType, FaultParameter, FaultType, \
FileAccessMethod, LifeSafetyMode, LifeSafetyOperation, LifeSafetyState, \
LightingCommand, LightingInProgress, LightingTransition, LimitEnable, \
LockStatus, LogMultipleRecord, LogRecord, LogStatus, LoggingType, \
Maintenance, NetworkSecurityPolicy, NodeType, NotifyType, \
ObjectPropertyReference, ObjectTypesSupported, OptionalCharacterString, \
Polarity, PortPermission, Prescale, PriorityArray, ProcessIdSelection, \
ProgramError, ProgramRequest, ProgramState, PropertyAccessResult, \
PropertyIdentifier, Recipient, Reliability, RestartReason, Scale, \
SecurityKeySet, SecurityLevel, Segmentation, ServicesSupported, \
SetpointReference, ShedLevel, ShedState, SilencedState, SpecialEvent, \
StatusFlags, TimeStamp, VTClass, VTSession, WriteStatus
from bacpypes.basetypes import (
AccessCredentialDisable,
AccessCredentialDisableReason,
AccessEvent,
AccessPassbackMode,
AccessRule,
AccessThreatLevel,
AccessUserType,
AccessZoneOccupancyState,
AccumulatorRecord,
Action,
ActionList,
AddressBinding,
AssignedAccessRights,
AuthenticationFactor,
AuthenticationFactorFormat,
AuthenticationPolicy,
AuthenticationStatus,
AuthorizationException,
AuthorizationMode,
BackupState,
BinaryPV,
COVSubscription,
CalendarEntry,
ChannelValue,
ClientCOV,
CredentialAuthenticationFactor,
DailySchedule,
DateRange,
DateTime,
Destination,
DeviceObjectPropertyReference,
DeviceObjectReference,
DeviceStatus,
DoorAlarmState,
DoorSecuredStatus,
DoorStatus,
DoorValue,
EngineeringUnits,
EventNotificationSubscription,
EventParameter,
EventState,
EventTransitionBits,
EventType,
FaultParameter,
FaultType,
FileAccessMethod,
LifeSafetyMode,
LifeSafetyOperation,
LifeSafetyState,
LightingCommand,
LightingInProgress,
LightingTransition,
LimitEnable,
LockStatus,
LogMultipleRecord,
LogRecord,
LogStatus,
LoggingType,
Maintenance,
NetworkSecurityPolicy,
NodeType,
NotifyType,
ObjectPropertyReference,
ObjectTypesSupported,
OptionalCharacterString,
Polarity,
PortPermission,
Prescale,
PriorityArray,
ProcessIdSelection,
ProgramError,
ProgramRequest,
ProgramState,
PropertyAccessResult,
PropertyIdentifier,
Recipient,
Reliability,
RestartReason,
Scale,
SecurityKeySet,
SecurityLevel,
Segmentation,
ServicesSupported,
SetpointReference,
ShedLevel,
ShedState,
SilencedState,
SpecialEvent,
StatusFlags,
TimeStamp,
VTClass,
VTSession,
WriteStatus,
)
# TODO: add to objectIdentifier enumeration
# TODO: add to objectTypesSupported
@ -38,17 +132,15 @@ from bacpypes.basetypes import AccessCredentialDisable, AccessCredentialDisableR
# TODO: fix property names
#
# NEW PRIMITIVES
#
class Unsigned8(Unsigned):
class Unsigned8(Unsigned):
_app_tag = Tag.unsignedAppTag
def __init__(self,arg = None):
def __init__(self, arg=None):
Unsigned.__init__(self, arg)
self.value = 0
@ -65,7 +157,6 @@ class Unsigned8(Unsigned):
else:
raise TypeError("invalid constructor datatype")
@classmethod
def is_valid(cls, arg):
"""Return True if arg is valid value for the class."""
@ -76,10 +167,9 @@ class Unsigned8(Unsigned):
class Unsigned16(Unsigned):
_app_tag = Tag.unsignedAppTag
def __init__(self,arg = None):
def __init__(self, arg=None):
Unsigned.__init__(self, arg)
self.value = 0
@ -96,7 +186,6 @@ class Unsigned16(Unsigned):
else:
raise TypeError("invalid constructor datatype")
@classmethod
def is_valid(cls, arg):
"""Return True if arg is valid value for the class."""
@ -105,194 +194,207 @@ class Unsigned16(Unsigned):
def __str__(self):
return "%s(%s)" % (self.__class__.__name__, self.value)
#
# NEW BASETYPES
#
# Enumerations
class NetworkType(Enumerated):
enumerations = \
{ 'ethernet':0
, 'arcnet':1
, 'mstp':2
, 'ptp':3
, 'lontalk':4
, 'ipv4':5
, 'zigbee':6
, 'virtual': 7
enumerations = {
"ethernet": 0,
"arcnet": 1,
"mstp": 2,
"ptp": 3,
"lontalk": 4,
"ipv4": 5,
"zigbee": 6,
"virtual": 7
# , 'non-bacnet': 8 Removed in Version 1, Revision 18
, 'ipv6':9
, 'serial':10
}
,
"ipv6": 9,
"serial": 10,
}
class ProtocolLevel(Enumerated):
enumerations = \
{ 'physical':0
, 'protocol':1
, 'bacnetApplication':2
, 'nonBacnetApplication':3
}
enumerations = {
"physical": 0,
"protocol": 1,
"bacnetApplication": 2,
"nonBacnetApplication": 3,
}
class NetworkNumberQuality(Enumerated):
enumerations = \
{ 'unknown':0
, 'learned':1
, 'learnedConfigured':2
, 'configured':3
}
enumerations = {"unknown": 0, "learned": 1, "learnedConfigured": 2, "configured": 3}
class NetworkPortCommand(Enumerated):
enumerations = \
{ 'idle':0
, 'discardChanges':1
, 'renewFdDRegistration':2
, 'restartSlaveDiscovery':3
, 'renewDHCP':4
, 'restartAutonegotiation':5
, 'disconnect':6
, 'restartPort':7
}
enumerations = {
"idle": 0,
"discardChanges": 1,
"renewFdDRegistration": 2,
"restartSlaveDiscovery": 3,
"renewDHCP": 4,
"restartAutonegotiation": 5,
"disconnect": 6,
"restartPort": 7,
}
class IPMode(Enumerated):
enumerations = \
{ 'normal':0
, 'foreign':1
, 'bbmd':2
}
enumerations = {"normal": 0, "foreign": 1, "bbmd": 2}
class RouterEntryStatus(Enumerated):
# This was defined directly in the RouterEntry Sequence in the standard, but I moved it up here because
# I didn't see anywhere else you defined something that way.
enumerations = \
{ 'available':0
, 'busy':1
, 'disconnected':2
}
enumerations = {"available": 0, "busy": 1, "disconnected": 2}
# Choices
class HostAddress(Choice):
choiceElements = \
[ Element('none', Null)
, Element('ipAddress', OctetString) # 4 octets for B/IP or 16 octets for B/IPv6
, Element('name', CharacterString) # Internet host name (see RFC 1123)
]
choiceElements = [
Element("none", Null),
Element("ipAddress", OctetString), # 4 octets for B/IP or 16 octets for B/IPv6
Element("name", CharacterString), # Internet host name (see RFC 1123)
]
# Sequences
class HostNPort(Sequence):
sequenceElements = \
[ Element('host', HostAddress)
, Element('port', Unsigned16)
]
sequenceElements = [Element("host", HostAddress), Element("port", Unsigned16)]
class BDTEntry(Sequence):
sequenceElements = \
[ Element('bbmdAddress', HostNPort)
, Element('broadcastMask', OctetString) # shall be present if BACnet/IP, and absent for BACnet/IPv6
]
sequenceElements = [
Element("bbmdAddress", HostNPort),
Element(
"broadcastMask", OctetString
), # shall be present if BACnet/IP, and absent for BACnet/IPv6
]
class FDTEntry(Sequence):
sequenceElements = \
[ Element('bacnetIPAddress', OctetString) # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
, Element('timeToLive', Unsigned16) # time to live in seconds at the time of registration
, Element('remainingTimeToLive', Unsigned16) # remaining time to live in seconds, incl. grace period
]
sequenceElements = [
Element(
"bacnetIPAddress", OctetString
), # the 6-octet B/IP or 18-octet B/IPv6 address of the registrant
Element(
"timeToLive", Unsigned16
), # time to live in seconds at the time of registration
Element(
"remainingTimeToLive", Unsigned16
), # remaining time to live in seconds, incl. grace period
]
class VMACEntry(Sequence):
sequenceElements = \
[ Element('virtualMACAddress', OctetString) # maximum size 6 octets
, Element('nativeMACAddress', OctetString)
]
sequenceElements = [
Element("virtualMACAddress", OctetString), # maximum size 6 octets
Element("nativeMACAddress", OctetString),
]
class RouterEntry(Sequence):
sequenceElements = \
[ Element('networkNumber', Unsigned16)
, Element('macAddress', OctetString)
, Element('status', RouterEntryStatus) # Defined Above
]
sequenceElements = [
Element("networkNumber", Unsigned16),
Element("macAddress", OctetString),
Element("status", RouterEntryStatus), # Defined Above
]
class NameValue(Sequence):
sequenceElements = \
[ Element('name', CharacterString)
, Element('value', Atomic) # IS ATOMIC CORRECT HERE? value is limited to primitive datatypes and BACnetDateTime
]
sequenceElements = [
Element("name", CharacterString),
Element(
"value", Atomic
), # IS ATOMIC CORRECT HERE? value is limited to primitive datatypes and BACnetDateTime
]
#
# NEW OBJECT
#
class NetworkPortObject(Object):
objectType = 'NetworkPort' #56
properties = \
[ ReadableProperty('statusFlags', StatusFlags) #111
, ReadableProperty('reliability', Reliability) #103
, ReadableProperty('outOfService', Boolean) #81
, ReadableProperty('networkType', NetworkType) #427
, ReadableProperty('protocolLevel', ProtocolLevel) #482
, OptionalProperty('referencePort', Unsigned) #483
, ReadableProperty('networkNumber', Unsigned16) #425
, ReadableProperty('networkNumberQuality', NetworkNumberQuality) #427
, ReadableProperty('changesPending', Boolean) #416
, OptionalProperty('command', NetworkPortCommand) #417
, OptionalProperty('macAddress', OctetString) #423
, ReadableProperty('apduLength', Unsigned) #388
, ReadableProperty('linkSpeed', Real) #420
, OptionalProperty('linkSpeeds', ArrayOf(Real)) #421
, OptionalProperty('eventTimeStamps', ArrayOf(TimeStamp)) #130
, OptionalProperty('linkSpeedAutonegotiate', Boolean) #422
, OptionalProperty('networkInterfaceName', CharacterString) #424
, OptionalProperty('ipMode', IPMode) #408
, OptionalProperty('ipAddress', OctetString) #400
, OptionalProperty('ipUDPPort', Unsigned16) #412
, OptionalProperty('ipSubnetMask', OctetString) #411
, OptionalProperty('ipDefaultGateway', OctetString) #401
, OptionalProperty('ipMulticastAddress', OctetString) #409
, OptionalProperty('ipDNSServer', ArrayOf(OctetString)) #406
, OptionalProperty('ipDHCPEnable', Boolean) #402
, OptionalProperty('ipDHCPLeaseTime', Unsigned) #403
, OptionalProperty('ipDHCPLeaseTimeRemaining', Unsigned) #404
, OptionalProperty('ipDHCPServer', OctetString) #405
, OptionalProperty('ipNATTraversal', Boolean) #410
, OptionalProperty('ipGlobalAddress', HostNPort) #407
, OptionalProperty('broadcastDistributionTable', ListOf(BDTEntry)) #414
, OptionalProperty('acceptFDRegistrations', Boolean) #413
, OptionalProperty('bbmdForeignDeviceTable', ListOf(FDTEntry)) #415
, OptionalProperty('fdBBMDAddress', HostNPort) #418
, OptionalProperty('fdSubscriptionLifetime', Unsigned16) #419
, OptionalProperty('ipv6Mode', IPMode) #435
, OptionalProperty('ipv6Address', OctetString) #436
, OptionalProperty('ipv6PrefixLength', Unsigned8) #437
, OptionalProperty('ipv6UDPPort', Unsigned16) #438
, OptionalProperty('ipv6DefaultGateway', OctetString) #439
, OptionalProperty('ipv6MulticastAddress', OctetString) #440
, OptionalProperty('ipv6DNSServer', OctetString) #441
, OptionalProperty('ipv6AutoAddressingEnabled', Boolean) #442
, OptionalProperty('ipv6DHCPLeaseTime', Unsigned) #443
, OptionalProperty('ipv6DHCPLeaseTimeRemaining', Unsigned) #444
, OptionalProperty('ipv6DHCPServer', OctetString) #445
, OptionalProperty('ipv6ZoneIndex', CharacterString) #446
, OptionalProperty('maxMasters', Unsigned8) # range 0-127 #64
, OptionalProperty('maxInfoFrames', Unsigned8) #63
, OptionalProperty('slaveProxyEnable', Boolean) #172
, OptionalProperty('manualSlaveAddressBinding', ListOf(AddressBinding)) #170
, OptionalProperty('autoSlaveDiscovery', Boolean) #169
, OptionalProperty('slaveAddressBinding', ListOf(AddressBinding)) #171
, OptionalProperty('virtualMACAddressTable', ListOf(VMACEntry)) #429
, OptionalProperty('routingTable', ListOf(RouterEntry)) #428
, OptionalProperty('eventDetectionEnabled', Boolean) #353
, OptionalProperty('notificationClass', Unsigned) #17
, OptionalProperty('eventEnable', EventTransitionBits) #35
, OptionalProperty('ackedTransitions', EventTransitionBits) #0
, OptionalProperty('notifyType', NotifyType) #72
, OptionalProperty('eventTimeStamps', ArrayOf(TimeStamp, 3)) #130
, OptionalProperty('eventMessageTexts', ArrayOf(CharacterString, 3)) #351
, OptionalProperty('eventMessageTextsConfig', ArrayOf(CharacterString, 3)) #352
, OptionalProperty('eventState', EventState) #36
, ReadableProperty('reliabilityEvaluationInhibit', Boolean) #357
, OptionalProperty('propertyList', ArrayOf(PropertyIdentifier)) #371
, OptionalProperty('tags', ArrayOf(NameValue)) #486
, OptionalProperty('profileLocation', CharacterString) #91
, OptionalProperty('profileName', CharacterString) #168
]
objectType = "NetworkPort" # 56
properties = [
ReadableProperty("statusFlags", StatusFlags), # 111
ReadableProperty("reliability", Reliability), # 103
ReadableProperty("outOfService", Boolean), # 81
ReadableProperty("networkType", NetworkType), # 427
ReadableProperty("protocolLevel", ProtocolLevel), # 482
OptionalProperty("referencePort", Unsigned), # 483
ReadableProperty("networkNumber", Unsigned16), # 425
ReadableProperty("networkNumberQuality", NetworkNumberQuality), # 426
ReadableProperty("changesPending", Boolean), # 416
OptionalProperty("command", NetworkPortCommand), # 417
OptionalProperty("macAddress", OctetString), # 423
ReadableProperty("apduLength", Unsigned), # 399
ReadableProperty("linkSpeed", Real), # 420
OptionalProperty("linkSpeeds", ArrayOf(Real)), # 421
OptionalProperty("eventTimeStamps", ArrayOf(TimeStamp)), # 130
OptionalProperty("linkSpeedAutonegotiate", Boolean), # 422
OptionalProperty("networkInterfaceName", CharacterString), # 424
OptionalProperty("ipMode", IPMode), # 408
OptionalProperty("ipAddress", OctetString), # 400
OptionalProperty("ipUDPPort", Unsigned16), # 412
OptionalProperty("ipSubnetMask", OctetString), # 411
OptionalProperty("ipDefaultGateway", OctetString), # 401
OptionalProperty("ipMulticastAddress", OctetString), # 409
OptionalProperty("ipDNSServer", ArrayOf(OctetString)), # 406
OptionalProperty("ipDHCPEnable", Boolean), # 402
OptionalProperty("ipDHCPLeaseTime", Unsigned), # 403
OptionalProperty("ipDHCPLeaseTimeRemaining", Unsigned), # 404
OptionalProperty("ipDHCPServer", OctetString), # 405
OptionalProperty("ipNATTraversal", Boolean), # 410
OptionalProperty("ipGlobalAddress", HostNPort), # 407
OptionalProperty("broadcastDistributionTable", ListOf(BDTEntry)), # 414
OptionalProperty("acceptFDRegistrations", Boolean), # 413
OptionalProperty("bbmdForeignDeviceTable", ListOf(FDTEntry)), # 415
OptionalProperty("fdBBMDAddress", HostNPort), # 418
OptionalProperty("fdSubscriptionLifetime", Unsigned16), # 419
OptionalProperty("ipv6Mode", IPMode), # 435
OptionalProperty("ipv6Address", OctetString), # 436
OptionalProperty("ipv6PrefixLength", Unsigned8), # 437
OptionalProperty("ipv6UDPPort", Unsigned16), # 438
OptionalProperty("ipv6DefaultGateway", OctetString), # 439
OptionalProperty("ipv6MulticastAddress", OctetString), # 440
OptionalProperty("ipv6DNSServer", OctetString), # 441
OptionalProperty("ipv6AutoAddressingEnable", Boolean), # 442
OptionalProperty("ipv6DHCPLeaseTime", Unsigned), # 443
OptionalProperty("ipv6DHCPLeaseTimeRemaining", Unsigned), # 444
OptionalProperty("ipv6DHCPServer", OctetString), # 445
OptionalProperty("ipv6ZoneIndex", CharacterString), # 446
OptionalProperty("maxMasters", Unsigned8), # range 0-127 #64
OptionalProperty("maxInfoFrames", Unsigned8), # 63
OptionalProperty("slaveProxyEnable", Boolean), # 172
OptionalProperty("manualSlaveAddressBinding", ListOf(AddressBinding)), # 170
OptionalProperty("autoSlaveDiscovery", Boolean), # 169
OptionalProperty("slaveAddressBinding", ListOf(AddressBinding)), # 171
OptionalProperty("virtualMACAddressTable", ListOf(VMACEntry)), # 429
OptionalProperty("routingTable", ListOf(RouterEntry)), # 428
OptionalProperty("eventDetectionEnabled", Boolean), # 353
OptionalProperty("notificationClass", Unsigned), # 17
OptionalProperty("eventEnable", EventTransitionBits), # 35
OptionalProperty("ackedTransitions", EventTransitionBits), # 0
OptionalProperty("notifyType", NotifyType), # 72
OptionalProperty("eventTimeStamps", ArrayOf(TimeStamp, 3)), # 130
OptionalProperty("eventMessageTexts", ArrayOf(CharacterString, 3)), # 351
OptionalProperty("eventMessageTextsConfig", ArrayOf(CharacterString, 3)), # 352
OptionalProperty("eventState", EventState), # 36
ReadableProperty("reliabilityEvaluationInhibit", Boolean), # 357
OptionalProperty("propertyList", ArrayOf(PropertyIdentifier)), # 371
OptionalProperty("tags", ArrayOf(NameValue)), # 486
OptionalProperty("profileLocation", CharacterString), # 91
OptionalProperty("profileName", CharacterString), # 168
]

View File

@ -21,6 +21,8 @@ source_folder = {
(3, 6): 'py34',
(3, 7): 'py34',
(3, 8): 'py34',
(3, 9): 'py34',
(3, 10): 'py34',
}.get(version_info, None)
if not source_folder:
raise EnvironmentError("unsupported version of Python")