use std::env;
use aranet_core::Device;
use aranet_types::DeviceType;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
let args: Vec<String> = env::args().collect();
let identifier = if args.len() > 1 {
&args[1]
} else {
eprintln!("Usage: {} <DEVICE_ADDRESS_OR_NAME>", args[0]);
eprintln!();
eprintln!("Example:");
eprintln!(" {} AA:BB:CC:DD:EE:FF", args[0]);
eprintln!(" {} \"Aranet4 12345\"", args[0]);
std::process::exit(1);
};
println!("Connecting to {}...", identifier);
let device = Device::connect(identifier).await?;
println!("Connected!");
println!();
println!("Reading sensor values...");
let reading = device.read_current().await?;
let device_type = device.device_type();
println!();
println!("Current Readings:");
match device_type {
Some(DeviceType::AranetRadon) => {
println!(" Radon: {} Bq/m³", reading.co2);
}
Some(DeviceType::AranetRadiation) => {
println!(" Radiation: {} (raw)", reading.co2);
}
_ => {
println!(" CO2: {} ppm", reading.co2);
}
}
println!(" Temperature: {:.1} °C", reading.temperature);
println!(" Pressure: {:.2} hPa", reading.pressure);
println!(" Humidity: {}%", reading.humidity);
println!(" Battery: {}%", reading.battery);
println!(" Status: {:?}", reading.status);
if reading.interval > 0 {
println!(" Interval: {}s", reading.interval);
}
if reading.age > 0 {
println!(" Age: {}s since last measurement", reading.age);
}
println!();
println!("Device Information:");
let info = device.read_device_info().await?;
println!(" Name: {}", info.name);
println!(" Model: {}", info.model);
println!(" Serial: {}", info.serial);
println!(" Firmware: {}", info.firmware);
println!(" Hardware: {}", info.hardware);
println!(" Manufacturer: {}", info.manufacturer);
device.disconnect().await?;
println!();
println!("Disconnected.");
Ok(())
}