alarm_event_logging/
alarm_event_logging.rs1use dvrip_rs::{Alarm, Authentication, Connection, DVRIPCam};
2use std::time::Duration;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let args: Vec<String> = std::env::args().collect();
7 if args.len() < 4 {
8 println!("Usage: {} <IP> <Username> <Password>", args[0]);
9 return Ok(());
10 }
11
12 let ip = &args[1];
13 let user = &args[2];
14 let pass = &args[3];
15
16 let mut cam = DVRIPCam::new(ip);
17
18 println!("Connecting and logging in...");
19 cam.connect(Duration::from_secs(5)).await?;
20
21 if !cam.login(user, pass).await? {
22 println!("Login failed");
23 return Ok(());
24 }
25
26 println!("Starting alarm monitoring...");
27
28 let callback = Box::new(|data: serde_json::Value, count| {
29 let now = chrono::Local::now();
30 println!("\n[{}] EVENT #{}", now.format("%H:%M:%S"), count);
31
32 if let Some(obj) = data.as_object() {
33 for (key, value) in obj {
34 println!(" {}: {}", key, value);
35 }
36 } else {
37 println!(" Raw Data: {}", data);
38 }
39 });
40
41 cam.set_alarm_callback(Some(callback));
42 cam.start_alarm_monitoring().await?;
43
44 println!("Monitoring for 2 minutes. Press Ctrl+C to stop early.");
45 tokio::time::sleep(Duration::from_secs(120)).await;
46
47 println!("Stopping monitoring...");
48 cam.stop_alarm_monitoring().await?;
49 cam.close().await?;
50
51 Ok(())
52}