pub struct AccessDoorObject { /* private fields */ }Expand description
BACnet Access Door object (type 30).
Represents a physical door or barrier in an access control system. Present value carries the door command (BACnetDoorValue); Door_Status reports the physical DoorStatus.
A PULSE_UNLOCK or EXTENDED_PULSE_UNLOCK command holds its priority slot for Door_Pulse_Time or Door_Extended_Pulse_Time and is then relinquished, so the door relocks (Clauses 12.26.4, 12.26.16 and 12.26.17; #1073). The deadline is taken from the database’s monotonic clock when the command is written, and the server’s monotonic operation task relinquishes the slot at that deadline, the mechanism Binary Lighting Output egress uses. A pulse written below a priority already commanded is relinquished at once, and a pulse time of zero relinquishes at once too. Changing a pulse time leaves an armed deadline as it was.
While Out_Of_Service is TRUE a client can simulate Door_Status,
Lock_Status and Door_Alarm_State by writing them, and the door’s own values
come back on the return to service (Clause 12.26.9, Table 12-30 footnote 1;
#1131). The module door_out_of_service has the details.
Secured_Status isn’t stored: each read works it out from what the door
serves (Clause 12.26.14; #1148), so it moves with every command, relock,
device report and simulated value. See secured_status for how the
inputs combine and when the answer is UNKNOWN.
The door reports intrinsically on Door_Alarm_State with the
CHANGE_OF_STATE algorithm (Clause 12.26; #1149): Event_State goes
OFFNORMAL once Door_Alarm_State has stayed in Alarm_Values for Time_Delay
seconds and back to NORMAL once it has stayed out of them for
Time_Delay_Normal. Fault_Values feeds the FAULT_STATE algorithm, so a
Door_Alarm_State among them makes Reliability MULTI_STATE_FAULT and
Event_State FAULT. Masked_Alarm_Values keeps Door_Alarm_State out of the
states it lists. The module door_alarm has the rules the three lists
set; the event rows are served and written through
ChangeOfStateReporting, and the server sends the notifications to the
Notification Class recipients.
The application decides when the door is in alarm and reports it with
Self::set_door_alarm_state; Clause 12.26.20 leaves that to the
device. That includes DOOR_OPEN_TOO_LONG: the door serves
Door_Open_Too_Long_Time for the application’s logic to read but runs no
timer of its own.
While the server holds the door, the application reports its
Door_Status, Lock_Status and Door_Alarm_State through
BACnetServer::report_door_state_local (#1132), which stores them as the
setters do, out of service included.
Implementations§
Source§impl AccessDoorObject
impl AccessDoorObject
Sourcepub fn new(instance: u32, name: impl Into<String>) -> Result<Self, Error>
pub fn new(instance: u32, name: impl Into<String>) -> Result<Self, Error>
Create a new Access Door object.
Sourcepub fn set_relinquish_default(&mut self, value: DoorValue) -> Result<(), Error>
pub fn set_relinquish_default(&mut self, value: DoorValue) -> Result<(), Error>
Set the Relinquish_Default (#270).
Table 12-30 types it as BACnetDoorValue, but Clause 12.26.11 admits
only LOCK and UNLOCK: a pulse can’t be the resting command. Any other
value, including a DoorValue::from_raw outside the production, is
refused with VALUE_OUT_OF_RANGE and the stored default kept. After the
store, Present_Value is resolved anew from the priority array so an
empty array falls back to the new default immediately.
Sourcepub fn set_door_members(
&mut self,
members: impl IntoIterator<Item = impl Into<BACnetDeviceObjectReference>>,
) -> Result<(), Error>
pub fn set_door_members( &mut self, members: impl IntoIterator<Item = impl Into<BACnetDeviceObjectReference>>, ) -> Result<(), Error>
Set Door_Members, the objects that make up the physical door: its lock, contact, reader and anything else the application chooses (Clause 12.26.15 leaves the choice to the device). A reference with no Device identifier names an object in this device. The array is read-only over the network.
A reference whose device identifier isn’t a Device object is refused with VALUE_OUT_OF_RANGE and the members set before are kept (#1285).
Sourcepub fn set_door_pulse_time(&mut self, tenths: u32)
pub fn set_door_pulse_time(&mut self, tenths: u32)
Set Door_Pulse_Time, in tenths of a second.
Sourcepub fn set_door_extended_pulse_time(&mut self, tenths: u32)
pub fn set_door_extended_pulse_time(&mut self, tenths: u32)
Set Door_Extended_Pulse_Time, in tenths of a second.
Sourcepub fn set_door_open_too_long_time(&mut self, tenths: u32)
pub fn set_door_open_too_long_time(&mut self, tenths: u32)
Set Door_Open_Too_Long_Time, in tenths of a second.
Sourcepub fn set_door_status(&mut self, status: DoorStatus)
pub fn set_door_status(&mut self, status: DoorStatus)
Set Door_Status, the open or closed state the door’s contact reports.
While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.
Sourcepub fn set_lock_status(&mut self, status: LockStatus)
pub fn set_lock_status(&mut self, status: LockStatus)
Set Lock_Status, the state the door lock’s monitor reports.
While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.
Sourcepub fn set_door_alarm_state(
&mut self,
state: DoorAlarmState,
) -> Result<(), Error>
pub fn set_door_alarm_state( &mut self, state: DoorAlarmState, ) -> Result<(), Error>
Set Door_Alarm_State, the alarm condition the application’s door logic has worked out (Clause 12.26.20 leaves that to the device), DOOR_OPEN_TOO_LONG included.
The state has to be NORMAL or a member of Alarm_Values or Fault_Values, and no member of Masked_Alarm_Values; any other is refused with VALUE_OUT_OF_RANGE and the state held is kept. A change of the value served triggers a SubscribeCOV notification (Table 13-1) and feeds the event algorithm, which a running server evaluates at its next one-second tick. While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.
Sourcepub fn set_alarm_values(
&mut self,
states: impl IntoIterator<Item = DoorAlarmState>,
) -> Result<(), Error>
pub fn set_alarm_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>
Set Alarm_Values, the Door_Alarm_State values the door reports as offnormal (Clause 12.26.25). NORMAL, or a value outside the BACnetDoorAlarmState production, named or proprietary (256 to 65535), is refused with VALUE_OUT_OF_RANGE and the values set before are kept. A Door_Alarm_State the lists no longer admit drops to NORMAL. Clients can write the list too, as they can the door’s other event configuration.
Sourcepub fn set_fault_values(
&mut self,
states: impl IntoIterator<Item = DoorAlarmState>,
) -> Result<(), Error>
pub fn set_fault_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>
Set Fault_Values, the Door_Alarm_State values that make Reliability
MULTI_STATE_FAULT (Clause 12.26.26), checked as
Self::set_alarm_values checks its list.
Sourcepub fn set_masked_alarm_values(
&mut self,
states: impl IntoIterator<Item = DoorAlarmState>,
) -> Result<(), Error>
pub fn set_masked_alarm_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>
Set Masked_Alarm_Values, the states Door_Alarm_State is kept out of
(Clause 12.26.21), checked as Self::set_alarm_values checks its
list. A door in a state the list now masks returns to NORMAL at once.
Trait Implementations§
Source§impl BACnetObject for AccessDoorObject
impl BACnetObject for AccessDoorObject
Source§fn report_access_input_internal(
&mut self,
input: AccessControlInput,
) -> Result<(), Error>
fn report_access_input_internal( &mut self, input: AccessControlInput, ) -> Result<(), Error>
Take what the door’s hardware reports (#1132): Door_Status, Lock_Status and Door_Alarm_State, each one given, together. A value outside its production, or an alarm state the door’s lists don’t admit, is VALUE_OUT_OF_RANGE and changes nothing. Stored as the setters store the device’s values: while Out_Of_Service is TRUE the report replaces the values put aside, and a client’s simulated ones stay served until the return to service. Any other record is OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED.
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 supports_cov(&self) -> bool
fn supports_cov(&self) -> 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 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_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 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 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 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 evaluate_reliability_internal(
&mut self,
) -> Result<ReliabilityEvaluation, Error>
fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>
Reliability. Read moreSource§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 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 more