pub struct SharedDeviceGuard { /* private fields */ }Expand description
A guard for Arc-wrapped devices.
Similar to DeviceGuard but for shared device references.
Implementations§
Sourcepub fn into_inner(self) -> Arc<Device>
pub fn into_inner(self) -> Arc<Device>
Consume the guard and return the underlying Arc.
After calling this, the device will NOT be automatically disconnected when the returned Arc is dropped. You are responsible for managing the device lifecycle.
Methods from Deref<Target = Device>§
Sourcepub async fn is_connected(&self) -> bool
pub async fn is_connected(&self) -> bool
Check if the device is connected (queries BLE stack state).
Note: This only checks the BLE stack’s connection state, which may be stale,
especially on macOS. For a more reliable check, use [validate_connection].
Sourcepub async fn validate_connection(&self) -> bool
pub async fn validate_connection(&self) -> bool
Validate the connection by performing a lightweight read operation.
This is more reliable than is_connected() as it actively verifies
the connection is working. Uses battery level read as it’s fast and
always available on Aranet devices.
This method is useful for detecting “zombie connections” where the BLE stack thinks it’s connected but the device is actually out of range.
§Returns
true if the connection is active and responsive, false otherwise.
Sourcepub async fn is_connection_alive(&self) -> bool
pub async fn is_connection_alive(&self) -> bool
Check if the connection is alive by performing a lightweight keepalive check.
This is an alias for [validate_connection] that better describes
the intent when used for connection health monitoring.
§Example
// In a health monitor loop
if !device.is_connection_alive().await {
// Connection lost, need to reconnect
}Sourcepub fn config(&self) -> &ConnectionConfig
pub fn config(&self) -> &ConnectionConfig
Get the current connection configuration.
Sourcepub async fn signal_quality(&self) -> Option<SignalQuality>
pub async fn signal_quality(&self) -> Option<SignalQuality>
Get the current signal quality based on RSSI.
Returns None if RSSI cannot be read.
Sourcepub async fn disconnect(&self) -> Result<()>
pub async fn disconnect(&self) -> Result<()>
Disconnect from the device.
This will:
- Abort all active notification handlers
- Disconnect from the BLE peripheral
Important: You MUST call this method before dropping the Device to ensure proper cleanup of BLE resources.
Sourcepub fn address(&self) -> &str
pub fn address(&self) -> &str
Get the device address or identifier.
On Linux and Windows, this returns the Bluetooth MAC address (e.g., “AA:BB:CC:DD:EE:FF”). On macOS, this returns a UUID identifier since MAC addresses are not exposed.
Sourcepub fn device_type(&self) -> Option<DeviceType>
pub fn device_type(&self) -> Option<DeviceType>
Get the detected device type.
Sourcepub async fn read_rssi(&self) -> Result<i16>
pub async fn read_rssi(&self) -> Result<i16>
Read the current RSSI (signal strength) of the connection.
Returns the RSSI in dBm. More negative values indicate weaker signals. Typical values range from -30 (strong) to -90 (weak).
Sourcepub async fn read_characteristic(&self, uuid: Uuid) -> Result<Vec<u8>>
pub async fn read_characteristic(&self, uuid: Uuid) -> Result<Vec<u8>>
Read a characteristic value by UUID.
This method includes a timeout to prevent indefinite hangs on BLE operations.
The timeout is controlled by ConnectionConfig::read_timeout.
Sourcepub async fn read_characteristic_with_timeout(
&self,
uuid: Uuid,
read_timeout: Duration,
) -> Result<Vec<u8>>
pub async fn read_characteristic_with_timeout( &self, uuid: Uuid, read_timeout: Duration, ) -> Result<Vec<u8>>
Read a characteristic value with a custom timeout.
Use this when you need a different timeout than the default, for example when reading large data.
Sourcepub async fn write_characteristic(&self, uuid: Uuid, data: &[u8]) -> Result<()>
pub async fn write_characteristic(&self, uuid: Uuid, data: &[u8]) -> Result<()>
Write a value to a characteristic.
This method includes a timeout to prevent indefinite hangs on BLE operations.
The timeout is controlled by ConnectionConfig::write_timeout.
Sourcepub async fn write_characteristic_with_timeout(
&self,
uuid: Uuid,
data: &[u8],
write_timeout: Duration,
) -> Result<()>
pub async fn write_characteristic_with_timeout( &self, uuid: Uuid, data: &[u8], write_timeout: Duration, ) -> Result<()>
Write a value to a characteristic with a custom timeout.
Sourcepub async fn read_current(&self) -> Result<CurrentReading>
pub async fn read_current(&self) -> Result<CurrentReading>
Read current sensor measurements.
Automatically selects the correct characteristic UUID based on device type:
- Aranet4 uses
f0cd3001 - Aranet2, Radon, Radiation use
f0cd3003
Sourcepub async fn read_battery(&self) -> Result<u8>
pub async fn read_battery(&self) -> Result<u8>
Read the battery level (0-100).
Sourcepub async fn read_device_info(&self) -> Result<DeviceInfo>
pub async fn read_device_info(&self) -> Result<DeviceInfo>
Read device information.
This method reads all device info characteristics in parallel for better performance.
Sourcepub async fn read_device_info_essential(&self) -> Result<DeviceInfo>
pub async fn read_device_info_essential(&self) -> Result<DeviceInfo>
Read essential device information only.
This is a faster alternative to [read_device_info] that only reads
the most critical characteristics: name, serial number, and firmware version.
Use this for faster startup when full device info isn’t needed immediately.
Sourcepub async fn subscribe_to_notifications<F>(
&self,
uuid: Uuid,
callback: F,
) -> Result<()>
pub async fn subscribe_to_notifications<F>( &self, uuid: Uuid, callback: F, ) -> Result<()>
Subscribe to notifications on a characteristic.
The callback will be invoked for each notification received.
The notification handler task is tracked and will be aborted when
disconnect() is called.
Sourcepub async fn unsubscribe_from_notifications(&self, uuid: Uuid) -> Result<()>
pub async fn unsubscribe_from_notifications(&self, uuid: Uuid) -> Result<()>
Unsubscribe from notifications on a characteristic.
Sourcepub async fn cached_characteristic_count(&self) -> usize
pub async fn cached_characteristic_count(&self) -> usize
Get the number of cached characteristics.
This is useful for debugging and testing to verify service discovery worked.
Sourcepub async fn get_history_info(&self) -> Result<HistoryInfo>
pub async fn get_history_info(&self) -> Result<HistoryInfo>
Get information about the stored history.
Sourcepub async fn download_history(&self) -> Result<Vec<HistoryRecord>>
pub async fn download_history(&self) -> Result<Vec<HistoryRecord>>
Download all historical readings from the device.
Sourcepub async fn download_history_with_options(
&self,
options: HistoryOptions,
) -> Result<Vec<HistoryRecord>>
pub async fn download_history_with_options( &self, options: HistoryOptions, ) -> Result<Vec<HistoryRecord>>
Download historical readings with custom options.
§Device Support
- Aranet4: Downloads CO₂, temperature, pressure, humidity
- Aranet2: Downloads temperature, humidity
- AranetRn+ (Radon): Downloads radon, temperature, pressure, humidity
- Aranet Radiation: Not supported - returns an error. The device protocol
for historical radiation data requires additional documentation. Use
Device::read_current()to get current radiation readings.
§Adaptive Delay
If options.use_adaptive_delay is enabled, the read delay will be
automatically adjusted based on the connection’s signal quality.
§Checkpointing
If a checkpoint callback is set, progress will be saved periodically to allow resuming interrupted downloads.
Sourcepub async fn download_history_v1(&self) -> Result<Vec<HistoryRecord>>
pub async fn download_history_v1(&self) -> Result<Vec<HistoryRecord>>
Download history using V1 protocol (notification-based).
This is used for older devices that don’t support the V2 read-based protocol. V1 uses notifications on the HISTORY_V1 characteristic.
Sourcepub async fn get_interval(&self) -> Result<MeasurementInterval>
pub async fn get_interval(&self) -> Result<MeasurementInterval>
Get the current measurement interval.
Sourcepub async fn set_interval(&self, interval: MeasurementInterval) -> Result<()>
pub async fn set_interval(&self, interval: MeasurementInterval) -> Result<()>
Set the measurement interval.
The device will start using the new interval after the current measurement cycle completes.
Note: This method does not verify the write succeeded. For verified
writes, use [set_interval_verified].
Sourcepub async fn set_interval_verified(
&self,
interval: MeasurementInterval,
) -> Result<()>
pub async fn set_interval_verified( &self, interval: MeasurementInterval, ) -> Result<()>
Set the measurement interval with verification.
This method writes the new interval and then reads it back to verify the change was applied successfully. Use this for critical settings changes where confirmation is needed.
§Errors
Returns Error::WriteFailed if the read-back value doesn’t match
the requested interval.
Sourcepub async fn set_smart_home(&self, enabled: bool) -> Result<()>
pub async fn set_smart_home(&self, enabled: bool) -> Result<()>
Enable or disable Smart Home integration.
When enabled, the device advertises sensor data that can be read without connecting (passive scanning).
Note: This method does not verify the write succeeded. For verified
writes, use [set_smart_home_verified].
Sourcepub async fn set_smart_home_verified(&self, enabled: bool) -> Result<()>
pub async fn set_smart_home_verified(&self, enabled: bool) -> Result<()>
Enable or disable Smart Home integration with verification.
This method writes the setting and then reads it back to verify the change was applied successfully.
§Errors
Returns Error::WriteFailed if the read-back value doesn’t match
the requested setting.
Sourcepub async fn set_bluetooth_range(&self, range: BluetoothRange) -> Result<()>
pub async fn set_bluetooth_range(&self, range: BluetoothRange) -> Result<()>
Set the Bluetooth range.
Note: This method does not verify the write succeeded. For verified
writes, use [set_bluetooth_range_verified].
Sourcepub async fn set_bluetooth_range_verified(
&self,
range: BluetoothRange,
) -> Result<()>
pub async fn set_bluetooth_range_verified( &self, range: BluetoothRange, ) -> Result<()>
Set the Bluetooth range with verification.
This method writes the setting and then reads it back to verify the change was applied successfully.
§Errors
Returns Error::WriteFailed if the read-back value doesn’t match
the requested setting.
Sourcepub async fn get_calibration(&self) -> Result<CalibrationData>
pub async fn get_calibration(&self) -> Result<CalibrationData>
Read calibration data from the device.
Sourcepub async fn get_settings(&self) -> Result<DeviceSettings>
pub async fn get_settings(&self) -> Result<DeviceSettings>
Read device settings from the SENSOR_STATE characteristic.
This reads the device configuration including:
- Smart Home integration status
- Bluetooth range setting
- Temperature display unit
- Radon display unit (for Aranet Radon devices)
- Buzzer settings
- Calibration settings