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
impl ScheduleObject
Sourcepub fn evaluate(
&self,
today: SpecificDate,
time: Time,
calendar_active: &dyn Fn(ObjectIdentifier) -> bool,
) -> Option<PropertyValue>
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
impl ScheduleObject
Sourcepub fn new(
instance: u32,
name: impl Into<String>,
schedule_default: PropertyValue,
) -> Result<Self, Error>
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.
Sourcepub fn set_description(&mut self, desc: impl Into<String>)
pub fn set_description(&mut self, desc: impl Into<String>)
Set the description string.
Sourcepub fn set_weekly_schedule(
&mut self,
day_index: usize,
entries: Vec<BACnetTimeValue>,
) -> Result<(), Error>
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).
Sourcepub fn add_exception(&mut self, event: BACnetSpecialEvent) -> Result<(), Error>
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).
Sourcepub fn set_effective_period(
&mut self,
period: BACnetDateRange,
) -> Result<(), Error>
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).
Sourcepub fn set_priority_for_writing(&mut self, priority: u8) -> Result<(), Error>
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.
Sourcepub fn add_object_property_reference(
&mut self,
r: BACnetObjectPropertyReference,
) -> Result<(), Error>
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.
Sourcepub fn set_object_property_references(
&mut self,
references: Vec<BACnetObjectPropertyReference>,
) -> Result<(), Error>
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).
Sourcepub fn present_value(&self) -> &PropertyValue
pub fn present_value(&self) -> &PropertyValue
Read the current present_value.
Trait Implementations§
Source§impl BACnetObject for ScheduleObject
impl BACnetObject for ScheduleObject
Source§fn object_identifier(&self) -> ObjectIdentifier
fn object_identifier(&self) -> ObjectIdentifier
Source§fn object_name(&self) -> &str
fn object_name(&self) -> &str
Source§fn read_property(
&self,
property: PropertyIdentifier,
array_index: Option<u32>,
) -> Result<PropertyValue, Error>
fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>
Source§fn write_property(
&mut self,
property: PropertyIdentifier,
array_index: Option<u32>,
value: PropertyValue,
_priority: Option<u8>,
) -> Result<(), Error>
fn write_property( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, _priority: Option<u8>, ) -> Result<(), Error>
Source§fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
Source§fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn set_reliability_internal(
&mut self,
reliability: Reliability,
) -> Result<(), Error>
fn set_reliability_internal( &mut self, reliability: Reliability, ) -> Result<(), Error>
Reliability value. Read moreSource§fn evaluate_reliability_internal(
&mut self,
) -> Result<ReliabilityEvaluation, Error>
fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>
Reliability. Read moreSource§fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
Source§fn complete_schedule_write(
&mut self,
write: &ScheduleWrite,
outcomes: &[ScheduleTargetOutcome],
) -> bool
fn complete_schedule_write( &mut self, write: &ScheduleWrite, outcomes: &[ScheduleTargetOutcome], ) -> bool
write, one of this schedule’s writes:
outcomes holds one entry per member of write.references, in order. Read moreSource§fn retry_refusals_naming(
&self,
target: ObjectIdentifier,
) -> Option<ScheduleWrite>
fn retry_refusals_naming( &self, target: ObjectIdentifier, ) -> Option<ScheduleWrite>
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>
fn tick_schedule( &mut self, today: SpecificDate, time: Time, calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>
Source§fn write_property_from(
&mut self,
property: PropertyIdentifier,
array_index: Option<u32>,
value: PropertyValue,
priority: Option<u8>,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn is_writable_property(&self, property: PropertyIdentifier) -> bool
fn is_writable_property(&self, property: PropertyIdentifier) -> bool
property for this object. Read moreSource§fn is_array_property(&self, property: PropertyIdentifier) -> bool
fn is_array_property(&self, property: PropertyIdentifier) -> bool
property accepts an array index on this object. Read moreSource§fn is_list_property(&self, property: PropertyIdentifier) -> bool
fn is_list_property(&self, property: PropertyIdentifier) -> bool
property is a BACnetLIST on this object. Read moreSource§fn is_createable(&self) -> bool
fn is_createable(&self) -> bool
Source§fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
Source§fn initialize_property(
&mut self,
_property: PropertyIdentifier,
_value: PropertyValue,
) -> Result<(), Error>
fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>
Self::creation_only_properties, written whole. Read moreSource§fn is_deleteable(&self) -> bool
fn is_deleteable(&self) -> bool
Source§fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn supports_cov(&self) -> bool
fn supports_cov(&self) -> bool
Source§fn supports_subscribe_cov_property(&self) -> bool
fn supports_subscribe_cov_property(&self) -> bool
Source§fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
Source§fn cov_increment(&self) -> Option<f64>
fn cov_increment(&self) -> Option<f64>
Source§fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
Source§fn set_overridden(&mut self, _overridden: bool)
fn set_overridden(&mut self, _overridden: bool)
Source§fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Source§fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Time_Delay countdown for a pending transition. Read moreSource§fn acknowledge_alarm(
&mut self,
_transition_bit: EventTransitionBits,
) -> Result<(), Error>
fn acknowledge_alarm( &mut self, _transition_bit: EventTransitionBits, ) -> Result<(), Error>
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>
fn apply_life_safety_operation( &mut self, _operation: LifeSafetyOperation, ) -> Result<LifeSafetyOperationOutcome, Error>
Source§fn set_life_safety_operation_expected_internal(
&mut self,
_operation: LifeSafetyOperation,
) -> Result<(), Error>
fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>
Source§fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
Event_State transition. Read moreSource§fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
Source§fn set_enrollment_eval_state_internal(
&mut self,
_state: EventEnrollmentEvalState,
) -> Result<(), Error>
fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>
Source§fn enrollment_eval_source_internal(
&self,
) -> Option<Option<EventEnrollmentMonitoredSource>>
fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>
Source§fn set_enrollment_eval_source_internal(
&mut self,
_source: Option<EventEnrollmentMonitoredSource>,
) -> Result<(), Error>
fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>
Source§fn set_acked_transitions_internal(
&mut self,
_transition_bit: EventTransitionBits,
_acknowledged: bool,
) -> Result<(), Error>
fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>
Acked_Transitions bit on a received event-state
transition. Read moreSource§fn set_present_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Present_Value supplied by the local application. Read moreSource§fn set_present_value_from_internal(
&mut self,
value: PropertyValue,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn set_tracking_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Tracking_Value the local application derived. Read moreSource§fn report_access_input_internal(
&mut self,
_input: AccessControlInput,
) -> Result<(), Error>
fn report_access_input_internal( &mut self, _input: AccessControlInput, ) -> Result<(), Error>
AccessControlInput. Read more