Skip to main content

device_info/
device_info.rs

1//! Print basic device information.
2//!
3//! Run with: `cargo run --example device_info -- 192.168.1.201 [port]`
4
5use std::time::Duration;
6use zkteco::Zk;
7
8fn main() -> zkteco::ZkResult<()> {
9    let (ip, port) = parse_args();
10
11    let mut zk = Zk::builder(ip)
12        .port(port)
13        .timeout(Duration::from_secs(10))
14        // Many devices live on networks that block ICMP; skip the ping probe.
15        .omit_ping(true)
16        .build();
17
18    zk.connect()?;
19    println!("connected: {zk}");
20
21    println!("firmware:    {}", zk.get_firmware_version()?);
22    println!("serial:      {}", zk.get_serialnumber()?);
23    println!("platform:    {}", zk.get_platform()?);
24    println!("device name: {}", zk.get_device_name()?);
25    println!("mac:         {}", zk.get_mac().unwrap_or_default());
26    println!("time:        {}", zk.get_time()?);
27
28    let sizes = zk.read_sizes()?;
29    println!("sizes:       {sizes:?}");
30
31    zk.disconnect()?;
32    Ok(())
33}
34
35/// Read `ip` (required) and optional `port` from the command line.
36fn parse_args() -> (String, u16) {
37    let mut args = std::env::args().skip(1);
38    let ip = args.next().unwrap_or_else(|| {
39        eprintln!("usage: device_info <ip> [port]");
40        std::process::exit(2);
41    });
42    let port = args.next().and_then(|p| p.parse().ok()).unwrap_or(4370);
43    (ip, port)
44}