Source code for BAC0.core.devices.create_objects

from bacpypes.basetypes import DateTime, PriorityArray, StatusFlags
from bacpypes.constructeddata import ArrayOf
from bacpypes.object import (
    AnalogInputObject,
    AnalogOutputObject,
    AnalogValueObject,
    BinaryInputObject,
    BinaryValueObject,
    CharacterStringValueObject,
    DateTimeValueObject,
    MultiStateValueObject,
)
from bacpypes.primitivedata import Boolean, CharacterString, Date, Time

from .mixins.CommandableMixin import LocalBinaryOutputObjectCmd

# THIS IS DEPRECATED
def _make_mutable(obj, identifier="presentValue", mutable=True):
    """
    This function is not the way to go as it changes the class
    property...As bacpypes issue #224, it will need a lot of work
    """
    for prop in obj.properties:
        if prop.identifier == identifier:
            prop.mutable = mutable
    return obj


[docs]def create_MV( oid=1, pv=0, name="MV", states=["red", "green", "blue"], pv_writable=False ): msvo = MultiStateValueObject( objectIdentifier=("multiStateValue", oid), objectName=name, presentValue=pv, numberOfStates=len(states), stateText=ArrayOf(CharacterString)(states), priorityArray=PriorityArray(), statusFlags=StatusFlags(), ) msvo = _make_mutable(msvo, mutable=pv_writable) deprecate_msg() return msvo
[docs]def create_AV(oid=1, pv=0, name="AV", units=None, pv_writable=False): avo = AnalogValueObject( objectIdentifier=("analogValue", oid), objectName=name, presentValue=pv, units=units, relinquishDefault=0, priorityArray=PriorityArray(), statusFlags=StatusFlags(), ) avo = _make_mutable(avo, mutable=pv_writable) avo = _make_mutable(avo, identifier="relinquishDefault", mutable=pv_writable) deprecate_msg() return avo
[docs]def create_BV( oid=1, pv=0, name="BV", activeText="On", inactiveText="Off", pv_writable=False ): bvo = BinaryValueObject( objectIdentifier=("binaryValue", oid), objectName=name, presentValue=pv, activeText=activeText, inactiveText=inactiveText, priorityArray=PriorityArray(), statusFlags=StatusFlags(), ) bvo = _make_mutable(bvo, mutable=pv_writable) deprecate_msg() return bvo
[docs]def create_AI(oid=1, pv=0, name="AI", units=None): aio = AnalogInputObject( objectIdentifier=("analogInput", oid), objectName=name, presentValue=pv, units=units, outOfService=Boolean(False), statusFlags=StatusFlags(), ) aio = _make_mutable(aio, identifier="outOfService", mutable=True) deprecate_msg() return aio
[docs]def create_BI(oid=1, pv=0, name="BI", activeText="On", inactiveText="Off"): deprecate_msg() return BinaryInputObject( objectIdentifier=("binaryInput", oid), objectName=name, presentValue=pv, activeText=activeText, inactiveText=inactiveText, statusFlags=StatusFlags(), )
[docs]def create_AO(oid=1, pv=0, name="AO", units=None, pv_writable=False): aoo = AnalogOutputObject( objectIdentifier=("analogOutput", oid), objectName=name, presentValue=pv, units=units, priorityArray=PriorityArray(), statusFlags=StatusFlags(), ) aoo = _make_mutable(aoo, mutable=pv_writable) deprecate_msg() return aoo
[docs]def create_BO( oid=1, pv=0, name="BO", activeText="On", inactiveText="Off", pv_writable=False ): boo = LocalBinaryOutputObjectCmd( objectIdentifier=("binaryOutput", oid), objectName=name, presentValue=pv, activeText=activeText, inactiveText=inactiveText, statusFlags=StatusFlags(), ) boo = _make_mutable(boo, mutable=pv_writable) deprecate_msg() return boo
[docs]def create_CharStrValue(oid=1, pv="null", name="String", pv_writable=False): charval = CharacterStringValueObject( objectIdentifier=("characterstringValue", oid), objectName=name, priorityArray=PriorityArray(), statusFlags=StatusFlags(), ) charval = _make_mutable(charval, mutable=pv_writable) charval.presentValue = CharacterString(pv) deprecate_msg() return charval
[docs]def create_DateTimeValue( oid=1, date=None, time=None, name="DateTime", pv_writable=False ): datetime = DateTimeValueObject( objectIdentifier=("datetimeValue", oid), objectName=name, statusFlags=StatusFlags(), ) datetime = _make_mutable(datetime, mutable=pv_writable) datetime.presentValue = DateTime(date=Date(date), time=Time(time)) deprecate_msg() return datetime
[docs]def create_object( object_class, oid, objectName, description, presentValue=None, commandable=False ): new_object = object_class( objectIdentifier=(object_class.objectType, oid), objectName="{}".format(objectName), presentValue=presentValue, description=CharacterString("{}".format(description)), statusFlags=StatusFlags(), ) deprecate_msg() return _make_mutable(new_object, mutable=commandable)
[docs]def set_pv(obj=None, value=None, flags=[0, 0, 0, 0]): obj.presentValue = value obj.statusFlags = flags
[docs]def create_object_list(objects_dict): """ d = {name: (name, description, presentValue, units, commandable)} """ obj_list = [] for obj_id, v in objects_dict.items(): object_class, name, oid, description, presentValue, commandable = v description = CharacterString(description) new_obj = create_object( object_class, name, oid, description, commandable=commandable ) if presentValue: new_obj.presentValue = presentValue obj_list.append(new_obj) return obj_list
[docs]def deprecate_msg(): print("*" * 80) print("create_xx functions are deprecated and will disappear from a future release") print( "BAC0.core.device.local.object using the ObjectFactory will be the new way to define objects" ) print("Refer to the doc for details") print("*" * 80)