Skip to main content

ScheduleObject

Struct ScheduleObject 

Source
pub struct ScheduleObject { /* private fields */ }
Expand description

BACnet Schedule object.

Present_Value is calculated as Clause 12.24.4 describes (see evaluate): within Effective_Period, the best special event in effect, then today’s weekly entry, then Schedule_Default. The bundled server evaluates every Schedule once a minute against the Device clock and writes a changed value, in its own datatype, to every member of List_Of_Object_Property_References at Priority_For_Writing. Entering the Effective_Period, the first evaluation after start-up included, writes the value even when it has not changed.

Time-values and Schedule_Default hold values of a primitive datatype; the setters refuse anything else. Weekly_Schedule, Exception_Schedule, Effective_Period, Schedule_Default, List_Of_Object_Property_References and Priority_For_Writing are network-writable, through the same checks as the setters; after such a write the bundled server runs the evaluation again at once. AddListElement and RemoveListElement edit the reference list and write it back whole the same way. A change to the references or the priority sends the current value to the new targets and relinquishes the slots it leaves behind (see set_object_property_references).

Reliability is CONFIGURATION_ERROR while the non-NULL values in the two schedules and Schedule_Default are not all of one datatype, or while a referenced property refused the schedule’s datatype, or the reference itself, at its last write (Clause 12.24.13). Such a schedule still evaluates and writes its references, and each pass that has nothing else to send offers the current value again to the references that refused it, so the fault clears once its cause is gone.

While Out_Of_Service is TRUE the calculation leaves Present_Value alone and a client may write it instead; each such write goes on to the references as a calculated change would (Clause 12.24.14). Back in service, the calculation takes over again.

Implementations§

Source§

impl ScheduleObject

Source

pub fn evaluate( &self, today: SpecificDate, time: Time, calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<PropertyValue>

Present_Value per Clause 12.24.4 at time on today, or None when today is outside Effective_Period.

calendar_active answers for a special event whose period references a Calendar: whether that Calendar is TRUE on today. A reference to a missing object or to anything but a Calendar should answer false. Out_Of_Service does not change the calculation.

Source§

impl ScheduleObject

Source

pub fn new( instance: u32, name: impl Into<String>, schedule_default: PropertyValue, ) -> Result<Self, Error>

Create a new Schedule object; schedule_default is both Schedule_Default and the initial Present_Value, and must be of a primitive datatype (INVALID_DATA_TYPE otherwise). Effective_Period starts with both dates unspecified, a range that covers every date, and Priority_For_Writing at 16.

Source

pub fn set_description(&mut self, desc: impl Into<String>)

Set the description string.

Source

pub fn set_weekly_schedule( &mut self, day_index: usize, entries: Vec<BACnetTimeValue>, ) -> Result<(), Error>

Set time-value entries for a given day (0=Monday .. 6=Sunday).

Refuses, leaving the day unchanged, a day index past 6 or a time that is not specific (VALUE_OUT_OF_RANGE), a value that is not of a primitive datatype (INVALID_DATA_TYPE), and a time given twice (DUPLICATE_ENTRY).

Source

pub fn add_exception(&mut self, event: BACnetSpecialEvent) -> Result<(), Error>

Append a special event to the exception schedule.

Refuses an event priority outside 1 to 16 or an inline calendar entry with an out-of-range value (VALUE_OUT_OF_RANGE), time-values that set_weekly_schedule would refuse, and an event past the 1,024-event cap (RESOURCES / NO_SPACE_TO_WRITE_PROPERTY).

Source

pub fn set_effective_period( &mut self, period: BACnetDateRange, ) -> Result<(), Error>

Set the effective period for this schedule.

Each date must be a specific date or wholly unspecified, an open end (VALUE_OUT_OF_RANGE otherwise).

Source

pub fn set_priority_for_writing(&mut self, priority: u8) -> Result<(), Error>

Set Priority_For_Writing, 1 (highest) to 16 (VALUE_OUT_OF_RANGE otherwise).

The current value then goes to the references at the new priority, and the slots held at the old one are relinquished, as for set_object_property_references.

Source

pub fn add_object_property_reference( &mut self, r: BACnetObjectPropertyReference, ) -> Result<(), Error>

Append a local target reference, retaining its optional array index.

Refuses a reference past the 1,024-member cap (RESOURCES / NO_SPACE_TO_WRITE_PROPERTY). The new member gets the current value as set_object_property_references describes.

Source

pub fn set_object_property_references( &mut self, references: Vec<BACnetObjectPropertyReference>, ) -> Result<(), Error>

Replace List_Of_Object_Property_References with local target references, each retaining its optional array index.

Refuses more than 1,024 references (RESOURCES / NO_SPACE_TO_WRITE_PROPERTY), leaving the list unchanged. Once accepted, the next schedule pass sends the current Present_Value to every reference at Priority_For_Writing, if the object is writing at all: in service only inside Effective_Period. It also relinquishes, with a NULL at the priority it filled, each slot this Schedule holds on a reference the change drops. A Schedule holds a slot from a write of a value other than NULL until it leaves its Effective_Period; one outside it relinquishes nothing, so as not to clear the command of another Schedule in season on the same targets (Clause 12.24.6).

Source

pub fn present_value(&self) -> &PropertyValue

Read the current present_value.

Trait Implementations§

Source§

impl BACnetObject for ScheduleObject

Source§

fn object_identifier(&self) -> ObjectIdentifier

The object’s identifier (type + instance).
Source§

fn object_name(&self) -> &str

The object’s name.
Source§

fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>

Read a property value.
Source§

fn write_property( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, _priority: Option<u8>, ) -> Result<(), Error>

Write a property value. Read more
Source§

fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>

Return canonical metadata for this object’s effective property rows. Read more
Source§

fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>

List all properties this object supports in the legacy projection. Read more
Source§

fn set_reliability_internal( &mut self, reliability: Reliability, ) -> Result<(), Error>

Apply an internally-derived Reliability value. Read more
Source§

fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>

Evaluate and, when necessary, mutate this object’s Reliability. Read more
Source§

fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>

Take the writes this schedule owes its targets apart from its calculation, each once, in order: a NULL to every priority slot a change of List_Of_Object_Property_References or Priority_For_Writing left behind (#1088), then the Present_Value owed out of service, for a client’s write (Clause 12.24.14) or a change of those two properties. Read more
Source§

fn complete_schedule_write( &mut self, write: &ScheduleWrite, outcomes: &[ScheduleTargetOutcome], ) -> bool

Report how each target took write, one of this schedule’s writes: outcomes holds one entry per member of write.references, in order. Read more
Source§

fn retry_refusals_naming( &self, target: ObjectIdentifier, ) -> Option<ScheduleWrite>

The retry of the current value to the references whose last write was refused and that name target, an object just added to the database (#1440), so the refusal can clear without waiting for the next pass. None when no such refusal stands, or when the pass itself would retry nothing: out of service, outside Effective_Period, or with a NULL Present_Value. Only meaningful for Schedule objects; default returns None.
Source§

fn tick_schedule( &mut self, today: SpecificDate, time: Time, calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>

Evaluate this object’s schedule at time on today (Clause 12.24.4). Read more
Source§

fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>

Write with explicit actual command provenance. Standalone callers assert the origin; server boundaries additionally validate ingress or membership. Decorators must forward this hook without discarding the origin. The default preserves custom/unaffected object behavior. First-party source-tracked commands require this hook and deny context-free writing.
Source§

fn is_writable_property(&self, property: PropertyIdentifier) -> bool

Whether a property write route can accept property for this object. Read more
Source§

fn is_array_property(&self, property: PropertyIdentifier) -> bool

Whether property accepts an array index on this object. Read more
Source§

fn is_list_property(&self, property: PropertyIdentifier) -> bool

Whether property is a BACnetLIST on this object. Read more
Source§

fn is_createable(&self) -> bool

Whether this object type can be created at runtime via CreateObject. Read more
Source§

fn creation_only_properties(&self) -> &'static [PropertyIdentifier]

The properties whose whole value a CreateObject initial value may set on this object although WriteProperty can’t change it afterwards. Read more
Source§

fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>

Apply a CreateObject initial value to one of Self::creation_only_properties, written whole. Read more
Source§

fn is_deleteable(&self) -> bool

Whether this object type can be deleted at runtime via DeleteObject. Read more
Source§

fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>

List the REQUIRED properties for this object type. Read more
Source§

fn supports_cov(&self) -> bool

Whether this object type supports COV notifications. Read more
Source§

fn supports_subscribe_cov_property(&self) -> bool

Whether SubscribeCOVProperty and SubscribeCOVPropertyMultiple may monitor this object’s properties. Read more
Source§

fn supports_cov_property(&self, property: PropertyIdentifier) -> bool

Whether a readable property supports property-specific COV. Read more
Source§

fn cov_increment(&self) -> Option<f64>

COV increment for this object (objects with a COV_Increment property). Read more
Source§

fn cov_reported_properties(&self) -> &'static [CovReportedProperty]

Properties a whole-object (SubscribeCOV) notification reports after its leading value and Status_Flags, in report order. Read more
Source§

fn set_overridden(&mut self, _overridden: bool)

Set the OVERRIDDEN bit in StatusFlags. Read more
Source§

fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Evaluate intrinsic reporting after a present_value change. Read more
Source§

fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Advance the Time_Delay countdown for a pending transition. Read more
Source§

fn acknowledge_alarm( &mut self, _transition_bit: EventTransitionBits, ) -> Result<(), Error>

Acknowledge an alarm transition. Sets the transition_bit flags in acked_transitions. Returns Ok(()) if the object supports event detection, Err otherwise.
Source§

fn apply_life_safety_operation( &mut self, _operation: LifeSafetyOperation, ) -> Result<LifeSafetyOperationOutcome, Error>

Apply a LifeSafetyOperation atomically to this object. Read more
Source§

fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>

Set the next LifeSafetyOperation expected by trusted local logic. Read more
Source§

fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>

Apply an internally-detected Event_State transition. Read more
Source§

fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>

Snapshot this object’s Event Enrollment evaluation state, if it models one. Read more
Source§

fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>

Store this object’s Event Enrollment evaluation state. Read more
Source§

fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>

Snapshot the monitored source that owns Event Enrollment private state. Read more
Source§

fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>

Store or clear the monitored source that owns Event Enrollment state.
Source§

fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>

Set or clear one Acked_Transitions bit on a received event-state transition. Read more
Source§

fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the logical Present_Value supplied by the local application. Read more
Source§

fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>

set_present_value_internal on behalf of origin, the local Device the application runs in. Read more
Source§

fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Tracking_Value the local application derived. Read more
Source§

fn report_access_input_internal( &mut self, _input: AccessControlInput, ) -> Result<(), Error>

Apply an input the application reports for an access-control object the server holds (#1132): an Access Point’s access event, a Credential Data Input’s read or an Access Door’s hardware state, each a record whose values change together. See AccessControlInput. Read more
Source§

fn set_controlled_variable_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Controlled_Variable_Value measured by the local application. Read more
Source§

fn add_averaging_sample_internal( &mut self, _sample: Option<PropertyValue>, ) -> Result<(), Error>

Record one sample for an Averaging object. Read more
Source§

fn audit_log_storage_internal(&self) -> Option<&dyn AuditLogStorage>

Borrow this object’s Audit Log query storage, if it has any. Read more
Source§

fn audit_log_notification_sink_internal( &mut self, ) -> Option<&mut dyn AuditLogNotificationSink>

Mutably borrow this object’s Audit notification receiver capability. Read more
Source§

fn file_storage_internal(&self) -> Option<&dyn FileStorage>

Borrow this object’s File storage, if it has any. Read more
Source§

fn file_storage_internal_mut(&mut self) -> Option<&mut dyn FileStorage>

Mutably borrow this object’s File storage, if it has any. Read more
Source§

fn log_record_identities_internal(&self) -> Option<Vec<LogRecordIdentity>>

Return stable identities aligned with this object’s resident log records. Read more
Source§

fn log_buffer_internal(&self) -> Option<&dyn LogBufferRecords>

Borrow this object’s Log_Buffer records as ReadRange pages them. Read more
Source§

fn add_trend_record(&mut self, _record: BACnetLogRecord) -> Result<(), Error>

Submit a trend record to an object’s log lifecycle. Read more
Source§

fn add_trend_multiple_record( &mut self, _record: BACnetLogMultipleRecord, ) -> Result<(), Error>

Submit a Trend Log Multiple record, one value per monitored member, to an object’s log lifecycle. Read more
Source§

fn add_event_log_record( &mut self, _record: BACnetEventLogRecord, ) -> Result<(), Error>

Submit an Event Log record to an object’s log lifecycle. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more