Source code for bac_py.objects.staging
"""BACnet Staging object per ASHRAE 135-2020 Clause 12.62 (new in 2020)."""
from __future__ import annotations
from typing import Any, ClassVar
from bac_py.objects.base import (
BACnetObject,
PropertyAccess,
PropertyDefinition,
register_object_type,
standard_properties,
status_properties,
)
from bac_py.types.enums import (
ObjectType,
PropertyIdentifier,
StagingState,
)
[docs]
@register_object_type
class StagingObject(BACnetObject):
"""BACnet Staging object (Clause 12.62, new in 2020).
Two-phase write mechanism. Writes to Present_Value are staged
and can be committed or abandoned. State machine transitions:
NOT_STAGED -> STAGING -> STAGED -> COMMITTING -> COMMITTED
or STAGED -> ABANDONING -> ABANDONED.
"""
OBJECT_TYPE: ClassVar[ObjectType] = ObjectType.STAGING
PROPERTY_DEFINITIONS: ClassVar[dict[PropertyIdentifier, PropertyDefinition]] = {
**standard_properties(),
PropertyIdentifier.PRESENT_VALUE: PropertyDefinition(
PropertyIdentifier.PRESENT_VALUE,
object,
PropertyAccess.READ_WRITE,
required=True,
),
**status_properties(),
PropertyIdentifier.PRESENT_STAGE: PropertyDefinition(
PropertyIdentifier.PRESENT_STAGE,
StagingState,
PropertyAccess.READ_ONLY,
required=True,
default=StagingState.NOT_STAGED,
),
PropertyIdentifier.STAGES: PropertyDefinition(
PropertyIdentifier.STAGES,
list,
PropertyAccess.READ_WRITE,
required=True,
),
PropertyIdentifier.STAGE_NAMES: PropertyDefinition(
PropertyIdentifier.STAGE_NAMES,
list,
PropertyAccess.READ_WRITE,
required=False,
),
PropertyIdentifier.TARGET_REFERENCES: PropertyDefinition(
PropertyIdentifier.TARGET_REFERENCES,
list,
PropertyAccess.READ_WRITE,
required=True,
),
}
def __init__(self, instance_number: int, **initial_properties: Any) -> None:
super().__init__(instance_number, **initial_properties)
self._init_status_flags()