use std::time::Duration;
use zkteco::Zk;
fn main() -> zkteco::ZkResult<()> {
let (ip, port) = parse_args();
let mut zk = Zk::builder(ip)
.port(port)
.timeout(Duration::from_secs(10))
.omit_ping(true)
.build();
zk.connect()?;
println!("connected: {zk}");
println!("firmware: {}", zk.get_firmware_version()?);
println!("serial: {}", zk.get_serialnumber()?);
println!("platform: {}", zk.get_platform()?);
println!("device name: {}", zk.get_device_name()?);
println!("mac: {}", zk.get_mac().unwrap_or_default());
println!("time: {}", zk.get_time()?);
let sizes = zk.read_sizes()?;
println!("sizes: {sizes:?}");
zk.disconnect()?;
Ok(())
}
fn parse_args() -> (String, u16) {
let mut args = std::env::args().skip(1);
let ip = args.next().unwrap_or_else(|| {
eprintln!("usage: device_info <ip> [port]");
std::process::exit(2);
});
let port = args.next().and_then(|p| p.parse().ok()).unwrap_or(4370);
(ip, port)
}